diff --git a/Alignment/CommonAlignment/interface/AlignableObjectId.h b/Alignment/CommonAlignment/interface/AlignableObjectId.h index c785bb91b763d..73f26c14d6125 100644 --- a/Alignment/CommonAlignment/interface/AlignableObjectId.h +++ b/Alignment/CommonAlignment/interface/AlignableObjectId.h @@ -7,6 +7,7 @@ class TrackerGeometry; class DTGeometry; class CSCGeometry; +class GEMGeometry; /// Allows conversion between type and name, and vice-versa class AlignableObjectId { @@ -15,7 +16,7 @@ class AlignableObjectId { enum class Geometry { RunI, PhaseI, PhaseII, General, Unspecified }; AlignableObjectId(Geometry); - AlignableObjectId(const TrackerGeometry*, const DTGeometry*, const CSCGeometry*); + AlignableObjectId(const TrackerGeometry*, const DTGeometry*, const CSCGeometry*, const GEMGeometry*); AlignableObjectId(const AlignableObjectId&) = default; AlignableObjectId& operator=(const AlignableObjectId&) = default; AlignableObjectId(AlignableObjectId&&) = default; @@ -43,7 +44,7 @@ class AlignableObjectId { private: static Geometry trackerGeometry(const TrackerGeometry*); - static Geometry muonGeometry(const DTGeometry*, const CSCGeometry*); + static Geometry muonGeometry(const DTGeometry*, const CSCGeometry*, const GEMGeometry*); const entry* entries_{nullptr}; Geometry geometry_{Geometry::Unspecified}; diff --git a/Alignment/CommonAlignment/interface/StructureType.h b/Alignment/CommonAlignment/interface/StructureType.h index b916d1bf587e9..e6a413b658235 100644 --- a/Alignment/CommonAlignment/interface/StructureType.h +++ b/Alignment/CommonAlignment/interface/StructureType.h @@ -81,6 +81,12 @@ namespace align { AlignableCSCRing, AlignableCSCChamber, AlignableCSCLayer, // = 110 + AlignableGEMEndcap, + AlignableGEMStation, + AlignableGEMRing, + AlignableGEMSuperChamber, + AlignableGEMChamber, + AlignableGEMEtaPartition, AlignableMuon, Detector, // = 112 (what for?) diff --git a/Alignment/CommonAlignment/src/AlignableCompositeBuilder.cc b/Alignment/CommonAlignment/src/AlignableCompositeBuilder.cc index 17199a0aa0a33..e092bf7dac7a4 100644 --- a/Alignment/CommonAlignment/src/AlignableCompositeBuilder.cc +++ b/Alignment/CommonAlignment/src/AlignableCompositeBuilder.cc @@ -18,7 +18,7 @@ AlignableCompositeBuilder ::AlignableCompositeBuilder(const TrackerTopology* tra const TrackerGeometry* trackerGeometry, const AlignableIndexer& alignableIndexer) : trackerTopology_(trackerTopology), - alignableObjectId_(trackerGeometry, nullptr, nullptr), + alignableObjectId_(trackerGeometry, nullptr, nullptr, nullptr), alignableIndexer_(alignableIndexer) {} //_____________________________________________________________________________ diff --git a/Alignment/CommonAlignment/src/AlignableObjectId.cc b/Alignment/CommonAlignment/src/AlignableObjectId.cc index b4ee89195bd9f..a2f4ae904db84 100644 --- a/Alignment/CommonAlignment/src/AlignableObjectId.cc +++ b/Alignment/CommonAlignment/src/AlignableObjectId.cc @@ -135,6 +135,12 @@ namespace { {align::AlignableCSCRing, "CSCRing"}, {align::AlignableCSCChamber, "CSCChamber"}, {align::AlignableCSCLayer, "CSCLayer"}, + {align::AlignableGEMEndcap, "GEMEndcap"}, + {align::AlignableGEMStation, "GEMStation"}, + {align::AlignableGEMRing, "GEMRing"}, + {align::AlignableGEMSuperChamber, "GEMSuperChamber"}, + {align::AlignableGEMChamber, "GEMChamber"}, + {align::AlignableGEMEtaPartition, "GEMEtaPartition"}, {align::AlignableMuon, "Muon"}, {align::BeamSpot, "BeamSpot"}, @@ -201,6 +207,12 @@ namespace { {align::AlignableCSCRing, "CSCRing"}, {align::AlignableCSCChamber, "CSCChamber"}, {align::AlignableCSCLayer, "CSCLayer"}, + {align::AlignableGEMEndcap, "GEMEndcap"}, + {align::AlignableGEMStation, "GEMStation"}, + {align::AlignableGEMRing, "GEMRing"}, + {align::AlignableGEMSuperChamber, "GEMSuperChamber"}, + {align::AlignableGEMChamber, "GEMChamber"}, + {align::AlignableGEMEtaPartition, "GEMEtaPartition"}, {align::AlignableMuon, "Muon"}, {align::BeamSpot, "BeamSpot"}, @@ -246,8 +258,9 @@ AlignableObjectId ::AlignableObjectId(AlignableObjectId::Geometry geometry) : ge //_____________________________________________________________________________ AlignableObjectId ::AlignableObjectId(const TrackerGeometry *tracker, const DTGeometry *muonDt, - const CSCGeometry *muonCsc) - : AlignableObjectId(commonGeometry(trackerGeometry(tracker), muonGeometry(muonDt, muonCsc))) {} + const CSCGeometry *muonCsc, + const GEMGeometry *muonGem) + : AlignableObjectId(commonGeometry(trackerGeometry(tracker), muonGeometry(muonDt, muonCsc, muonGem))) {} //_____________________________________________________________________________ align::StructureType AlignableObjectId::nameToType(const std::string &name) const { return stringToId(name.c_str()); } @@ -299,7 +312,9 @@ AlignableObjectId::Geometry AlignableObjectId ::trackerGeometry(const TrackerGeo } } -AlignableObjectId::Geometry AlignableObjectId ::muonGeometry(const DTGeometry *, const CSCGeometry *) { +AlignableObjectId::Geometry AlignableObjectId ::muonGeometry(const DTGeometry *, + const CSCGeometry *, + const GEMGeometry *) { // muon alignment structure types are identical for all kinds of geometries return Geometry::General; } diff --git a/Alignment/CommonAlignmentMonitor/plugins/AlignmentMonitorAsAnalyzer.cc b/Alignment/CommonAlignmentMonitor/plugins/AlignmentMonitorAsAnalyzer.cc index 5110c25217cf0..1f880d9574d14 100644 --- a/Alignment/CommonAlignmentMonitor/plugins/AlignmentMonitorAsAnalyzer.cc +++ b/Alignment/CommonAlignmentMonitor/plugins/AlignmentMonitorAsAnalyzer.cc @@ -39,6 +39,7 @@ #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeomBuilderFromGeometricDet.h" #include "Geometry/DTGeometry/interface/DTGeometry.h" #include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" #include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "Geometry/CommonTopologies/interface/GeometryAligner.h" #include "CondFormats/GeometryObjects/interface/PTrackerParameters.h" @@ -50,6 +51,8 @@ #include "CondFormats/AlignmentRecord/interface/DTAlignmentErrorExtendedRcd.h" #include "CondFormats/AlignmentRecord/interface/CSCAlignmentRcd.h" #include "CondFormats/AlignmentRecord/interface/CSCAlignmentErrorExtendedRcd.h" +#include "CondFormats/AlignmentRecord/interface/GEMAlignmentRcd.h" +#include "CondFormats/AlignmentRecord/interface/GEMAlignmentErrorExtendedRcd.h" #include "CondFormats/AlignmentRecord/interface/GlobalPositionRcd.h" #include "CondFormats/Alignment/interface/DetectorGlobalPosition.h" @@ -81,7 +84,16 @@ class AlignmentMonitorAsAnalyzer : public edm::EDAnalyzer { std::unique_ptr m_alignmentParameterStore; std::vector> m_monitors; - std::string idealGeometryLabel; + edm::ESGetToken esTokenDT_; + edm::ESGetToken esTokenCSC_; + edm::ESGetToken esTokenGEM_; + edm::ESGetToken esTokenGPR_; + edm::ESGetToken esTokenDTAl_; + edm::ESGetToken esTokenDTAPE_; + edm::ESGetToken esTokenCSCAl_; + edm::ESGetToken esTokenCSCAPE_; + edm::ESGetToken esTokenGEMAl_; + edm::ESGetToken esTokenGEMAPE_; bool m_firstEvent; }; @@ -99,7 +111,9 @@ class AlignmentMonitorAsAnalyzer : public edm::EDAnalyzer { AlignmentMonitorAsAnalyzer::AlignmentMonitorAsAnalyzer(const edm::ParameterSet& iConfig) : m_tjTag(iConfig.getParameter("tjTkAssociationMapTag")), m_aliParamStoreCfg(iConfig.getParameter("ParameterStore")), - idealGeometryLabel("idealForAlignmentMonitorAsAnalyzer") { + esTokenDT_(esConsumes(edm::ESInputTag("", "idealForAlignmentMonitorAsAnalyzer"))), + esTokenCSC_(esConsumes(edm::ESInputTag("", "idealForAlignmentMonitorAsAnalyzer"))), + esTokenGEM_(esConsumes(edm::ESInputTag("", "idealForAlignmentMonitorAsAnalyzer"))) { std::vector monitors = iConfig.getUntrackedParameter>("monitors"); for (auto const& mon : monitors) { @@ -129,13 +143,11 @@ void AlignmentMonitorAsAnalyzer::analyze(const edm::Event& iEvent, const edm::Ev TrackerGeomBuilderFromGeometricDet trackerBuilder; std::shared_ptr theTracker(trackerBuilder.build(&(*theGeometricDet), *ptp, tTopo)); - edm::ESHandle theMuonDT; - edm::ESHandle theMuonCSC; - iSetup.get().get(idealGeometryLabel, theMuonDT); - iSetup.get().get(idealGeometryLabel, theMuonCSC); + edm::ESHandle theMuonDT = iSetup.getHandle(esTokenDT_); + edm::ESHandle theMuonCSC = iSetup.getHandle(esTokenCSC_); + edm::ESHandle theMuonGEM = iSetup.getHandle(esTokenGEM_); - edm::ESHandle globalPositionRcd; - iSetup.get().get(globalPositionRcd); + edm::ESHandle globalPositionRcd = iSetup.getHandle(esTokenGPR_); edm::ESHandle alignments; iSetup.get().get(alignments); @@ -146,29 +158,33 @@ void AlignmentMonitorAsAnalyzer::analyze(const edm::Event& iEvent, const edm::Ev &(*alignmentErrors), align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Tracker))); - edm::ESHandle dtAlignments; - iSetup.get().get(dtAlignments); - edm::ESHandle dtAlignmentErrorsExtended; - iSetup.get().get(dtAlignmentErrorsExtended); + edm::ESHandle dtAlignments = iSetup.getHandle(esTokenDTAl_); + ; + edm::ESHandle dtAlignmentErrorsExtended = iSetup.getHandle(esTokenDTAPE_); aligner.applyAlignments(&(*theMuonDT), &(*dtAlignments), &(*dtAlignmentErrorsExtended), align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); - edm::ESHandle cscAlignments; - iSetup.get().get(cscAlignments); - edm::ESHandle cscAlignmentErrorsExtended; - iSetup.get().get(cscAlignmentErrorsExtended); + edm::ESHandle cscAlignments = iSetup.getHandle(esTokenCSCAl_); + edm::ESHandle cscAlignmentErrorsExtended = iSetup.getHandle(esTokenCSCAPE_); aligner.applyAlignments(&(*theMuonCSC), &(*cscAlignments), &(*cscAlignmentErrorsExtended), align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); + edm::ESHandle gemAlignments = iSetup.getHandle(esTokenGEMAl_); + edm::ESHandle gemAlignmentErrorsExtended = iSetup.getHandle(esTokenGEMAPE_); + aligner.applyAlignments(&(*theMuonGEM), + &(*gemAlignments), + &(*gemAlignmentErrorsExtended), + align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); + // within an analyzer, modules can't expect to see any selected alignables! align::Alignables empty_alignables; m_alignableTracker = std::make_unique(&(*theTracker), tTopo); - m_alignableMuon = std::make_unique(&(*theMuonDT), &(*theMuonCSC)); + m_alignableMuon = std::make_unique(&(*theMuonDT), &(*theMuonCSC), &(*theMuonGEM)); m_alignmentParameterStore = std::make_unique(empty_alignables, m_aliParamStoreCfg); for (auto const& monitor : m_monitors) { diff --git a/Alignment/CommonAlignmentProducer/interface/AlignmentProducerBase.h b/Alignment/CommonAlignmentProducer/interface/AlignmentProducerBase.h index 15b5fdf527bc0..4bc728a74daf0 100644 --- a/Alignment/CommonAlignmentProducer/interface/AlignmentProducerBase.h +++ b/Alignment/CommonAlignmentProducer/interface/AlignmentProducerBase.h @@ -51,6 +51,7 @@ #include "Geometry/DTGeometry/interface/DTGeometry.h" #include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" #include "Geometry/CommonTopologies/interface/GeometryAligner.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/Records/interface/IdealGeometryRecord.h" @@ -114,6 +115,7 @@ class AlignmentProducerBase { std::shared_ptr trackerGeometry_; edm::ESHandle muonDTGeometry_; edm::ESHandle muonCSCGeometry_; + edm::ESHandle muonGEMGeometry_; const bool doTracker_, doMuon_, useExtras_; /// Map with tracks/trajectories diff --git a/Alignment/CommonAlignmentProducer/src/AlignmentProducerBase.cc b/Alignment/CommonAlignmentProducer/src/AlignmentProducerBase.cc index 0edb49e973333..cb4743488dd62 100644 --- a/Alignment/CommonAlignmentProducer/src/AlignmentProducerBase.cc +++ b/Alignment/CommonAlignmentProducer/src/AlignmentProducerBase.cc @@ -425,6 +425,7 @@ void AlignmentProducerBase::createGeometries(const edm::EventSetup& iSetup, cons if (doMuon_) { iSetup.get().get(idealGeometryLabel, muonDTGeometry_); iSetup.get().get(idealGeometryLabel, muonCSCGeometry_); + iSetup.get().get(idealGeometryLabel, muonGEMGeometry_); } } @@ -452,6 +453,9 @@ void AlignmentProducerBase::applyAlignmentsToDB(const edm::EventSetup& setup) { applyDB( &*muonCSCGeometry_, setup, align::DetectorGlobalPosition(*globalPositions_, DetId(DetId::Muon))); + + applyDB( + &*muonGEMGeometry_, setup, align::DetectorGlobalPosition(*globalPositions_, DetId(DetId::Muon))); } } } @@ -468,9 +472,9 @@ void AlignmentProducerBase::createAlignables(const TrackerTopology* tTopo, bool if (doMuon_) { if (update) { - alignableMuon_->update(&*muonDTGeometry_, &*muonCSCGeometry_); + alignableMuon_->update(&*muonDTGeometry_, &*muonCSCGeometry_, &*muonGEMGeometry_); } else { - alignableMuon_ = std::make_unique(&*muonDTGeometry_, &*muonCSCGeometry_); + alignableMuon_ = std::make_unique(&*muonDTGeometry_, &*muonCSCGeometry_, &*muonGEMGeometry_); } } @@ -646,12 +650,15 @@ void AlignmentProducerBase::applyAlignmentsToGeometry() { std::unique_ptr dtAlignments{alignableMuon_->dtAlignments()}; std::unique_ptr cscAlignments{alignableMuon_->cscAlignments()}; + std::unique_ptr gemAlignments{alignableMuon_->gemAlignments()}; std::unique_ptr dtAlignmentErrExt{alignableMuon_->dtAlignmentErrorsExtended()}; std::unique_ptr cscAlignmentErrExt{alignableMuon_->cscAlignmentErrorsExtended()}; + std::unique_ptr gemAlignmentErrExt{alignableMuon_->gemAlignmentErrorsExtended()}; aligner.applyAlignments(&*muonDTGeometry_, dtAlignments.get(), dtAlignmentErrExt.get(), AlignTransform()); aligner.applyAlignments(&*muonCSCGeometry_, cscAlignments.get(), cscAlignmentErrExt.get(), AlignTransform()); + aligner.applyAlignments(&*muonGEMGeometry_, gemAlignments.get(), gemAlignmentErrExt.get(), AlignTransform()); } } 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/MuonAlignment/BuildFile.xml b/Alignment/MuonAlignment/BuildFile.xml index 5d86f492501ad..5b2b355dc9328 100644 --- a/Alignment/MuonAlignment/BuildFile.xml +++ b/Alignment/MuonAlignment/BuildFile.xml @@ -5,6 +5,7 @@ + diff --git a/Alignment/MuonAlignment/interface/AlignableGEMChamber.h b/Alignment/MuonAlignment/interface/AlignableGEMChamber.h new file mode 100644 index 0000000000000..e7dc8e2194b4c --- /dev/null +++ b/Alignment/MuonAlignment/interface/AlignableGEMChamber.h @@ -0,0 +1,27 @@ +#ifndef Alignment_MuonAlignment_AlignableGEMChamber_H +#define Alignment_MuonAlignment_AlignableGEMChamber_H + +/* \class AlignableGEMChamber + * \author Hyunyong Kim - TAMU + */ + +#include +#include +#include + +#include "Alignment/CommonAlignment/interface/StructureType.h" +#include "Alignment/CommonAlignment/interface/AlignableDet.h" + +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Alignment/CommonAlignment/interface/AlignableComposite.h" + +class AlignableGEMChamber : public AlignableDet { +public: + friend std::ostream& operator<<(std::ostream&, const AlignableGEMChamber&); + + AlignableGEMChamber(const GeomDet* geomDet); + + void update(const GeomDet* geomDet); +}; + +#endif diff --git a/Alignment/MuonAlignment/interface/AlignableGEMEndcap.h b/Alignment/MuonAlignment/interface/AlignableGEMEndcap.h new file mode 100644 index 0000000000000..88ab2474f3a8e --- /dev/null +++ b/Alignment/MuonAlignment/interface/AlignableGEMEndcap.h @@ -0,0 +1,42 @@ +#ifndef Alignment_MuonAlignment_AlignableGEMEndcap_H +#define Alignment_MuonAlignment_AlignableGEMEndcap_H + +/* \class AlignableGEMEndcap + * \author Hyunyong Kim - TAMU + */ + +#include "Alignment/CommonAlignment/interface/Utilities.h" +#include "Alignment/CommonAlignment/interface/AlignableComposite.h" +#include "Alignment/CommonAlignment/interface/AlignableSurface.h" + +#include "Alignment/MuonAlignment/interface/AlignableGEMStation.h" + +#include + +class GeomDet; + +class AlignableGEMEndcap : public AlignableComposite { +public: + AlignableGEMEndcap(const std::vector& GEMStations); + + PositionType computePosition(); + + RotationType computeOrientation(); + + AlignableSurface computeSurface(); + + AlignableGEMStation& station(int i); + + friend std::ostream& operator<<(std::ostream&, const AlignableGEMEndcap&); + + void dump(void) const override; + + Alignments* alignments() const override; + + AlignmentErrorsExtended* alignmentErrors() const override; + +private: + std::vector theGEMStations; +}; + +#endif diff --git a/Alignment/MuonAlignment/interface/AlignableGEMRing.h b/Alignment/MuonAlignment/interface/AlignableGEMRing.h new file mode 100644 index 0000000000000..91cf235b627a1 --- /dev/null +++ b/Alignment/MuonAlignment/interface/AlignableGEMRing.h @@ -0,0 +1,36 @@ +#ifndef Alignment_MuonAlignment_AlignableGEMRing_H +#define Alignment_MuonAlignment_AlignableGEMRing_H + +/* \class AlignableGEMRing + * \author Hyunyong Kim - TAMU + */ + +#include "Alignment/CommonAlignment/interface/Utilities.h" +#include "Alignment/CommonAlignment/interface/AlignableComposite.h" +#include "Alignment/CommonAlignment/interface/AlignableSurface.h" +#include "Alignment/MuonAlignment/interface/AlignableGEMSuperChamber.h" +#include + +class GeomDet; + +class AlignableGEMRing : public AlignableComposite { +public: + AlignableGEMRing(const std::vector& GEMSuperChambers); + + PositionType computePosition(); + + RotationType computeOrientation(); + + AlignableSurface computeSurface(); + + AlignableGEMSuperChamber& superChamber(int i); + + friend std::ostream& operator<<(std::ostream&, const AlignableGEMRing&); + + void dump(void) const override; + +private: + std::vector theGEMSuperChambers; +}; + +#endif diff --git a/Alignment/MuonAlignment/interface/AlignableGEMStation.h b/Alignment/MuonAlignment/interface/AlignableGEMStation.h new file mode 100644 index 0000000000000..a8f025112d1b3 --- /dev/null +++ b/Alignment/MuonAlignment/interface/AlignableGEMStation.h @@ -0,0 +1,39 @@ +#ifndef Alignment_MuonAlignment_AlignableGEMStation_H +#define Alignment_MuonAlignment_AlignableGEMStation_H + +/* \class AlignableGEMRing + * \author Hyunyong Kim - TAMU + */ + +#include "Alignment/CommonAlignment/interface/Utilities.h" +#include "Alignment/CommonAlignment/interface/AlignableComposite.h" +#include "Alignment/CommonAlignment/interface/AlignableSurface.h" + +#include "Alignment/MuonAlignment/interface/AlignableGEMRing.h" + +#include + +class GeomDet; +class AlignableGEMRing; + +class AlignableGEMStation : public AlignableComposite { +public: + AlignableGEMStation(const std::vector& GEMRings); + + PositionType computePosition(); + + RotationType computeOrientation(); + + AlignableSurface computeSurface(); + + AlignableGEMRing& ring(int i); + + friend std::ostream& operator<<(std::ostream&, const AlignableGEMStation&); + + void dump(void) const override; + +private: + std::vector theGEMRings; +}; + +#endif diff --git a/Alignment/MuonAlignment/interface/AlignableGEMSuperChamber.h b/Alignment/MuonAlignment/interface/AlignableGEMSuperChamber.h new file mode 100644 index 0000000000000..8c2bb1986ff22 --- /dev/null +++ b/Alignment/MuonAlignment/interface/AlignableGEMSuperChamber.h @@ -0,0 +1,27 @@ +#ifndef Alignment_MuonAlignment_AlignableGEMSuperChamber_H +#define Alignment_MuonAlignment_AlignableGEMSuperChamber_H + +/* \class AlignableGEMSuperChamber + * \author Hyunyong Kim - TAMU + */ + +#include +#include +#include + +#include "Alignment/CommonAlignment/interface/StructureType.h" +#include "Alignment/CommonAlignment/interface/AlignableDet.h" + +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "Alignment/CommonAlignment/interface/AlignableComposite.h" + +class AlignableGEMSuperChamber : public AlignableDet { +public: + friend std::ostream& operator<<(std::ostream&, const AlignableGEMSuperChamber&); + + AlignableGEMSuperChamber(const GeomDet* geomDet); + + void update(const GeomDet* geomDet); +}; + +#endif diff --git a/Alignment/MuonAlignment/interface/AlignableMuon.h b/Alignment/MuonAlignment/interface/AlignableMuon.h index 9821bd2d256f7..7f5099fba0176 100644 --- a/Alignment/MuonAlignment/interface/AlignableMuon.h +++ b/Alignment/MuonAlignment/interface/AlignableMuon.h @@ -17,6 +17,7 @@ #include "Alignment/CommonAlignment/interface/AlignableObjectId.h" class CSCGeometry; +class GEMGeometry; // Classes that will be used to construct the muon class AlignableDTBarrel; @@ -27,20 +28,24 @@ class AlignableCSCEndcap; class AlignableCSCStation; class AlignableCSCRing; class AlignableCSCChamber; +class AlignableGEMEndcap; +class AlignableGEMStation; +class AlignableGEMRing; +class AlignableGEMSuperChamber; /// Constructor of the full muon geometry. class AlignableMuon : public AlignableComposite { public: /// Constructor from geometries - AlignableMuon(const DTGeometry*, const CSCGeometry*); + AlignableMuon(const DTGeometry*, const CSCGeometry*, const GEMGeometry*); /// Destructor ~AlignableMuon() override; /// Updater using DTGeometry and CSCGeometry. /// The given geometries have to match the current ones. - void update(const DTGeometry*, const CSCGeometry*); + void update(const DTGeometry*, const CSCGeometry*, const GEMGeometry*); /// Return all components const align::Alignables& components() const final { return theMuonComponents; } @@ -60,6 +65,12 @@ class AlignableMuon : public AlignableComposite { align::Alignables CSCStations(); align::Alignables CSCRings(); align::Alignables CSCEndcaps(); + align::Alignables GEMEtaPartitions(); + align::Alignables GEMChambers(); + align::Alignables GEMSuperChambers(); + align::Alignables GEMStations(); + align::Alignables GEMRings(); + align::Alignables GEMEndcaps(); /// Get DT alignments sorted by DetId Alignments* dtAlignments(); @@ -70,9 +81,13 @@ class AlignableMuon : public AlignableComposite { /// Get CSC alignments sorted by DetId Alignments* cscAlignments(); + Alignments* gemAlignments(); + /// Get CSC alignment errors sorted by DetId AlignmentErrorsExtended* cscAlignmentErrorsExtended(); + AlignmentErrorsExtended* gemAlignmentErrorsExtended(); + /// Return muon alignable object ID provider derived from the muon system geometry const AlignableObjectId& objectIdProvider() const { return alignableObjectId_; } @@ -100,6 +115,8 @@ class AlignableMuon : public AlignableComposite { /// Build muon end caps void buildCSCEndcap(const CSCGeometry*, bool update = false); + void buildGEMEndcap(const GEMGeometry*, bool update = false); + /// Set mothers recursively void recursiveSetMothers(Alignable* alignable); @@ -117,6 +134,11 @@ class AlignableMuon : public AlignableComposite { std::vector theCSCRings; std::vector theCSCEndcaps; + std::vector theGEMSuperChambers; + std::vector theGEMStations; + std::vector theGEMRings; + std::vector theGEMEndcaps; + align::Alignables theMuonComponents; }; diff --git a/Alignment/MuonAlignment/interface/MuonAlignment.h b/Alignment/MuonAlignment/interface/MuonAlignment.h index c29ee34f4c29e..ec70e349ca87f 100644 --- a/Alignment/MuonAlignment/interface/MuonAlignment.h +++ b/Alignment/MuonAlignment/interface/MuonAlignment.h @@ -13,9 +13,10 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Alignment/MuonAlignment/interface/AlignableMuon.h" -#include +#include "FWCore/Framework/interface/Frameworkfwd.h" #include "Alignment/CommonAlignment/interface/AlignableNavigator.h" #include "Alignment/MuonAlignment/interface/MuonAlignmentInputMethod.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" class MuonAlignment { public: @@ -52,6 +53,7 @@ class MuonAlignment { void saveDTtoDB(); void saveCSCtoDB(); + void saveGEMtoDB(); void saveToDB(); private: @@ -60,9 +62,14 @@ class MuonAlignment { std::string theDTAlignRecordName, theDTErrorRecordName; std::string theCSCAlignRecordName, theCSCErrorRecordName; + std::string theGEMAlignRecordName, theGEMErrorRecordName; std::string theDTSurveyRecordName, theDTSurveyErrorRecordName; std::string theCSCSurveyRecordName, theCSCSurveyErrorRecordName; + edm::ESGetToken esTokenDT_; + edm::ESGetToken esTokenCSC_; + edm::ESGetToken esTokenGEM_; + align::Scalars displacements; align::Scalars rotations; diff --git a/Alignment/MuonAlignment/interface/MuonAlignmentInputDB.h b/Alignment/MuonAlignment/interface/MuonAlignmentInputDB.h index c6ad85431d7b3..7cd459cbd8531 100644 --- a/Alignment/MuonAlignment/interface/MuonAlignmentInputDB.h +++ b/Alignment/MuonAlignment/interface/MuonAlignmentInputDB.h @@ -29,7 +29,8 @@ class MuonAlignmentInputDB : public MuonAlignmentInputMethod { public: MuonAlignmentInputDB(); - MuonAlignmentInputDB(std::string dtLabel, std::string cscLabel, std::string idealLabel, bool getAPEs); + MuonAlignmentInputDB( + std::string dtLabel, std::string cscLabel, std::string gemLabel, std::string idealLabel, bool getAPEs); ~MuonAlignmentInputDB() override; // ---------- const member functions --------------------- @@ -47,7 +48,7 @@ class MuonAlignmentInputDB : public MuonAlignmentInputMethod { // ---------- member data -------------------------------- - std::string m_dtLabel, m_cscLabel, idealGeometryLabel; + std::string m_dtLabel, m_cscLabel, m_gemLabel, idealGeometryLabel; bool m_getAPEs; }; diff --git a/Alignment/MuonAlignment/interface/MuonScenarioBuilder.h b/Alignment/MuonAlignment/interface/MuonScenarioBuilder.h index d8c4e0bd35e1d..07f503f6aec05 100644 --- a/Alignment/MuonAlignment/interface/MuonScenarioBuilder.h +++ b/Alignment/MuonAlignment/interface/MuonScenarioBuilder.h @@ -33,6 +33,8 @@ class MuonScenarioBuilder : public MisalignmentScenarioBuilder { /// this special method allows to move a CSCsector by a same amount void moveCSCSectors(const edm::ParameterSet& scenario); + void moveGEMSectors(const edm::ParameterSet& scenario); + /// this special method allows to move the complete muon system by a same amount void moveMuon(const edm::ParameterSet& scenario); diff --git a/Alignment/MuonAlignment/plugins/MuonGeometryDBConverter.cc b/Alignment/MuonAlignment/plugins/MuonGeometryDBConverter.cc index 8e61794fa1511..5afd04cf3f02f 100644 --- a/Alignment/MuonAlignment/plugins/MuonGeometryDBConverter.cc +++ b/Alignment/MuonAlignment/plugins/MuonGeometryDBConverter.cc @@ -54,7 +54,7 @@ class MuonGeometryDBConverter : public edm::one::EDAnalyzer<> { bool m_done; std::string m_input, m_output; - std::string m_dtLabel, m_cscLabel; + std::string m_dtLabel, m_cscLabel, m_gemLabel; double m_shiftErr, m_angleErr; std::string m_fileName; bool m_getAPEs; @@ -101,6 +101,7 @@ MuonGeometryDBConverter::MuonGeometryDBConverter(const edm::ParameterSet &iConfi else if (m_input == std::string("db")) { m_dtLabel = iConfig.getParameter("dtLabel"); m_cscLabel = iConfig.getParameter("cscLabel"); + m_gemLabel = iConfig.getParameter("gemLabel"); m_shiftErr = iConfig.getParameter("shiftErr"); m_angleErr = iConfig.getParameter("angleErr"); m_getAPEs = iConfig.getParameter("getAPEs"); @@ -109,6 +110,7 @@ MuonGeometryDBConverter::MuonGeometryDBConverter(const edm::ParameterSet &iConfi else if (m_input == std::string("surveydb")) { m_dtLabel = iConfig.getParameter("dtLabel"); m_cscLabel = iConfig.getParameter("cscLabel"); + m_gemLabel = iConfig.getParameter("gemLabel"); } else if (m_input == std::string("scenario")) { @@ -159,7 +161,7 @@ void MuonGeometryDBConverter::analyze(const edm::Event &iEvent, const edm::Event } else if (m_input == std::string("db")) { - MuonAlignmentInputDB inputMethod(m_dtLabel, m_cscLabel, idealGeometryLabelForInputDB, m_getAPEs); + MuonAlignmentInputDB inputMethod(m_dtLabel, m_cscLabel, m_gemLabel, idealGeometryLabelForInputDB, m_getAPEs); muonAlignment = new MuonAlignment(iSetup, inputMethod); if (m_getAPEs) { muonAlignment->copyAlignmentToSurvey(m_shiftErr, m_angleErr); @@ -222,6 +224,7 @@ void MuonGeometryDBConverter::fillDescriptions(edm::ConfigurationDescriptions &d desc.add("input", "ideal"); desc.add("dtLabel", ""); desc.add("cscLabel", ""); + desc.add("gemLabel", ""); desc.add("shiftErr", 1000.0); desc.add("angleErr", 6.28); desc.add("getAPEs", true); diff --git a/Alignment/MuonAlignment/plugins/MuonMisalignedProducer.cc b/Alignment/MuonAlignment/plugins/MuonMisalignedProducer.cc index 4bda51a0360d8..ae2b1e1872b0b 100644 --- a/Alignment/MuonAlignment/plugins/MuonMisalignedProducer.cc +++ b/Alignment/MuonAlignment/plugins/MuonMisalignedProducer.cc @@ -26,6 +26,7 @@ #include "Alignment/MuonAlignment/interface/AlignableMuon.h" #include "Geometry/CSCGeometry/interface/CSCGeometry.h" #include "Geometry/DTGeometry/interface/DTGeometry.h" +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" #include "Alignment/MuonAlignment/interface/MuonScenarioBuilder.h" #include "Alignment/CommonAlignment/interface/Alignable.h" #include "Geometry/CommonTopologies/interface/GeometryAligner.h" @@ -33,6 +34,8 @@ #include +#include + class MuonMisalignedProducer : public edm::one::EDAnalyzer<> { public: /// Constructor @@ -52,12 +55,18 @@ class MuonMisalignedProducer : public edm::one::EDAnalyzer<> { std::string theDTAlignRecordName, theDTErrorRecordName; std::string theCSCAlignRecordName, theCSCErrorRecordName; - std::string theIdealGeometryLabel; + std::string theGEMAlignRecordName, theGEMErrorRecordName; + + edm::ESGetToken esTokenDT_; + edm::ESGetToken esTokenCSC_; + edm::ESGetToken esTokenGEM_; Alignments* dt_Alignments; AlignmentErrorsExtended* dt_AlignmentErrorsExtended; Alignments* csc_Alignments; AlignmentErrorsExtended* csc_AlignmentErrorsExtended; + Alignments* gem_Alignments; + AlignmentErrorsExtended* gem_AlignmentErrorsExtended; }; //__________________________________________________________________________________________________ @@ -68,7 +77,11 @@ MuonMisalignedProducer::MuonMisalignedProducer(const edm::ParameterSet& p) theDTErrorRecordName("DTAlignmentErrorExtendedRcd"), theCSCAlignRecordName("CSCAlignmentRcd"), theCSCErrorRecordName("CSCAlignmentErrorExtendedRcd"), - theIdealGeometryLabel("idealForMuonMisalignedProducer") {} + theGEMAlignRecordName("GEMAlignmentRcd"), + theGEMErrorRecordName("GEMAlignmentErrorExtendedRcd"), + esTokenDT_(esConsumes(edm::ESInputTag("", "idealForMuonMisalignedProducer"))), + esTokenCSC_(esConsumes(edm::ESInputTag("", "idealForMuonMisalignedProducer"))), + esTokenGEM_(esConsumes(edm::ESInputTag("", "idealForMuonMisalignedProducer"))) {} //__________________________________________________________________________________________________ MuonMisalignedProducer::~MuonMisalignedProducer() {} @@ -77,13 +90,12 @@ MuonMisalignedProducer::~MuonMisalignedProducer() {} void MuonMisalignedProducer::analyze(const edm::Event& event, const edm::EventSetup& eventSetup) { edm::LogInfo("MisalignedMuon") << "Producer called"; // Create the Muon geometry from ideal geometry - edm::ESHandle theDTGeometry; - edm::ESHandle theCSCGeometry; - eventSetup.get().get(theIdealGeometryLabel, theDTGeometry); - eventSetup.get().get(theIdealGeometryLabel, theCSCGeometry); + edm::ESHandle theDTGeometry = eventSetup.getHandle(esTokenDT_); + edm::ESHandle theCSCGeometry = eventSetup.getHandle(esTokenCSC_); + edm::ESHandle theGEMGeometry = eventSetup.getHandle(esTokenGEM_); // Create the alignable hierarchy - AlignableMuon* theAlignableMuon = new AlignableMuon(&(*theDTGeometry), &(*theCSCGeometry)); + AlignableMuon* theAlignableMuon = new AlignableMuon(&(*theDTGeometry), &(*theCSCGeometry), &(*theGEMGeometry)); // Create misalignment scenario MuonScenarioBuilder scenarioBuilder(theAlignableMuon); @@ -94,14 +106,17 @@ void MuonMisalignedProducer::analyze(const edm::Event& event, const edm::EventSe dt_AlignmentErrorsExtended = theAlignableMuon->dtAlignmentErrorsExtended(); csc_Alignments = theAlignableMuon->cscAlignments(); csc_AlignmentErrorsExtended = theAlignableMuon->cscAlignmentErrorsExtended(); + gem_Alignments = theAlignableMuon->gemAlignments(); + gem_AlignmentErrorsExtended = theAlignableMuon->gemAlignmentErrorsExtended(); // Misalign the EventSetup geometry - GeometryAligner aligner; - + /* GeometryAligner aligner; aligner.applyAlignments(&(*theDTGeometry), dt_Alignments, dt_AlignmentErrorsExtended, AlignTransform()); aligner.applyAlignments( &(*theCSCGeometry), csc_Alignments, csc_AlignmentErrorsExtended, AlignTransform()); - + aligner.applyAlignments( + &(*theGEMGeometry), gem_Alignments, gem_AlignmentErrorsExtended, AlignTransform()); + */ // Write alignments to DB if (theSaveToDB) this->saveToDB(); @@ -125,6 +140,9 @@ void MuonMisalignedProducer::saveToDB(void) { poolDbService->writeOne(&(*csc_Alignments), poolDbService->beginOfTime(), theCSCAlignRecordName); poolDbService->writeOne( &(*csc_AlignmentErrorsExtended), poolDbService->beginOfTime(), theCSCErrorRecordName); + poolDbService->writeOne(&(*gem_Alignments), poolDbService->beginOfTime(), theGEMAlignRecordName); + poolDbService->writeOne( + &(*gem_AlignmentErrorsExtended), poolDbService->beginOfTime(), theGEMErrorRecordName); } //____________________________________________________________________________________________ DEFINE_FWK_MODULE(MuonMisalignedProducer); diff --git a/Alignment/MuonAlignment/src/AlignableGEMChamber.cc b/Alignment/MuonAlignment/src/AlignableGEMChamber.cc new file mode 100644 index 0000000000000..d7e89a088449d --- /dev/null +++ b/Alignment/MuonAlignment/src/AlignableGEMChamber.cc @@ -0,0 +1,41 @@ +/* AlignableGEMChamber + * \author Hyunyong Kim - TAMU + */ +#include "Alignment/MuonAlignment/interface/AlignableGEMChamber.h" + +AlignableGEMChamber::AlignableGEMChamber(const GeomDet* geomDet) : AlignableDet(geomDet) { + theStructureType = align::AlignableGEMChamber; + theSurface = geomDet->surface(); +} + +void AlignableGEMChamber::update(const GeomDet* geomDet) { + AlignableDet::update(geomDet); + theSurface = geomDet->surface(); +} + +std::ostream& operator<<(std::ostream& os, const AlignableGEMChamber& r) { + const auto& theDets = r.components(); + + os << " This GEMChamber contains " << theDets.size() << " units" << std::endl; + os << " position = " << r.globalPosition() << std::endl; + os << " (phi, r, z)= (" << r.globalPosition().phi() << "," << r.globalPosition().perp() << "," + << r.globalPosition().z(); + os << "), orientation:" << std::endl << r.globalRotation() << std::endl; + + os << " total displacement and rotation: " << r.displacement() << std::endl; + os << r.rotation() << std::endl; + + for (const auto& idet : theDets) { + const auto& comp = idet->components(); + + for (unsigned int i = 0; i < comp.size(); ++i) { + os << " Det position, phi, r: " << comp[i]->globalPosition() << " , " << comp[i]->globalPosition().phi() + << " , " << comp[i]->globalPosition().perp() << std::endl; + os << " local position, phi, r: " << r.surface().toLocal(comp[i]->globalPosition()) << " , " + << r.surface().toLocal(comp[i]->globalPosition()).phi() << " , " + << r.surface().toLocal(comp[i]->globalPosition()).perp() << std::endl; + } + } + + return os; +} diff --git a/Alignment/MuonAlignment/src/AlignableGEMEndcap.cc b/Alignment/MuonAlignment/src/AlignableGEMEndcap.cc new file mode 100644 index 0000000000000..a2681d3a1f265 --- /dev/null +++ b/Alignment/MuonAlignment/src/AlignableGEMEndcap.cc @@ -0,0 +1,92 @@ +/* AlignableGEMEndcap + * \author Hyunyong Kim - TAMU + */ +#include + +#include "Alignment/MuonAlignment/interface/AlignableGEMEndcap.h" +#include "CondFormats/Alignment/interface/Alignments.h" +#include "CondFormats/Alignment/interface/AlignmentErrorsExtended.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +AlignableGEMEndcap::AlignableGEMEndcap(const std::vector& GEMStations) + : AlignableComposite(GEMStations[0]->id(), align::AlignableGEMEndcap) { + theGEMStations.insert(theGEMStations.end(), GEMStations.begin(), GEMStations.end()); + + for (const auto& station : GEMStations) { + const auto mother = station->mother(); + this->addComponent(station); + station->setMother(mother); + } + + setSurface(computeSurface()); + compConstraintType_ = Alignable::CompConstraintType::POSITION_Z; +} + +AlignableGEMStation& AlignableGEMEndcap::station(int i) { + if (i >= size()) + throw cms::Exception("LogicError") << "Station index (" << i << ") out of range"; + + return *theGEMStations[i]; +} + +AlignableSurface AlignableGEMEndcap::computeSurface() { + return AlignableSurface(computePosition(), computeOrientation()); +} + +AlignableGEMEndcap::PositionType AlignableGEMEndcap::computePosition() { + float zz = 0.; + + for (std::vector::iterator ilayer = theGEMStations.begin(); ilayer != theGEMStations.end(); + ilayer++) + zz += (*ilayer)->globalPosition().z(); + + zz /= static_cast(theGEMStations.size()); + + return PositionType(0.0, 0.0, zz); +} + +AlignableGEMEndcap::RotationType AlignableGEMEndcap::computeOrientation() { return RotationType(); } + +std::ostream& operator<<(std::ostream& os, const AlignableGEMEndcap& b) { + os << "This EndCap contains " << b.theGEMStations.size() << " GEM stations" << std::endl; + os << "(phi, r, z) = (" << b.globalPosition().phi() << "," << b.globalPosition().perp() << "," + << b.globalPosition().z(); + os << "), orientation:" << std::endl << b.globalRotation() << std::endl; + return os; +} + +void AlignableGEMEndcap::dump(void) const { + edm::LogInfo("AlignableDump") << (*this); + for (std::vector::const_iterator iLayer = theGEMStations.begin(); + iLayer != theGEMStations.end(); + iLayer++) + (*iLayer)->dump(); +} + +Alignments* AlignableGEMEndcap::alignments(void) const { + Alignments* m_alignments = new Alignments(); + + for (const auto& i : this->components()) { + std::unique_ptr tmpAlignments{i->alignments()}; + std::copy(tmpAlignments->m_align.begin(), tmpAlignments->m_align.end(), std::back_inserter(m_alignments->m_align)); + } + + std::sort(m_alignments->m_align.begin(), m_alignments->m_align.end()); + + return m_alignments; +} + +AlignmentErrorsExtended* AlignableGEMEndcap::alignmentErrors(void) const { + AlignmentErrorsExtended* m_alignmentErrors = new AlignmentErrorsExtended(); + + for (const auto& i : this->components()) { + std::unique_ptr tmpAlignmentErrorsExtended{i->alignmentErrors()}; + std::copy(tmpAlignmentErrorsExtended->m_alignError.begin(), + tmpAlignmentErrorsExtended->m_alignError.end(), + std::back_inserter(m_alignmentErrors->m_alignError)); + } + + std::sort(m_alignmentErrors->m_alignError.begin(), m_alignmentErrors->m_alignError.end()); + + return m_alignmentErrors; +} diff --git a/Alignment/MuonAlignment/src/AlignableGEMRing.cc b/Alignment/MuonAlignment/src/AlignableGEMRing.cc new file mode 100644 index 0000000000000..008220d3e79c8 --- /dev/null +++ b/Alignment/MuonAlignment/src/AlignableGEMRing.cc @@ -0,0 +1,61 @@ +/* AlignableGEMRing + * \author Hyunyong Kim - TAMU + */ +#include "Alignment/MuonAlignment/interface/AlignableGEMRing.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +AlignableGEMRing::AlignableGEMRing(const std::vector& GEMSuperChambers) + : AlignableComposite(GEMSuperChambers[0]->id(), align::AlignableGEMRing) { + theGEMSuperChambers.insert(theGEMSuperChambers.end(), GEMSuperChambers.begin(), GEMSuperChambers.end()); + + for (const auto& chamber : GEMSuperChambers) { + const auto mother = chamber->mother(); + this->addComponent(chamber); + chamber->setMother(mother); + } + + setSurface(computeSurface()); + compConstraintType_ = Alignable::CompConstraintType::POSITION_Z; +} + +AlignableGEMSuperChamber& AlignableGEMRing::superChamber(int i) { + if (i >= size()) + throw cms::Exception("LogicError") << "GEM Super Chamber index (" << i << ") out of range"; + + return *theGEMSuperChambers[i]; +} + +AlignableSurface AlignableGEMRing::computeSurface() { + return AlignableSurface(computePosition(), computeOrientation()); +} + +AlignableGEMRing::PositionType AlignableGEMRing::computePosition() { + float zz = 0.; + + for (std::vector::iterator ichamber = theGEMSuperChambers.begin(); + ichamber != theGEMSuperChambers.end(); + ichamber++) + zz += (*ichamber)->globalPosition().z(); + + zz /= static_cast(theGEMSuperChambers.size()); + + return PositionType(0.0, 0.0, zz); +} + +AlignableGEMRing::RotationType AlignableGEMRing::computeOrientation() { return RotationType(); } + +std::ostream& operator<<(std::ostream& os, const AlignableGEMRing& b) { + os << "This GEM Ring contains " << b.theGEMSuperChambers.size() << " GEM Super chambers" << std::endl; + os << "(phi, r, z) = (" << b.globalPosition().phi() << "," << b.globalPosition().perp() << "," + << b.globalPosition().z(); + os << "), orientation:" << std::endl << b.globalRotation() << std::endl; + return os; +} + +void AlignableGEMRing::dump(void) const { + edm::LogInfo("AlignableDump") << (*this); + for (std::vector::const_iterator iChamber = theGEMSuperChambers.begin(); + iChamber != theGEMSuperChambers.end(); + iChamber++) + edm::LogInfo("AlignableDump") << (**iChamber); +} diff --git a/Alignment/MuonAlignment/src/AlignableGEMStation.cc b/Alignment/MuonAlignment/src/AlignableGEMStation.cc new file mode 100644 index 0000000000000..91cefa4a550b3 --- /dev/null +++ b/Alignment/MuonAlignment/src/AlignableGEMStation.cc @@ -0,0 +1,57 @@ +/* AlignableGEMStation + * \author Hyunyong Kim - TAMU + */ +#include "Alignment/MuonAlignment/interface/AlignableGEMStation.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +AlignableGEMStation::AlignableGEMStation(const std::vector& GEMRings) + : AlignableComposite(GEMRings[0]->id(), align::AlignableGEMStation) { + theGEMRings.insert(theGEMRings.end(), GEMRings.begin(), GEMRings.end()); + + for (const auto& ring : GEMRings) { + const auto mother = ring->mother(); + this->addComponent(ring); + ring->setMother(mother); + } + + setSurface(computeSurface()); + compConstraintType_ = Alignable::CompConstraintType::POSITION_Z; +} + +AlignableGEMRing& AlignableGEMStation::ring(int i) { + if (i >= size()) + throw cms::Exception("LogicError") << "GEM Ring index (" << i << ") out of range"; + + return *theGEMRings[i]; +} + +AlignableSurface AlignableGEMStation::computeSurface() { + return AlignableSurface(computePosition(), computeOrientation()); +} + +AlignableGEMStation::PositionType AlignableGEMStation::computePosition() { + float zz = 0.; + + for (std::vector::iterator ilayer = theGEMRings.begin(); ilayer != theGEMRings.end(); ilayer++) + zz += (*ilayer)->globalPosition().z(); + + zz /= static_cast(theGEMRings.size()); + + return PositionType(0.0, 0.0, zz); +} + +AlignableGEMStation::RotationType AlignableGEMStation::computeOrientation() { return RotationType(); } + +std::ostream& operator<<(std::ostream& os, const AlignableGEMStation& b) { + os << "This GEM Station contains " << b.theGEMRings.size() << " GEM rings" << std::endl; + os << "(phi, r, z) = (" << b.globalPosition().phi() << "," << b.globalPosition().perp() << "," + << b.globalPosition().z(); + os << "), orientation:" << std::endl << b.globalRotation() << std::endl; + return os; +} + +void AlignableGEMStation::dump(void) const { + edm::LogInfo("AlignableDump") << (*this); + for (std::vector::const_iterator iRing = theGEMRings.begin(); iRing != theGEMRings.end(); iRing++) + edm::LogInfo("AlignableDump") << (**iRing); +} diff --git a/Alignment/MuonAlignment/src/AlignableGEMSuperChamber.cc b/Alignment/MuonAlignment/src/AlignableGEMSuperChamber.cc new file mode 100644 index 0000000000000..3f9a223168ae6 --- /dev/null +++ b/Alignment/MuonAlignment/src/AlignableGEMSuperChamber.cc @@ -0,0 +1,46 @@ +/* AlignableGEMSuperChamber + * \author Hyunyong Kim - TAMU + */ +#include "Alignment/MuonAlignment/interface/AlignableGEMSuperChamber.h" +#include "Alignment/MuonAlignment/interface/AlignableGEMChamber.h" + +AlignableGEMSuperChamber::AlignableGEMSuperChamber(const GeomDet* geomDet) : AlignableDet(geomDet, false) { + theStructureType = align::AlignableGEMSuperChamber; + const std::vector& geomDets = geomDet->components(); + for (std::vector::const_iterator idet = geomDets.begin(); idet != geomDets.end(); ++idet) { + addComponent(new AlignableGEMChamber(*idet)); + } + this->theSurface = geomDet->surface(); +} + +void AlignableGEMSuperChamber::update(const GeomDet* geomDet) { + AlignableDet::update(geomDet); + theSurface = geomDet->surface(); +} + +std::ostream& operator<<(std::ostream& os, const AlignableGEMSuperChamber& r) { + const auto& theDets = r.components(); + + os << " This GEMSuperChamber contains " << theDets.size() << " units" << std::endl; + os << " position = " << r.globalPosition() << std::endl; + os << " (phi, r, z)= (" << r.globalPosition().phi() << "," << r.globalPosition().perp() << "," + << r.globalPosition().z(); + os << "), orientation:" << std::endl << r.globalRotation() << std::endl; + + os << " total displacement and rotation: " << r.displacement() << std::endl; + os << r.rotation() << std::endl; + + for (const auto& idet : theDets) { + const auto& comp = idet->components(); + + for (unsigned int i = 0; i < comp.size(); ++i) { + os << " Det position, phi, r: " << comp[i]->globalPosition() << " , " << comp[i]->globalPosition().phi() + << " , " << comp[i]->globalPosition().perp() << std::endl; + os << " local position, phi, r: " << r.surface().toLocal(comp[i]->globalPosition()) << " , " + << r.surface().toLocal(comp[i]->globalPosition()).phi() << " , " + << r.surface().toLocal(comp[i]->globalPosition()).perp() << std::endl; + } + } + + return os; +} diff --git a/Alignment/MuonAlignment/src/AlignableMuon.cc b/Alignment/MuonAlignment/src/AlignableMuon.cc index faea5591ead99..032b8dbd80f44 100644 --- a/Alignment/MuonAlignment/src/AlignableMuon.cc +++ b/Alignment/MuonAlignment/src/AlignableMuon.cc @@ -11,29 +11,39 @@ #include "Alignment/MuonAlignment/interface/AlignableMuon.h" #include "Geometry/DTGeometry/interface/DTChamber.h" #include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" #include #include "CondFormats/Alignment/interface/Alignments.h" #include "CondFormats/Alignment/interface/AlignmentErrorsExtended.h" - +#include "Geometry/CommonDetUnit/interface/GeomDet.h" // Muon components -#include "Alignment/MuonAlignment/interface/AlignableDTChamber.h" -#include "Alignment/MuonAlignment/interface/AlignableCSCChamber.h" +#include "Alignment/MuonAlignment/interface/AlignableDTBarrel.h" #include "Alignment/MuonAlignment/interface/AlignableDTStation.h" -#include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Alignment/MuonAlignment/interface/AlignableCSCStation.h" #include "Alignment/MuonAlignment/interface/AlignableDTWheel.h" -#include "Alignment/MuonAlignment/interface/AlignableDTBarrel.h" +#include "Alignment/MuonAlignment/interface/AlignableDTChamber.h" #include "Alignment/MuonAlignment/interface/AlignableCSCEndcap.h" +#include "Alignment/MuonAlignment/interface/AlignableCSCStation.h" +#include "Alignment/MuonAlignment/interface/AlignableCSCRing.h" +#include "Alignment/MuonAlignment/interface/AlignableCSCChamber.h" +#include "Alignment/MuonAlignment/interface/AlignableGEMEndcap.h" +#include "Alignment/MuonAlignment/interface/AlignableGEMStation.h" +#include "Alignment/MuonAlignment/interface/AlignableGEMRing.h" +#include "Alignment/MuonAlignment/interface/AlignableGEMSuperChamber.h" + +#include //-------------------------------------------------------------------------------------------------- -AlignableMuon::AlignableMuon(const DTGeometry* dtGeometry, const CSCGeometry* cscGeometry) +AlignableMuon::AlignableMuon(const DTGeometry* dtGeometry, + const CSCGeometry* cscGeometry, + const GEMGeometry* gemGeometry) : AlignableComposite(0, align::AlignableMuon), // cannot yet set id, use 0 - alignableObjectId_(nullptr, dtGeometry, cscGeometry) { + alignableObjectId_(nullptr, dtGeometry, cscGeometry, gemGeometry) { // Build the muon barrel buildDTBarrel(dtGeometry); // Build the muon end caps buildCSCEndcap(cscGeometry); + buildGEMEndcap(gemGeometry); // Set links to mothers recursively recursiveSetMothers(this); @@ -52,12 +62,15 @@ AlignableMuon::~AlignableMuon() { } //------------------------------------------------------------------------------ -void AlignableMuon::update(const DTGeometry* dtGeometry, const CSCGeometry* cscGeometry) { +void AlignableMuon::update(const DTGeometry* dtGeometry, + const CSCGeometry* cscGeometry, + const GEMGeometry* gemGeometry) { // update the muon barrel buildDTBarrel(dtGeometry, /* update = */ true); // update the muon end caps buildCSCEndcap(cscGeometry, /* update = */ true); + buildGEMEndcap(gemGeometry, /* update = */ true); edm::LogInfo("Alignment") << "@SUB=AlignableMuon::update" << "Updating alignable muon objects DONE"; @@ -266,6 +279,63 @@ void AlignableMuon::buildCSCEndcap(const CSCGeometry* pCSC, bool update) { } } +//-------------------------------------------------------------------------------------------------- +void AlignableMuon::buildGEMEndcap(const GEMGeometry* pGEM, bool update) { + LogDebug("Position") << "Constructing AlignableGEMEndcap"; + std::vector tmpGEMStationsInEndcap; + for (int iec = -1; iec < 2; iec = iec + 2) { + std::vector tmpGEMRingsInStation; + + for (int ist = 0; ist < 3; ist++) { + if (ist == 0) + continue; //Run3 GEM dosen't have ME0 + if (ist == 2) + continue; //Run3 GEM dosen't have GE2/1 + std::vector tmpGEMSuperChambersInRing; + int iri = 1; + int iChamber{0}; + auto vc = pGEM->superChambers(); + for (const auto& det : vc) { + GEMDetId gemId = det->id(); + int ec = gemId.region(); + int st = gemId.station(); + int ri = gemId.ring(); + + if (iec == ec && ist == st && iri == ri) { + if (update) { + theGEMEndcaps[iec == -1 ? 0 : 1]->station(ist - 1).ring(iri - 1).superChamber(iChamber).update(det); + } else { + AlignableGEMSuperChamber* tmpGEMSuperChamber = new AlignableGEMSuperChamber(det); + tmpGEMSuperChambersInRing.push_back(tmpGEMSuperChamber); + } + ++iChamber; + } + } + if (!update) { + if (!tmpGEMSuperChambersInRing.empty()) { + theGEMSuperChambers.insert( + theGEMSuperChambers.end(), tmpGEMSuperChambersInRing.begin(), tmpGEMSuperChambersInRing.end()); + AlignableGEMRing* tmpGEMRing = new AlignableGEMRing(tmpGEMSuperChambersInRing); + tmpGEMRingsInStation.push_back(tmpGEMRing); + tmpGEMSuperChambersInRing.clear(); + } + } + if (!update) { + AlignableGEMStation* tmpGEMStation = new AlignableGEMStation(tmpGEMRingsInStation); + theGEMRings.insert(theGEMRings.end(), tmpGEMRingsInStation.begin(), tmpGEMRingsInStation.end()); + tmpGEMStationsInEndcap.push_back(tmpGEMStation); + tmpGEMRingsInStation.clear(); + } + } + if (!update) { + AlignableGEMEndcap* tmpEndcap = new AlignableGEMEndcap(tmpGEMStationsInEndcap); + theGEMStations.insert(theGEMStations.end(), tmpGEMStationsInEndcap.begin(), tmpGEMStationsInEndcap.end()); + theGEMEndcaps.push_back(tmpEndcap); + tmpGEMStationsInEndcap.clear(); + } + } +} + //-------------------------------------------------------------------------------------------------- align::Alignables AlignableMuon::DTLayers() { align::Alignables result; @@ -372,6 +442,71 @@ align::Alignables AlignableMuon::CSCEndcaps() { return result; } +//__________________________________________________________________________________________________ +align::Alignables AlignableMuon::GEMEtaPartitions() { + align::Alignables result; + align::Alignables superChambers = GEMSuperChambers(); + for (align::Alignables::const_iterator superChamberIter = superChambers.begin(); + superChamberIter != superChambers.end(); + ++superChamberIter) { + align::Alignables chambers = (*superChamberIter)->components(); + for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end(); + ++chamberIter) { + align::Alignables etaPartitions = (*chamberIter)->components(); + for (align::Alignables::const_iterator etaPartitionIter = etaPartitions.begin(); + etaPartitionIter != etaPartitions.end(); + ++etaPartitionIter) { + result.push_back(*etaPartitionIter); + } + } + } + return result; +} + +//__________________________________________________________________________________________________ +align::Alignables AlignableMuon::GEMChambers() { + align::Alignables result; + align::Alignables superChambers = GEMSuperChambers(); + for (align::Alignables::const_iterator superChamberIter = superChambers.begin(); + superChamberIter != superChambers.end(); + ++superChamberIter) { + align::Alignables chambers = (*superChamberIter)->components(); + for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end(); + ++chamberIter) { + result.push_back(*chamberIter); + } + } + return result; +} + +//__________________________________________________________________________________________________ +align::Alignables AlignableMuon::GEMSuperChambers() { + align::Alignables result; + copy(theGEMSuperChambers.begin(), theGEMSuperChambers.end(), back_inserter(result)); + return result; +} + +//__________________________________________________________________________________________________ +align::Alignables AlignableMuon::GEMRings() { + align::Alignables result; + copy(theGEMRings.begin(), theGEMRings.end(), back_inserter(result)); + return result; +} + +//__________________________________________________________________________________________________ +align::Alignables AlignableMuon::GEMStations() { + align::Alignables result; + copy(theGEMStations.begin(), theGEMStations.end(), back_inserter(result)); + return result; +} + +//-------------------------------------------------------------------------------------------------- +align::Alignables AlignableMuon::GEMEndcaps() { + align::Alignables result; + copy(theGEMEndcaps.begin(), theGEMEndcaps.end(), back_inserter(result)); + return result; +} + //__________________________________________________________________________________________________ void AlignableMuon::recursiveSetMothers(Alignable* alignable) { for (const auto& iter : alignable->components()) { @@ -457,3 +592,32 @@ AlignmentErrorsExtended* AlignableMuon::cscAlignmentErrorsExtended(void) { return tmpAlignmentErrorsExtended; } + +//__________________________________________________________________________________________________ +Alignments* AlignableMuon::gemAlignments(void) { + Alignments* gemEndCap1 = this->GEMEndcaps().front()->alignments(); + Alignments* gemEndCap2 = this->GEMEndcaps().back()->alignments(); + Alignments* tmpAlignments = new Alignments(); + std::copy(gemEndCap1->m_align.begin(), gemEndCap1->m_align.end(), back_inserter(tmpAlignments->m_align)); + std::copy(gemEndCap2->m_align.begin(), gemEndCap2->m_align.end(), back_inserter(tmpAlignments->m_align)); + std::sort(tmpAlignments->m_align.begin(), tmpAlignments->m_align.end()); + + return tmpAlignments; +} +//__________________________________________________________________________________________________ +AlignmentErrorsExtended* AlignableMuon::gemAlignmentErrorsExtended(void) { + // Retrieve muon endcaps alignment errors + AlignmentErrorsExtended* gemEndCap1Errors = this->GEMEndcaps().front()->alignmentErrors(); + AlignmentErrorsExtended* gemEndCap2Errors = this->GEMEndcaps().back()->alignmentErrors(); + AlignmentErrorsExtended* tmpAlignmentErrorsExtended = new AlignmentErrorsExtended(); + + std::copy(gemEndCap1Errors->m_alignError.begin(), + gemEndCap1Errors->m_alignError.end(), + back_inserter(tmpAlignmentErrorsExtended->m_alignError)); + std::copy(gemEndCap2Errors->m_alignError.begin(), + gemEndCap2Errors->m_alignError.end(), + back_inserter(tmpAlignmentErrorsExtended->m_alignError)); + std::sort(tmpAlignmentErrorsExtended->m_alignError.begin(), tmpAlignmentErrorsExtended->m_alignError.end()); + + return tmpAlignmentErrorsExtended; +} diff --git a/Alignment/MuonAlignment/src/MuonAlignment.cc b/Alignment/MuonAlignment/src/MuonAlignment.cc index 5c47ca195a1f2..2458e49befb2b 100644 --- a/Alignment/MuonAlignment/src/MuonAlignment.cc +++ b/Alignment/MuonAlignment/src/MuonAlignment.cc @@ -9,9 +9,6 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" -// Muon geom -#include "Geometry/Records/interface/MuonGeometryRecord.h" - // Alignment #include "CondFormats/Alignment/interface/Alignments.h" #include "CondFormats/Alignment/interface/AlignmentErrorsExtended.h" @@ -33,6 +30,8 @@ void MuonAlignment::init() { theDTErrorRecordName = "DTAlignmentErrorExtendedRcd"; theCSCAlignRecordName = "CSCAlignmentRcd"; theCSCErrorRecordName = "CSCAlignmentErrorExtendedRcd"; + theGEMAlignRecordName = "GEMAlignmentRcd"; + theGEMErrorRecordName = "GEMAlignmentErrorExtendedRcd"; theDTSurveyRecordName = "DTSurveyRcd"; theDTSurveyErrorRecordName = "DTSurveyErrorExtendedRcd"; theCSCSurveyRecordName = "CSCSurveyRcd"; @@ -44,12 +43,11 @@ void MuonAlignment::init() { MuonAlignment::MuonAlignment(const edm::EventSetup& iSetup) { init(); - edm::ESHandle dtGeometry; - edm::ESHandle cscGeometry; - iSetup.get().get(dtGeometry); - iSetup.get().get(cscGeometry); + edm::ESHandle dtGeometry = iSetup.getHandle(esTokenDT_); + edm::ESHandle cscGeometry = iSetup.getHandle(esTokenCSC_); + edm::ESHandle gemGeometry = iSetup.getHandle(esTokenGEM_); - theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); theAlignableNavigator = new AlignableNavigator(theAlignableMuon); } @@ -135,10 +133,12 @@ void MuonAlignment::copyAlignmentToSurvey(double shiftErr, double angleErr) { std::map alignableMap; recursiveMap(theAlignableMuon->DTBarrel(), alignableMap); recursiveMap(theAlignableMuon->CSCEndcaps(), alignableMap); + recursiveMap(theAlignableMuon->GEMEndcaps(), alignableMap); // Set the survey error to the alignable error, expanding the matrix as needed AlignmentErrorsExtended* dtAlignmentErrorsExtended = theAlignableMuon->dtAlignmentErrorsExtended(); AlignmentErrorsExtended* cscAlignmentErrorsExtended = theAlignableMuon->cscAlignmentErrorsExtended(); + AlignmentErrorsExtended* gemAlignmentErrorsExtended = theAlignableMuon->gemAlignmentErrorsExtended(); std::vector alignmentErrors; std::copy(dtAlignmentErrorsExtended->m_alignError.begin(), dtAlignmentErrorsExtended->m_alignError.end(), @@ -146,6 +146,9 @@ void MuonAlignment::copyAlignmentToSurvey(double shiftErr, double angleErr) { std::copy(cscAlignmentErrorsExtended->m_alignError.begin(), cscAlignmentErrorsExtended->m_alignError.end(), std::back_inserter(alignmentErrors)); + std::copy(gemAlignmentErrorsExtended->m_alignError.begin(), + gemAlignmentErrorsExtended->m_alignError.end(), + std::back_inserter(alignmentErrors)); for (std::vector::const_iterator alignmentError = alignmentErrors.begin(); alignmentError != alignmentErrors.end(); @@ -342,7 +345,24 @@ void MuonAlignment::saveCSCtoDB(void) { &(*csc_AlignmentErrorsExtended), poolDbService->currentTime(), theCSCErrorRecordName); } +void MuonAlignment::saveGEMtoDB(void) { + // Call service + edm::Service poolDbService; + if (!poolDbService.isAvailable()) // Die if not available + throw cms::Exception("NotAvailable") << "PoolDBOutputService not available"; + + // Get alignments and errors + Alignments* gem_Alignments = theAlignableMuon->gemAlignments(); + AlignmentErrorsExtended* gem_AlignmentErrorsExtended = theAlignableMuon->gemAlignmentErrorsExtended(); + + // Store CSC alignments and errors + poolDbService->writeOne(&(*gem_Alignments), poolDbService->currentTime(), theGEMAlignRecordName); + poolDbService->writeOne( + &(*gem_AlignmentErrorsExtended), poolDbService->currentTime(), theGEMErrorRecordName); +} + void MuonAlignment::saveToDB(void) { saveDTtoDB(); saveCSCtoDB(); + saveGEMtoDB(); } diff --git a/Alignment/MuonAlignment/src/MuonAlignmentInputDB.cc b/Alignment/MuonAlignment/src/MuonAlignmentInputDB.cc index 263cc7e913e1b..e64b4183ad60b 100644 --- a/Alignment/MuonAlignment/src/MuonAlignmentInputDB.cc +++ b/Alignment/MuonAlignment/src/MuonAlignmentInputDB.cc @@ -20,10 +20,12 @@ #include "CondFormats/AlignmentRecord/interface/DTAlignmentErrorExtendedRcd.h" #include "CondFormats/AlignmentRecord/interface/CSCAlignmentRcd.h" #include "CondFormats/AlignmentRecord/interface/CSCAlignmentErrorExtendedRcd.h" +#include "CondFormats/AlignmentRecord/interface/GEMAlignmentRcd.h" +#include "CondFormats/AlignmentRecord/interface/GEMAlignmentErrorExtendedRcd.h" #include "Geometry/CommonTopologies/interface/GeometryAligner.h" #include "CondFormats/Alignment/interface/DetectorGlobalPosition.h" #include "Geometry/Records/interface/MuonGeometryRecord.h" - +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" // // constants, enums and typedefs // @@ -36,13 +38,15 @@ // constructors and destructor // MuonAlignmentInputDB::MuonAlignmentInputDB() - : m_dtLabel(""), m_cscLabel(""), idealGeometryLabel("idealForInputDB"), m_getAPEs(false) {} + : m_dtLabel(""), m_cscLabel(""), m_gemLabel(""), idealGeometryLabel("idealForInputDB"), m_getAPEs(false) {} -MuonAlignmentInputDB::MuonAlignmentInputDB(std::string dtLabel, - std::string cscLabel, - std::string idealLabel, - bool getAPEs) - : m_dtLabel(dtLabel), m_cscLabel(cscLabel), idealGeometryLabel(idealLabel), m_getAPEs(getAPEs) {} +MuonAlignmentInputDB::MuonAlignmentInputDB( + std::string dtLabel, std::string cscLabel, std::string gemLabel, std::string idealLabel, bool getAPEs) + : m_dtLabel(dtLabel), + m_cscLabel(cscLabel), + m_gemLabel(gemLabel), + idealGeometryLabel(idealLabel), + m_getAPEs(getAPEs) {} // MuonAlignmentInputDB::MuonAlignmentInputDB(const MuonAlignmentInputDB& rhs) // { @@ -70,22 +74,28 @@ MuonAlignmentInputDB::~MuonAlignmentInputDB() {} AlignableMuon* MuonAlignmentInputDB::newAlignableMuon(const edm::EventSetup& iSetup) const { edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(idealGeometryLabel, dtGeometry); iSetup.get().get(idealGeometryLabel, cscGeometry); + iSetup.get().get(idealGeometryLabel, gemGeometry); edm::ESHandle dtAlignments; edm::ESHandle dtAlignmentErrorsExtended; edm::ESHandle cscAlignments; edm::ESHandle cscAlignmentErrorsExtended; + edm::ESHandle gemAlignments; + edm::ESHandle gemAlignmentErrorsExtended; edm::ESHandle globalPositionRcd; iSetup.get().get(m_dtLabel, dtAlignments); iSetup.get().get(m_cscLabel, cscAlignments); + iSetup.get().get(m_gemLabel, gemAlignments); iSetup.get().get(globalPositionRcd); if (m_getAPEs) { iSetup.get().get(m_dtLabel, dtAlignmentErrorsExtended); iSetup.get().get(m_cscLabel, cscAlignmentErrorsExtended); + iSetup.get().get(m_gemLabel, gemAlignmentErrorsExtended); GeometryAligner aligner; aligner.applyAlignments(&(*dtGeometry), @@ -96,8 +106,13 @@ AlignableMuon* MuonAlignmentInputDB::newAlignableMuon(const edm::EventSetup& iSe &(*cscAlignments), &(*cscAlignmentErrorsExtended), align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); + aligner.applyAlignments(&(*gemGeometry), + &(*gemAlignments), + &(*gemAlignmentErrorsExtended), + align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); + } else { - AlignmentErrorsExtended dtAlignmentErrorsExtended2, cscAlignmentErrorsExtended2; + AlignmentErrorsExtended dtAlignmentErrorsExtended2, cscAlignmentErrorsExtended2, gemAlignmentErrorsExtended2; for (std::vector::const_iterator i = dtAlignments->m_align.begin(); i != dtAlignments->m_align.end(); @@ -113,6 +128,13 @@ AlignableMuon* MuonAlignmentInputDB::newAlignableMuon(const edm::EventSetup& iSe AlignTransformErrorExtended empty_error(empty_matrix, i->rawId()); cscAlignmentErrorsExtended2.m_alignError.push_back(empty_error); } + for (std::vector::const_iterator i = gemAlignments->m_align.begin(); + i != gemAlignments->m_align.end(); + ++i) { + CLHEP::HepSymMatrix empty_matrix(3, 0); + AlignTransformErrorExtended empty_error(empty_matrix, i->rawId()); + gemAlignmentErrorsExtended2.m_alignError.push_back(empty_error); + } GeometryAligner aligner; aligner.applyAlignments(&(*dtGeometry), @@ -123,9 +145,13 @@ AlignableMuon* MuonAlignmentInputDB::newAlignableMuon(const edm::EventSetup& iSe &(*cscAlignments), &(cscAlignmentErrorsExtended2), align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); + aligner.applyAlignments(&(*gemGeometry), + &(*gemAlignments), + &(gemAlignmentErrorsExtended2), + align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Muon))); } - return new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + return new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); } // diff --git a/Alignment/MuonAlignment/src/MuonAlignmentInputMethod.cc b/Alignment/MuonAlignment/src/MuonAlignmentInputMethod.cc index 6944835fb106c..903baa50cc933 100644 --- a/Alignment/MuonAlignment/src/MuonAlignmentInputMethod.cc +++ b/Alignment/MuonAlignment/src/MuonAlignmentInputMethod.cc @@ -62,9 +62,11 @@ MuonAlignmentInputMethod::~MuonAlignmentInputMethod() {} AlignableMuon* MuonAlignmentInputMethod::newAlignableMuon(const edm::EventSetup& iSetup) const { edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(idealGeometryLabel, dtGeometry); iSetup.get().get(idealGeometryLabel, cscGeometry); - return new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + iSetup.get().get(idealGeometryLabel, gemGeometry); + return new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); } // diff --git a/Alignment/MuonAlignment/src/MuonAlignmentInputSurveyDB.cc b/Alignment/MuonAlignment/src/MuonAlignmentInputSurveyDB.cc index 186b0e049e868..eb0dacf2e2916 100644 --- a/Alignment/MuonAlignment/src/MuonAlignmentInputSurveyDB.cc +++ b/Alignment/MuonAlignment/src/MuonAlignmentInputSurveyDB.cc @@ -68,8 +68,10 @@ MuonAlignmentInputSurveyDB::~MuonAlignmentInputSurveyDB() {} AlignableMuon* MuonAlignmentInputSurveyDB::newAlignableMuon(const edm::EventSetup& iSetup) const { edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(idealGeometryLabel, dtGeometry); iSetup.get().get(idealGeometryLabel, cscGeometry); + iSetup.get().get(idealGeometryLabel, gemGeometry); edm::ESHandle dtSurvey; edm::ESHandle dtSurveyError; @@ -80,7 +82,7 @@ AlignableMuon* MuonAlignmentInputSurveyDB::newAlignableMuon(const edm::EventSetu iSetup.get().get(m_cscLabel, cscSurvey); iSetup.get().get(m_cscLabel, cscSurveyError); - AlignableMuon* output = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon* output = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); unsigned int theSurveyIndex = 0; const Alignments* theSurveyValues = &*dtSurvey; diff --git a/Alignment/MuonAlignment/src/MuonAlignmentInputXML.cc b/Alignment/MuonAlignment/src/MuonAlignmentInputXML.cc index f92ee9797b5f8..855317c929157 100644 --- a/Alignment/MuonAlignment/src/MuonAlignmentInputXML.cc +++ b/Alignment/MuonAlignment/src/MuonAlignmentInputXML.cc @@ -256,15 +256,17 @@ void MuonAlignmentInputXML::fillAliToIdeal(std::map &a AlignableMuon *MuonAlignmentInputXML::newAlignableMuon(const edm::EventSetup &iSetup) const { edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(idealGeometryLabel, dtGeometry); iSetup.get().get(idealGeometryLabel, cscGeometry); + iSetup.get().get(idealGeometryLabel, gemGeometry); - AlignableMuon *alignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon *alignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); std::map alignableNavigator; // real AlignableNavigators don't have const methods recursiveGetId(alignableNavigator, alignableMuon->DTBarrel()); recursiveGetId(alignableNavigator, alignableMuon->CSCEndcaps()); - AlignableMuon *ideal_alignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon *ideal_alignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); std::map ideal_alignableNavigator; // real AlignableNavigators don't have const methods recursiveGetId(ideal_alignableNavigator, ideal_alignableMuon->DTBarrel()); recursiveGetId(ideal_alignableNavigator, ideal_alignableMuon->CSCEndcaps()); diff --git a/Alignment/MuonAlignment/src/MuonAlignmentOutputXML.cc b/Alignment/MuonAlignment/src/MuonAlignmentOutputXML.cc index f630ea5fe678a..df148df1efc7e 100644 --- a/Alignment/MuonAlignment/src/MuonAlignmentOutputXML.cc +++ b/Alignment/MuonAlignment/src/MuonAlignmentOutputXML.cc @@ -121,10 +121,12 @@ void MuonAlignmentOutputXML::write(AlignableMuon *alignableMuon, const edm::Even if (m_relativeto == 1) { edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(idealGeometryLabel, dtGeometry); iSetup.get().get(idealGeometryLabel, cscGeometry); + iSetup.get().get(idealGeometryLabel, gemGeometry); - AlignableMuon ideal_alignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon ideal_alignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); align::Alignables ideal_barrels = ideal_alignableMuon.DTBarrel(); align::Alignables ideal_endcaps = ideal_alignableMuon.CSCEndcaps(); diff --git a/Alignment/MuonAlignment/src/MuonScenarioBuilder.cc b/Alignment/MuonAlignment/src/MuonScenarioBuilder.cc index 9e11bdf393a8a..5715d4f4104cd 100644 --- a/Alignment/MuonAlignment/src/MuonScenarioBuilder.cc +++ b/Alignment/MuonAlignment/src/MuonScenarioBuilder.cc @@ -21,10 +21,12 @@ #include "Alignment/CommonAlignment/interface/Alignable.h" #include "DataFormats/MuonDetId/interface/CSCTriggerNumbering.h" +#include "DataFormats/MuonDetId/interface/GEMDetId.h" + //__________________________________________________________________________________________________ MuonScenarioBuilder::MuonScenarioBuilder(Alignable* alignable) : // muon alignable IDs are (currently) independent of the geometry - MisalignmentScenarioBuilder(AlignableObjectId::Geometry::General) { + MisalignmentScenarioBuilder(AlignableObjectId::Geometry::PhaseI) { theAlignableMuon = dynamic_cast(alignable); if (!theAlignableMuon) @@ -46,12 +48,15 @@ void MuonScenarioBuilder::applyScenario(const edm::ParameterSet& scenario) { // DT Barrel const auto& dtBarrel = theAlignableMuon->DTBarrel(); this->decodeMovements_(theScenario, dtBarrel, "DTBarrel"); - // CSC Endcap + // Endcap const auto& cscEndcaps = theAlignableMuon->CSCEndcaps(); this->decodeMovements_(theScenario, cscEndcaps, "CSCEndcap"); + const auto& gemEndcaps = theAlignableMuon->GEMEndcaps(); + this->decodeMovements_(theScenario, gemEndcaps, "GEMEndcap"); this->moveDTSectors(theScenario); this->moveCSCSectors(theScenario); + this->moveGEMSectors(theScenario); this->moveMuon(theScenario); edm::LogInfo("TrackerScenarioBuilder") << "Applied modifications to " << theModifierCounter << " alignables"; @@ -318,9 +323,60 @@ void MuonScenarioBuilder::moveCSCSectors(const edm::ParameterSet& pSet) { } //______________________________________________________________________________________________________ +void MuonScenarioBuilder::moveGEMSectors(const edm::ParameterSet& pSet) { + const auto& GEMSuperChambers = theAlignableMuon->GEMSuperChambers(); + //Take Parameters + align::Scalars param = this->extractParameters(pSet, "GEMSectors"); + double scale_ = param[0]; + double scaleError_ = param[1]; + double phiX_ = param[2]; + double phiY_ = param[3]; + double phiZ_ = param[4]; + double dX_ = param[5]; + double dY_ = param[6]; + double dZ_ = param[7]; + + double dx = scale_ * dX_; + double dy = scale_ * dY_; + double dz = scale_ * dZ_; + double phix = scale_ * phiX_; + double phiy = scale_ * phiY_; + double phiz = scale_ * phiZ_; + double errorx = scaleError_ * dX_; + double errory = scaleError_ * dY_; + double errorz = scaleError_ * dZ_; + double errorphix = scaleError_ * phiX_; + double errorphiy = scaleError_ * phiY_; + double errorphiz = scaleError_ * phiZ_; + align::Scalars errorDisp; + errorDisp.push_back(errorx); + errorDisp.push_back(errory); + errorDisp.push_back(errorz); + align::Scalars errorRotation; + errorRotation.push_back(errorphix); + errorRotation.push_back(errorphiy); + errorRotation.push_back(errorphiz); + + //Create an index for the chambers in the alignable vector + for (const auto& iter : GEMSuperChambers) { + align::Scalars disp; + align::Scalars rotation; + const std::vector disp_ = theMuonModifier.gaussianRandomVector(dx, dy, dz); + disp.push_back(disp_[0]); + disp.push_back(disp_[1]); + disp.push_back(disp_[2]); + const std::vector rotation_ = theMuonModifier.flatRandomVector(phix, phiy, phiz); + rotation.push_back(rotation_[0]); + rotation.push_back(rotation_[1]); + rotation.push_back(rotation_[2]); + this->moveChamberInSector(iter, disp, rotation, errorDisp, errorRotation); + } +} + void MuonScenarioBuilder::moveMuon(const edm::ParameterSet& pSet) { const auto& DTbarrel = theAlignableMuon->DTBarrel(); const auto& CSCendcaps = theAlignableMuon->CSCEndcaps(); + const auto& GEMendcaps = theAlignableMuon->GEMEndcaps(); //Take Parameters align::Scalars param = this->extractParameters(pSet, "Muon"); double scale_ = param[0]; @@ -385,6 +441,12 @@ void MuonScenarioBuilder::moveMuon(const edm::ParameterSet& pSet) { theMuonModifier.addAlignmentPositionError(iter, errorx, errory, errorz); theMuonModifier.addAlignmentPositionErrorFromRotation(iter, errorphix, errorphiy, errorphiz); } + for (const auto& iter : GEMendcaps) { + theMuonModifier.moveAlignable(iter, false, true, disp[0], disp[1], disp[2]); + theMuonModifier.rotateAlignable(iter, false, true, rotation[0], rotation[1], rotation[2]); + theMuonModifier.addAlignmentPositionError(iter, errorx, errory, errorz); + theMuonModifier.addAlignmentPositionErrorFromRotation(iter, errorphix, errorphiy, errorphiz); + } } //______________________________________________________________________________________________________ diff --git a/Alignment/MuonAlignment/test/TestMuonHierarchy.cpp b/Alignment/MuonAlignment/test/TestMuonHierarchy.cpp index 1f2a25e87e641..6e2360a419706 100644 --- a/Alignment/MuonAlignment/test/TestMuonHierarchy.cpp +++ b/Alignment/MuonAlignment/test/TestMuonHierarchy.cpp @@ -46,16 +46,19 @@ class TestMuonHierarchy : public edm::EDAnalyzer { std::unique_ptr alignableMuon_; std::string leaders_, blank_, filled_; + + edm::ESGetToken esTokenDT_; + edm::ESGetToken esTokenCSC_; + edm::ESGetToken esTokenGEM_; }; void TestMuonHierarchy::analyze(const edm::Event&, const edm::EventSetup& setup) { edm::LogInfo("MuonHierarchy") << "Starting!"; - edm::ESHandle dtGeometry; - edm::ESHandle cscGeometry; - setup.get().get(dtGeometry); - setup.get().get(cscGeometry); + edm::ESHandle dtGeometry = setup.getHandle(esTokenDT_); + edm::ESHandle cscGeometry = setup.getHandle(esTokenCSC_); + edm::ESHandle gemGeometry = setup.getHandle(esTokenGEM_); - alignableMuon_ = std::make_unique(&(*dtGeometry), &(*cscGeometry)); + alignableMuon_ = std::make_unique(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); leaders_ = ""; blank_ = " "; // These two... diff --git a/Alignment/MuonAlignment/test/TestReader.cpp b/Alignment/MuonAlignment/test/TestReader.cpp index 09f7fa10d6683..ba4b9a43633c2 100644 --- a/Alignment/MuonAlignment/test/TestReader.cpp +++ b/Alignment/MuonAlignment/test/TestReader.cpp @@ -59,7 +59,10 @@ class TestMuonReader : public edm::EDAnalyzer { TFile* theFile; float x, y, z, phi, theta, length, thick, width; TRotMatrix* rot; - std::string idealGeometryLabel; + + edm::ESGetToken esTokenDT_; + edm::ESGetToken esTokenCSC_; + edm::ESGetToken esTokenGEM_; }; // @@ -77,7 +80,9 @@ TestMuonReader::TestMuonReader(const edm::ParameterSet& iConfig) thick(0.), width(0.), rot(0), - idealGeometryLabel("idealForTestReader") {} + esTokenDT_(esConsumes(edm::ESInputTag("", "idealForTestReader"))), + esTokenCSC_(esConsumes(edm::ESInputTag("", "idealForTestReader"))), + esTokenGEM_(esConsumes(edm::ESInputTag("", "idealForTestReader"))) {} TestMuonReader::~TestMuonReader() {} @@ -105,12 +110,11 @@ align::EulerAngles TestMuonReader::toPhiXYZ(const align::RotationType& rot) { void TestMuonReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { // first, get chamber alignables from ideal geometry: - edm::ESHandle dtGeometry; - edm::ESHandle cscGeometry; - iSetup.get().get(idealGeometryLabel, dtGeometry); - iSetup.get().get(idealGeometryLabel, cscGeometry); + edm::ESHandle dtGeometry = iSetup.getHandle(esTokenDT_); + edm::ESHandle cscGeometry = iSetup.getHandle(esTokenCSC_); + edm::ESHandle gemGeometry = iSetup.getHandle(esTokenGEM_); - AlignableMuon ideal_alignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon ideal_alignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); const auto& ideal_barrels = ideal_alignableMuon.DTBarrel(); const auto& ideal_endcaps = ideal_alignableMuon.CSCEndcaps(); diff --git a/Alignment/MuonAlignment/test/TestRotation.cpp b/Alignment/MuonAlignment/test/TestRotation.cpp index 60dd4ca792dfa..51a9294b20513 100644 --- a/Alignment/MuonAlignment/test/TestRotation.cpp +++ b/Alignment/MuonAlignment/test/TestRotation.cpp @@ -52,8 +52,9 @@ class TestRotation : public edm::EDAnalyzer { float x, y, z, phi, theta, length, thick, width; TRotMatrix* dir; - // typedef Surface::RotationType RotationType; - // typedef Surface::PositionType PositionType; + edm::ESGetToken esTokenDT_; + edm::ESGetToken esTokenCSC_; + edm::ESGetToken esTokenGEM_; }; // @@ -105,12 +106,11 @@ void TestRotation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet // // Retrieve ideal geometry from event setup // - edm::ESHandle dtGeometry; - edm::ESHandle cscGeometry; - iSetup.get().get(dtGeometry); - iSetup.get().get(cscGeometry); + edm::ESHandle dtGeometry = iSetup.getHandle(esTokenDT_); + edm::ESHandle cscGeometry = iSetup.getHandle(esTokenCSC_); + edm::ESHandle gemGeometry = iSetup.getHandle(esTokenGEM_); - AlignableMuon* theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon* theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); // Apply alignment diff --git a/Alignment/MuonAlignment/test/TestTranslation.cpp b/Alignment/MuonAlignment/test/TestTranslation.cpp index 893989583c075..758d445308924 100644 --- a/Alignment/MuonAlignment/test/TestTranslation.cpp +++ b/Alignment/MuonAlignment/test/TestTranslation.cpp @@ -109,10 +109,12 @@ void TestTranslation::analyze(const edm::Event& iEvent, const edm::EventSetup& i // edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(dtGeometry); iSetup.get().get(cscGeometry); + iSetup.get().get(gemGeometry); - AlignableMuon* theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon* theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); // Apply alignment for (const auto& iter : theAlignableMuon->DTChambers()) diff --git a/Alignment/MuonAlignment/test/convertSQLitetoXML_cfg.py b/Alignment/MuonAlignment/test/convertSQLitetoXML_cfg.py new file mode 100644 index 0000000000000..3a3ac8ee39380 --- /dev/null +++ b/Alignment/MuonAlignment/test/convertSQLitetoXML_cfg.py @@ -0,0 +1,127 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("CONVERT") +process.source = cms.Source("EmptySource") +process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1)) + +process.load("Configuration.Geometry.GeometryIdeal_cff") +process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") +process.load('Configuration.Geometry.GeometryExtended2021_cff') + +process.DTGeometryAlInputDB = cms.ESProducer("DTGeometryESModule", + appendToDataLabel = cms.string('idealForInputDB'), + applyAlignment = cms.bool(False), + alignmentsLabel = cms.string(''), + fromDDD = cms.bool(True) +) + +process.CSCGeometryAlInputDB = cms.ESProducer("CSCGeometryESModule", + appendToDataLabel = cms.string('idealForInputDB'), + debugV = cms.untracked.bool(False), + useGangedStripsInME1a = cms.bool(False), + alignmentsLabel = cms.string(''), + useOnlyWiresInME1a = cms.bool(False), + useRealWireGeometry = cms.bool(True), + useCentreTIOffsets = cms.bool(False), + applyAlignment = cms.bool(False), + fromDDD = cms.bool(True), + fromDD4hep = cms.bool(False) +) + +process.GEMGeometryAlInputDB = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForInputDB'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) + +process.DTGeometryAlOutputXML = cms.ESProducer("DTGeometryESModule", + appendToDataLabel = cms.string('idealForOutputXML'), + applyAlignment = cms.bool(False), + alignmentsLabel = cms.string(''), + fromDDD = cms.bool(True) +) + +process.CSCGeometryAlOutputXML = cms.ESProducer("CSCGeometryESModule", + appendToDataLabel = cms.string('idealForOutputXML'), + debugV = cms.untracked.bool(False), + useGangedStripsInME1a = cms.bool(False), + alignmentsLabel = cms.string(''), + useOnlyWiresInME1a = cms.bool(False), + useRealWireGeometry = cms.bool(True), + useCentreTIOffsets = cms.bool(False), + applyAlignment = cms.bool(False), + fromDDD = cms.bool(True), + fromDD4hep = cms.bool(False) +) + +process.GEMGeometryAlOutputXML = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForOutputXML'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) + +process.load("CondCore.DBCommon.CondDBSetup_cfi") +process.PoolDBESSource = cms.ESSource("PoolDBESSource", + process.CondDBSetup, + connect = cms.string("sqlite_file:Alignments.db"), + toGet = cms.VPSet(cms.PSet( + record = cms.string('DTAlignmentRcd'), + tag = cms.string('DT100InversepbScenario') + ), + cms.PSet( + record = cms.string('DTAlignmentErrorExtendedRcd'), + tag = cms.string('DT100InversepbScenarioErrors') + ), + cms.PSet( + record = cms.string('CSCAlignmentRcd'), + tag = cms.string('CSC100InversepbScenario') + ), + cms.PSet( + record = cms.string('CSCAlignmentErrorExtendedRcd'), + tag = cms.string('CSC100InversepbScenarioErrors') + ), + cms.PSet( + record = cms.string('GEMAlignmentRcd'), + tag = cms.string('GEM') + ), + cms.PSet( + record = cms.string('GEMAlignmentErrorExtendedRcd'), + tag = cms.string('test') + ))) +process.inertGlobalPositionRcd = cms.ESSource("PoolDBESSource", + process.CondDBSetup, + connect = cms.string("sqlite_file:inertGlobalPositionRcd.StdTags.746p3.DBv2.db"), + toGet = cms.VPSet(cms.PSet(record = cms.string("GlobalPositionRcd"), tag = cms.string("inertGlobalPositionRcd")))) +process.MuonGeometryDBConverter = cms.EDAnalyzer("MuonGeometryDBConverter", + input = cms.string("db"), + dtLabel = cms.string(""), + cscLabel = cms.string(""), + gemLabel = cms.string(""), + shiftErr = cms.double(1000.), + angleErr = cms.double(6.28), + getAPEs = cms.bool(True), + output = cms.string("xml"), + outputXML = cms.PSet( + fileName = cms.string("REPLACEME.xml"), + relativeto = cms.string("ideal"), + survey = cms.bool(False), + rawIds = cms.bool(False), + eulerAngles = cms.bool(False), + precision = cms.int32(10), + suppressDTBarrel = cms.untracked.bool(True), + suppressDTWheels = cms.untracked.bool(True), + suppressDTStations = cms.untracked.bool(True), + suppressDTChambers = cms.untracked.bool(False), + suppressDTSuperLayers = cms.untracked.bool(False), + suppressDTLayers = cms.untracked.bool(False), + suppressCSCEndcaps = cms.untracked.bool(True), + suppressCSCStations = cms.untracked.bool(True), + suppressCSCRings = cms.untracked.bool(True), + suppressCSCChambers = cms.untracked.bool(False), + suppressCSCLayers = cms.untracked.bool(False))) + +process.Path = cms.Path(process.MuonGeometryDBConverter) diff --git a/Alignment/MuonAlignment/test/muonGeometryDBConverter_cfg.py b/Alignment/MuonAlignment/test/muonGeometryDBConverter_cfg.py index 84f0fcedbba19..c3aa0073be6eb 100644 --- a/Alignment/MuonAlignment/test/muonGeometryDBConverter_cfg.py +++ b/Alignment/MuonAlignment/test/muonGeometryDBConverter_cfg.py @@ -28,7 +28,8 @@ # setting up the process process = cms.Process("CONVERT") process.load("Configuration.StandardSequences.MagneticField_cff") -process.load("Configuration.Geometry.GeometryIdeal_cff") +process.load("Geometry.MuonCommonData.muonIdealGeometryXML_cfi") +process.load('Configuration.Geometry.GeometryExtended2021_cff') process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.load("Alignment.MuonAlignment.muonGeometryDBConverter_cfi") @@ -53,6 +54,14 @@ fromDD4hep = cms.bool(False) ) +process.GEMGeometryAlInputMethod = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForInputMethod'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) + process.DTGeometryAlInputDB = cms.ESProducer("DTGeometryESModule", appendToDataLabel = cms.string('idealForInputDB'), applyAlignment = cms.bool(False), @@ -73,6 +82,14 @@ fromDD4hep = cms.bool(False) ) +process.GEMGeometryAlInputDB = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForInputDB'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) + process.DTGeometryAlOutputXML = cms.ESProducer("DTGeometryESModule", appendToDataLabel = cms.string('idealForOutputXML'), applyAlignment = cms.bool(False), @@ -93,6 +110,14 @@ fromDD4hep = cms.bool(False) ) +process.GEMGeometryAlOutputXML = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForOutputXML'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) + process.DTGeometryAlInputXML = cms.ESProducer("DTGeometryESModule", appendToDataLabel = cms.string('idealForInputXML'), applyAlignment = cms.bool(False), @@ -113,8 +138,13 @@ fromDD4hep = cms.bool(False) ) - - +process.GEMGeometryAlInputXML = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForInputXML'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) ################################################################################ # parameters to configure: from Configuration.AlCa.GlobalTag import GlobalTag @@ -135,7 +165,13 @@ tag = cms.string("CSCAlignmentRcd")), cms.PSet(connect = cms.string("sqlite_file:"+options.inputFile), record = cms.string("CSCAlignmentErrorExtendedRcd"), - tag = cms.string("CSCAlignmentErrorExtendedRcd")) + tag = cms.string("CSCAlignmentErrorExtendedRcd")), + cms.PSet(connect = cms.string("sqlite_file:"+options.inputFile), + record = cms.string("GEMAlignmentRcd"), + tag = cms.string("GEMAlignmentRcd")), + cms.PSet(connect = cms.string("sqlite_file:"+options.inputFile), + record = cms.string("GEMAlignmentErrorExtendedRcd"), + tag = cms.string("GEMAlignmentErrorExtendedRcd")) ]) elif options.input == "xml": process.muonGeometryDBConverter.fileName = options.inputFile @@ -154,6 +190,10 @@ tag = cms.string("CSCAlignmentRcd")), cms.PSet(record = cms.string("CSCAlignmentErrorExtendedRcd"), tag = cms.string("CSCAlignmentErrorExtendedRcd")), + cms.PSet(record = cms.string("GEMAlignmentRcd"), + tag = cms.string("GEMAlignmentRcd")), + cms.PSet(record = cms.string("GEMAlignmentErrorExtendedRcd"), + tag = cms.string("GEMAlignmentErrorExtendedRcd")) ) ) process.PoolDBOutputService.connect = "sqlite_file:"+options.outputFile diff --git a/Alignment/MuonAlignment/test/test-misalign_cfg.py b/Alignment/MuonAlignment/test/test-misalign_cfg.py index 48bd4608056fd..89ca87c3b2824 100644 --- a/Alignment/MuonAlignment/test/test-misalign_cfg.py +++ b/Alignment/MuonAlignment/test/test-misalign_cfg.py @@ -4,10 +4,9 @@ # -- Load default module/services configurations -- // # Message logger service process.load("FWCore.MessageService.MessageLogger_cfi") - -# Ideal DT & CSC geometry process.load("Geometry.MuonCommonData.muonIdealGeometryXML_cfi") process.load("Geometry.MuonNumbering.muonNumberingInitialization_cfi") +process.load('Configuration.Geometry.GeometryExtended2021_cff') # Misalignment example scenario producer import Alignment.MuonAlignment.Scenarios_cff as _MuonScenarios @@ -20,11 +19,6 @@ saveToDbase = cms.untracked.bool(True) ) -# or standard stuff -# Reco geometry producer -#process.load("Geometry.DTGeometry.dtGeometry_cfi") -#process.load("Geometry.CSCGeometry.cscGeometry_cfi") - process.MisalignedMuon.scenario = _MuonScenarios.Muon100InversepbScenario process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) @@ -52,6 +46,14 @@ fromDD4hep = cms.bool(False) ) +process.GEMGeometryMisalignedMuonProducer = cms.ESProducer("GEMGeometryESModule", + appendToDataLabel = cms.string('idealForMuonMisalignedProducer'), + fromDDD = cms.bool(True), + fromDD4Hep = cms.bool(False), + alignmentsLabel = cms.string(''), + applyAlignment = cms.bool(False) +) + # Database output service if you want to store soemthing in MisalignedMuon from CondCore.DBCommon.CondDBSetup_cfi import CondDBSetup @@ -72,7 +74,16 @@ cms.PSet( record = cms.string('CSCAlignmentErrorExtendedRcd'), tag = cms.string('CSC100InversepbScenarioErrors') + ), + cms.PSet( + record = cms.string('GEMAlignmentRcd'), + tag = cms.string('GEM') + ), + cms.PSet( + record = cms.string('GEMAlignmentErrorExtendedRcd'), + tag = cms.string('test') )), + connect = cms.string('sqlite_file:Alignments.db') ) @@ -80,7 +91,8 @@ fileName = cms.untracked.string('misaligment.root') ) -process.p1 = cms.Path(process.MisalignedMuon+process.prod) +#process.p1 = cms.Path(process.MisalignedMuon+process.prod) +process.p1 = cms.Path(process.MisalignedMuon) process.MessageLogger.cout = cms.untracked.PSet( threshold = cms.untracked.string('INFO'), default = cms.untracked.PSet( diff --git a/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc b/Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc index 3d3fed6a9ea01..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" @@ -3710,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); @@ -3730,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/test/testPVValidation.ini b/Alignment/OfflineValidation/test/testPVValidation.ini index 77ec285ff8315..86c1e2f617eda 100644 --- a/Alignment/OfflineValidation/test/testPVValidation.ini +++ b/Alignment/OfflineValidation/test/testPVValidation.ini @@ -24,7 +24,7 @@ ttrhtype: WithAngleAndTemplate [Conditions:PromptGT] jobname: testingPromptGT -gt: auto:run3_data_promptlike +gt: auto:run3_data_prompt allFromGT: True applyextracond: False alignmentdb: frontier://FrontierProd/CMS_CONDITIONS diff --git a/Alignment/SurveyAnalysis/plugins/SurveyInputCSCfromPins.cc b/Alignment/SurveyAnalysis/plugins/SurveyInputCSCfromPins.cc index 376226d86e32e..6aebc19aa4871 100644 --- a/Alignment/SurveyAnalysis/plugins/SurveyInputCSCfromPins.cc +++ b/Alignment/SurveyAnalysis/plugins/SurveyInputCSCfromPins.cc @@ -162,10 +162,12 @@ void SurveyInputCSCfromPins::analyze(const edm::Event &, const edm::EventSetup & edm::ESHandle dtGeometry; edm::ESHandle cscGeometry; + edm::ESHandle gemGeometry; iSetup.get().get(dtGeometry); iSetup.get().get(cscGeometry); + iSetup.get().get(gemGeometry); - AlignableMuon *theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry)); + AlignableMuon *theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry)); AlignableNavigator *theAlignableNavigator = new AlignableNavigator(theAlignableMuon); const auto &theEndcaps = theAlignableMuon->CSCEndcaps(); diff --git a/Alignment/TrackerAlignment/src/AlignableTracker.cc b/Alignment/TrackerAlignment/src/AlignableTracker.cc index 4483f98f4e312..6dede7a0398ed 100644 --- a/Alignment/TrackerAlignment/src/AlignableTracker.cc +++ b/Alignment/TrackerAlignment/src/AlignableTracker.cc @@ -16,7 +16,7 @@ AlignableTracker ::AlignableTracker(const TrackerGeometry* trackerGeometry, cons AlignableComposite(0, align::Tracker, RotationType()), tTopo_(trackerTopology), trackerNameSpace_(trackerTopology), - alignableObjectId_(trackerGeometry, nullptr, nullptr) { + alignableObjectId_(trackerGeometry, nullptr, nullptr, nullptr) { AlignableTrackerBuilder builder(trackerGeometry, trackerTopology); builder.buildAlignables(this); trackerNameSpace_ = builder.trackerNameSpace(); diff --git a/Alignment/TrackerAlignment/src/AlignableTrackerBuilder.cc b/Alignment/TrackerAlignment/src/AlignableTrackerBuilder.cc index 0ce45578acc58..de9c47766e6bd 100644 --- a/Alignment/TrackerAlignment/src/AlignableTrackerBuilder.cc +++ b/Alignment/TrackerAlignment/src/AlignableTrackerBuilder.cc @@ -25,7 +25,7 @@ AlignableTrackerBuilder ::AlignableTrackerBuilder(const TrackerGeometry* tracker const TrackerTopology* trackerTopology) : trackerGeometry_(trackerGeometry), trackerTopology_(trackerTopology), - alignableObjectId_(trackerGeometry, nullptr, nullptr), + alignableObjectId_(trackerGeometry, nullptr, nullptr, nullptr), alignableMap_(nullptr), trackerAlignmentLevelBuilder_(trackerTopology, trackerGeometry) { std::ostringstream ss; diff --git a/Alignment/TrackerAlignment/src/TrackerAlignmentLevelBuilder.cc b/Alignment/TrackerAlignment/src/TrackerAlignmentLevelBuilder.cc index fd016725dba2f..402618272ef91 100644 --- a/Alignment/TrackerAlignment/src/TrackerAlignmentLevelBuilder.cc +++ b/Alignment/TrackerAlignment/src/TrackerAlignmentLevelBuilder.cc @@ -17,7 +17,7 @@ TrackerAlignmentLevelBuilder ::TrackerAlignmentLevelBuilder(const TrackerTopology* trackerTopology, const TrackerGeometry* trackerGeometry) : trackerTopology_(trackerTopology), - alignableObjectId_(trackerGeometry, nullptr, nullptr), + alignableObjectId_(trackerGeometry, nullptr, nullptr, nullptr), trackerNameSpace_(trackerTopology) {} //_____________________________________________________________________________ diff --git a/Alignment/TrackerAlignment/test/TrackerGeometryAnalyzer.cc b/Alignment/TrackerAlignment/test/TrackerGeometryAnalyzer.cc index 9a34a7985af39..5dc9d448e6478 100644 --- a/Alignment/TrackerAlignment/test/TrackerGeometryAnalyzer.cc +++ b/Alignment/TrackerAlignment/test/TrackerGeometryAnalyzer.cc @@ -78,7 +78,7 @@ void TrackerGeometryAnalyzer ::setTrackerGeometry(const edm::EventSetup& setup) TrackerGeomBuilderFromGeometricDet trackerGeometryBuilder; trackerGeometry = trackerGeometryBuilder.build(&(*geometricDet), *trackerParams, trackerTopology); - alignableObjectId_ = AlignableObjectId{trackerGeometry, nullptr, nullptr}; + alignableObjectId_ = AlignableObjectId{trackerGeometry, nullptr, nullptr, nullptr}; } //_____________________________________________________________________________ diff --git a/CUDADataFormats/HGCal/BuildFile.xml b/CUDADataFormats/HGCal/BuildFile.xml new file mode 100644 index 0000000000000..60e10acaa6829 --- /dev/null +++ b/CUDADataFormats/HGCal/BuildFile.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h b/CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h new file mode 100644 index 0000000000000..1096f88b37c49 --- /dev/null +++ b/CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h @@ -0,0 +1,16 @@ +#ifndef CUDADataFormats_HGCal_ConstHGCRecHitSoA_h +#define CUDADataFormats_HGCal_ConstHGCRecHitSoA_h + +#include + +class ConstHGCRecHitSoA { //const version of the HGCRecHit class (data in the event should be immutable) +public: + float const *energy_; //calibrated energy of the rechit + float const *time_; //time jitter of the UncalibRecHit + float const *timeError_; //time resolution + uint32_t const *id_; //rechit detId + uint32_t const *flagBits_; //rechit flags describing its status (DataFormats/HGCRecHit/interface/HGCRecHit.h) + uint8_t const *son_; //signal over noise +}; + +#endif //CUDADataFormats_HGCal_ConstHGCRecHitSoA_h diff --git a/CUDADataFormats/HGCal/interface/HGCConditions.h b/CUDADataFormats/HGCal/interface/HGCConditions.h new file mode 100644 index 0000000000000..cef834590c661 --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCConditions.h @@ -0,0 +1,203 @@ +#ifndef CUDADataFormats_HGCal_HGCConditions_h +#define CUDADataFormats_HGCal_HGCConditions_h + +#include +#include +#include +#include + +class HeterogeneousHGCSiliconDetId { +public: + constexpr HeterogeneousHGCSiliconDetId(uint32_t id) : id_(id) {} + constexpr std::int32_t type() { return (id_ >> kHGCalTypeOffset) & kHGCalTypeMask; } + constexpr std::int32_t zside() { return (((id_ >> kHGCalZsideOffset) & kHGCalZsideMask) ? -1 : 1); } + constexpr std::int32_t layer() { return (id_ >> kHGCalLayerOffset) & kHGCalLayerMask; } + constexpr std::int32_t waferUAbs() { return (id_ >> kHGCalWaferUOffset) & kHGCalWaferUMask; } + constexpr std::int32_t waferVAbs() { return (id_ >> kHGCalWaferVOffset) & kHGCalWaferVMask; } + constexpr std::int32_t waferU() { + return (((id_ >> kHGCalWaferUSignOffset) & kHGCalWaferUSignMask) ? -waferUAbs() : waferUAbs()); + } + constexpr std::int32_t waferV() { + return (((id_ >> kHGCalWaferVSignOffset) & kHGCalWaferVSignMask) ? -waferVAbs() : waferVAbs()); + } + constexpr std::int32_t waferX() { return (-2 * waferU() + waferV()); } + constexpr std::int32_t waferY() { return (2 * waferV()); } + constexpr std::int32_t cellU() { return (id_ >> kHGCalCellUOffset) & kHGCalCellUMask; } + constexpr std::int32_t cellV() { return (id_ >> kHGCalCellVOffset) & kHGCalCellVMask; } + constexpr std::int32_t nCellsSide() { return (type() == HGCalFine) ? HGCalFineN : HGCalCoarseN; } + constexpr std::int32_t cellX() { + const std::int32_t N = nCellsSide(); + return (3 * (cellV() - N) + 2); + } + constexpr std::int32_t cellY() { + const std::int32_t N = nCellsSide(); + return (2 * cellU() - (N + cellV())); + } + +private: + std::uint32_t id_; + enum waferType { HGCalFine = 0, HGCalCoarseThin = 1, HGCalCoarseThick = 2 }; + static constexpr std::int32_t HGCalFineN = 12; + static constexpr std::int32_t HGCalCoarseN = 8; + static constexpr std::int32_t kHGCalCellUOffset = 0; + static constexpr std::int32_t kHGCalCellUMask = 0x1F; + static constexpr std::int32_t kHGCalCellVOffset = 5; + static constexpr std::int32_t kHGCalCellVMask = 0x1F; + static constexpr std::int32_t kHGCalWaferUOffset = 10; + static constexpr std::int32_t kHGCalWaferUMask = 0xF; + static constexpr std::int32_t kHGCalWaferUSignOffset = 14; + static constexpr std::int32_t kHGCalWaferUSignMask = 0x1; + static constexpr std::int32_t kHGCalWaferVOffset = 15; + static constexpr std::int32_t kHGCalWaferVMask = 0xF; + static constexpr std::int32_t kHGCalWaferVSignOffset = 19; + static constexpr std::int32_t kHGCalWaferVSignMask = 0x1; + static constexpr std::int32_t kHGCalLayerOffset = 20; + static constexpr std::int32_t kHGCalLayerMask = 0x1F; + static constexpr std::int32_t kHGCalZsideOffset = 25; + static constexpr std::int32_t kHGCalZsideMask = 0x1; + static constexpr std::int32_t kHGCalTypeOffset = 26; + static constexpr std::int32_t kHGCalTypeMask = 0x3; +}; + +class HeterogeneousHGCScintillatorDetId { +public: + constexpr HeterogeneousHGCScintillatorDetId(uint32_t id) : id_(id) {} + constexpr std::int32_t type() { return (id_ >> kHGCalTypeOffset) & kHGCalTypeMask; } + constexpr std::int32_t zside() const { return (((id_ >> kHGCalZsideOffset) & kHGCalZsideMask) ? -1 : 1); } + constexpr std::int32_t layer() const { return (id_ >> kHGCalLayerOffset) & kHGCalLayerMask; } + +private: + std::uint32_t id_; + static constexpr std::uint32_t kHGCalPhiOffset = 0; + static constexpr std::uint32_t kHGCalPhiMask = 0x1FF; + static constexpr std::uint32_t kHGCalRadiusOffset = 9; + static constexpr std::uint32_t kHGCalRadiusMask = 0xFF; + static constexpr std::uint32_t kHGCalLayerOffset = 17; + static constexpr std::uint32_t kHGCalLayerMask = 0x1F; + static constexpr std::uint32_t kHGCalTriggerOffset = 22; + static constexpr std::uint32_t kHGCalTriggerMask = 0x1; + static constexpr std::uint32_t kHGCalZsideOffset = 25; + static constexpr std::uint32_t kHGCalZsideMask = 0x1; + static constexpr std::uint32_t kHGCalTypeOffset = 26; + static constexpr std::uint32_t kHGCalTypeMask = 0x3; +}; + +namespace hgcal_conditions { + namespace parameters { + enum class HeterogeneousHGCalEEParametersType { Double, Int32_t }; + enum class HeterogeneousHGCalHEFParametersType { Double, Int32_t }; + enum class HeterogeneousHGCalHEBParametersType { Double, Int32_t }; + + const std::array typesEE = {{HeterogeneousHGCalEEParametersType::Double, + HeterogeneousHGCalEEParametersType::Double, + HeterogeneousHGCalEEParametersType::Double, + HeterogeneousHGCalEEParametersType::Double, + HeterogeneousHGCalEEParametersType::Int32_t}}; + + const std::array typesHEF = { + {HeterogeneousHGCalHEFParametersType::Double, + HeterogeneousHGCalHEFParametersType::Double, + HeterogeneousHGCalHEFParametersType::Double, + HeterogeneousHGCalHEFParametersType::Double, + HeterogeneousHGCalHEFParametersType::Int32_t}}; + + const std::array typesHEB = { + {HeterogeneousHGCalHEBParametersType::Double, HeterogeneousHGCalHEBParametersType::Int32_t}}; + + class HeterogeneousHGCalEEParameters { + public: + //indexed by cell number + double *cellFineX_; + double *cellFineY_; + double *cellCoarseX_; + double *cellCoarseY_; + //index by wafer number + std::int32_t *waferTypeL_; + }; + class HeterogeneousHGCalHEFParameters { + public: + //indexed by cell number + double *cellFineX_; + double *cellFineY_; + double *cellCoarseX_; + double *cellCoarseY_; + //index by wafer number + std::int32_t *waferTypeL_; + }; + class HeterogeneousHGCalHEBParameters { + public: + double *testD_; + std::int32_t *testI_; + }; + + } //namespace parameters + + namespace positions { + + enum class HeterogeneousHGCalPositionsType { Float, Int32_t, Uint32_t }; + + const std::vector types = {HeterogeneousHGCalPositionsType::Float, + HeterogeneousHGCalPositionsType::Float, + HeterogeneousHGCalPositionsType::Float, + HeterogeneousHGCalPositionsType::Int32_t, + HeterogeneousHGCalPositionsType::Int32_t, + HeterogeneousHGCalPositionsType::Int32_t, + HeterogeneousHGCalPositionsType::Uint32_t}; + + struct HGCalPositionsMapping { + std::vector zLayer; //z position per layer + std::vector nCellsLayer; //#cells per layer + std::vector nCellsWaferUChunk; //#cells per U wafer (each in turn including all V wafers) + std::vector nCellsHexagon; //#cells per V wafer + std::vector detid; + //variables required for calculating the positions (x,y) from the detid in the GPU + float waferSize; + float sensorSeparation; + //variables required for the mapping of detid -> cell in the geometry + std::int32_t firstLayer; + std::int32_t lastLayer; + std::int32_t waferMax; + std::int32_t waferMin; + }; + + struct HeterogeneousHGCalPositionsMapping { + //the x, y and z positions will not be filled in the CPU + float *x; + float *y; + float *zLayer; + std::int32_t *nCellsLayer; + std::int32_t *nCellsWaferUChunk; + std::int32_t *nCellsHexagon; + std::uint32_t *detid; + //variables required for calculating the positions (x,y) from the detid in the GPU + float waferSize; + float sensorSeparation; + //variables required for the mapping of detid -> cell in the geometry + std::int32_t firstLayer; + std::int32_t lastLayer; + std::int32_t waferMax; + std::int32_t waferMin; + }; + + } //namespace positions + + struct HeterogeneousEEConditionsESProduct { + parameters::HeterogeneousHGCalEEParameters params; + }; + struct HeterogeneousHEFConditionsESProduct { + parameters::HeterogeneousHGCalHEFParameters params; + //positions::HeterogeneousHGCalPositionsMapping posmap; + //size_t nelems_posmap; + }; + struct HeterogeneousHEBConditionsESProduct { + parameters::HeterogeneousHGCalHEBParameters params; + }; + + struct HeterogeneousHEFCellPositionsConditionsESProduct { + positions::HeterogeneousHGCalPositionsMapping posmap; + std::size_t nelems_posmap; + }; + +} // namespace hgcal_conditions + +#endif //CUDADataFormats_HGCal_HGCConditions_h diff --git a/CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h b/CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h new file mode 100644 index 0000000000000..b2d4d01bb5020 --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h @@ -0,0 +1,65 @@ +#ifndef CUDADAtaFormats_HGCal_HGCRecHitCPUProduct_H +#define CUDADAtaFormats_HGCal_HGCRecHitCPUProduct_H + +#include +#include + +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h" + +class HGCRecHitCPUProduct { +public: + HGCRecHitCPUProduct() = default; + explicit HGCRecHitCPUProduct(uint32_t nhits, const cudaStream_t &stream) : nhits_(nhits) { + size_tot_ = std::accumulate(sizes_.begin(), sizes_.end(), 0); //this might be done at compile time + pad_ = ((nhits - 1) / 32 + 1) * 32; //align to warp boundary (assumption: warpSize = 32) + mem_ = cms::cuda::make_host_unique(pad_ * size_tot_, stream); + } + ~HGCRecHitCPUProduct() = default; + + HGCRecHitCPUProduct(const HGCRecHitCPUProduct &) = delete; + HGCRecHitCPUProduct &operator=(const HGCRecHitCPUProduct &) = delete; + HGCRecHitCPUProduct(HGCRecHitCPUProduct &&) = default; + HGCRecHitCPUProduct &operator=(HGCRecHitCPUProduct &&) = default; + + HGCRecHitSoA get() { + HGCRecHitSoA soa; + soa.energy_ = reinterpret_cast(mem_.get()); + soa.time_ = soa.energy_ + pad_; + soa.timeError_ = soa.time_ + pad_; + soa.id_ = reinterpret_cast(soa.timeError_ + pad_); + soa.flagBits_ = soa.id_ + pad_; + soa.son_ = reinterpret_cast(soa.flagBits_ + pad_); + soa.nbytes_ = size_tot_; + soa.nhits_ = nhits_; + soa.pad_ = pad_; + return soa; + } + ConstHGCRecHitSoA get() const { + ConstHGCRecHitSoA soa; + soa.energy_ = reinterpret_cast(mem_.get()); + soa.time_ = soa.energy_ + pad_; + soa.timeError_ = soa.time_ + pad_; + soa.id_ = reinterpret_cast(soa.timeError_ + pad_); + soa.flagBits_ = soa.id_ + pad_; + soa.son_ = reinterpret_cast(soa.flagBits_ + pad_); + return soa; + } + uint32_t nHits() const { return nhits_; } + uint32_t pad() const { return pad_; } + uint32_t nBytes() const { return size_tot_; } + +private: + cms::cuda::host::unique_ptr mem_; + static constexpr std::array sizes_ = { + {memory::npointers::float_hgcrechits_soa * sizeof(float), + memory::npointers::uint32_hgcrechits_soa * sizeof(uint32_t), + memory::npointers::uint8_hgcrechits_soa * sizeof(uint8_t)}}; + uint32_t pad_; + uint32_t nhits_; + uint32_t size_tot_; +}; + +#endif //CUDADAtaFormats_HGCal_HGCRecHitCPUProduct_H diff --git a/CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h b/CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h new file mode 100644 index 0000000000000..663dc6542e832 --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h @@ -0,0 +1,69 @@ +#ifndef CUDADAtaFormats_HGCal_HGCRecHitGPUProduct_H +#define CUDADAtaFormats_HGCal_HGCRecHitGPUProduct_H + +#include +#include + +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h" + +class HGCRecHitGPUProduct { +public: + HGCRecHitGPUProduct() = default; + explicit HGCRecHitGPUProduct(uint32_t nhits, const cudaStream_t &stream) : nhits_(nhits) { + size_tot_ = std::accumulate(sizes_.begin(), sizes_.end(), 0); //this might be done at compile time + pad_ = ((nhits - 1) / 32 + 1) * 32; //align to warp boundary (assumption: warpSize = 32) + mem_ = cms::cuda::make_device_unique(pad_ * size_tot_, stream); + } + ~HGCRecHitGPUProduct() = default; + + HGCRecHitGPUProduct(const HGCRecHitGPUProduct &) = delete; + HGCRecHitGPUProduct &operator=(const HGCRecHitGPUProduct &) = delete; + HGCRecHitGPUProduct(HGCRecHitGPUProduct &&) = default; + HGCRecHitGPUProduct &operator=(HGCRecHitGPUProduct &&) = default; + + HGCRecHitSoA get() { + HGCRecHitSoA soa; + soa.energy_ = reinterpret_cast(mem_.get()); + soa.time_ = soa.energy_ + pad_; + soa.timeError_ = soa.time_ + pad_; + soa.id_ = reinterpret_cast(soa.timeError_ + pad_); + soa.flagBits_ = soa.id_ + pad_; + soa.son_ = reinterpret_cast(soa.flagBits_ + pad_); + soa.nbytes_ = size_tot_; + soa.nhits_ = nhits_; + soa.pad_ = pad_; + return soa; + } + ConstHGCRecHitSoA get() const { + ConstHGCRecHitSoA soa; + soa.energy_ = reinterpret_cast(mem_.get()); + soa.time_ = soa.energy_ + pad_; + soa.timeError_ = soa.time_ + pad_; + soa.id_ = reinterpret_cast(soa.timeError_ + pad_); + soa.flagBits_ = soa.id_ + pad_; + soa.son_ = reinterpret_cast(soa.flagBits_ + pad_); + return soa; + } + + //number of hits stored in the SoA + uint32_t nHits() const { return nhits_; } + //pad of memory block (used for warp alignment, slighlty larger than 'nhits_') + uint32_t pad() const { return pad_; } + //number of bytes of the SoA + uint32_t nBytes() const { return size_tot_; } + +private: + cms::cuda::device::unique_ptr mem_; + static constexpr std::array sizes_ = { + {memory::npointers::float_hgcrechits_soa * sizeof(float), + memory::npointers::uint32_hgcrechits_soa * sizeof(uint32_t), + memory::npointers::uint8_hgcrechits_soa * sizeof(uint8_t)}}; + uint32_t pad_; + uint32_t nhits_; + uint32_t size_tot_; +}; + +#endif //CUDADAtaFormats_HGCal_HGCRecHitGPUProduct_H diff --git a/CUDADataFormats/HGCal/interface/HGCRecHitSoA.h b/CUDADataFormats/HGCal/interface/HGCRecHitSoA.h new file mode 100644 index 0000000000000..7d3fb850c9c7f --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCRecHitSoA.h @@ -0,0 +1,29 @@ +#ifndef CUDADataFormats_HGCal_HGCRecHitSoA_h +#define CUDADataFormats_HGCal_HGCRecHitSoA_h + +#include + +class HGCRecHitSoA { +public: + float *energy_; //calibrated energy of the rechit + float *time_; //time jitter of the UncalibRecHit + float *timeError_; //time resolution + uint32_t *id_; //rechit detId + uint32_t *flagBits_; //rechit flags describing its status (DataFormats/HGCRecHit/interface/HGCRecHit.h) + uint8_t *son_; //signal over noise + + uint32_t nbytes_; //number of bytes of the SoA + uint32_t nhits_; //number of hits stored in the SoA + uint32_t pad_; //pad of memory block (used for warp alignment, slightly larger than 'nhits_') +}; + +namespace memory { + namespace npointers { + constexpr unsigned float_hgcrechits_soa = 3; //number of float pointers in the rechits SoA + constexpr unsigned uint32_hgcrechits_soa = 2; //number of uint32_t pointers in the rechits SoA + constexpr unsigned uint8_hgcrechits_soa = 1; //number of uint8_t pointers in the rechits SoA + constexpr unsigned ntypes_hgcrechits_soa = 3; //number of different pointer types in the rechits SoA + } // namespace npointers +} // namespace memory + +#endif //CUDADataFormats_HGCal_HGCRecHitSoA_h diff --git a/CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h new file mode 100644 index 0000000000000..357c2fa7a9898 --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h @@ -0,0 +1,40 @@ +#ifndef CUDADAtaFormats_HGCal_HGCUncalibRecHitDevice_H +#define CUDADAtaFormats_HGCal_HGCUncalibRecHitDevice_H + +#include +#include + +#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h" + +class HGCUncalibRecHitDevice { +public: + HGCUncalibRecHitDevice() = default; + explicit HGCUncalibRecHitDevice(uint32_t nhits, const cudaStream_t &stream); + ~HGCUncalibRecHitDevice() = default; + + HGCUncalibRecHitDevice(const HGCUncalibRecHitDevice &) = delete; + HGCUncalibRecHitDevice &operator=(const HGCUncalibRecHitDevice &) = delete; + HGCUncalibRecHitDevice(HGCUncalibRecHitDevice &&) = default; + HGCUncalibRecHitDevice &operator=(HGCUncalibRecHitDevice &&) = default; + + void defineSoAMemoryLayout_(); + HGCUncalibRecHitSoA get() const { return soa_; } + uint32_t nHits() const { return nhits_; } + uint32_t pad() const { return pad_; } + uint32_t nBytes() const { return size_tot_; } + +private: + cms::cuda::device::unique_ptr ptr_; + HGCUncalibRecHitSoA soa_; + static constexpr std::array sizes_ = { + {memory::npointers::float_hgcuncalibrechits_soa * sizeof(float), + memory::npointers::uint32_hgcuncalibrechits_soa * sizeof(uint32_t)}}; + + uint32_t pad_; + uint32_t nhits_; + uint32_t size_tot_; +}; + +#endif //CUDADAtaFormats_HGCal_HGCUncalibRecHitDevice_H diff --git a/CUDADataFormats/HGCal/interface/HGCUncalibRecHitHost.h b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitHost.h new file mode 100644 index 0000000000000..b1cd3c43bb83c --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitHost.h @@ -0,0 +1,78 @@ +#ifndef CUDADAtaFormats_HGCal_HGCUncalibRecHitHost_H +#define CUDADAtaFormats_HGCal_HGCUncalibRecHitHost_H + +#include +#include + +#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h" + +template +class HGCUncalibRecHitHost { +public: + HGCUncalibRecHitHost() = default; + explicit HGCUncalibRecHitHost(uint32_t nhits, const T &hits, const cudaStream_t &stream) : nhits_(nhits) { + size_tot_ = std::accumulate(sizes_.begin(), sizes_.end(), 0); //this might be done at compile time + pad_ = ((nhits - 1) / 32 + 1) * 32; //align to warp boundary (assumption: warpSize = 32) + ptr_ = cms::cuda::make_host_unique(pad_ * size_tot_, stream); + + defineSoAMemoryLayout_(); + fillSoA_(hits); + } + ~HGCUncalibRecHitHost() = default; + + HGCUncalibRecHitHost(const HGCUncalibRecHitHost &) = delete; + HGCUncalibRecHitHost &operator=(const HGCUncalibRecHitHost &) = delete; + HGCUncalibRecHitHost(HGCUncalibRecHitHost &&) = default; + HGCUncalibRecHitHost &operator=(HGCUncalibRecHitHost &&) = default; + + void defineSoAMemoryLayout_() { + soa_.amplitude_ = reinterpret_cast(ptr_.get()); + soa_.pedestal_ = soa_.amplitude_ + pad_; + soa_.jitter_ = soa_.pedestal_ + pad_; + soa_.chi2_ = soa_.jitter_ + pad_; + soa_.OOTamplitude_ = soa_.chi2_ + pad_; + soa_.OOTchi2_ = soa_.OOTamplitude_ + pad_; + soa_.flags_ = reinterpret_cast(soa_.OOTchi2_ + pad_); + soa_.aux_ = soa_.flags_ + pad_; + soa_.id_ = soa_.aux_ + pad_; + soa_.aux_ = soa_.flags_ + pad_; + soa_.id_ = soa_.aux_ + pad_; + + soa_.nbytes_ = size_tot_; + soa_.nhits_ = nhits_; + soa_.pad_ = pad_; + } + + void fillSoA_(const T &c) { + for (unsigned i(0); i < nhits_; ++i) { + soa_.amplitude_[i] = c[i].amplitude(); + soa_.pedestal_[i] = c[i].pedestal(); + soa_.jitter_[i] = c[i].jitter(); + soa_.chi2_[i] = c[i].chi2(); + soa_.OOTamplitude_[i] = c[i].outOfTimeEnergy(); + soa_.OOTchi2_[i] = c[i].outOfTimeChi2(); + soa_.flags_[i] = c[i].flags(); + soa_.aux_[i] = 0; + soa_.id_[i] = c[i].id().rawId(); + } + } + + HGCUncalibRecHitSoA get() const { return soa_; } + uint32_t nHits() const { return nhits_; } + uint32_t pad() const { return pad_; } + uint32_t nBytes() const { return size_tot_; } + +private: + cms::cuda::host::unique_ptr ptr_; + HGCUncalibRecHitSoA soa_; + static constexpr std::array sizes_ = { + {memory::npointers::float_hgcuncalibrechits_soa * sizeof(float), + memory::npointers::uint32_hgcuncalibrechits_soa * sizeof(uint32_t)}}; + uint32_t size_tot_; + uint32_t pad_; + uint32_t nhits_; +}; + +#endif //CUDADAtaFormats_HGCal_HGCUncalibRecHitHost_H diff --git a/CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h new file mode 100644 index 0000000000000..9dadc6082ef0e --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h @@ -0,0 +1,33 @@ +#ifndef CUDADataFormats_HGCal_HGCUncalibRecHitSoA_h +#define CUDADataFormats_HGCal_HGCUncalibRecHitSoA_h + +#include + +class HGCUncalibRecHitSoA { +public: + float *amplitude_; //uncalib rechit amplitude, i.e., the average number of MIPs + float *pedestal_; //reconstructed pedestal + float *jitter_; //reconstructed time jitter + float *chi2_; //chi2 of the pulse + float *OOTamplitude_; //out-of-time reconstructed amplitude + float *OOTchi2_; //out-of-time chi2 + std::uint32_t * + flags_; //uncalibrechit flags describing its status (DataFormats/HGCRecHit/interface/HGCUncalibRecHit.h); to be propagated to the rechits + std::uint32_t *aux_; //aux word; first 8 bits contain time (jitter) error + std::uint32_t *id_; //uncalibrechit detector id + + std::uint32_t nbytes_; //number of bytes of the SoA + std::uint32_t nhits_; //number of hits stored in the SoA + std::uint32_t pad_; //pad of memory block (used for warp alignment, slighlty larger than 'nhits_') +}; + +namespace memory { + namespace npointers { + constexpr unsigned float_hgcuncalibrechits_soa = 6; //number of float pointers in the uncalibrated rechits SoA + constexpr unsigned uint32_hgcuncalibrechits_soa = 3; //number of uint32_t pointers in the uncalibrated rechits SoA + constexpr unsigned ntypes_hgcuncalibrechits_soa = + 2; //number of different pointer types in the uncalibrated rechits SoA + } // namespace npointers +} // namespace memory + +#endif diff --git a/CUDADataFormats/HGCal/interface/HGCUncalibRecHitsToRecHitsConstants.h b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitsToRecHitsConstants.h new file mode 100644 index 0000000000000..72e7b718fd4ea --- /dev/null +++ b/CUDADataFormats/HGCal/interface/HGCUncalibRecHitsToRecHitsConstants.h @@ -0,0 +1,73 @@ +#ifndef CUDADataFormats_HGCal_HGCUncalibRecHitsToRecHitsConstants_h +#define CUDADataFormats_HGCal_HGCUncalibRecHitsToRecHitsConstants_h + +#include +#include + +class HGCConstantVectorData { +public: + std::vector fCPerMIP_; + std::vector cce_; + std::vector noise_fC_; + std::vector rcorr_; + std::vector weights_; +}; + +class HGCeeUncalibRecHitConstantData { +public: + static constexpr size_t ee_fCPerMIP = 3; //number of elements pointed by hgcEE_fCPerMIP_ + static constexpr size_t ee_cce = 3; //number of elements pointed by hgcEE_cce_ + static constexpr size_t ee_noise_fC = 3; //number of elements pointed by hgcEE_noise_fC_ + static constexpr size_t ee_rcorr = 3; //number of elements pointed by rcorr_ + static constexpr size_t ee_weights = 51; //number of elements posize_ted by weights_ + + double fCPerMIP_[ee_fCPerMIP]; //femto coloumb to MIP conversion; one value per sensor thickness + double cce_[ee_cce]; //charge collection efficiency, one value per sensor thickness + double noise_fC_[ee_noise_fC]; //noise, one value per sensor thickness + double rcorr_[ee_rcorr]; //thickness correction + double weights_[ee_weights]; //energy weights to recover rechit energy deposited in the absorber + + double keV2DIGI_; //energy to femto coloumb conversion: 1000 eV/3.62 (eV per e) / 6.24150934e3 (e per fC) + double uncalib2GeV_; //sets the ADC; obtained by dividing 1e-6 by hgcEE_keV2DIGI_ + float xmin_; //used for computing the time resolution error + float xmax_; //used for computing the time resolution error + float aterm_; //used for computing the time resolution error + float cterm_; //used for computing the time resolution error +}; + +class HGChefUncalibRecHitConstantData { +public: + static constexpr size_t hef_fCPerMIP = 3; //number of elements pointed by hgcEE_fCPerMIP_ + static constexpr size_t hef_cce = 3; //number of elements pointed by hgcEE_cce_ + static constexpr size_t hef_noise_fC = 3; //number of elements pointed by hgcEE_noise_fC_ + static constexpr size_t hef_rcorr = 3; //number of elements pointed by rcorr_ + static constexpr size_t hef_weights = 51; //number of elements pointed by weights_ + + double fCPerMIP_[hef_fCPerMIP]; //femto coloumb to MIP conversion; one value per sensor thickness + double cce_[hef_cce]; //charge collection efficiency, one value per sensor thickness + double noise_fC_[hef_noise_fC]; //noise, one value per sensor thickness + double rcorr_[hef_rcorr]; //thickness correction + double weights_[hef_weights]; //energy weights to recover rechit energy deposited in the absorber + + double keV2DIGI_; //energy to femto coloumb conversion: 1000 eV/3.62 (eV per e) / 6.24150934e3 (e per fC) + double uncalib2GeV_; //sets the ADC; obtained by dividing 1e-6 by hgcHEF_keV2DIGI_ + float xmin_; //used for computing the time resolution error + float xmax_; //used for computing the time resolution error + float aterm_; //used for computing the time resolution error + float cterm_; //used for computing the time resolution error + std::int32_t layerOffset_; //layer offset relative to layer#1 of the EE subsetector +}; + +class HGChebUncalibRecHitConstantData { +public: + static constexpr size_t heb_weights = 51; //number of elements pointed by weights_ + + double weights_[heb_weights]; //energy weights to recover rechit energy deposited in the absorber + + double keV2DIGI_; //energy to femto coloumb conversion: 1000 eV/3.62 (eV per e) / 6.24150934e3 (e per fC) + double uncalib2GeV_; //sets the ADC; obtained by dividing 1e-6 by hgcHEB_keV2DIGI_ + double noise_MIP_; //noise + std::int32_t layerOffset_; //layer offset relative to layer#1 of the EE subsetector +}; + +#endif diff --git a/CUDADataFormats/HGCal/src/HGCUncalibRecHitDevice.cc b/CUDADataFormats/HGCal/src/HGCUncalibRecHitDevice.cc new file mode 100644 index 0000000000000..bfd0bc1e97e58 --- /dev/null +++ b/CUDADataFormats/HGCal/src/HGCUncalibRecHitDevice.cc @@ -0,0 +1,25 @@ +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h" + +HGCUncalibRecHitDevice::HGCUncalibRecHitDevice(uint32_t nhits, const cudaStream_t& stream) : nhits_(nhits) { + size_tot_ = std::accumulate(sizes_.begin(), sizes_.end(), 0); //this might be done at compile time + pad_ = ((nhits - 1) / 32 + 1) * 32; //align to warp boundary (assumption: warpSize = 32) + ptr_ = cms::cuda::make_device_unique(pad_ * size_tot_, stream); + + defineSoAMemoryLayout_(); +} + +void HGCUncalibRecHitDevice::defineSoAMemoryLayout_() { + soa_.amplitude_ = reinterpret_cast(ptr_.get()); + soa_.pedestal_ = soa_.amplitude_ + pad_; + soa_.jitter_ = soa_.pedestal_ + pad_; + soa_.chi2_ = soa_.jitter_ + pad_; + soa_.OOTamplitude_ = soa_.chi2_ + pad_; + soa_.OOTchi2_ = soa_.OOTamplitude_ + pad_; + soa_.flags_ = reinterpret_cast(soa_.OOTchi2_ + pad_); + soa_.aux_ = soa_.flags_ + pad_; + soa_.id_ = soa_.aux_ + pad_; + + soa_.nbytes_ = size_tot_; + soa_.nhits_ = nhits_; + soa_.pad_ = pad_; +} diff --git a/CUDADataFormats/HGCal/src/classes.h b/CUDADataFormats/HGCal/src/classes.h new file mode 100644 index 0000000000000..982faea57d046 --- /dev/null +++ b/CUDADataFormats/HGCal/src/classes.h @@ -0,0 +1,9 @@ +#ifndef HGCRECHITSOA_CLASSES_H +#define HGCRECHITSOA_CLASSES_H + +#include "CUDADataFormats/Common/interface/Product.h" +#include "DataFormats/Common/interface/Wrapper.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" + +#endif //HGCRECHITSOA_CLASSES_H diff --git a/CUDADataFormats/HGCal/src/classes_def.xml b/CUDADataFormats/HGCal/src/classes_def.xml new file mode 100644 index 0000000000000..632364292ff28 --- /dev/null +++ b/CUDADataFormats/HGCal/src/classes_def.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/CalibCalorimetry/CaloTPG/src/CaloTPGTranscoderULUT.cc b/CalibCalorimetry/CaloTPG/src/CaloTPGTranscoderULUT.cc index f46dce7bb3771..48595c5ae9cec 100644 --- a/CalibCalorimetry/CaloTPG/src/CaloTPGTranscoderULUT.cc +++ b/CalibCalorimetry/CaloTPG/src/CaloTPGTranscoderULUT.cc @@ -88,7 +88,7 @@ void CaloTPGTranscoderULUT::loadHCALCompress(HcalLutMetadata const& lutMetadata, } } else { for (unsigned int i = threshold; i < lutsize; ++i) - outputLUT_[index][i] = version == 0 ? linearRctLUT[i] : linearNctLUT[i]; + outputLUT_[index][i] = version == 1 ? linearNctLUT[i] : linearRctLUT[i]; } double eta_low = 0., eta_high = 0.; @@ -126,7 +126,7 @@ void CaloTPGTranscoderULUT::loadHCALCompress(HcalLutMetadata const& lutMetadata, for (unsigned int i = 0; i < lutsize; ++i) { if (outputLUT_[index][i] != tpg) { tpg = outputLUT_[index][i]; - hcaluncomp_[index][tpg] = lsb_factor_ * i / (version == 0 ? rct_factor_ : nct_factor_); + hcaluncomp_[index][tpg] = lsb_factor_ * i / (version == 1 ? nct_factor_ : rct_factor_); } } } diff --git a/CalibCalorimetry/EcalTPGTools/plugins/EcalTPGDBCopy.cc b/CalibCalorimetry/EcalTPGTools/plugins/EcalTPGDBCopy.cc index 9b9ab4f45a1d8..836148ae531dc 100644 --- a/CalibCalorimetry/EcalTPGTools/plugins/EcalTPGDBCopy.cc +++ b/CalibCalorimetry/EcalTPGTools/plugins/EcalTPGDBCopy.cc @@ -15,6 +15,9 @@ #include "CondFormats/EcalObjects/interface/EcalTPGLutIdMap.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" #include "CondFormats/EcalObjects/interface/EcalTPGLutGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGFineGrainEBGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGPhysicsConst.h" @@ -32,6 +35,9 @@ #include "CondFormats/DataRecord/interface/EcalTPGLutIdMapRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGWeightIdMapRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGWeightGroupRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGOddWeightIdMapRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGOddWeightGroupRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGTPModeRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGLutGroupRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGFineGrainEBGroupRcd.h" #include "CondFormats/DataRecord/interface/EcalTPGPhysicsConstRcd.h" @@ -95,6 +101,12 @@ bool EcalTPGDBCopy::shouldCopy(const edm::EventSetup& evtSetup, std::string cont cacheID = evtSetup.get().cacheIdentifier(); } else if (container == "EcalTPGWeightGroup") { cacheID = evtSetup.get().cacheIdentifier(); + } else if (container == "EcalTPGOddWeightIdMap") { + cacheID = evtSetup.get().cacheIdentifier(); + } else if (container == "EcalTPGOddWeightGroup") { + cacheID = evtSetup.get().cacheIdentifier(); + } else if (container == "EcalTPGTPMode") { + cacheID = evtSetup.get().cacheIdentifier(); } else if (container == "EcalTPGLutGroup") { cacheID = evtSetup.get().cacheIdentifier(); } else if (container == "EcalTPGFineGrainEBGroup") { @@ -194,6 +206,27 @@ void EcalTPGDBCopy::copyToDB(const edm::EventSetup& evtSetup, std::string contai dbOutput->createNewIOV( new EcalTPGWeightGroup(*obj), dbOutput->beginOfTime(), dbOutput->endOfTime(), recordName); + } else if (container == "EcalTPGOddWeightIdMap") { + edm::ESHandle handle; + evtSetup.get().get(handle); + const EcalTPGOddWeightIdMap* obj = handle.product(); + dbOutput->createNewIOV( + new EcalTPGOddWeightIdMap(*obj), dbOutput->beginOfTime(), dbOutput->endOfTime(), recordName); + + } else if (container == "EcalTPGOddWeightGroup") { + edm::ESHandle handle; + evtSetup.get().get(handle); + const EcalTPGOddWeightGroup* obj = handle.product(); + dbOutput->createNewIOV( + new EcalTPGOddWeightGroup(*obj), dbOutput->beginOfTime(), dbOutput->endOfTime(), recordName); + + } else if (container == "EcalTPGTPMode") { + edm::ESHandle handle; + evtSetup.get().get(handle); + const EcalTPGTPMode* obj = handle.product(); + dbOutput->createNewIOV( + new EcalTPGTPMode(*obj), dbOutput->beginOfTime(), dbOutput->endOfTime(), recordName); + } else if (container == "EcalTPGLutGroup") { edm::ESHandle handle; evtSetup.get().get(handle); 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/HcalTPGAlgos/interface/HcaluLUTTPGCoder.h b/CalibCalorimetry/HcalTPGAlgos/interface/HcaluLUTTPGCoder.h index 37442ec1a50bc..99133ebc7d479 100644 --- a/CalibCalorimetry/HcalTPGAlgos/interface/HcaluLUTTPGCoder.h +++ b/CalibCalorimetry/HcalTPGAlgos/interface/HcaluLUTTPGCoder.h @@ -69,6 +69,12 @@ class HcaluLUTTPGCoder : public HcalTPGCoder { void set1TSContainHE(bool contain1TSHE) { contain1TSHE_ = contain1TSHE; } void setContainPhaseHB(double containPhaseNSHB) { containPhaseNSHB_ = containPhaseNSHB; } void setContainPhaseHE(double containPhaseNSHE) { containPhaseNSHE_ = containPhaseNSHE; } + void setOverrideDBweightsAndFilterHB(bool overrideDBweightsAndFilterHB) { + overrideDBweightsAndFilterHB_ = overrideDBweightsAndFilterHB; + } + void setOverrideDBweightsAndFilterHE(bool overrideDBweightsAndFilterHE) { + overrideDBweightsAndFilterHE_ = overrideDBweightsAndFilterHE; + } void lookupMSB(const HBHEDataFrame& df, std::vector& msb) const; void lookupMSB(const QIE10DataFrame& df, std::vector>& msb) const; void lookupMSB(const QIE11DataFrame& df, std::vector>& msb) const; @@ -114,9 +120,12 @@ class HcaluLUTTPGCoder : public HcalTPGCoder { double cosh_ieta_28_HE_low_depths_, cosh_ieta_28_HE_high_depths_, cosh_ieta_29_HE_; bool allLinear_; bool contain1TSHB_, contain1TSHE_; - double containPhaseNSHB_, containPhaseNSHE_; + double containPhaseNSHB_ = 6.0; + double containPhaseNSHE_ = 6.0; double linearLSB_QIE8_, linearLSB_QIE11_, linearLSB_QIE11Overlap_; std::unique_ptr pulseCorr_; + bool overrideDBweightsAndFilterHB_ = false; + bool overrideDBweightsAndFilterHE_ = false; }; #endif diff --git a/CalibCalorimetry/HcalTPGAlgos/interface/LutXml.h b/CalibCalorimetry/HcalTPGAlgos/interface/LutXml.h index ce3fc90e5c448..76e2a72b424d9 100644 --- a/CalibCalorimetry/HcalTPGAlgos/interface/LutXml.h +++ b/CalibCalorimetry/HcalTPGAlgos/interface/LutXml.h @@ -35,6 +35,7 @@ class LutXml : public XMLDOMBlock { std::string formatrevision; std::string targetfirmware; int generalizedindex; + int weight; std::vector lut; std::vector mask; } Config; diff --git a/CalibCalorimetry/HcalTPGAlgos/src/HcaluLUTTPGCoder.cc b/CalibCalorimetry/HcalTPGAlgos/src/HcaluLUTTPGCoder.cc index b1b3a490bff48..d6aadc9312574 100644 --- a/CalibCalorimetry/HcalTPGAlgos/src/HcaluLUTTPGCoder.cc +++ b/CalibCalorimetry/HcalTPGAlgos/src/HcaluLUTTPGCoder.cc @@ -337,6 +337,43 @@ void HcaluLUTTPGCoder::update(const HcalDbService& conditions) { make_cosh_ieta_map(); + // Here we will determine if we are using new version of TPs (1TS) + // i.e. are we using a new pulse filter scheme. + const HcalElectronicsMap* emap = conditions.getHcalMapping(); + + int lastHBRing = topo_->lastHBRing(); + int lastHERing = topo_->lastHERing(); + + // First, determine if we should configure for the filter scheme + // Check the tp version to make this determination + bool foundHB = false; + bool foundHE = false; + bool newHBtp = false; + bool newHEtp = false; + std::vector vIds = emap->allElectronicsIdTrigger(); + for (std::vector::const_iterator eId = vIds.begin(); eId != vIds.end(); eId++) { + // The first HB or HE id is enough to tell whether to use new scheme in HB or HE + if (foundHB and foundHE) + break; + + HcalTrigTowerDetId hcalTTDetId(emap->lookupTrigger(*eId)); + if (hcalTTDetId.null()) + continue; + + int aieta = abs(hcalTTDetId.ieta()); + int tp_version = hcalTTDetId.version(); + + if (aieta <= lastHBRing) { + foundHB = true; + if (tp_version > 1) + newHBtp = true; + } else if (aieta > lastHBRing and aieta < lastHERing) { + foundHE = true; + if (tp_version > 1) + newHEtp = true; + } + } + for (const auto& id : metadata->getAllChannels()) { if (not(id.det() == DetId::Hcal and topo_->valid(id))) continue; @@ -419,11 +456,10 @@ void HcaluLUTTPGCoder::update(const HcalDbService& conditions) { double correctionPhaseNS = conditions.getHcalRecoParam(cell)->correctionPhaseNS(); - // When containPhaseNS is not -999.0, and for QIE11 only, override from configuration if (qieType == QIE11) { - if (containPhaseNSHB_ != -999.0 and cell.ietaAbs() <= topo_->lastHBRing()) + if (overrideDBweightsAndFilterHB_ and cell.ietaAbs() <= lastHBRing) correctionPhaseNS = containPhaseNSHB_; - else if (containPhaseNSHE_ != -999.0 and cell.ietaAbs() > topo_->lastHBRing()) + else if (overrideDBweightsAndFilterHE_ and cell.ietaAbs() > lastHBRing) correctionPhaseNS = containPhaseNSHE_; } for (unsigned int adc = 0; adc < SIZE; ++adc) { @@ -444,8 +480,8 @@ void HcaluLUTTPGCoder::update(const HcalDbService& conditions) { pulseCorr_->correction(cell, 2, correctionPhaseNS, correctedCharge); if (qieType == QIE11) { // When contain1TS_ is set, it should still only apply for QIE11-related things - if ((contain1TSHB_ and cell.ietaAbs() <= topo_->lastHBRing()) or - (contain1TSHE_ and cell.ietaAbs() > topo_->lastHBRing())) { + if ((((contain1TSHB_ and overrideDBweightsAndFilterHB_) or newHBtp) and cell.ietaAbs() <= lastHBRing) or + (((contain1TSHE_ and overrideDBweightsAndFilterHE_) or newHEtp) and cell.ietaAbs() > lastHBRing)) { containmentCorrection = containmentCorrection1TS; } else { containmentCorrection = containmentCorrection2TSCorrected; diff --git a/CalibCalorimetry/HcalTPGAlgos/src/LutXml.cc b/CalibCalorimetry/HcalTPGAlgos/src/LutXml.cc index bd7711ba0a442..6c61eb85580c2 100644 --- a/CalibCalorimetry/HcalTPGAlgos/src/LutXml.cc +++ b/CalibCalorimetry/HcalTPGAlgos/src/LutXml.cc @@ -49,6 +49,7 @@ LutXml::Config::_Config() { formatrevision = "default_revision"; targetfirmware = "default_revision"; generalizedindex = -1; + weight = -1; } LutXml::LutXml() : XMLDOMBlock("CFGBrickSet", 1) { init(); } @@ -111,6 +112,7 @@ void LutXml::addLut(LutXml::Config &_config, XMLDOMBlock *checksums_xml) { addParameter("LUT_TYPE", "int", _config.lut_type); addParameter("SLB", "int", _config.fiber); addParameter("SLBCHAN", "int", _config.fiberchan); + addParameter("WEIGHT", "int", _config.weight); addData(to_string(_config.lut.size()), "hex", _config.lut); } else if (_config.lut_type == 5) { // channel masks addParameter("MASK_TYPE", "string", "TRIGGERCHANMASK"); diff --git a/CalibCalorimetry/HcalTPGEventSetup/src/HcalTPGCoderULUT.cc b/CalibCalorimetry/HcalTPGEventSetup/src/HcalTPGCoderULUT.cc index e718140593c95..8a3b32aab8d4a 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" @@ -60,6 +59,7 @@ class HcalTPGCoderULUT : public edm::ESProducer { bool read_FGLut_, read_Ascii_, read_XML_, LUTGenerationMode_, linearLUTs_; bool contain1TSHB_, contain1TSHE_; double containPhaseNSHB_, containPhaseNSHE_; + bool overrideDBweightsAndFilterHB_, overrideDBweightsAndFilterHE_; double linearLSB_QIE8_, linearLSB_QIE11Overlap_, linearLSB_QIE11_; int maskBit_; std::vector FG_HF_thresholds_; @@ -86,6 +86,8 @@ HcalTPGCoderULUT::HcalTPGCoderULUT(const edm::ParameterSet& iConfig) { contain1TSHE_ = iConfig.getParameter("contain1TSHE"); containPhaseNSHB_ = iConfig.getParameter("containPhaseNSHB"); containPhaseNSHE_ = iConfig.getParameter("containPhaseNSHE"); + overrideDBweightsAndFilterHB_ = iConfig.getParameter("overrideDBweightsAndFilterHB"); + overrideDBweightsAndFilterHE_ = iConfig.getParameter("overrideDBweightsAndFilterHE"); //the following line is needed to tell the framework what // data is being produced @@ -111,8 +113,13 @@ HcalTPGCoderULUT::HcalTPGCoderULUT(const edm::ParameterSet& iConfig) { void HcalTPGCoderULUT::buildCoder(const HcalTopology* topo, const HcalTimeSlew* delay, HcaluLUTTPGCoder* theCoder) { using namespace edm::es; theCoder->init(topo, delay); + + theCoder->setOverrideDBweightsAndFilterHB(overrideDBweightsAndFilterHB_); + theCoder->setOverrideDBweightsAndFilterHE(overrideDBweightsAndFilterHE_); + theCoder->set1TSContainHB(contain1TSHB_); theCoder->set1TSContainHE(contain1TSHE_); + theCoder->setContainPhaseHB(containPhaseNSHB_); theCoder->setContainPhaseHE(containPhaseNSHE_); 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/CalibFormats/HcalObjects/interface/HcalDbService.h b/CalibFormats/HcalObjects/interface/HcalDbService.h index c981a1a88252e..a8c5f341961c4 100644 --- a/CalibFormats/HcalObjects/interface/HcalDbService.h +++ b/CalibFormats/HcalObjects/interface/HcalDbService.h @@ -57,7 +57,7 @@ class HcalDbService { const HcalQIEType* getHcalQIEType(const HcalGenericDetId& fId) const; const HcalSiPMParameter* getHcalSiPMParameter(const HcalGenericDetId& fId) const; const HcalSiPMCharacteristics* getHcalSiPMCharacteristics() const; - const HcalTPChannelParameter* getHcalTPChannelParameter(const HcalGenericDetId& fId) const; + const HcalTPChannelParameter* getHcalTPChannelParameter(const HcalGenericDetId& fId, bool throwOnFail = true) const; const HcalTPParameters* getHcalTPParameters() const; const HcalMCParam* getHcalMCParam(const HcalGenericDetId& fId) const; const HcalRecoParam* getHcalRecoParam(const HcalGenericDetId& fId) const; diff --git a/CalibFormats/HcalObjects/src/HcalDbService.cc b/CalibFormats/HcalObjects/src/HcalDbService.cc index bfd8637a346aa..59f5b4bd11c4b 100644 --- a/CalibFormats/HcalObjects/src/HcalDbService.cc +++ b/CalibFormats/HcalObjects/src/HcalDbService.cc @@ -388,9 +388,10 @@ const HcalSiPMParameter* HcalDbService::getHcalSiPMParameter(const HcalGenericDe const HcalSiPMCharacteristics* HcalDbService::getHcalSiPMCharacteristics() const { return mSiPMCharacteristics; } -const HcalTPChannelParameter* HcalDbService::getHcalTPChannelParameter(const HcalGenericDetId& fId) const { +const HcalTPChannelParameter* HcalDbService::getHcalTPChannelParameter(const HcalGenericDetId& fId, + bool throwOnFail) const { if (mTPChannelParameters) { - return mTPChannelParameters->getValues(fId); + return mTPChannelParameters->getValues(fId, throwOnFail); } return nullptr; } 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/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/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/CalibTracker/SiStripChannelGain/test/testSSTGain_PCL_FromRECO_cfg.py b/CalibTracker/SiStripChannelGain/test/testSSTGain_PCL_FromRECO_cfg.py index 767b3458b74ee..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'] @@ -89,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/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/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 100% rename from Calibration/IsolatedParticles/test/proto_runIsolatedTracksHcal_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksHcal_cfg.py diff --git a/Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNData_cfg.py b/Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNData_cfg.py similarity index 100% rename from Calibration/IsolatedParticles/test/proto_runIsolatedTracksNxNData_cfg.py rename to Calibration/IsolatedParticles/test/python/proto_runIsolatedTracksNxNData_cfg.py 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/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/HcalLutManager.cc b/CaloOnlineTools/HcalOnlineDb/src/HcalLutManager.cc index e3870c67e4053..757ac9fc102f9 100644 --- a/CaloOnlineTools/HcalOnlineDb/src/HcalLutManager.cc +++ b/CaloOnlineTools/HcalOnlineDb/src/HcalLutManager.cc @@ -978,6 +978,9 @@ std::map> HcalLutManager::getCompressionLutXmlFromC _cfg.generalizedindex = _cfg.iphi * 10000 + (row->ieta > 0) * 100 + abs(row->ieta); //is this used for anything? _cfg.lut = _coder.getCompressionLUT(_detid); + auto pWeight = conditions->getHcalTPChannelParameter(_detid, false); + if (pWeight) + _cfg.weight = pWeight->getauxi1(); int crot = 100 * row->crate + row->slot; unsigned int size = _cfg.lut.size(); 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/genLUT.sh b/CaloOnlineTools/HcalOnlineDb/test/genLUT.sh index 7c5a2706fe4d9..5b2c93758c7d3 100755 --- a/CaloOnlineTools/HcalOnlineDb/test/genLUT.sh +++ b/CaloOnlineTools/HcalOnlineDb/test/genLUT.sh @@ -170,17 +170,23 @@ then echo "Creating Trigger Key..." echo - dd=$(date +"%Y-%m-%d %H:%M:%S") + HcalInput=( "${inputConditions[@]/#/Hcal}" ) + declare -A tagMap + eval $(conddb list $GlobalTag | grep -E "$(export IFS="|"; echo "${HcalInput[*]}")" | \ + awk '{if($2=="-" || $2=="effective") if(!($1~/^HcalPed/ && $2=="-")) print "tagMap["$1"]="$3}') + individualInputTags="" for i in ${inputConditions[@]}; do t=$i v=${!t} - if [[ -n $v ]]; then - individualInputTags="""$individualInputTags + if [[ -z $v ]]; then + v=${tagMap[Hcal${i}Rcd]} + fi + individualInputTags="""$individualInputTags $v""" - fi done + dd=$(date +"%Y-%m-%d %H:%M:%S") echo """ diff --git a/CommonTools/ParticleFlow/python/EITopPAG_cff.py b/CommonTools/ParticleFlow/python/EITopPAG_cff.py index 161a5d0454476..0eccd3fda4082 100644 --- a/CommonTools/ParticleFlow/python/EITopPAG_cff.py +++ b/CommonTools/ParticleFlow/python/EITopPAG_cff.py @@ -112,7 +112,8 @@ pfJetsEI = pfJets.clone() pfJetsPtrsEI = pfJetsPtrs.clone( src = "pfJetsEI" ) -pfJetSequenceEI = cms.Sequence( pfJetsEI+ pfJetsPtrsEI ) +pfJetTaskEI = cms.Task( pfJetsEI, pfJetsPtrsEI ) +pfJetSequenceEI = cms.Sequence( pfJetTaskEI ) pfNoJetEI = pfNoJet.clone( topCollection = 'pfJetsPtrsEI', @@ -127,12 +128,13 @@ bottomCollection = 'pfJetsPtrsEI' ) -pfTauEISequence = cms.Sequence( - pfTausPreSequence+ - pfTausBaseSequence+ - pfTausEI+ +pfTauEITask = cms.Task( + pfTausPreTask, + pfTausBaseTask, + pfTausEI, pfTausPtrsEI ) +pfTauEISequence = cms.Sequence(pfTauEITask) #### B-tagging #### pfImpactParameterTagInfosEI = pfImpactParameterTagInfos.clone( @@ -151,30 +153,31 @@ #### MET #### pfMetEI = pfMET.clone(srcJets="pfJetsEI") -#EITopPAG = cms.Sequence( -EIsequence = cms.Sequence( - goodOfflinePrimaryVertices + - pfPileUpEI + - pfPileUpJMEEI + - pfNoPileUpEI + - pfNoPileUpJMEEI + - pfAllMuonsEI + - pfMuonsFromVertexEI + - pfIsolatedMuonsEI + - pfNoMuon + - pfNoMuonJME + - pfAllElectronsEI + - pfElectronsFromVertexEI + - pfIsolatedElectronsEI + - pfNoElectron + - pfNoElectronJME + - pfJetSequenceEI + - pfNoJetEI + - pfTauEISequence + - pfNoTauEI + - pfMetEI+ - pfImpactParameterTagInfosEI+ - pfInclusiveSecondaryVertexFinderTagInfosEI+ +#EITopPAG = cms.Task( +EITask = cms.Task( + goodOfflinePrimaryVertices , + pfPileUpEI , + pfPileUpJMEEI , + pfNoPileUpEI , + pfNoPileUpJMEEI , + pfAllMuonsEI , + pfMuonsFromVertexEI , + pfIsolatedMuonsEI , + pfNoMuon , + pfNoMuonJME , + pfAllElectronsEI , + pfElectronsFromVertexEI , + pfIsolatedElectronsEI , + pfNoElectron , + pfNoElectronJME , + pfJetTaskEI , + pfNoJetEI , + pfTauEITask , + pfNoTauEI , + pfMetEI, + pfImpactParameterTagInfosEI, + pfInclusiveSecondaryVertexFinderTagInfosEI, pfCombinedInclusiveSecondaryVertexV2BJetTagsEI ) +EIsequence = cms.Sequence(EITask) diff --git a/CommonTools/ParticleFlow/python/GeneratorTools/genMetTrue_cff.py b/CommonTools/ParticleFlow/python/GeneratorTools/genMetTrue_cff.py index 3491bfd6164eb..870088bb6a459 100644 --- a/CommonTools/ParticleFlow/python/GeneratorTools/genMetTrue_cff.py +++ b/CommonTools/ParticleFlow/python/GeneratorTools/genMetTrue_cff.py @@ -16,7 +16,7 @@ 4000012, 9900012, 9900014, 9900016, 39, 12, 14, 16 ) - ) +) genMetTrue = cms.EDProducer("GenMETProducer", src = cms.InputTag("genParticlesForMETAllVisible"), ## Input product label @@ -27,7 +27,8 @@ applyFiducialThresholdForFractions = cms.bool(False), ) -genMetTrueSequence = cms.Sequence( - genParticlesForMETAllVisible * +genMetTrueTask = cms.Task( + genParticlesForMETAllVisible , genMetTrue ) +genMetTrueSequence = cms.Sequence(genMetTrueTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationDepositsPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationDepositsPFBRECO_cff.py index 126d5fcb28e93..ea756d8d76385 100644 --- a/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationDepositsPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationDepositsPFBRECO_cff.py @@ -24,16 +24,17 @@ DepositLabel = cms.untracked.string('') ) ) -elPFIsoDepositChargedPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) -elPFIsoDepositChargedAllPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) -elPFIsoDepositNeutralPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) -elPFIsoDepositPUPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) +elPFIsoDepositChargedPFBRECO.ExtractorPSet.DR_Veto = 0 +elPFIsoDepositChargedAllPFBRECO.ExtractorPSet.DR_Veto = 0 +elPFIsoDepositNeutralPFBRECO.ExtractorPSet.DR_Veto = 0 +elPFIsoDepositPUPFBRECO.ExtractorPSet.DR_Veto = 0 -electronPFIsolationDepositsPFBRECOSequence = cms.Sequence( - elPFIsoDepositChargedPFBRECO+ - elPFIsoDepositChargedAllPFBRECO+ - elPFIsoDepositGammaPFBRECO+ - elPFIsoDepositNeutralPFBRECO+ +electronPFIsolationDepositsPFBRECOTask = cms.Task( + elPFIsoDepositChargedPFBRECO, + elPFIsoDepositChargedAllPFBRECO, + elPFIsoDepositGammaPFBRECO, + elPFIsoDepositNeutralPFBRECO, elPFIsoDepositPUPFBRECO ) +electronPFIsolationDepositsPFBRECOSequence = cms.Sequence(electronPFIsolationDepositsPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationValuesPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationValuesPFBRECO_cff.py index 086062b48b546..cf86e2b864821 100644 --- a/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationValuesPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/electronPFIsolationValuesPFBRECO_cff.py @@ -2,36 +2,36 @@ from RecoParticleFlow.PFProducer.electronPFIsolationValues_cff import * -elPFIsoValueCharged03PFIdPFBRECO = elPFIsoValueCharged03PFId.clone() -elPFIsoValueCharged03PFIdPFBRECO.deposits[0].src = 'elPFIsoDepositChargedPFBRECO' - -elPFIsoValueChargedAll03PFIdPFBRECO = elPFIsoValueChargedAll03PFId.clone() -elPFIsoValueChargedAll03PFIdPFBRECO.deposits[0].src = 'elPFIsoDepositChargedAllPFBRECO' - -elPFIsoValueGamma03PFIdPFBRECO = elPFIsoValueGamma03PFId.clone() -elPFIsoValueGamma03PFIdPFBRECO.deposits[0].src = 'elPFIsoDepositGammaPFBRECO' - -elPFIsoValueNeutral03PFIdPFBRECO = elPFIsoValueNeutral03PFId.clone() -elPFIsoValueNeutral03PFIdPFBRECO.deposits[0].src = 'elPFIsoDepositNeutralPFBRECO' - -elPFIsoValuePU03PFIdPFBRECO = elPFIsoValuePU03PFId.clone() -elPFIsoValuePU03PFIdPFBRECO.deposits[0].src = 'elPFIsoDepositPUPFBRECO' - -elPFIsoValueCharged04PFIdPFBRECO = elPFIsoValueCharged03PFIdPFBRECO.clone() -elPFIsoValueCharged04PFIdPFBRECO.deposits[0].deltaR = cms.double(0.4) - -elPFIsoValueChargedAll04PFIdPFBRECO = elPFIsoValueChargedAll03PFIdPFBRECO.clone() -elPFIsoValueChargedAll04PFIdPFBRECO.deposits[0].deltaR = cms.double(0.4) - -elPFIsoValueGamma04PFIdPFBRECO = elPFIsoValueGamma03PFIdPFBRECO.clone() -elPFIsoValueGamma04PFIdPFBRECO.deposits[0].deltaR = cms.double(0.4) - -elPFIsoValueNeutral04PFIdPFBRECO = elPFIsoValueNeutral03PFIdPFBRECO.clone() -elPFIsoValueNeutral04PFIdPFBRECO.deposits[0].deltaR = cms.double(0.4) - -elPFIsoValuePU04PFIdPFBRECO = elPFIsoValuePU03PFIdPFBRECO.clone() -elPFIsoValuePU04PFIdPFBRECO.deposits[0].deltaR = cms.double(0.4) - +elPFIsoValueCharged03PFIdPFBRECO = elPFIsoValueCharged03PFId.clone( + deposits = {0: dict(src = 'elPFIsoDepositChargedPFBRECO')} +) +elPFIsoValueChargedAll03PFIdPFBRECO = elPFIsoValueChargedAll03PFId.clone( + deposits = {0: dict(src = 'elPFIsoDepositChargedAllPFBRECO')} +) +elPFIsoValueGamma03PFIdPFBRECO = elPFIsoValueGamma03PFId.clone( + deposits = {0: dict(src = 'elPFIsoDepositGammaPFBRECO')} +) +elPFIsoValueNeutral03PFIdPFBRECO = elPFIsoValueNeutral03PFId.clone( + deposits = {0: dict(src = 'elPFIsoDepositNeutralPFBRECO')} +) +elPFIsoValuePU03PFIdPFBRECO = elPFIsoValuePU03PFId.clone( + deposits = {0: dict(src = 'elPFIsoDepositPUPFBRECO')} +) +elPFIsoValueCharged04PFIdPFBRECO = elPFIsoValueCharged03PFIdPFBRECO.clone( + deposits = {0: dict(deltaR = 0.4)} +) +elPFIsoValueChargedAll04PFIdPFBRECO = elPFIsoValueChargedAll03PFIdPFBRECO.clone( + deposits = {0: dict(deltaR = 0.4)} +) +elPFIsoValueGamma04PFIdPFBRECO = elPFIsoValueGamma03PFIdPFBRECO.clone( + deposits = {0: dict(deltaR = 0.4)} +) +elPFIsoValueNeutral04PFIdPFBRECO = elPFIsoValueNeutral03PFIdPFBRECO.clone( + deposits = {0: dict(deltaR = 0.4)} +) +elPFIsoValuePU04PFIdPFBRECO = elPFIsoValuePU03PFIdPFBRECO.clone( + deposits = {0: dict(deltaR = 0.4)} +) ##########Now the PFNoId elPFIsoValueCharged03NoPFIdPFBRECO = elPFIsoValueCharged03PFIdPFBRECO.clone() elPFIsoValueChargedAll03NoPFIdPFBRECO = elPFIsoValueChargedAll03PFIdPFBRECO.clone() @@ -55,27 +55,29 @@ #elPFIsoValuePU04NoPFIdPFBRECO.deposits[0].vetos = cms.vstring('EcalBarrel:ConeVeto(0.015)','EcalEndcaps:ConeVeto(0.015)') #elPFIsoValueGamma04NoPFIdPFBRECO.deposits[0].vetos = cms.vstring('EcalBarrel:RectangularEtaPhiVeto(-0.02,0.02,-0.5,0.5)','EcalEndcaps:ConeVeto(0.08)') -electronPFIsolationValuesPFBRECOSequence = ( - elPFIsoValueCharged03PFIdPFBRECO+ - elPFIsoValueChargedAll03PFIdPFBRECO+ - elPFIsoValueGamma03PFIdPFBRECO+ - elPFIsoValueNeutral03PFIdPFBRECO+ - elPFIsoValuePU03PFIdPFBRECO+ +electronPFIsolationValuesPFBRECOTask = cms.Task( + elPFIsoValueCharged03PFIdPFBRECO, + elPFIsoValueChargedAll03PFIdPFBRECO, + elPFIsoValueGamma03PFIdPFBRECO, + elPFIsoValueNeutral03PFIdPFBRECO, + elPFIsoValuePU03PFIdPFBRECO, ############################## - elPFIsoValueCharged04PFIdPFBRECO+ - elPFIsoValueChargedAll04PFIdPFBRECO+ - elPFIsoValueGamma04PFIdPFBRECO+ - elPFIsoValueNeutral04PFIdPFBRECO+ - elPFIsoValuePU04PFIdPFBRECO+ + elPFIsoValueCharged04PFIdPFBRECO, + elPFIsoValueChargedAll04PFIdPFBRECO, + elPFIsoValueGamma04PFIdPFBRECO, + elPFIsoValueNeutral04PFIdPFBRECO, + elPFIsoValuePU04PFIdPFBRECO, ############################## - elPFIsoValueCharged03NoPFIdPFBRECO+ - elPFIsoValueChargedAll03NoPFIdPFBRECO+ - elPFIsoValueGamma03NoPFIdPFBRECO+ - elPFIsoValueNeutral03NoPFIdPFBRECO+ - elPFIsoValuePU03NoPFIdPFBRECO+ + elPFIsoValueCharged03NoPFIdPFBRECO, + elPFIsoValueChargedAll03NoPFIdPFBRECO, + elPFIsoValueGamma03NoPFIdPFBRECO, + elPFIsoValueNeutral03NoPFIdPFBRECO, + elPFIsoValuePU03NoPFIdPFBRECO, ############################## - elPFIsoValueCharged04NoPFIdPFBRECO+ - elPFIsoValueChargedAll04NoPFIdPFBRECO+ - elPFIsoValueGamma04NoPFIdPFBRECO+ - elPFIsoValueNeutral04NoPFIdPFBRECO+ + elPFIsoValueCharged04NoPFIdPFBRECO, + elPFIsoValueChargedAll04NoPFIdPFBRECO, + elPFIsoValueGamma04NoPFIdPFBRECO, + elPFIsoValueNeutral04NoPFIdPFBRECO, elPFIsoValuePU04NoPFIdPFBRECO) + +electronPFIsolationValuesPFBRECOSequence = cms.Sequence(electronPFIsolationValuesPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationDepositsPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationDepositsPFBRECO_cff.py index 01f9f20957798..63f8f42b522fa 100644 --- a/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationDepositsPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationDepositsPFBRECO_cff.py @@ -10,10 +10,11 @@ muPFIsoDepositGammaPFBRECO=isoDepositReplace('pfSelectedMuonsPFBRECO','pfAllPhotonsPFBRECO') muPFIsoDepositPUPFBRECO=isoDepositReplace('pfSelectedMuonsPFBRECO','pfPileUpAllChargedParticlesPFBRECO') -muonPFIsolationDepositsPFBRECOSequence = cms.Sequence( - muPFIsoDepositChargedPFBRECO+ - muPFIsoDepositChargedAllPFBRECO+ - muPFIsoDepositGammaPFBRECO+ - muPFIsoDepositNeutralPFBRECO+ +muonPFIsolationDepositsPFBRECOTask = cms.Task( + muPFIsoDepositChargedPFBRECO, + muPFIsoDepositChargedAllPFBRECO, + muPFIsoDepositGammaPFBRECO, + muPFIsoDepositNeutralPFBRECO, muPFIsoDepositPUPFBRECO ) +muonPFIsolationDepositsPFBRECOSequence = cms.Sequence(muonPFIsolationDepositsPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationValuesPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationValuesPFBRECO_cff.py index d72ebab613f43..b0dbf35267493 100644 --- a/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationValuesPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/muonPFIsolationValuesPFBRECO_cff.py @@ -2,134 +2,177 @@ from RecoMuon.MuonIsolation.muonPFIsolationValues_cff import * -muPFIsoValueCharged03PFBRECO = muPFIsoValueCharged03.clone() -muPFIsoValueCharged03PFBRECO.deposits[0].src = 'muPFIsoDepositChargedPFBRECO' -muPFMeanDRIsoValueCharged03PFBRECO = muPFMeanDRIsoValueCharged03.clone() -muPFMeanDRIsoValueCharged03PFBRECO.deposits[0].src = 'muPFIsoDepositChargedPFBRECO' -muPFSumDRIsoValueCharged03PFBRECO = muPFSumDRIsoValueCharged03.clone() -muPFSumDRIsoValueCharged03PFBRECO.deposits[0].src = 'muPFIsoDepositChargedPFBRECO' -muPFIsoValueChargedAll03PFBRECO = muPFIsoValueChargedAll03.clone() -muPFIsoValueChargedAll03PFBRECO.deposits[0].src = 'muPFIsoDepositChargedAllPFBRECO' -muPFMeanDRIsoValueChargedAll03PFBRECO = muPFMeanDRIsoValueChargedAll03.clone() -muPFMeanDRIsoValueChargedAll03PFBRECO.deposits[0].src = 'muPFIsoDepositChargedAllPFBRECO' -muPFSumDRIsoValueChargedAll03PFBRECO = muPFSumDRIsoValueChargedAll03.clone() -muPFSumDRIsoValueChargedAll03PFBRECO.deposits[0].src = 'muPFIsoDepositChargedAllPFBRECO' -muPFIsoValueGamma03PFBRECO = muPFIsoValueGamma03.clone() -muPFIsoValueGamma03PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFMeanDRIsoValueGamma03PFBRECO = muPFMeanDRIsoValueGamma03.clone() -muPFMeanDRIsoValueGamma03PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFSumDRIsoValueGamma03PFBRECO = muPFSumDRIsoValueGamma03.clone() -muPFSumDRIsoValueGamma03PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFIsoValueNeutral03PFBRECO = muPFIsoValueNeutral03.clone() -muPFIsoValueNeutral03PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFMeanDRIsoValueNeutral03PFBRECO = muPFMeanDRIsoValueNeutral03.clone() -muPFMeanDRIsoValueNeutral03PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFSumDRIsoValueNeutral03PFBRECO = muPFSumDRIsoValueNeutral03.clone() -muPFSumDRIsoValueNeutral03PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFIsoValueGammaHighThreshold03PFBRECO = muPFIsoValueGammaHighThreshold03.clone() -muPFIsoValueGammaHighThreshold03PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFMeanDRIsoValueGammaHighThreshold03PFBRECO = muPFMeanDRIsoValueGammaHighThreshold03.clone() -muPFMeanDRIsoValueGammaHighThreshold03PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFSumDRIsoValueGammaHighThreshold03PFBRECO = muPFSumDRIsoValueGammaHighThreshold03.clone() -muPFSumDRIsoValueGammaHighThreshold03PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFIsoValueNeutralHighThreshold03PFBRECO = muPFIsoValueNeutralHighThreshold03.clone() -muPFIsoValueNeutralHighThreshold03PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFMeanDRIsoValueNeutralHighThreshold03PFBRECO = muPFMeanDRIsoValueNeutralHighThreshold03.clone() -muPFMeanDRIsoValueNeutralHighThreshold03PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFSumDRIsoValueNeutralHighThreshold03PFBRECO = muPFSumDRIsoValueNeutralHighThreshold03.clone() -muPFSumDRIsoValueNeutralHighThreshold03PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFIsoValuePU03PFBRECO = muPFIsoValuePU03.clone() -muPFIsoValuePU03PFBRECO.deposits[0].src = 'muPFIsoDepositPUPFBRECO' -muPFMeanDRIsoValuePU03PFBRECO = muPFMeanDRIsoValuePU03.clone() -muPFMeanDRIsoValuePU03PFBRECO.deposits[0].src = 'muPFIsoDepositPUPFBRECO' -muPFSumDRIsoValuePU03PFBRECO = muPFSumDRIsoValuePU03.clone() -muPFSumDRIsoValuePU03PFBRECO.deposits[0].src = 'muPFIsoDepositPUPFBRECO' +muPFIsoValueCharged03PFBRECO = muPFIsoValueCharged03.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedPFBRECO')} +) +muPFMeanDRIsoValueCharged03PFBRECO = muPFMeanDRIsoValueCharged03.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedPFBRECO')} +) +muPFSumDRIsoValueCharged03PFBRECO = muPFSumDRIsoValueCharged03.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedPFBRECO')} +) +muPFIsoValueChargedAll03PFBRECO = muPFIsoValueChargedAll03.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedAllPFBRECO')} +) +muPFMeanDRIsoValueChargedAll03PFBRECO = muPFMeanDRIsoValueChargedAll03.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedAllPFBRECO')} +) +muPFSumDRIsoValueChargedAll03PFBRECO = muPFSumDRIsoValueChargedAll03.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedAllPFBRECO')} +) +muPFIsoValueGamma03PFBRECO = muPFIsoValueGamma03.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFMeanDRIsoValueGamma03PFBRECO = muPFMeanDRIsoValueGamma03.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFSumDRIsoValueGamma03PFBRECO = muPFSumDRIsoValueGamma03.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFIsoValueNeutral03PFBRECO = muPFIsoValueNeutral03.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFMeanDRIsoValueNeutral03PFBRECO = muPFMeanDRIsoValueNeutral03.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFSumDRIsoValueNeutral03PFBRECO = muPFSumDRIsoValueNeutral03.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFIsoValueGammaHighThreshold03PFBRECO = muPFIsoValueGammaHighThreshold03.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFMeanDRIsoValueGammaHighThreshold03PFBRECO = muPFMeanDRIsoValueGammaHighThreshold03.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFSumDRIsoValueGammaHighThreshold03PFBRECO = muPFSumDRIsoValueGammaHighThreshold03.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFIsoValueNeutralHighThreshold03PFBRECO = muPFIsoValueNeutralHighThreshold03.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFMeanDRIsoValueNeutralHighThreshold03PFBRECO = muPFMeanDRIsoValueNeutralHighThreshold03.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFSumDRIsoValueNeutralHighThreshold03PFBRECO = muPFSumDRIsoValueNeutralHighThreshold03.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFIsoValuePU03PFBRECO = muPFIsoValuePU03.clone( + deposits = {0: dict(src = 'muPFIsoDepositPUPFBRECO')} +) +muPFMeanDRIsoValuePU03PFBRECO = muPFMeanDRIsoValuePU03.clone( + deposits = {0: dict(src = 'muPFIsoDepositPUPFBRECO')} +) +muPFSumDRIsoValuePU03PFBRECO = muPFSumDRIsoValuePU03.clone( + deposits = {0: dict(src = 'muPFIsoDepositPUPFBRECO')} +) ############################## -muPFIsoValueCharged04PFBRECO = muPFIsoValueCharged04.clone() -muPFIsoValueCharged04PFBRECO.deposits[0].src = 'muPFIsoDepositChargedPFBRECO' -muPFMeanDRIsoValueCharged04PFBRECO = muPFMeanDRIsoValueCharged04.clone() -muPFMeanDRIsoValueCharged04PFBRECO.deposits[0].src = 'muPFIsoDepositChargedPFBRECO' -muPFSumDRIsoValueCharged04PFBRECO = muPFSumDRIsoValueCharged04.clone() -muPFSumDRIsoValueCharged04PFBRECO.deposits[0].src = 'muPFIsoDepositChargedPFBRECO' -muPFIsoValueChargedAll04PFBRECO = muPFIsoValueChargedAll04.clone() -muPFIsoValueChargedAll04PFBRECO.deposits[0].src = 'muPFIsoDepositChargedAllPFBRECO' -muPFMeanDRIsoValueChargedAll04PFBRECO = muPFMeanDRIsoValueChargedAll04.clone() -muPFMeanDRIsoValueChargedAll04PFBRECO.deposits[0].src = 'muPFIsoDepositChargedAllPFBRECO' -muPFSumDRIsoValueChargedAll04PFBRECO = muPFSumDRIsoValueChargedAll04.clone() -muPFSumDRIsoValueChargedAll04PFBRECO.deposits[0].src = 'muPFIsoDepositChargedAllPFBRECO' -muPFIsoValueGamma04PFBRECO = muPFIsoValueGamma04.clone() -muPFIsoValueGamma04PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFMeanDRIsoValueGamma04PFBRECO = muPFMeanDRIsoValueGamma04.clone() -muPFMeanDRIsoValueGamma04PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFSumDRIsoValueGamma04PFBRECO = muPFSumDRIsoValueGamma04.clone() -muPFSumDRIsoValueGamma04PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFIsoValueNeutral04PFBRECO = muPFIsoValueNeutral04.clone() -muPFIsoValueNeutral04PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFMeanDRIsoValueNeutral04PFBRECO = muPFMeanDRIsoValueNeutral04.clone() -muPFMeanDRIsoValueNeutral04PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFSumDRIsoValueNeutral04PFBRECO = muPFSumDRIsoValueNeutral04.clone() -muPFSumDRIsoValueNeutral04PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFIsoValueGammaHighThreshold04PFBRECO = muPFIsoValueGammaHighThreshold04.clone() -muPFIsoValueGammaHighThreshold04PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFMeanDRIsoValueGammaHighThreshold04PFBRECO = muPFMeanDRIsoValueGammaHighThreshold04.clone() -muPFMeanDRIsoValueGammaHighThreshold04PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFSumDRIsoValueGammaHighThreshold04PFBRECO = muPFSumDRIsoValueGammaHighThreshold04.clone() -muPFSumDRIsoValueGammaHighThreshold04PFBRECO.deposits[0].src = 'muPFIsoDepositGammaPFBRECO' -muPFIsoValueNeutralHighThreshold04PFBRECO = muPFIsoValueNeutralHighThreshold04.clone() -muPFIsoValueNeutralHighThreshold04PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFMeanDRIsoValueNeutralHighThreshold04PFBRECO = muPFMeanDRIsoValueNeutralHighThreshold04.clone() -muPFMeanDRIsoValueNeutralHighThreshold04PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFSumDRIsoValueNeutralHighThreshold04PFBRECO = muPFSumDRIsoValueNeutralHighThreshold04.clone() -muPFSumDRIsoValueNeutralHighThreshold04PFBRECO.deposits[0].src = 'muPFIsoDepositNeutralPFBRECO' -muPFIsoValuePU04PFBRECO = muPFIsoValuePU04.clone() -muPFIsoValuePU04PFBRECO.deposits[0].src = 'muPFIsoDepositPUPFBRECO' -muPFMeanDRIsoValuePU04PFBRECO = muPFMeanDRIsoValuePU04.clone() -muPFMeanDRIsoValuePU04PFBRECO.deposits[0].src = 'muPFIsoDepositPUPFBRECO' -muPFSumDRIsoValuePU04PFBRECO = muPFSumDRIsoValuePU04.clone() -muPFSumDRIsoValuePU04PFBRECO.deposits[0].src = 'muPFIsoDepositPUPFBRECO' +muPFIsoValueCharged04PFBRECO = muPFIsoValueCharged04.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedPFBRECO')} +) +muPFMeanDRIsoValueCharged04PFBRECO = muPFMeanDRIsoValueCharged04.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedPFBRECO')} +) +muPFSumDRIsoValueCharged04PFBRECO = muPFSumDRIsoValueCharged04.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedPFBRECO')} +) +muPFIsoValueChargedAll04PFBRECO = muPFIsoValueChargedAll04.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedAllPFBRECO')} +) +muPFMeanDRIsoValueChargedAll04PFBRECO = muPFMeanDRIsoValueChargedAll04.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedAllPFBRECO')} +) +muPFSumDRIsoValueChargedAll04PFBRECO = muPFSumDRIsoValueChargedAll04.clone( + deposits = {0: dict(src = 'muPFIsoDepositChargedAllPFBRECO')} +) +muPFIsoValueGamma04PFBRECO = muPFIsoValueGamma04.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFMeanDRIsoValueGamma04PFBRECO = muPFMeanDRIsoValueGamma04.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFSumDRIsoValueGamma04PFBRECO = muPFSumDRIsoValueGamma04.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFIsoValueNeutral04PFBRECO = muPFIsoValueNeutral04.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFMeanDRIsoValueNeutral04PFBRECO = muPFMeanDRIsoValueNeutral04.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFSumDRIsoValueNeutral04PFBRECO = muPFSumDRIsoValueNeutral04.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFIsoValueGammaHighThreshold04PFBRECO = muPFIsoValueGammaHighThreshold04.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFMeanDRIsoValueGammaHighThreshold04PFBRECO = muPFMeanDRIsoValueGammaHighThreshold04.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFSumDRIsoValueGammaHighThreshold04PFBRECO = muPFSumDRIsoValueGammaHighThreshold04.clone( + deposits = {0: dict(src = 'muPFIsoDepositGammaPFBRECO')} +) +muPFIsoValueNeutralHighThreshold04PFBRECO = muPFIsoValueNeutralHighThreshold04.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFMeanDRIsoValueNeutralHighThreshold04PFBRECO = muPFMeanDRIsoValueNeutralHighThreshold04.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFSumDRIsoValueNeutralHighThreshold04PFBRECO = muPFSumDRIsoValueNeutralHighThreshold04.clone( + deposits = {0: dict(src = 'muPFIsoDepositNeutralPFBRECO')} +) +muPFIsoValuePU04PFBRECO = muPFIsoValuePU04.clone( + deposits = {0: dict(src = 'muPFIsoDepositPUPFBRECO')} +) +muPFMeanDRIsoValuePU04PFBRECO = muPFMeanDRIsoValuePU04.clone( + deposits = {0: dict(src = 'muPFIsoDepositPUPFBRECO')} +) +muPFSumDRIsoValuePU04PFBRECO = muPFSumDRIsoValuePU04.clone( + deposits = {0: dict(src = 'muPFIsoDepositPUPFBRECO')} +) -muonPFIsolationValuesPFBRECOSequence = ( - muPFIsoValueCharged03PFBRECO+ - muPFMeanDRIsoValueCharged03PFBRECO+ - muPFSumDRIsoValueCharged03PFBRECO+ - muPFIsoValueChargedAll03PFBRECO+ - muPFMeanDRIsoValueChargedAll03PFBRECO+ - muPFSumDRIsoValueChargedAll03PFBRECO+ - muPFIsoValueGamma03PFBRECO+ - muPFMeanDRIsoValueGamma03PFBRECO+ - muPFSumDRIsoValueGamma03PFBRECO+ - muPFIsoValueNeutral03PFBRECO+ - muPFMeanDRIsoValueNeutral03PFBRECO+ - muPFSumDRIsoValueNeutral03PFBRECO+ - muPFIsoValueGammaHighThreshold03PFBRECO+ - muPFMeanDRIsoValueGammaHighThreshold03PFBRECO+ - muPFSumDRIsoValueGammaHighThreshold03PFBRECO+ - muPFIsoValueNeutralHighThreshold03PFBRECO+ - muPFMeanDRIsoValueNeutralHighThreshold03PFBRECO+ - muPFSumDRIsoValueNeutralHighThreshold03PFBRECO+ - muPFIsoValuePU03PFBRECO+ - muPFMeanDRIsoValuePU03PFBRECO+ - muPFSumDRIsoValuePU03PFBRECO+ +muonPFIsolationValuesPFBRECOTask = cms.Task( + muPFIsoValueCharged03PFBRECO, + muPFMeanDRIsoValueCharged03PFBRECO, + muPFSumDRIsoValueCharged03PFBRECO, + muPFIsoValueChargedAll03PFBRECO, + muPFMeanDRIsoValueChargedAll03PFBRECO, + muPFSumDRIsoValueChargedAll03PFBRECO, + muPFIsoValueGamma03PFBRECO, + muPFMeanDRIsoValueGamma03PFBRECO, + muPFSumDRIsoValueGamma03PFBRECO, + muPFIsoValueNeutral03PFBRECO, + muPFMeanDRIsoValueNeutral03PFBRECO, + muPFSumDRIsoValueNeutral03PFBRECO, + muPFIsoValueGammaHighThreshold03PFBRECO, + muPFMeanDRIsoValueGammaHighThreshold03PFBRECO, + muPFSumDRIsoValueGammaHighThreshold03PFBRECO, + muPFIsoValueNeutralHighThreshold03PFBRECO, + muPFMeanDRIsoValueNeutralHighThreshold03PFBRECO, + muPFSumDRIsoValueNeutralHighThreshold03PFBRECO, + muPFIsoValuePU03PFBRECO, + muPFMeanDRIsoValuePU03PFBRECO, + muPFSumDRIsoValuePU03PFBRECO, ############################## - muPFIsoValueCharged04PFBRECO+ - muPFMeanDRIsoValueCharged04PFBRECO+ - muPFSumDRIsoValueCharged04PFBRECO+ - muPFIsoValueChargedAll04PFBRECO+ - muPFMeanDRIsoValueChargedAll04PFBRECO+ - muPFSumDRIsoValueChargedAll04PFBRECO+ - muPFIsoValueGamma04PFBRECO+ - muPFMeanDRIsoValueGamma04PFBRECO+ - muPFSumDRIsoValueGamma04PFBRECO+ - muPFIsoValueNeutral04PFBRECO+ - muPFMeanDRIsoValueNeutral04PFBRECO+ - muPFSumDRIsoValueNeutral04PFBRECO+ - muPFIsoValueGammaHighThreshold04PFBRECO+ - muPFMeanDRIsoValueGammaHighThreshold04PFBRECO+ - muPFSumDRIsoValueGammaHighThreshold04PFBRECO+ - muPFIsoValueNeutralHighThreshold04PFBRECO+ - muPFMeanDRIsoValueNeutralHighThreshold04PFBRECO+ - muPFSumDRIsoValueNeutralHighThreshold04PFBRECO+ - muPFIsoValuePU04PFBRECO+ - muPFMeanDRIsoValuePU04PFBRECO+ + muPFIsoValueCharged04PFBRECO, + muPFMeanDRIsoValueCharged04PFBRECO, + muPFSumDRIsoValueCharged04PFBRECO, + muPFIsoValueChargedAll04PFBRECO, + muPFMeanDRIsoValueChargedAll04PFBRECO, + muPFSumDRIsoValueChargedAll04PFBRECO, + muPFIsoValueGamma04PFBRECO, + muPFMeanDRIsoValueGamma04PFBRECO, + muPFSumDRIsoValueGamma04PFBRECO, + muPFIsoValueNeutral04PFBRECO, + muPFMeanDRIsoValueNeutral04PFBRECO, + muPFSumDRIsoValueNeutral04PFBRECO, + muPFIsoValueGammaHighThreshold04PFBRECO, + muPFMeanDRIsoValueGammaHighThreshold04PFBRECO, + muPFSumDRIsoValueGammaHighThreshold04PFBRECO, + muPFIsoValueNeutralHighThreshold04PFBRECO, + muPFMeanDRIsoValueNeutralHighThreshold04PFBRECO, + muPFSumDRIsoValueNeutralHighThreshold04PFBRECO, + muPFIsoValuePU04PFBRECO, + muPFMeanDRIsoValuePU04PFBRECO, muPFSumDRIsoValuePU04PFBRECO ) +muonPFIsolationValuesPFBRECOSequence = cms.Sequence(muonPFIsolationValuesPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolationPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolationPFBRECO_cff.py index 57eaed64339ce..eb25259aa4e56 100644 --- a/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolationPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolationPFBRECO_cff.py @@ -3,8 +3,8 @@ from CommonTools.ParticleFlow.Isolation.electronPFIsolationDepositsPFBRECO_cff import * from CommonTools.ParticleFlow.Isolation.electronPFIsolationValuesPFBRECO_cff import * -pfElectronIsolationPFBRECOSequence = cms.Sequence( - electronPFIsolationDepositsPFBRECOSequence + - electronPFIsolationValuesPFBRECOSequence +pfElectronIsolationPFBRECOTask = cms.Task( + electronPFIsolationDepositsPFBRECOTask , + electronPFIsolationValuesPFBRECOTask ) - +pfElectronIsolationPFBRECOSequence = cms.Sequence(pfElectronIsolationPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolation_cff.py b/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolation_cff.py index dbabcbdd3bfc8..410f57da50249 100644 --- a/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolation_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/pfElectronIsolation_cff.py @@ -3,8 +3,8 @@ from RecoParticleFlow.PFProducer.electronPFIsolationDeposits_cff import * from RecoParticleFlow.PFProducer.electronPFIsolationValues_cff import * -pfElectronIsolationSequence = cms.Sequence( - electronPFIsolationDepositsSequence + - electronPFIsolationValuesSequence +pfElectronIsolationTask = cms.Task( + electronPFIsolationDepositsTask , + electronPFIsolationValuesTask ) - +pfElectronIsolationSequence = cms.Sequence(pfElectronIsolationTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolationPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolationPFBRECO_cff.py index 8e3882892053e..be60327347ae4 100644 --- a/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolationPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolationPFBRECO_cff.py @@ -5,7 +5,8 @@ from CommonTools.ParticleFlow.Isolation.muonPFIsolationDepositsPFBRECO_cff import * from CommonTools.ParticleFlow.Isolation.muonPFIsolationValuesPFBRECO_cff import * -muonPFIsolationPFBRECOSequence = cms.Sequence( - muonPFIsolationDepositsPFBRECOSequence + - muonPFIsolationValuesPFBRECOSequence +muonPFIsolationPFBRECOTask = cms.Task( + muonPFIsolationDepositsPFBRECOTask , + muonPFIsolationValuesPFBRECOTask ) +muonPFIsolationPFBRECOSequence = cms.Sequence(muonPFIsolationPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolation_cff.py b/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolation_cff.py index eb0495e8fe869..efa7c7c5d0d07 100644 --- a/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolation_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/pfMuonIsolation_cff.py @@ -13,6 +13,7 @@ muPFIsoDepositGamma.src = sourceMuons muPFIsoDepositPU.src = sourceMuons -pfMuonIsolationSequence = cms.Sequence( - muonPFIsolationSequence +pfMuonIsolationTask = cms.Task( + muonPFIsolationTask ) +pfMuonIsolationSequence = cms.Sequence(pfMuonIsolationTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolationPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolationPFBRECO_cff.py index 77480bf673ec6..83854f1d1f94f 100644 --- a/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolationPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolationPFBRECO_cff.py @@ -3,8 +3,8 @@ from CommonTools.ParticleFlow.Isolation.photonPFIsolationDepositsPFBRECO_cff import * from CommonTools.ParticleFlow.Isolation.photonPFIsolationValuesPFBRECO_cff import * -pfPhotonIsolationPFBRECOSequence = cms.Sequence( - photonPFIsolationDepositsPFBRECOSequence + - photonPFIsolationValuesPFBRECOSequence +pfPhotonIsolationPFBRECOTask = cms.Task( + photonPFIsolationDepositsPFBRECOTask , + photonPFIsolationValuesPFBRECOTask ) - +pfPhotonIsolationPFBRECOSequence = cms.Sequence(pfPhotonIsolationPFBRECOTask) diff --git a/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolation_cff.py b/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolation_cff.py index b72ceb158ef29..b1d1b183589b6 100644 --- a/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolation_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/pfPhotonIsolation_cff.py @@ -3,8 +3,7 @@ from RecoParticleFlow.PFProducer.photonPFIsolationDeposits_cff import * from RecoParticleFlow.PFProducer.photonPFIsolationValues_cff import * -pfPhotonIsolationSequence = cms.Sequence( - photonPFIsolationDepositsSequence + - photonPFIsolationValuesSequence +pfPhotonIsolationTask = cms.Task( + photonPFIsolationDepositsTask , + photonPFIsolationValuesTask ) - diff --git a/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationDepositsPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationDepositsPFBRECO_cff.py index 30664601186c6..47ce106591707 100644 --- a/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationDepositsPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationDepositsPFBRECO_cff.py @@ -25,15 +25,15 @@ ) ) -phPFIsoDepositChargedPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) -phPFIsoDepositChargedAllPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) -phPFIsoDepositNeutralPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) -phPFIsoDepositPUPFBRECO.ExtractorPSet.DR_Veto = cms.double(0) +phPFIsoDepositChargedPFBRECO.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositChargedAllPFBRECO.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositNeutralPFBRECO.ExtractorPSet.DR_Veto = 0 +phPFIsoDepositPUPFBRECO.ExtractorPSet.DR_Veto = 0 -photonPFIsolationDepositsPFBRECOSequence = cms.Sequence( - phPFIsoDepositChargedPFBRECO+ - phPFIsoDepositChargedAllPFBRECO+ - phPFIsoDepositGammaPFBRECO+ - phPFIsoDepositNeutralPFBRECO+ +photonPFIsolationDepositsPFBRECOTask = cms.Task( + phPFIsoDepositChargedPFBRECO, + phPFIsoDepositChargedAllPFBRECO, + phPFIsoDepositGammaPFBRECO, + phPFIsoDepositNeutralPFBRECO, phPFIsoDepositPUPFBRECO ) diff --git a/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationValuesPFBRECO_cff.py b/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationValuesPFBRECO_cff.py index 832904354175a..39ce36ce0317e 100644 --- a/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationValuesPFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/Isolation/photonPFIsolationValuesPFBRECO_cff.py @@ -2,46 +2,47 @@ from RecoParticleFlow.PFProducer.photonPFIsolationValues_cff import * -phPFIsoValueCharged03PFIdPFBRECO = phPFIsoValueCharged03PFId.clone() -phPFIsoValueCharged03PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositChargedPFBRECO' - -phPFIsoValueChargedAll03PFIdPFBRECO = phPFIsoValueChargedAll03PFId.clone() -phPFIsoValueChargedAll03PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositChargedAllPFBRECO' - -phPFIsoValueGamma03PFIdPFBRECO = phPFIsoValueGamma03PFId.clone() -phPFIsoValueGamma03PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositGammaPFBRECO' - -phPFIsoValueNeutral03PFIdPFBRECO = phPFIsoValueNeutral03PFId.clone() -phPFIsoValueNeutral03PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositNeutralPFBRECO' - -phPFIsoValuePU03PFIdPFBRECO = phPFIsoValuePU03PFId.clone() -phPFIsoValuePU03PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositPUPFBRECO' - -phPFIsoValueCharged04PFIdPFBRECO = phPFIsoValueCharged04PFId.clone() -phPFIsoValueCharged04PFIdPFBRECO.deposits[0]. src = 'phPFIsoDepositChargedPFBRECO' - -phPFIsoValueChargedAll04PFIdPFBRECO = phPFIsoValueChargedAll04PFId.clone() -phPFIsoValueChargedAll04PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositChargedAllPFBRECO' - -phPFIsoValueGamma04PFIdPFBRECO = phPFIsoValueGamma04PFId.clone() -phPFIsoValueGamma04PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositGammaPFBRECO' - -phPFIsoValueNeutral04PFIdPFBRECO = phPFIsoValueNeutral04PFId.clone() -phPFIsoValueNeutral04PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositNeutralPFBRECO' - -phPFIsoValuePU04PFIdPFBRECO = phPFIsoValuePU04PFId.clone() -phPFIsoValuePU04PFIdPFBRECO.deposits[0].src = 'phPFIsoDepositPUPFBRECO' - -photonPFIsolationValuesPFBRECOSequence = ( - phPFIsoValueCharged03PFIdPFBRECO+ - phPFIsoValueChargedAll03PFIdPFBRECO+ - phPFIsoValueGamma03PFIdPFBRECO+ - phPFIsoValueNeutral03PFIdPFBRECO+ - phPFIsoValuePU03PFIdPFBRECO+ +phPFIsoValueCharged03PFIdPFBRECO = phPFIsoValueCharged03PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositChargedPFBRECO')} +) +phPFIsoValueChargedAll03PFIdPFBRECO = phPFIsoValueChargedAll03PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositChargedAllPFBRECO')} +) +phPFIsoValueGamma03PFIdPFBRECO = phPFIsoValueGamma03PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositGammaPFBRECO')} +) +phPFIsoValueNeutral03PFIdPFBRECO = phPFIsoValueNeutral03PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositNeutralPFBRECO')} +) +phPFIsoValuePU03PFIdPFBRECO = phPFIsoValuePU03PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositPUPFBRECO')} +) +phPFIsoValueCharged04PFIdPFBRECO = phPFIsoValueCharged04PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositChargedPFBRECO')} +) +phPFIsoValueChargedAll04PFIdPFBRECO = phPFIsoValueChargedAll04PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositChargedAllPFBRECO')} +) +phPFIsoValueGamma04PFIdPFBRECO = phPFIsoValueGamma04PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositGammaPFBRECO')} +) +phPFIsoValueNeutral04PFIdPFBRECO = phPFIsoValueNeutral04PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositNeutralPFBRECO')} +) +phPFIsoValuePU04PFIdPFBRECO = phPFIsoValuePU04PFId.clone( + deposits = {0: dict(src = 'phPFIsoDepositPUPFBRECO')} +) +photonPFIsolationValuesPFBRECOTask = cms.Task( + phPFIsoValueCharged03PFIdPFBRECO, + phPFIsoValueChargedAll03PFIdPFBRECO, + phPFIsoValueGamma03PFIdPFBRECO, + phPFIsoValueNeutral03PFIdPFBRECO, + phPFIsoValuePU03PFIdPFBRECO, ############################## - phPFIsoValueCharged04PFIdPFBRECO+ - phPFIsoValueChargedAll04PFIdPFBRECO+ - phPFIsoValueGamma04PFIdPFBRECO+ - phPFIsoValueNeutral04PFIdPFBRECO+ + phPFIsoValueCharged04PFIdPFBRECO, + phPFIsoValueChargedAll04PFIdPFBRECO, + phPFIsoValueGamma04PFIdPFBRECO, + phPFIsoValueNeutral04PFIdPFBRECO, phPFIsoValuePU04PFIdPFBRECO ) + diff --git a/CommonTools/ParticleFlow/python/PF2PAT_cff.py b/CommonTools/ParticleFlow/python/PF2PAT_cff.py index 8666c029e6f3b..703ed403179a1 100644 --- a/CommonTools/ParticleFlow/python/PF2PAT_cff.py +++ b/CommonTools/ParticleFlow/python/PF2PAT_cff.py @@ -2,4 +2,5 @@ from CommonTools.ParticleFlow.PFBRECO_cff import * -PF2PAT = cms.Sequence(PFBRECO) +PF2PATTask = cms.Task(PFBRECOTask) +PF2PAT = cms.Sequence(PF2PATTask) diff --git a/CommonTools/ParticleFlow/python/PFBRECO_cff.py b/CommonTools/ParticleFlow/python/PFBRECO_cff.py index 80aceacf4ab8b..c88e643fc85de 100644 --- a/CommonTools/ParticleFlow/python/PFBRECO_cff.py +++ b/CommonTools/ParticleFlow/python/PFBRECO_cff.py @@ -49,13 +49,13 @@ pfAllNeutralHadronsPFBRECO, pfAllChargedHadronsPFBRECO, pfAllPhotonsPFBRECO, - # charged hadrons + electrons + muons + # charged hadrons , electrons , muons pfAllChargedParticlesPFBRECO, # same, but from pile up pfPileUpAllChargedParticlesPFBRECO, pfAllNeutralHadronsAndPhotonsPFBRECO -# + -# pfAllElectronsPFBRECO+ +# , +# pfAllElectronsPFBRECO, # pfAllMuonsPFBRECO ) pfSortByTypePFBRECOSequence = cms.Sequence(pfSortByTypePFBRECOTask) @@ -65,7 +65,7 @@ # In principle JME sequence should go here, but this is used in RECO # in addition to here, and is used in the "first-step" PF process # so needs to go later. - #pfNoPileUpJMESequence + + #pfNoPileUpJMETask , pfNoPileUpPFBRECOTask, pfSortByTypePFBRECOTask ) @@ -82,36 +82,39 @@ "phPFIsoValueGamma04PFIdPFBRECO"], deltaBetaIsolationValueMap = 'phPFIsoValuePU04PFIdPFBRECO' ) -pfPhotonPFBRECOSequence = cms.Sequence( - pfSelectedPhotonsPFBRECO + - pfPhotonIsolationPFBRECOSequence + +pfPhotonPFBRECOTask = cms.Task( + pfSelectedPhotonsPFBRECO , + pfPhotonIsolationPFBRECOTask , # selecting isolated photons: pfIsolatedPhotonsPFBRECO ) +pfPhotonPFBRECOSequence = cms.Sequence(pfPhotonPFBRECOTask) from CommonTools.ParticleFlow.ParticleSelectors.pfMuonsFromVertex_cfi import * pfMuonsFromVertexPFBRECO = pfMuonsFromVertex.clone( src = 'pfAllMuonsPFBRECO' ) from CommonTools.ParticleFlow.Isolation.pfIsolatedMuons_cfi import * pfIsolatedMuonsPFBRECO = pfIsolatedMuons.clone( src = 'pfMuonsFromVertexPFBRECO' ) pfMuonsPFBRECO = pfIsolatedMuonsPFBRECO.clone(cut = "pt > 5 & muonRef.isAvailable()") -pfMuonPFBRECOSequence = cms.Sequence( - pfAllMuonsPFBRECO + - pfMuonsFromVertexPFBRECO + - pfIsolatedMuonsPFBRECO+ +pfMuonPFBRECOTask = cms.Task( + pfAllMuonsPFBRECO , + pfMuonsFromVertexPFBRECO , + pfIsolatedMuonsPFBRECO, pfMuonsPFBRECO ) +pfMuonPFBRECOSequence = cms.Sequence(pfMuonPFBRECOTask) from CommonTools.ParticleFlow.ParticleSelectors.pfElectronsFromVertex_cfi import * pfElectronsFromVertexPFBRECO = pfElectronsFromVertex.clone( src = 'pfAllElectronsPFBRECO' ) from CommonTools.ParticleFlow.Isolation.pfIsolatedElectrons_cfi import * pfIsolatedElectronsPFBRECO = pfIsolatedElectrons.clone( src = 'pfElectronsFromVertexPFBRECO' ) pfElectronsPFBRECO = pfIsolatedElectronsPFBRECO.clone( cut = " pt > 5 & gsfElectronRef.isAvailable() & gsfTrackRef.hitPattern().numberOfLostHits('MISSING_INNER_HITS')<2") -pfElectronPFBRECOSequence = cms.Sequence( - pfAllElectronsPFBRECO + - pfElectronsFromVertexPFBRECO + - pfIsolatedElectronsPFBRECO + +pfElectronPFBRECOTask = cms.Task( + pfAllElectronsPFBRECO , + pfElectronsFromVertexPFBRECO , + pfIsolatedElectronsPFBRECO , pfElectronsPFBRECO ) +pfElectronPFBRECOSequence = cms.Sequence(pfElectronPFBRECOTask) from CommonTools.ParticleFlow.Tools.jetTools import jetAlgo pfJetsPFBRECO = jetAlgo('AK4') @@ -119,10 +122,11 @@ pfJetsPtrsPFBRECO = cms.EDProducer("PFJetFwdPtrProducer", src=cms.InputTag("pfJetsPFBRECO") ) -pfJetPFBRECOSequence = cms.Sequence( - pfJetsPFBRECO + +pfJetPFBRECOTask = cms.Task( + pfJetsPFBRECO , pfJetsPtrsPFBRECO ) +pfJetPFBRECOSequence = cms.Sequence(pfJetPFBRECOTask) from CommonTools.ParticleFlow.pfTaus_cff import * @@ -137,7 +141,8 @@ #pfWeightedNeutralHadronsPFBRECO = pfWeightedNeutralHadrons.clone( src = 'pfAllNeutralHadronsPFBRECO', #chargedFromPV = 'pfAllChargedParticlesPFBRECO', #chargedFromPU = 'pfPileUpAllChargedParticlesPFBRECO' ) -#pfDeltaBetaWeightingPFBRECOSequence = cms.Sequence(pfWeightedPhotonsPFBRECO+pfWeightedNeutralHadronsPFBRECO) +#pfDeltaBetaWeightingPFBRECOTask = cms.Task(pfWeightedPhotonsPFBRECO+pfWeightedNeutralHadronsPFBRECO) +#pfDeltaBetaWeightingPFBRECOSequence = cms.Sequence(pfDeltaBetaWeightingPFBRECOTask) # sequential top projection cleaning from CommonTools.ParticleFlow.TopProjectors.pfNoMuon_cfi import * @@ -160,22 +165,24 @@ # generator tools from CommonTools.ParticleFlow.genForPF2PAT_cff import * -PFBRECO = cms.Sequence( - particleFlowPtrs + - pfParticleSelectionPFBRECOSequence + - pfNoPileUpJMESequence + -# pfDeltaBetaWeightingPFBRECOSequence + - pfPhotonPFBRECOSequence + - pfMuonPFBRECOSequence + - pfNoMuonPFBRECO + - pfNoMuonJMEPFBRECO + - pfElectronPFBRECOSequence + - pfNoElectronPFBRECO + - pfNoElectronJMEPFBRECO + - pfNoElectronJMEClonesPFBRECO+ - pfJetPFBRECOSequence + - pfNoJetPFBRECO + - pfTauSequence + - pfNoTauPFBRECO + +PFBRECOTask = cms.Task( + particleFlowPtrs , + pfParticleSelectionPFBRECOTask , + pfNoPileUpJMETask , +# pfDeltaBetaWeightingPFBRECOTask , + pfPhotonPFBRECOTask , + pfMuonPFBRECOTask , + pfNoMuonPFBRECO , + pfNoMuonJMEPFBRECO , + pfElectronPFBRECOTask , + pfNoElectronPFBRECO , + pfNoElectronJMEPFBRECO , + pfNoElectronJMEClonesPFBRECO, + pfJetPFBRECOTask , + pfNoJetPFBRECO , + pfTauTask , + pfNoTauPFBRECO , pfMETPFBRECO ) +PFBRECO = cms.Sequence(PFBRECOTask) + diff --git a/CommonTools/ParticleFlow/python/deltaBetaWeights_cff.py b/CommonTools/ParticleFlow/python/deltaBetaWeights_cff.py index d9aec26fca35e..617f7da121c29 100644 --- a/CommonTools/ParticleFlow/python/deltaBetaWeights_cff.py +++ b/CommonTools/ParticleFlow/python/deltaBetaWeights_cff.py @@ -1,4 +1,5 @@ import FWCore.ParameterSet.Config as cms from CommonTools.ParticleFlow.deltaBetaWeights_cfi import * -pfDeltaBetaWeightingSequence = cms.Sequence(pfWeightedPhotons+pfWeightedNeutralHadrons) +pfDeltaBetaWeightingTask = cms.Task(pfWeightedPhotons,pfWeightedNeutralHadrons) +pfDeltaBetaWeightingSequence = cms.Sequence(pfDeltaBetaWeightingTask) diff --git a/CommonTools/ParticleFlow/python/genForPF2PAT_cff.py b/CommonTools/ParticleFlow/python/genForPF2PAT_cff.py index 25e0d976df883..aa25754e6327e 100644 --- a/CommonTools/ParticleFlow/python/genForPF2PAT_cff.py +++ b/CommonTools/ParticleFlow/python/genForPF2PAT_cff.py @@ -5,8 +5,9 @@ from RecoJets.Configuration.RecoGenJets_cff import ak4GenJetsNoNu, ak8GenJetsNoNu -genForPF2PATSequence = cms.Sequence( - genParticlesForJetsNoNu + - ak4GenJetsNoNu + +genForPF2PATTask = cms.Task( + genParticlesForJetsNoNu , + ak4GenJetsNoNu , ak8GenJetsNoNu ) +genForPF2PATSequence = cms.Sequence(genForPF2PATTask) diff --git a/CommonTools/ParticleFlow/python/pfElectrons_cff.py b/CommonTools/ParticleFlow/python/pfElectrons_cff.py index 1dcf40eae56a8..9a53c8dd03cb7 100644 --- a/CommonTools/ParticleFlow/python/pfElectrons_cff.py +++ b/CommonTools/ParticleFlow/python/pfElectrons_cff.py @@ -7,13 +7,10 @@ pfElectrons = pfIsolatedElectrons.clone( cut = " pt > 5 & gsfElectronRef.isAvailable() & gsfTrackRef.hitPattern().numberOfLostHits('MISSING_INNER_HITS')<2") -pfElectronSequence = cms.Sequence( - pfAllElectrons + - pfElectronsFromVertex + - pfIsolatedElectrons + +pfElectronTask = cms.Task( + pfAllElectrons , + pfElectronsFromVertex , + pfIsolatedElectrons , pfElectrons ) - - - - +pfElectronSequence = cms.Sequence(pfElectronTask) diff --git a/CommonTools/ParticleFlow/python/pfJets_cff.py b/CommonTools/ParticleFlow/python/pfJets_cff.py index f7f2414ce470b..741d817850728 100644 --- a/CommonTools/ParticleFlow/python/pfJets_cff.py +++ b/CommonTools/ParticleFlow/python/pfJets_cff.py @@ -14,8 +14,9 @@ #pfJets.src = 'allPfJets' #pfJets.ptMin = 10 -pfJetSequence = cms.Sequence( -# allPfJets * - pfJets + +pfJetTask = cms.Task( +# allPfJets , + pfJets , pfJetsPtrs ) +pfJetSequence = cms.Sequence(pfJetTask) diff --git a/CommonTools/ParticleFlow/python/pfMuons_cff.py b/CommonTools/ParticleFlow/python/pfMuons_cff.py index 64518c12ca48a..86cfae7cd610f 100644 --- a/CommonTools/ParticleFlow/python/pfMuons_cff.py +++ b/CommonTools/ParticleFlow/python/pfMuons_cff.py @@ -8,13 +8,10 @@ pfMuons = pfIsolatedMuons.clone(cut = "pt > 5 & muonRef.isAvailable()") -pfMuonSequence = cms.Sequence( - pfAllMuons + - pfMuonsFromVertex + - pfIsolatedMuons+ +pfMuonTask = cms.Task( + pfAllMuons , + pfMuonsFromVertex , + pfIsolatedMuons, pfMuons ) - - - - +pfMuonSequence = cms.Sequence(pfMuonTask) diff --git a/CommonTools/ParticleFlow/python/pfPhotons_cff.py b/CommonTools/ParticleFlow/python/pfPhotons_cff.py index 40aee3acf4b47..fd8906019ffe1 100644 --- a/CommonTools/ParticleFlow/python/pfPhotons_cff.py +++ b/CommonTools/ParticleFlow/python/pfPhotons_cff.py @@ -4,13 +4,10 @@ from CommonTools.ParticleFlow.Isolation.pfPhotonIsolation_cff import * from CommonTools.ParticleFlow.Isolation.pfIsolatedPhotons_cfi import * -pfPhotonSequence = cms.Sequence( - pfSelectedPhotons + - pfPhotonIsolationSequence + +pfPhotonTask = cms.Task( + pfSelectedPhotons , + pfPhotonIsolationTask , # selecting isolated photons: pfIsolatedPhotons ) - - - - +pfPhotonSequence = cms.Sequence(pfPhotonTask) diff --git a/CommonTools/ParticleFlow/python/pfTaus_cff.py b/CommonTools/ParticleFlow/python/pfTaus_cff.py index d58af4fd3cd55..17b535d90a7f9 100644 --- a/CommonTools/ParticleFlow/python/pfTaus_cff.py +++ b/CommonTools/ParticleFlow/python/pfTaus_cff.py @@ -95,15 +95,15 @@ Prediscriminants = pfTausrequireDecayMode.clone() ) -# Sequence to reproduce taus and compute our cloned discriminants -pfTausBaseSequence = cms.Sequence( - pfJetsLegacyHPSPiZeros + - pfTauPFJetsRecoTauChargedHadrons + - pfTausCombiner + - pfTausSelectionDiscriminator + - pfTausProducerSansRefs + - pfTausProducer + - pfTausDiscriminationByDecayModeFinding * +# Task to reproduce taus and compute our cloned discriminants +pfTausBaseTask = cms.Task( + pfJetsLegacyHPSPiZeros , + pfTauPFJetsRecoTauChargedHadrons , + pfTausCombiner , + pfTausSelectionDiscriminator , + pfTausProducerSansRefs , + pfTausProducer , + pfTausDiscriminationByDecayModeFinding , pfTausDiscriminationByIsolation ) @@ -124,10 +124,10 @@ PFCandidateProducer = jetConfig.ak4PFJets.src , PFJetTracksAssociatorProducer = 'pfJetTracksAssociatorAtVertex' ) -pfTausPreSequence = cms.Sequence( - pfJetTracksAssociatorAtVertex + - recoTauAK4PFJets08Region + - pfTauPileUpVertices + +pfTausPreTask = cms.Task( + pfJetTracksAssociatorAtVertex , + recoTauAK4PFJets08Region , + pfTauPileUpVertices , pfTauTagInfoProducer ) @@ -145,9 +145,10 @@ src=cms.InputTag("pfTaus") ) -pfTauSequence = cms.Sequence( - pfTausPreSequence + - pfTausBaseSequence + - pfTaus + +pfTauTask = cms.Task( + pfTausPreTask , + pfTausBaseTask , + pfTaus , pfTausPtrs ) +pfTauSequence = cms.Sequence(pfTauTask) diff --git a/CommonTools/ParticleFlow/python/pfType1MET_cff.py b/CommonTools/ParticleFlow/python/pfType1MET_cff.py index 8ab198d661aa4..fbe479cc3b0bd 100644 --- a/CommonTools/ParticleFlow/python/pfType1MET_cff.py +++ b/CommonTools/ParticleFlow/python/pfType1MET_cff.py @@ -9,6 +9,8 @@ from JetMETCorrections.Configuration.JetCorrectorsAllAlgos_cff import * pfType1MET.corrector = 'ak4PFL2L3Corrector' -pfType1METChain = cms.Sequence( ak4PFL2L3CorrectorChain * pfType1MET ) +pfType1METChainTask = cms.Task( ak4PFL2L3CorrectorChain , pfType1MET ) +pfType1METChain = cms.Sequence( pfType1METChainTask ) -pfCorMET = cms.Sequence( pfRawMET * pfType1METChain ) +pfCorMETTask = cms.Task( pfRawMET , pfType1METChainTask ) +pfCorMET = cms.Sequence( pfCorMETTask ) diff --git a/CommonTools/PileupAlgos/python/Puppi_cff.py b/CommonTools/PileupAlgos/python/Puppi_cff.py index ed66c969481e6..107aea9a49cab 100644 --- a/CommonTools/PileupAlgos/python/Puppi_cff.py +++ b/CommonTools/PileupAlgos/python/Puppi_cff.py @@ -24,48 +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), - usePUProxyValue = cms.bool(False), - PUProxyValue = cms.InputTag(''), - 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), @@ -75,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), @@ -89,14 +65,12 @@ # EtaMaxExtrap = cms.double(2.0), # puppiAlgos = puppiForward # ) - ) -) from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toModify( puppi, EtaMinUseDeltaZ = 4.0, - DeltaZCut = cms.double(0.1), + DeltaZCut = 0.1, algos = cms.VPSet( cms.PSet( etaMin = cms.vdouble(0., 2.5), diff --git a/CondCore/CTPPSPlugins/src/plugin.cc b/CondCore/CTPPSPlugins/src/plugin.cc index 0ee0e498777a9..28eab28ee1ade 100644 --- a/CondCore/CTPPSPlugins/src/plugin.cc +++ b/CondCore/CTPPSPlugins/src/plugin.cc @@ -17,6 +17,8 @@ #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); @@ -28,3 +30,4 @@ REGISTER_PLUGIN(RPMisalignedAlignmentRecord, CTPPSRPAlignmentCorrectionsData); REGISTER_PLUGIN(PPSTimingCalibrationRcd, PPSTimingCalibration); REGISTER_PLUGIN(CTPPSOpticsRcd, LHCOpticalFunctionsSetCollection); REGISTER_PLUGIN(PPSDirectSimulationDataRcd, PPSDirectSimulationData); +REGISTER_PLUGIN(PPSPixelTopologyRcd, PPSPixelTopology); diff --git a/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc b/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc index dc0762efdbcff..1de368e5e8201 100644 --- a/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc +++ b/CondCore/EcalPlugins/plugins/ESChannelStatus_PayloadInspector.cc @@ -120,13 +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); - setTwoTags(true); - } - 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++) { @@ -136,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)) { @@ -172,8 +191,7 @@ namespace { } // 2nd IOV } // validHashIndex } // payload - irun++; - } // loop over IOVs + } // loop over IOVs gStyle->SetOptStat(0); gStyle->SetPalette(1); @@ -181,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}; @@ -214,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 b6a8f9298dc26..45691dfd60369 100644 --- a/CondCore/EcalPlugins/plugins/EcalChannelStatus_PayloadInspector.cc +++ b/CondCore/EcalPlugins/plugins/EcalChannelStatus_PayloadInspector.cc @@ -271,25 +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); - setTwoTags(true); - } - 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 @@ -318,8 +335,7 @@ namespace { } } } // loop over cellid - irun++; - } // if payload.get() + } // if payload.get() else return false; } // loop over IOV's @@ -371,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); @@ -380,31 +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); - setTwoTags(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; @@ -442,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 @@ -511,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); @@ -524,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 @@ -630,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 898a990d22b3a..432f949d50337 100644 --- a/CondCore/EcalPlugins/plugins/EcalPedestals_PayloadInspector.cc +++ b/CondCore/EcalPlugins/plugins/EcalPedestals_PayloadInspector.cc @@ -395,13 +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); - setTwoTags(true); - } - 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]; @@ -468,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; @@ -615,7 +634,6 @@ namespace { } // if payload.get() else return false; - irun++; } // loop over IOVs gStyle->SetPalette(1); @@ -624,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]; @@ -679,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 @@ -1428,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/EcalPlugins/src/plugin.cc b/CondCore/EcalPlugins/src/plugin.cc index 8a80718d7b948..3472afa007f91 100644 --- a/CondCore/EcalPlugins/src/plugin.cc +++ b/CondCore/EcalPlugins/src/plugin.cc @@ -108,6 +108,15 @@ #include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h" #include "CondFormats/DataRecord/interface/EcalTPGWeightIdMapRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" +#include "CondFormats/DataRecord/interface/EcalTPGOddWeightGroupRcd.h" + +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" +#include "CondFormats/DataRecord/interface/EcalTPGOddWeightIdMapRcd.h" + +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" +#include "CondFormats/DataRecord/interface/EcalTPGTPModeRcd.h" + #include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" #include "CondFormats/DataRecord/interface/EcalTPGCrystalStatusRcd.h" @@ -207,6 +216,11 @@ REGISTER_PLUGIN(EcalTPGPhysicsConstRcd, EcalTPGPhysicsConst); REGISTER_PLUGIN(EcalTPGSlidingWindowRcd, EcalTPGSlidingWindow); REGISTER_PLUGIN(EcalTPGWeightGroupRcd, EcalTPGWeightGroup); REGISTER_PLUGIN(EcalTPGWeightIdMapRcd, EcalTPGWeightIdMap); +REGISTER_PLUGIN(EcalTPGOddWeightGroupRcd, EcalTPGOddWeightGroup); +REGISTER_PLUGIN(EcalTPGOddWeightIdMapRcd, EcalTPGOddWeightIdMap); + +REGISTER_PLUGIN(EcalTPGTPModeRcd, EcalTPGTPMode); + REGISTER_PLUGIN(EcalTPGCrystalStatusRcd, EcalCondObjectContainer); REGISTER_PLUGIN(EcalTPGTowerStatusRcd, EcalTPGTowerStatus); REGISTER_PLUGIN(EcalTPGStripStatusRcd, EcalTPGStripStatus); 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 index 7b0f5da9acf51..8f5d4fdf7b175 100644 --- a/CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h +++ b/CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h @@ -7,6 +7,7 @@ #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 @@ -31,18 +32,18 @@ namespace templateHelper { using namespace cond::payloadInspector; //************************************************ - // Display of Template Titles + // Display of Template/GenError Titles // *************************************************/ template class SiPixelTitles_Display : public PlotImage { public: - SiPixelTitles_Display() : PlotImage("Table of Template titles") { - if constexpr (std::is_same_v) { - isTemplate_ = true; - label_ = "SiPixelTemplateDBObject_PayloadInspector"; - } else { + 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"; } } @@ -57,7 +58,9 @@ namespace templateHelper { if (payload.get()) { if (!TransientType::pushfile(*payload, thePixelTemp_)) { - throw cms::Exception(label_) << "\nERROR: Templates not filled correctly. Check the conditions. Using " + throw cms::Exception(label_) << "\nERROR:" << (isTemplate_ ? "Templates" : "GenErrors") + << " not filled correctly." + << " Check the conditions. Using " << (isTemplate_ ? "SiPixelTemplateDBObject" : "SiPixelGenErrorDBObject") << " version " << payload->version() << "\n\n"; } @@ -95,7 +98,8 @@ namespace templateHelper { y_line.push_back(y - (pitch / 2.)); } - TCanvas canvas("Template Titles", "Template Titles", 2000, std::max(y_x1.size(), y_x2.size()) * 40); + 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); @@ -144,13 +148,13 @@ namespace templateHelper { template class SiPixelHeaderTable : public PlotImage { public: - SiPixelHeaderTable() : PlotImage("SiPixelGenErrorDBObject Header summary") { - if constexpr (std::is_same_v) { - isTemplate_ = true; - label_ = "SiPixelTemplateDBObject_PayloadInspector"; - } else { + SiPixelHeaderTable() : PlotImage("SiPixel CPE Header summary") { + if constexpr (std::is_same_v) { isTemplate_ = false; label_ = "SiPixelGenErrorDBObject_PayloadInspector"; + } else { + isTemplate_ = true; + label_ = "SiPixelTemplateDBObject_PayloadInspector"; } } @@ -166,7 +170,9 @@ namespace templateHelper { if (payload.get()) { if (!TransientType::pushfile(*payload, thePixelTemp_)) { - throw cms::Exception(label_) << "\nERROR: GenErrors not filled correctly. Check the conditions. Using " + throw cms::Exception(label_) << "\nERROR:" << (isTemplate_ ? "Templates" : "GenErrors") + << " not filled correctly." + << " Check the conditions. Using " << (isTemplate_ ? "SiPixelTemplateDBObject" : "SiPixelGenErrorDBObject") << payload->version() << "\n\n"; } @@ -298,13 +304,13 @@ namespace templateHelper { template class SiPixelIDs : public PlotImage { public: - SiPixelIDs() : PlotImage("SiPixelMap of ID Values") { - if constexpr (std::is_same_v) { - isTemplate_ = true; - label_ = "SiPixelTemplateDBObject_PayloadInspector"; - } else { + 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"; } } @@ -333,10 +339,10 @@ namespace templateHelper { } std::map templMap; - if constexpr (std::is_same_v) { - templMap = payload->getTemplateIDs(); - } else { + if constexpr (std::is_same_v) { templMap = payload->getGenErrorIDs(); + } else { + templMap = payload->getTemplateIDs(); } if (templMap.size() == SiPixelPI::phase0size || templMap.size() > SiPixelPI::phase1size) { @@ -365,7 +371,8 @@ namespace templateHelper { */ for (auto const& entry : templMap) { - COUT << "DetID: " << entry.first << " generror ID: " << entry.second << std::endl; + 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); 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 1341d8cf00206..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 $ 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/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 ccf36208cb0d8..24c9454c293c8 100755 --- a/CondCore/SiPixelPlugins/test/testSiPixelTemplateDBObject.sh +++ b/CondCore/SiPixelPlugins/test/testSiPixelTemplateDBObject.sh @@ -89,3 +89,14 @@ getPayloadData.py \ --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/Utilities/plugins/Module_2XML.cc b/CondCore/Utilities/plugins/Module_2XML.cc index e9bf734cb1501..29315adf8f158 100644 --- a/CondCore/Utilities/plugins/Module_2XML.cc +++ b/CondCore/Utilities/plugins/Module_2XML.cc @@ -85,6 +85,8 @@ PAYLOAD_2XML_MODULE(pluginUtilities_payload2xml) { PAYLOAD_2XML_CLASS(EcalCondTowerObjectContainer); PAYLOAD_2XML_CLASS(EcalFunParams); PAYLOAD_2XML_CLASS(EcalLaserAPDPNRatios); + PAYLOAD_2XML_CLASS(EcalMustacheSCParameters); + PAYLOAD_2XML_CLASS(EcalSCDynamicDPhiParameters); PAYLOAD_2XML_CLASS(EcalSRSettings); PAYLOAD_2XML_CLASS(EcalSampleMask); PAYLOAD_2XML_CLASS(EcalSamplesCorrelation); @@ -103,6 +105,9 @@ PAYLOAD_2XML_MODULE(pluginUtilities_payload2xml) { PAYLOAD_2XML_CLASS(EcalTPGTowerStatus); PAYLOAD_2XML_CLASS(EcalTPGWeightGroup); PAYLOAD_2XML_CLASS(EcalTPGWeightIdMap); + PAYLOAD_2XML_CLASS(EcalTPGOddWeightGroup); + PAYLOAD_2XML_CLASS(EcalTPGOddWeightIdMap); + PAYLOAD_2XML_CLASS(EcalTPGTPMode); PAYLOAD_2XML_CLASS(EcalTimeBiasCorrections); PAYLOAD_2XML_CLASS(EcalTimeDependentCorrections); PAYLOAD_2XML_CLASS(EcalTimeOffsetConstant); diff --git a/CondCore/Utilities/scripts/conddb b/CondCore/Utilities/scripts/conddb index 50acef57e2999..0692224a1a24c 100755 --- a/CondCore/Utilities/scripts/conddb +++ b/CondCore/Utilities/scripts/conddb @@ -750,6 +750,38 @@ class run_to_timestamp( object ): newiovs[bestRunTime] = iovs[since] return newiovs +class timestamp_to_run( object ): + def __init__( self, session ): + self.session = session + + def convertIovs( self, iovs ): + ks = sorted(iovs.keys()) + logging.info('Converting %s time-based iovs to run-based' %len(iovs) ) + RunInfo = self.session.get_dbtype(conddb.RunInfo) + minTs = datetime.datetime.utcfromtimestamp( int(ks[0]) >> 32 ) + maxTs = datetime.datetime.utcfromtimestamp( int(ks[len(ks)-1]) >> 32 ) + firstRun = self.session.query(sqlalchemy.func.min(RunInfo.run_number)).filter(RunInfo.end_time > minTs).one()[0] + lastRun = self.session.query(sqlalchemy.func.max(RunInfo.run_number)).filter(RunInfo.start_time < maxTs).one()[0] + runs = self.session.query(RunInfo.run_number,RunInfo.start_time,RunInfo.end_time).filter(RunInfo.run_number >= firstRun).filter(RunInfo.run_number <= lastRun ).order_by(RunInfo.run_number).all() + newiovs = {} + prevRun = None + for since in ks: + ts = datetime.datetime.utcfromtimestamp( since >> 32 ) + run = None + for r in runs: + if ts >= r[1] and ts <= r[2]: + run = r[0] + break + if run is not None: + if run == prevRun: + logging.info('Skipping iov with since %s, because it corresponds to an already mapped run %s' %(since,run)) + else: + prevRun = run + newiovs[run] = iovs[since] + else: + logging.info('Skipping iov with since %s, because no run is matching that time.'%since ) + return newiovs + def _convert_time( session, toTimeType, runNumber ): if toTimeType == 'Run': return runNumber @@ -1614,31 +1646,53 @@ def _copy_tag(args, copyTime, session1, session2, first, second, fromIOV=None, t destPayloadType = t['object_type'] destTimeType = t['time_type'] destSynchro = t['synchronization'] - if args.convertTime: - if not tag['time_type']=='Run': - logging.error('Time conversion from %s is not supported.' %tag['time_type']) - raise Exception("Cannot execute the copy.") + if args.toTimestamp: + if tag['time_type'] == 'Time': + logging.info('Source Tag timeType=Time. Ignoring request of conversion to Timestamp') + args.toTimestamp = False + else: + if not tag['time_type']=='Run': + logging.error('Conversion from %s to Timestamp is not supported.' %tag['time_type']) + raise Exception("Cannot execute the copy.") + if args.toRun: + if tag['time_type'] == 'Run': + logging.info('Source Tag timeType=Run. Ignoring request of conversion to Run') + args.toRun = False + else: + if not tag['time_type']=='Time': + logging.error('Conversion from %s to Run is not supported.' %tag['time_type']) + raise Exception("Cannot execute the copy.") if destExists: logging.warning('Destination tag "%s" already exists.' %second ) if destPayloadType != tag['object_type']: logging.error('Cannot copy iovs from tag %s (object type: %s) to tag %s (object type: %s), since the object types are different.' %(first,tag['object_type'],second,destPayloadType)) raise Exception('Object type mismatch, bailing out.') - if destTimeType != tag['time_type']: - if args.convertTime: - if not destTimeType=='Time': - logging.error('Time conversion to %s is not supported.' %destTimeType) - raise Exception("Cannot execute the copy.") + destTimeTypeOk = (destTimeType == tag['time_type']) + if args.toTimestamp: + if not destTimeType=='Time': + logging.error('TimeType of target tag %s does not allow conversion to Time.' %destTimeType) + raise Exception("Cannot execute the copy.") + else: + destTimeTypeOk = True + if args.toRun: + if not destTimeType=='Run': + logging.error('TimeType of target tag %s does not allow conversion to Run.' %destTimeType) + raise Exception("Cannot execute the copy.") else: - logging.error('Cannot copy iovs from tag %s (time type: %s) to tag %s (time type: %s), since the time types are different.' %(first,tag['time_type'],second,destTimeType)) - raise Exception('Time type mismatch, bailing out.') + destTimeTypeOk = True + if not destTimeTypeOk: + logging.error('Cannot copy iovs from tag %s (time type: %s) to tag %s (time type: %s), since the time types are different.' %(first,tag['time_type'],second,destTimeType)) + raise Exception('Time type mismatch, bailing out.') if not args.yes: output(args, 'Confirm the update of the existing tag "%s" in %s [n]?' %(second,args.destdb), newline=False) if raw_input().lower() not in ['y', 'yes']: raise Exception('Aborted by the user.') else: destSynchro = 'any' - if args.convertTime: + if args.toTimestamp: tag['time_type'] = 'Time' + if args.toRun: + tag['time_type'] = 'Run' destTimeType = tag['time_type'] dest = Tag2(**tag) dest.synchronization = destSynchro @@ -1710,10 +1764,12 @@ def _copy_tag(args, copyTime, session1, session2, first, second, fromIOV=None, t policy_type = _get_synchro_policy( destSynchro ) synchro_policy = policy_type( session1, session2, destTimeType, second ) ret, iovs = synchro_policy.validate( iovs ) - if args.convertTime: + if args.toTimestamp: converter = run_to_timestamp( conddb.getSessionOnMasterDB( session1, session2 ) ) iovs = converter.convertIovs( iovs ) - + if args.toRun: + converter = timestamp_to_run( conddb.getSessionOnMasterDB( session1, session2 ) ) + iovs = converter.convertIovs( iovs ) # making the list of the payloads to export... for since in iovs.keys(): hashes.add( iovs[since] ) @@ -1847,8 +1903,8 @@ def copy(args): if args.note is None or args.note=='' or args.note==' ': raise Exception('Cannot run in force edit mode without to provide a non-empty editing note.') if args.o2oTest: - if args.to is not None or getattr(args, 'from') is not None or args.snapshot is not None or args.override or args.nosynchro or args.convertTime: - raise Exception('Cannot execute the copy for the o2o test with the options from, to, override, nosynchro, snapshot or convertTime.') + if args.to is not None or getattr(args, 'from') is not None or args.snapshot is not None or args.override or args.nosynchro or args.toTimestamp: + raise Exception('Cannot execute the copy for the o2o test with the options from, to, override, nosynchro, snapshot or toTimestamp.') try: ret, niovs = _copy_tag(args, copyTime, session1, session2, args.first, args.second, getattr(args, 'from'), args.to) @@ -2554,9 +2610,9 @@ def main(): parser_copy.add_argument('--o2oTest', action='store_true', help='Special copy for o2o test. Copy the second to last iov of the source tag, to allow to run the o2o procedure to add the last iov. It cannot be executed with the from, to, ovveride and snapshot options.') parser_copy.add_argument('--synchronize',action='store_true',help='No effect, since the synchronization is applied by default for tags. The option is kept for backward compatibility') parser_copy.add_argument('--nosynchro',action='store_true',help='For tags, disable the synchronization of the destination iovs. No effect for other object type copy') - parser_copy.add_argument('--convertTime',action='store_true',help='For tags, triggers the convertion from run-based iovs to timestamp-based iovs. It will return an error for any combination with input tag non run-based, and existing destination tag non timestamp-based. Not supported with synchronization.') + parser_copy.add_argument('--toTimestamp',action='store_true',help='For tags, triggers the conversion from run-based iovs to timestamp-based iovs. It will return an error for any combination with input tag non run-based, and existing destination tag non timestamp-based. Not supported with synchronization.') + parser_copy.add_argument('--toRun',action='store_true',help='For tags, triggers the conversion from timestamp-based iovs to run-based iovs. When multiple timestamped IOVs are found matching the same run, only the first is considered. IOVs with timestamp not matching any run are skipped. It will return an error for any combination with input tag non timestamp-based, and existing destination tag non run-based. Not supported with synchronization.') parser_copy.set_defaults(func=copy) - parser_edit = parser_subparsers.add_parser('edit', description='Edits an object. Opens up your $EDITOR with prefilled text about the object. There you can modify the data. Save the file and quit the editor. The modified data will be written into the database. e.g. for a tag, its attributes and the list of IOVs/payloads appears and are modifiable.') parser_edit.add_argument('name', help="Name of the object. This can be a tag's name (edits its attributes and its IOVs/payloads), a global tag's name (edits its attributes and its mapping records <-> tags) or a payload's SHA1 hexadecimal hash (or a prefix if unique; TODO: edits its attributes). It must exactly match -- if needed, use the search command first to look for it.") parser_edit.add_argument('--header', default=False, action='store_true', help='Edit the header attributes of the object.') 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 c6d5fa054aa5a..b317327cfd1b8 100644 --- a/CondCore/Utilities/src/CondFormats.h +++ b/CondCore/Utilities/src/CondFormats.h @@ -174,7 +174,9 @@ #include "CondFormats/EcalObjects/interface/EcalDQMTowerStatus.h" #include "CondFormats/EcalObjects/interface/EcalGainRatios.h" #include "CondFormats/EcalObjects/interface/EcalMappingElectronics.h" +#include "CondFormats/EcalObjects/interface/EcalMustacheSCParameters.h" #include "CondFormats/EcalObjects/interface/EcalPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalSCDynamicDPhiParameters.h" #include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" #include "CondFormats/EcalObjects/interface/EcalTPGFineGrainEBGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGFineGrainEBIdMap.h" @@ -191,6 +193,9 @@ #include "CondFormats/EcalObjects/interface/EcalTPGTowerStatus.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" #include "CondFormats/EcalObjects/interface/EcalWeightXtalGroups.h" #include "CondFormats/EcalObjects/interface/EcalSimPulseShape.h" #include "CondFormats/Common/interface/FileBlob.h" diff --git a/CondFormats/DataRecord/BuildFile.xml b/CondFormats/DataRecord/BuildFile.xml index 17416828206ee..b7fe9d82aa519 100644 --- a/CondFormats/DataRecord/BuildFile.xml +++ b/CondFormats/DataRecord/BuildFile.xml @@ -1,4 +1,5 @@ + diff --git a/CondFormats/DataRecord/interface/EcalTPGOddWeightGroupRcd.h b/CondFormats/DataRecord/interface/EcalTPGOddWeightGroupRcd.h new file mode 100644 index 0000000000000..120ea016810ae --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalTPGOddWeightGroupRcd.h @@ -0,0 +1,6 @@ +#ifndef CondFormats_DataRecord_EcalTPGOddWeightGroupRcd_h +#define CondFormats_DataRecord_EcalTPGOddWeightGroupRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +class EcalTPGOddWeightGroupRcd : public edm::eventsetup::EventSetupRecordImplementation {}; +#endif diff --git a/CondFormats/DataRecord/interface/EcalTPGOddWeightIdMapRcd.h b/CondFormats/DataRecord/interface/EcalTPGOddWeightIdMapRcd.h new file mode 100644 index 0000000000000..a571353e0b555 --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalTPGOddWeightIdMapRcd.h @@ -0,0 +1,6 @@ +#ifndef CondFormats_DataRecord_EcalTPGOddWeightIdMapRcd_h +#define CondFormats_DataRecord_EcalTPGOddWeightIdMapRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +class EcalTPGOddWeightIdMapRcd : public edm::eventsetup::EventSetupRecordImplementation {}; +#endif diff --git a/CondFormats/DataRecord/interface/EcalTPGTPModeRcd.h b/CondFormats/DataRecord/interface/EcalTPGTPModeRcd.h new file mode 100644 index 0000000000000..f7b51d9a281cf --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalTPGTPModeRcd.h @@ -0,0 +1,13 @@ +#ifndef CondFormats_DataRecord_EcalTPGTPModeRcd_h +#define CondFormats_DataRecord_EcalTPGTPModeRcd_h + +// +// Author: Davide Valsecchi +// Created: Thu, 11 Feb 2021 08:50:49 GMT +// + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" + +class EcalTPGTPModeRcd : public edm::eventsetup::EventSetupRecordImplementation {}; + +#endif diff --git a/CondFormats/DataRecord/interface/HeterogeneousHGCalHEFCellPositionsConditionsRecord.h b/CondFormats/DataRecord/interface/HeterogeneousHGCalHEFCellPositionsConditionsRecord.h new file mode 100644 index 0000000000000..b125b2ee14302 --- /dev/null +++ b/CondFormats/DataRecord/interface/HeterogeneousHGCalHEFCellPositionsConditionsRecord.h @@ -0,0 +1,12 @@ +#ifndef CondFormats_DataRecord_HeterogeneousHGCalHEFCellPositionsConditionsRecord_h +#define CondFormats_DataRecord_HeterogeneousHGCalHEFCellPositionsConditionsRecord_h + +#include "FWCore/Framework/interface/DependentRecordImplementation.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "FWCore/Utilities/interface/mplVector.h" + +class HeterogeneousHGCalHEFCellPositionsConditionsRecord + : public edm::eventsetup::DependentRecordImplementation> {}; + +#endif //CondFormats_DataRecord_HeterogeneousHGCalHEFCellPositionsConditionsRecord_h 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/EcalTPGOddWeightGroupRcd.cc b/CondFormats/DataRecord/src/EcalTPGOddWeightGroupRcd.cc new file mode 100644 index 0000000000000..03924ba26eb48 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalTPGOddWeightGroupRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalTPGOddWeightGroupRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalTPGOddWeightGroupRcd); diff --git a/CondFormats/DataRecord/src/EcalTPGOddWeightIdMapRcd.cc b/CondFormats/DataRecord/src/EcalTPGOddWeightIdMapRcd.cc new file mode 100644 index 0000000000000..8cffd5f499aa9 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalTPGOddWeightIdMapRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalTPGOddWeightIdMapRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalTPGOddWeightIdMapRcd); diff --git a/CondFormats/DataRecord/src/EcalTPGTPModeRcd.cc b/CondFormats/DataRecord/src/EcalTPGTPModeRcd.cc new file mode 100644 index 0000000000000..0b899c26a11a5 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalTPGTPModeRcd.cc @@ -0,0 +1,15 @@ +// -*- C++ -*- +// +// Package: CondFormats/DataRecord +// Class : EcalTPGTPMode +// +// Implementation: +// [Notes on implementation] +// +// Author: Davide Valsecchi +// Created: Thu, 11 Feb 2021 08:50:49 GMT + +#include "CondFormats/DataRecord/interface/EcalTPGTPModeRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalTPGTPModeRcd); diff --git a/CondFormats/DataRecord/src/HeterogeneousHGCalHEFCellPositionsConditionsRecord.cc b/CondFormats/DataRecord/src/HeterogeneousHGCalHEFCellPositionsConditionsRecord.cc new file mode 100644 index 0000000000000..b456c2de41bbc --- /dev/null +++ b/CondFormats/DataRecord/src/HeterogeneousHGCalHEFCellPositionsConditionsRecord.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/HeterogeneousHGCalHEFCellPositionsConditionsRecord.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(HeterogeneousHGCalHEFCellPositionsConditionsRecord); 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/BuildFile.xml b/CondFormats/EcalObjects/BuildFile.xml index aa87dacc6a043..11a0a25bec707 100644 --- a/CondFormats/EcalObjects/BuildFile.xml +++ b/CondFormats/EcalObjects/BuildFile.xml @@ -3,10 +3,13 @@ + + + diff --git a/CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h b/CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h new file mode 100644 index 0000000000000..27a4236acd6e1 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h @@ -0,0 +1,45 @@ +#ifndef CondFormats_EcalObjects_interface_EcalGainRatiosGPU_h +#define CondFormats_EcalObjects_interface_EcalGainRatiosGPU_h + +#include "CondFormats/EcalObjects/interface/EcalGainRatios.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 // __CUDACC__ + +class EcalGainRatiosGPU { +public: + struct Product { + edm::propagate_const_array> gain12Over6; + edm::propagate_const_array> gain6Over1; + }; + +#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 // CondFormats_EcalObjects_interface_EcalGainRatiosGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h b/CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h new file mode 100644 index 0000000000000..35c172a2920af --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h @@ -0,0 +1,44 @@ +#ifndef CondFormats_EcalObjects_interface_EcalIntercalibConstantsGPU_h +#define CondFormats_EcalObjects_interface_EcalIntercalibConstantsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstants.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 // __CUDACC__ + +class EcalIntercalibConstantsGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#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 offset_; } + + // + static std::string name() { return std::string{"ecalIntercalibConstantsGPU"}; } + +private: + std::vector> values_; + uint32_t offset_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // CondFormats_EcalObjects_interface_EcalIntercalibConstantsGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h b/CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h new file mode 100644 index 0000000000000..f68c405470556 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h @@ -0,0 +1,54 @@ +#ifndef CondFormats_EcalObjects_interface_EcalLaserAPDPNRatiosGPU_h +#define CondFormats_EcalObjects_interface_EcalLaserAPDPNRatiosGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatios.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 // __CUDACC__ + +class EcalLaserAPDPNRatiosGPU { +public: + struct Product { + edm::propagate_const_array> p1; + edm::propagate_const_array> p2; + edm::propagate_const_array> p3; + edm::propagate_const_array> t1; + edm::propagate_const_array> t2; + edm::propagate_const_array> t3; + }; + +#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 // CondFormats_EcalObjects_interface_EcalLaserAPDPNRatiosGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h b/CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h new file mode 100644 index 0000000000000..2b9514a081c14 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h @@ -0,0 +1,44 @@ +#ifndef CondFormats_EcalObjects_interface_EcalLaserAPDPNRatiosRefGPU_h +#define CondFormats_EcalObjects_interface_EcalLaserAPDPNRatiosRefGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRef.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 // __CUDACC__ + +class EcalLaserAPDPNRatiosRefGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#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 offset_; } + uint32_t offset_; + + // + static std::string name() { return std::string{"ecalLaserAPDPNRatiosRefGPU"}; } + +private: + std::vector> values_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // CondFormats_EcalObjects_interface_EcalLaserAPDPNRatiosRefGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h b/CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h new file mode 100644 index 0000000000000..50599a6afb43f --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h @@ -0,0 +1,44 @@ +#ifndef CondFormats_EcalObjects_interface_EcalLaserAlphasGPU_h +#define CondFormats_EcalObjects_interface_EcalLaserAlphasGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLaserAlphas.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 // __CUDACC__ + +class EcalLaserAlphasGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#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 offset_; } + + // + static std::string name() { return std::string{"ecalLaserAlphasGPU"}; } + +private: + std::vector> values_; + uint32_t offset_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // CondFormats_EcalObjects_interface_EcalLaserAlphasGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h b/CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h new file mode 100644 index 0000000000000..8513224071f9d --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h @@ -0,0 +1,54 @@ +#ifndef CondFormats_EcalObjects_interface_EcalLinearCorrectionsGPU_h +#define CondFormats_EcalObjects_interface_EcalLinearCorrectionsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalLinearCorrections.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 // __CUDACC__ + +class EcalLinearCorrectionsGPU { +public: + struct Product { + edm::propagate_const_array> p1; + edm::propagate_const_array> p2; + edm::propagate_const_array> p3; + edm::propagate_const_array> t1; + edm::propagate_const_array> t2; + edm::propagate_const_array> t3; + }; + +#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 // CondFormats_EcalObjects_interface_EcalLinearCorrectionsGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h b/CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h new file mode 100644 index 0000000000000..399cfc14ada40 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h @@ -0,0 +1,43 @@ +#ifndef CondFormats_EcalObjects_interface_EcalMultifitParametersGPU_h +#define CondFormats_EcalObjects_interface_EcalMultifitParametersGPU_h + +#include + +#include "FWCore/ParameterSet/interface/ParameterSet.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 // __CUDACC__ + +class EcalMultifitParametersGPU { +public: + struct Product { + edm::propagate_const_array> amplitudeFitParametersEB; + edm::propagate_const_array> amplitudeFitParametersEE; + edm::propagate_const_array> timeFitParametersEB; + edm::propagate_const_array> 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 // CondFormats_EcalObjects_interface_EcalMultifitParametersGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalPedestalsGPU.h b/CondFormats/EcalObjects/interface/EcalPedestalsGPU.h new file mode 100644 index 0000000000000..80bc2d3a3fb80 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalPedestalsGPU.h @@ -0,0 +1,52 @@ +#ifndef CondFormats_EcalObjects_interface_EcalPedestalsGPU_h +#define CondFormats_EcalObjects_interface_EcalPedestalsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalPedestals.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 // __CUDACC__ + +class EcalPedestalsGPU { +public: + struct Product { + edm::propagate_const_array> mean_x12; + edm::propagate_const_array> mean_x6; + edm::propagate_const_array> mean_x1; + edm::propagate_const_array> rms_x12; + edm::propagate_const_array> rms_x6; + edm::propagate_const_array> rms_x1; + }; + +#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 // CondFormats_EcalObjects_interface_EcalPedestalsGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h b/CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h similarity index 82% rename from RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h rename to CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h index 6c5a3d9b95e2e..56207d8cb4ab3 100644 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h +++ b/CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h @@ -1,5 +1,5 @@ -#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalPulseCovariancesGPU_h -#define RecoLocalCalo_EcalRecAlgos_interface_EcalPulseCovariancesGPU_h +#ifndef CondFormats_EcalObjects_interface_EcalPulseCovariancesGPU_h +#define CondFormats_EcalObjects_interface_EcalPulseCovariancesGPU_h #include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" @@ -37,4 +37,4 @@ class EcalPulseCovariancesGPU { #endif // __CUDACC__ }; -#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalPulseCovariancesGPU_h +#endif // CondFormats_EcalObjects_interface_EcalPulseCovariancesGPU_h diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h b/CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h similarity index 82% rename from RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h rename to CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h index 3edb2c9bcdfd3..0caf954409b18 100644 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h +++ b/CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h @@ -1,5 +1,5 @@ -#ifndef RecoLocalCalo_EcalRecAlgos_interface_EcalPulseShapesGPU_h -#define RecoLocalCalo_EcalRecAlgos_interface_EcalPulseShapesGPU_h +#ifndef CondFormats_EcalObjects_interface_EcalPulseShapesGPU_h +#define CondFormats_EcalObjects_interface_EcalPulseShapesGPU_h #include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" @@ -37,4 +37,4 @@ class EcalPulseShapesGPU { #endif // __CUDACC__ }; -#endif // RecoLocalCalo_EcalRecAlgos_interface_EcalPulseShapesGPU_h +#endif // CondFormats_EcalObjects_interface_EcalPulseShapesGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalRecHitParametersGPU.h b/CondFormats/EcalObjects/interface/EcalRecHitParametersGPU.h new file mode 100644 index 0000000000000..050fc51bc5036 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalRecHitParametersGPU.h @@ -0,0 +1,50 @@ +#ifndef CondFormats_EcalObjects_interface_EcalRecHitParametersGPU_h +#define CondFormats_EcalObjects_interface_EcalRecHitParametersGPU_h + +#include + +#include "FWCore/ParameterSet/interface/ParameterSet.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 // __CUDACC__ + +class EcalRecHitParametersGPU { +public: + struct Product { + edm::propagate_const_array> channelStatusToBeExcluded; + edm::propagate_const_array> expanded_v_DB_reco_flags; + edm::propagate_const_array> expanded_Sizes_v_DB_reco_flags; + edm::propagate_const_array> 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 // CondFormats_EcalObjects_interface_EcalRecHitParametersGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h b/CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h new file mode 100644 index 0000000000000..a4f2dc1e555b5 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h @@ -0,0 +1,43 @@ +#ifndef CondFormats_EcalObjects_interface_EcalRechitADCToGeVConstantGPU_h +#define CondFormats_EcalObjects_interface_EcalRechitADCToGeVConstantGPU_h + +#include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.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 // __CUDACC__ + +class EcalRechitADCToGeVConstantGPU { +public: + struct Product { + edm::propagate_const_array> adc2gev; + }; + +#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 // CondFormats_EcalObjects_interface_EcalRechitADCToGeVConstantGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h b/CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h new file mode 100644 index 0000000000000..93e0f6a8dd7c0 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h @@ -0,0 +1,43 @@ +#ifndef CondFormats_EcalObjects_interface_EcalRechitChannelStatusGPU_h +#define CondFormats_EcalObjects_interface_EcalRechitChannelStatusGPU_h + +#include "CondFormats/EcalObjects/interface/EcalChannelStatus.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 // __CUDACC__ + +class EcalRechitChannelStatusGPU { +public: + struct Product { + edm::propagate_const_array> status; + }; + +#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 // CondFormats_EcalObjects_interface_EcalRechitChannelStatusGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h b/CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h new file mode 100644 index 0000000000000..dd6d48b16a6fa --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h @@ -0,0 +1,49 @@ +#ifndef CondFormats_EcalObjects_interface_EcalSamplesCorrelationGPU_h +#define CondFormats_EcalObjects_interface_EcalSamplesCorrelationGPU_h + +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelation.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 // __CUDACC__ + +class EcalSamplesCorrelationGPU { +public: + struct Product { + edm::propagate_const_array> EBG12SamplesCorrelation; + edm::propagate_const_array> EBG6SamplesCorrelation; + edm::propagate_const_array> EBG1SamplesCorrelation; + edm::propagate_const_array> EEG12SamplesCorrelation; + edm::propagate_const_array> EEG6SamplesCorrelation; + edm::propagate_const_array> EEG1SamplesCorrelation; + }; + +#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> EBG12SamplesCorrelation_; + std::vector> EBG6SamplesCorrelation_; + std::vector> EBG1SamplesCorrelation_; + std::vector> EEG12SamplesCorrelation_; + std::vector> EEG6SamplesCorrelation_; + std::vector> EEG1SamplesCorrelation_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // CondFormats_EcalObjects_interface_EcalSamplesCorrelationGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h b/CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h new file mode 100644 index 0000000000000..37431140b2758 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h @@ -0,0 +1,21 @@ +#ifndef EcalTPGOddWeightGroup_h +#define EcalTPGOddWeightGroup_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include "CondFormats/EcalObjects/interface/EcalTPGGroups.h" + +/* + +P.P. +*/ + +class EcalTPGOddWeightGroup : public EcalTPGGroups { +public: + EcalTPGOddWeightGroup(); + ~EcalTPGOddWeightGroup(); + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h b/CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h new file mode 100644 index 0000000000000..5af6c6c05c3fe --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h @@ -0,0 +1,27 @@ +#ifndef EcalTPGOddWeightIdMap_h +#define EcalTPGOddWeightIdMap_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include +#include "CondFormats/EcalObjects/interface/EcalTPGWeights.h" +#include + +class EcalTPGOddWeightIdMap { +public: + typedef std::map EcalTPGWeightMap; + typedef std::map::const_iterator EcalTPGWeightMapItr; + + EcalTPGOddWeightIdMap(); + ~EcalTPGOddWeightIdMap(); + + const EcalTPGWeightMap& getMap() const { return map_; } + void setValue(const uint32_t& id, const EcalTPGWeights& value); + +private: + EcalTPGWeightMap map_; + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalTPGTPMode.h b/CondFormats/EcalObjects/interface/EcalTPGTPMode.h new file mode 100644 index 0000000000000..f1f96404ba8db --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalTPGTPMode.h @@ -0,0 +1,48 @@ +#ifndef EcalTPGTPMode_h +#define EcalTPGTPMode_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +/* +Author: Davide Valsecchi +Date: 11/02/2021 + +*/ + +class EcalTPGTPMode { +public: + EcalTPGTPMode(); + ~EcalTPGTPMode(); + + bool EnableEBOddFilter; + bool EnableEEOddFilter; + bool EnableEBOddPeakFinder; + bool EnableEEOddPeakFinder; + bool DisableEBEvenPeakFinder; + bool DisableEEEvenPeakFinder; + uint16_t FenixEBStripOutput; + uint16_t FenixEEStripOutput; + uint16_t FenixEBStripInfobit2; + uint16_t FenixEEStripInfobit2; + uint16_t EBFenixTcpOutput; + uint16_t EBFenixTcpInfobit1; + uint16_t EEFenixTcpOutput; + uint16_t EEFenixTcpInfobit1; + // Wildcard parameters for future use + uint16_t FenixPar15; + uint16_t FenixPar16; + uint16_t FenixPar17; + uint16_t FenixPar18; + + // print parameters to stream: + void print(std::ostream&) const; + + friend std::ostream& operator<<(std::ostream& out, const EcalTPGTPMode& params) { + params.print(out); + return out; + } + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h b/CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h index 0984696e336a6..b19b97f1b36d0 100644 --- a/CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h +++ b/CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h @@ -5,11 +5,6 @@ #include "CondFormats/EcalObjects/interface/EcalTPGGroups.h" -/* - -P.P. -*/ - class EcalTPGWeightGroup : public EcalTPGGroups { public: EcalTPGWeightGroup(); diff --git a/CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h b/CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h new file mode 100644 index 0000000000000..086decb53f01b --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h @@ -0,0 +1,49 @@ +#ifndef CondFormats_EcalObjects_interface_EcalTimeBiasCorrectionsGPU_h +#define CondFormats_EcalObjects_interface_EcalTimeBiasCorrectionsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.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 // __CUDACC__ + +class EcalTimeBiasCorrectionsGPU { +public: + struct Product { + edm::propagate_const_array> ebTimeCorrAmplitudeBins; + edm::propagate_const_array> ebTimeCorrShiftBins; + edm::propagate_const_array> eeTimeCorrAmplitudeBins; + edm::propagate_const_array> 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__ + +private: + std::vector> ebTimeCorrAmplitudeBins_; + std::vector> ebTimeCorrShiftBins_; + std::vector> eeTimeCorrAmplitudeBins_; + std::vector> eeTimeCorrShiftBins_; + +#ifndef __CUDACC__ + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // CondFormats_EcalObjects_interface_EcalTimeBiasCorrectionsGPU_h diff --git a/CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.h b/CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.h new file mode 100644 index 0000000000000..410e7699bdf7b --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.h @@ -0,0 +1,44 @@ +#ifndef CondFormats_EcalObjects_interface_EcalTimeCalibConstantsGPU_h +#define CondFormats_EcalObjects_interface_EcalTimeCalibConstantsGPU_h + +#include "CondFormats/EcalObjects/interface/EcalTimeCalibConstants.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 // __CUDACC__ + +class EcalTimeCalibConstantsGPU { +public: + struct Product { + edm::propagate_const_array> values; + }; + +#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 offset_; } + + // + static std::string name() { return std::string{"ecalTimeCalibConstantsGPU"}; } + +private: + std::vector> values_; + uint32_t offset_; + + cms::cuda::ESProduct product_; +#endif // __CUDACC__ +}; + +#endif // CondFormats_EcalObjects_interface_EcalTimeCalibConstantsGPU_h diff --git a/CondFormats/EcalObjects/interface/ElectronicsMappingGPU.h b/CondFormats/EcalObjects/interface/ElectronicsMappingGPU.h new file mode 100644 index 0000000000000..4c0cb30222bb9 --- /dev/null +++ b/CondFormats/EcalObjects/interface/ElectronicsMappingGPU.h @@ -0,0 +1,48 @@ +#ifndef CondFormats_EcalObjects_interface_ElectronicsMappingGPU_h +#define CondFormats_EcalObjects_interface_ElectronicsMappingGPU_h + +#include "CondFormats/EcalObjects/interface/EcalMappingElectronics.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 // __CUDACC__ + +namespace ecal { + namespace raw { + + class ElectronicsMappingGPU { + public: + struct Product { + edm::propagate_const_array> 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 // CondFormats_EcalObjects_interface_ElectronicsMappingGPU_h diff --git a/CondFormats/EcalObjects/src/EcalGainRatiosGPU.cc b/CondFormats/EcalObjects/src/EcalGainRatiosGPU.cc new file mode 100644 index 0000000000000..9e509430c4276 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalGainRatiosGPU.cc @@ -0,0 +1,38 @@ +#include "CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalGainRatiosGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalGainRatiosGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.gain12Over6 = cms::cuda::make_device_unique(gain12Over6_.size(), cudaStream); + product.gain6Over1 = cms::cuda::make_device_unique(gain6Over1_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.gain12Over6, gain12Over6_, cudaStream); + cms::cuda::copyAsync(product.gain6Over1, gain6Over1_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalGainRatiosGPU); diff --git a/CondFormats/EcalObjects/src/EcalIntercalibConstantsGPU.cc b/CondFormats/EcalObjects/src/EcalIntercalibConstantsGPU.cc new file mode 100644 index 0000000000000..c1e462a8c5a75 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalIntercalibConstantsGPU.cc @@ -0,0 +1,24 @@ +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +EcalIntercalibConstantsGPU::EcalIntercalibConstantsGPU(EcalIntercalibConstants const& values) { + values_.reserve(values.size()); + std::copy(values.begin(), values.end(), values_.begin()); + offset_ = values.barrelItems().size(); +} + +EcalIntercalibConstantsGPU::Product const& EcalIntercalibConstantsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalIntercalibConstantsGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.values, values_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalIntercalibConstantsGPU); diff --git a/CondFormats/EcalObjects/src/EcalLaserAPDPNRatiosGPU.cc b/CondFormats/EcalObjects/src/EcalLaserAPDPNRatiosGPU.cc new file mode 100644 index 0000000000000..3a74f029ec185 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalLaserAPDPNRatiosGPU.cc @@ -0,0 +1,61 @@ +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalLaserAPDPNRatiosGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLaserAPDPNRatiosGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.p1 = cms::cuda::make_device_unique(p1_.size(), cudaStream); + product.p2 = cms::cuda::make_device_unique(p2_.size(), cudaStream); + product.p3 = cms::cuda::make_device_unique(p3_.size(), cudaStream); + product.t1 = cms::cuda::make_device_unique(t1_.size(), cudaStream); + product.t2 = cms::cuda::make_device_unique(t2_.size(), cudaStream); + product.t3 = cms::cuda::make_device_unique(t3_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.p1, p1_, cudaStream); + cms::cuda::copyAsync(product.p2, p2_, cudaStream); + cms::cuda::copyAsync(product.p3, p3_, cudaStream); + cms::cuda::copyAsync(product.t1, t1_, cudaStream); + cms::cuda::copyAsync(product.t2, t2_, cudaStream); + cms::cuda::copyAsync(product.t3, t3_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLaserAPDPNRatiosGPU); diff --git a/CondFormats/EcalObjects/src/EcalLaserAPDPNRatiosRefGPU.cc b/CondFormats/EcalObjects/src/EcalLaserAPDPNRatiosRefGPU.cc new file mode 100644 index 0000000000000..ed06c6591597d --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalLaserAPDPNRatiosRefGPU.cc @@ -0,0 +1,24 @@ +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +EcalLaserAPDPNRatiosRefGPU::EcalLaserAPDPNRatiosRefGPU(EcalLaserAPDPNRatiosRef const& values) { + values_.reserve(values.size()); + std::copy(values.begin(), values.end(), values_.begin()); + offset_ = values.barrelItems().size(); +} + +EcalLaserAPDPNRatiosRefGPU::Product const& EcalLaserAPDPNRatiosRefGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLaserAPDPNRatiosRefGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.values, values_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLaserAPDPNRatiosRefGPU); diff --git a/CondFormats/EcalObjects/src/EcalLaserAlphasGPU.cc b/CondFormats/EcalObjects/src/EcalLaserAlphasGPU.cc new file mode 100644 index 0000000000000..b16742f4964c8 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalLaserAlphasGPU.cc @@ -0,0 +1,24 @@ +#include "CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +EcalLaserAlphasGPU::EcalLaserAlphasGPU(EcalLaserAlphas const& values) { + values_.reserve(values.size()); + std::copy(values.begin(), values.end(), values_.begin()); + offset_ = values.barrelItems().size(); +} + +EcalLaserAlphasGPU::Product const& EcalLaserAlphasGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLaserAlphasGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.values, values_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLaserAlphasGPU); diff --git a/CondFormats/EcalObjects/src/EcalLinearCorrectionsGPU.cc b/CondFormats/EcalObjects/src/EcalLinearCorrectionsGPU.cc new file mode 100644 index 0000000000000..b6b706d6b18e8 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalLinearCorrectionsGPU.cc @@ -0,0 +1,59 @@ +#include "CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalLinearCorrectionsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalLinearCorrectionsGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.p1 = cms::cuda::make_device_unique(p1_.size(), cudaStream); + product.p2 = cms::cuda::make_device_unique(p2_.size(), cudaStream); + product.p3 = cms::cuda::make_device_unique(p3_.size(), cudaStream); + product.t1 = cms::cuda::make_device_unique(t1_.size(), cudaStream); + product.t2 = cms::cuda::make_device_unique(t2_.size(), cudaStream); + product.t3 = cms::cuda::make_device_unique(t3_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.p1, p1_, cudaStream); + cms::cuda::copyAsync(product.p2, p2_, cudaStream); + cms::cuda::copyAsync(product.p3, p3_, cudaStream); + cms::cuda::copyAsync(product.t1, t1_, cudaStream); + cms::cuda::copyAsync(product.t2, t2_, cudaStream); + cms::cuda::copyAsync(product.t3, t3_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalLinearCorrectionsGPU); diff --git a/CondFormats/EcalObjects/src/EcalMultifitParametersGPU.cc b/CondFormats/EcalObjects/src/EcalMultifitParametersGPU.cc new file mode 100644 index 0000000000000..204db7e0a58ab --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalMultifitParametersGPU.cc @@ -0,0 +1,42 @@ +#include "CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalMultifitParametersGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalMultifitParametersGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.amplitudeFitParametersEB = + cms::cuda::make_device_unique(amplitudeFitParametersEB_.size(), cudaStream); + product.amplitudeFitParametersEE = + cms::cuda::make_device_unique(amplitudeFitParametersEE_.size(), cudaStream); + product.timeFitParametersEB = cms::cuda::make_device_unique(timeFitParametersEB_.size(), cudaStream); + product.timeFitParametersEE = cms::cuda::make_device_unique(timeFitParametersEE_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.amplitudeFitParametersEB, amplitudeFitParametersEB_, cudaStream); + cms::cuda::copyAsync(product.amplitudeFitParametersEE, amplitudeFitParametersEE_, cudaStream); + cms::cuda::copyAsync(product.timeFitParametersEB, timeFitParametersEB_, cudaStream); + cms::cuda::copyAsync(product.timeFitParametersEE, timeFitParametersEE_, cudaStream); + }); + return product; +} + +TYPELOOKUP_DATA_REG(EcalMultifitParametersGPU); 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/EcalPedestalsGPU.cc b/CondFormats/EcalObjects/src/EcalPedestalsGPU.cc new file mode 100644 index 0000000000000..2528dab1665fb --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalPedestalsGPU.cc @@ -0,0 +1,59 @@ +#include "CondFormats/EcalObjects/interface/EcalPedestalsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalPedestalsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalPedestalsGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.mean_x12 = cms::cuda::make_device_unique(mean_x12_.size(), cudaStream); + product.mean_x6 = cms::cuda::make_device_unique(mean_x6_.size(), cudaStream); + product.mean_x1 = cms::cuda::make_device_unique(mean_x1_.size(), cudaStream); + product.rms_x12 = cms::cuda::make_device_unique(rms_x12_.size(), cudaStream); + product.rms_x6 = cms::cuda::make_device_unique(rms_x6_.size(), cudaStream); + product.rms_x1 = cms::cuda::make_device_unique(rms_x1_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.mean_x12, mean_x12_, cudaStream); + cms::cuda::copyAsync(product.mean_x6, mean_x6_, cudaStream); + cms::cuda::copyAsync(product.mean_x1, mean_x1_, cudaStream); + cms::cuda::copyAsync(product.rms_x12, rms_x12_, cudaStream); + cms::cuda::copyAsync(product.rms_x6, rms_x6_, cudaStream); + cms::cuda::copyAsync(product.rms_x1, rms_x1_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalPedestalsGPU); diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalPulseCovariancesGPU.cc b/CondFormats/EcalObjects/src/EcalPulseCovariancesGPU.cc similarity index 95% rename from RecoLocalCalo/EcalRecAlgos/src/EcalPulseCovariancesGPU.cc rename to CondFormats/EcalObjects/src/EcalPulseCovariancesGPU.cc index bbeda99652e22..05586080bff6a 100644 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalPulseCovariancesGPU.cc +++ b/CondFormats/EcalObjects/src/EcalPulseCovariancesGPU.cc @@ -1,4 +1,4 @@ -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseCovariancesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h" #include "FWCore/Utilities/interface/typelookup.h" #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" diff --git a/RecoLocalCalo/EcalRecAlgos/src/EcalPulseShapesGPU.cc b/CondFormats/EcalObjects/src/EcalPulseShapesGPU.cc similarity index 96% rename from RecoLocalCalo/EcalRecAlgos/src/EcalPulseShapesGPU.cc rename to CondFormats/EcalObjects/src/EcalPulseShapesGPU.cc index aee122a01627d..96b492f3ad335 100644 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalPulseShapesGPU.cc +++ b/CondFormats/EcalObjects/src/EcalPulseShapesGPU.cc @@ -1,4 +1,4 @@ -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalPulseShapesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h" #include "FWCore/Utilities/interface/typelookup.h" #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" diff --git a/CondFormats/EcalObjects/src/EcalRecHitParametersGPU.cc b/CondFormats/EcalObjects/src/EcalRecHitParametersGPU.cc new file mode 100644 index 0000000000000..a74232bc93e8b --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalRecHitParametersGPU.cc @@ -0,0 +1,57 @@ +#include "CondFormats/EcalObjects/interface/EcalRecHitParametersGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" +#include "CommonTools/Utils/interface/StringToEnumValue.h" +#include "CondFormats/EcalObjects/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 + + // Translate 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]); + 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 const& EcalRecHitParametersGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalRecHitParametersGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.channelStatusToBeExcluded = + cms::cuda::make_device_unique(channelStatusToBeExcluded_.size(), cudaStream); + product.expanded_v_DB_reco_flags = + cms::cuda::make_device_unique(expanded_v_DB_reco_flags_.size(), cudaStream); + product.expanded_Sizes_v_DB_reco_flags = + cms::cuda::make_device_unique(expanded_Sizes_v_DB_reco_flags_.size(), cudaStream); + product.expanded_flagbit_v_DB_reco_flags = + cms::cuda::make_device_unique(expanded_flagbit_v_DB_reco_flags_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.channelStatusToBeExcluded, channelStatusToBeExcluded_, cudaStream); + cms::cuda::copyAsync(product.expanded_v_DB_reco_flags, expanded_v_DB_reco_flags_, cudaStream); + cms::cuda::copyAsync(product.expanded_Sizes_v_DB_reco_flags, expanded_Sizes_v_DB_reco_flags_, cudaStream); + cms::cuda::copyAsync(product.expanded_flagbit_v_DB_reco_flags, expanded_flagbit_v_DB_reco_flags_, cudaStream); + }); + return product; +} + +TYPELOOKUP_DATA_REG(EcalRecHitParametersGPU); diff --git a/CondFormats/EcalObjects/src/EcalRechitADCToGeVConstantGPU.cc b/CondFormats/EcalObjects/src/EcalRechitADCToGeVConstantGPU.cc new file mode 100644 index 0000000000000..a71266d1615dc --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalRechitADCToGeVConstantGPU.cc @@ -0,0 +1,25 @@ +#include "CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalRechitADCToGeVConstantGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalRechitADCToGeVConstantGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.adc2gev = cms::cuda::make_device_unique(adc2gev_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.adc2gev, adc2gev_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalRechitADCToGeVConstantGPU); diff --git a/CondFormats/EcalObjects/src/EcalRechitChannelStatusGPU.cc b/CondFormats/EcalObjects/src/EcalRechitChannelStatusGPU.cc new file mode 100644 index 0000000000000..2a0740828f6cf --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalRechitChannelStatusGPU.cc @@ -0,0 +1,33 @@ +#include "CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& EcalRechitChannelStatusGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalRechitChannelStatusGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.status = cms::cuda::make_device_unique(status_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.status, status_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalRechitChannelStatusGPU); 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/EcalObjects/src/EcalSamplesCorrelationGPU.cc b/CondFormats/EcalObjects/src/EcalSamplesCorrelationGPU.cc new file mode 100644 index 0000000000000..9e355045149ea --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalSamplesCorrelationGPU.cc @@ -0,0 +1,66 @@ +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +EcalSamplesCorrelationGPU::EcalSamplesCorrelationGPU(EcalSamplesCorrelation const& values) { + EBG12SamplesCorrelation_.reserve(values.EBG12SamplesCorrelation.size()); + for (const auto& EBG12SamplesCorrelation : values.EBG12SamplesCorrelation) { + EBG12SamplesCorrelation_.emplace_back(EBG12SamplesCorrelation); + } + + EBG6SamplesCorrelation_.reserve(values.EBG6SamplesCorrelation.size()); + for (const auto& EBG6SamplesCorrelation : values.EBG6SamplesCorrelation) { + EBG6SamplesCorrelation_.emplace_back(EBG6SamplesCorrelation); + } + + EBG1SamplesCorrelation_.reserve(values.EBG1SamplesCorrelation.size()); + for (const auto& EBG1SamplesCorrelation : values.EBG1SamplesCorrelation) { + EBG1SamplesCorrelation_.emplace_back(EBG1SamplesCorrelation); + } + + EEG12SamplesCorrelation_.reserve(values.EEG12SamplesCorrelation.size()); + for (const auto& EEG12SamplesCorrelation : values.EEG12SamplesCorrelation) { + EEG12SamplesCorrelation_.emplace_back(EEG12SamplesCorrelation); + } + + EEG6SamplesCorrelation_.reserve(values.EEG6SamplesCorrelation.size()); + for (const auto& EEG6SamplesCorrelation : values.EEG6SamplesCorrelation) { + EEG6SamplesCorrelation_.emplace_back(EEG6SamplesCorrelation); + } + + EEG1SamplesCorrelation_.reserve(values.EEG1SamplesCorrelation.size()); + for (const auto& EEG1SamplesCorrelation : values.EEG1SamplesCorrelation) { + EEG1SamplesCorrelation_.emplace_back(EEG1SamplesCorrelation); + } +} + +EcalSamplesCorrelationGPU::Product const& EcalSamplesCorrelationGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalSamplesCorrelationGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.EBG12SamplesCorrelation = + cms::cuda::make_device_unique(EBG12SamplesCorrelation_.size(), cudaStream); + product.EBG6SamplesCorrelation = + cms::cuda::make_device_unique(EBG6SamplesCorrelation_.size(), cudaStream); + product.EBG1SamplesCorrelation = + cms::cuda::make_device_unique(EBG1SamplesCorrelation_.size(), cudaStream); + product.EEG12SamplesCorrelation = + cms::cuda::make_device_unique(EEG12SamplesCorrelation_.size(), cudaStream); + product.EEG6SamplesCorrelation = + cms::cuda::make_device_unique(EEG6SamplesCorrelation_.size(), cudaStream); + product.EEG1SamplesCorrelation = + cms::cuda::make_device_unique(EEG1SamplesCorrelation_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.EBG12SamplesCorrelation, EBG12SamplesCorrelation_, cudaStream); + cms::cuda::copyAsync(product.EBG6SamplesCorrelation, EBG6SamplesCorrelation_, cudaStream); + cms::cuda::copyAsync(product.EBG1SamplesCorrelation, EBG1SamplesCorrelation_, cudaStream); + cms::cuda::copyAsync(product.EEG12SamplesCorrelation, EEG12SamplesCorrelation_, cudaStream); + cms::cuda::copyAsync(product.EEG6SamplesCorrelation, EEG6SamplesCorrelation_, cudaStream); + cms::cuda::copyAsync(product.EEG1SamplesCorrelation, EEG1SamplesCorrelation_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalSamplesCorrelationGPU); diff --git a/CondFormats/EcalObjects/src/EcalTPGOddWeightGroup.cc b/CondFormats/EcalObjects/src/EcalTPGOddWeightGroup.cc new file mode 100644 index 0000000000000..81f088b4f9d29 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalTPGOddWeightGroup.cc @@ -0,0 +1,5 @@ +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" + +EcalTPGOddWeightGroup::EcalTPGOddWeightGroup() {} + +EcalTPGOddWeightGroup::~EcalTPGOddWeightGroup() {} diff --git a/CondFormats/EcalObjects/src/EcalTPGOddWeightIdMap.cc b/CondFormats/EcalObjects/src/EcalTPGOddWeightIdMap.cc new file mode 100644 index 0000000000000..a78633ac76b48 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalTPGOddWeightIdMap.cc @@ -0,0 +1,7 @@ +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" + +EcalTPGOddWeightIdMap::EcalTPGOddWeightIdMap() {} + +EcalTPGOddWeightIdMap::~EcalTPGOddWeightIdMap() {} + +void EcalTPGOddWeightIdMap::setValue(const uint32_t& id, const EcalTPGWeights& value) { map_[id] = value; } diff --git a/CondFormats/EcalObjects/src/EcalTPGTPMode.cc b/CondFormats/EcalObjects/src/EcalTPGTPMode.cc new file mode 100644 index 0000000000000..cc7608c4ec63b --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalTPGTPMode.cc @@ -0,0 +1,42 @@ +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" +#include +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +EcalTPGTPMode::EcalTPGTPMode() {} + +EcalTPGTPMode::~EcalTPGTPMode() {} + +void EcalTPGTPMode::print(std::ostream& out) const { + out << ">>> Trigger primitive mode: " << std::endl; + out << " enable EE odd filter " << EnableEEOddFilter << std::endl; + out << " enable EB odd filter " << EnableEBOddFilter << std::endl; + out << " enable EE odd peak finder " << EnableEEOddPeakFinder << std::endl; + out << " enable EB odd peak finder " << EnableEBOddPeakFinder << std::endl; + out << " disable EE even peak finder " << DisableEEEvenPeakFinder << std::endl; + out << " disable EB even peak finder " << DisableEBEvenPeakFinder << std::endl; + if (FenixEEStripOutput == 0) + out << " EE strip formatter output: even filter " << std::endl; + if (FenixEEStripOutput == 1) + out << " EE strip formatter output: odd filter " << std::endl; + if (FenixEEStripOutput == 2) + out << " EE strip formatter output: larger of odd and even " << std::endl; + if (FenixEEStripOutput == 3) + out << " EE strip formatter output: odd + even " << std::endl; + if (FenixEBStripOutput == 0) + out << " EB strip formatter output: even filter " << std::endl; + if (FenixEBStripOutput == 1) + out << " EB strip formatter output: odd filter " << std::endl; + if (FenixEBStripOutput == 2) + out << " EB strip formatter output: larger of odd and even " << std::endl; + if (FenixEBStripOutput == 3) + out << " EB strip formatter output: odd + even " << std::endl; + out << " Flag EE odd>even strip " << FenixEEStripInfobit2 << std::endl; + out << " Flag EB odd>even strip " << FenixEBStripInfobit2 << std::endl; + if (EBFenixTcpOutput == 0) + out << " EB tcp formatter output: even filter " << std::endl; + if (EBFenixTcpOutput == 1) + out << " EB tcp formatter output: larger of odd and even " << std::endl; + if (EBFenixTcpOutput == 2) + out << " EB tcp formatter output: even + odd " << std::endl; + out << " Flag EB odd>even TCP " << EBFenixTcpInfobit1 << std::endl; +} \ No newline at end of file diff --git a/CondFormats/EcalObjects/src/EcalTimeBiasCorrectionsGPU.cc b/CondFormats/EcalObjects/src/EcalTimeBiasCorrectionsGPU.cc new file mode 100644 index 0000000000000..268a22f7182f5 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalTimeBiasCorrectionsGPU.cc @@ -0,0 +1,53 @@ +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +EcalTimeBiasCorrectionsGPU::EcalTimeBiasCorrectionsGPU(EcalTimeBiasCorrections const& values) { + ebTimeCorrAmplitudeBins_.reserve(values.EBTimeCorrAmplitudeBins.size()); + for (const auto& ebTimeCorrAmplitudeBin : values.EBTimeCorrAmplitudeBins) { + ebTimeCorrAmplitudeBins_.emplace_back(ebTimeCorrAmplitudeBin); + } + + ebTimeCorrShiftBins_.reserve(values.EBTimeCorrAmplitudeBins.size()); + for (const auto& ebTimeCorrShiftBin : values.EBTimeCorrShiftBins) { + ebTimeCorrShiftBins_.emplace_back(ebTimeCorrShiftBin); + } + + eeTimeCorrAmplitudeBins_.reserve(values.EETimeCorrAmplitudeBins.size()); + for (const auto& eeTimeCorrAmplitudeBin : values.EETimeCorrAmplitudeBins) { + eeTimeCorrAmplitudeBins_.emplace_back(eeTimeCorrAmplitudeBin); + } + + eeTimeCorrShiftBins_.reserve(values.EETimeCorrAmplitudeBins.size()); + for (const auto& eeTimeCorrShiftBin : values.EETimeCorrShiftBins) { + eeTimeCorrShiftBins_.emplace_back(eeTimeCorrShiftBin); + } +} + +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(); + + // allocate + product.ebTimeCorrAmplitudeBins = + cms::cuda::make_device_unique(ebTimeCorrAmplitudeBins_.size(), cudaStream); + product.ebTimeCorrShiftBins = cms::cuda::make_device_unique(ebTimeCorrShiftBins_.size(), cudaStream); + product.eeTimeCorrAmplitudeBins = + cms::cuda::make_device_unique(eeTimeCorrAmplitudeBins_.size(), cudaStream); + product.eeTimeCorrShiftBins = cms::cuda::make_device_unique(eeTimeCorrShiftBins_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.ebTimeCorrAmplitudeBins, ebTimeCorrAmplitudeBins_, cudaStream); + cms::cuda::copyAsync(product.ebTimeCorrShiftBins, ebTimeCorrShiftBins_, cudaStream); + cms::cuda::copyAsync(product.eeTimeCorrAmplitudeBins, eeTimeCorrAmplitudeBins_, cudaStream); + cms::cuda::copyAsync(product.eeTimeCorrShiftBins, eeTimeCorrShiftBins_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalTimeBiasCorrectionsGPU); diff --git a/CondFormats/EcalObjects/src/EcalTimeCalibConstantsGPU.cc b/CondFormats/EcalObjects/src/EcalTimeCalibConstantsGPU.cc new file mode 100644 index 0000000000000..80537fa9f07c8 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalTimeCalibConstantsGPU.cc @@ -0,0 +1,26 @@ +#include "CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h" + +EcalTimeCalibConstantsGPU::EcalTimeCalibConstantsGPU(EcalTimeCalibConstants const& values) { + values_.reserve(values.size()); + for (size_t i = 0; i < values.size(); ++i) { + values_.emplace_back(values[i]); + } + offset_ = values.barrelItems().size(); +} + +EcalTimeCalibConstantsGPU::Product const& EcalTimeCalibConstantsGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](EcalTimeCalibConstantsGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.values = cms::cuda::make_device_unique(values_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.values, values_, cudaStream); + }); + + return product; +} + +TYPELOOKUP_DATA_REG(EcalTimeCalibConstantsGPU); diff --git a/CondFormats/EcalObjects/src/ElectronicsMappingGPU.cc b/CondFormats/EcalObjects/src/ElectronicsMappingGPU.cc new file mode 100644 index 0000000000000..343441e5d059a --- /dev/null +++ b/CondFormats/EcalObjects/src/ElectronicsMappingGPU.cc @@ -0,0 +1,47 @@ +#include "CondFormats/EcalObjects/interface/ElectronicsMappingGPU.h" + +#include "FWCore/Utilities/interface/typelookup.h" +#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.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 const& ElectronicsMappingGPU::getProduct(cudaStream_t cudaStream) const { + auto const& product = product_.dataForCurrentDeviceAsync( + cudaStream, [this](ElectronicsMappingGPU::Product& product, cudaStream_t cudaStream) { + // allocate + product.eid2did = cms::cuda::make_device_unique(eid2did_.size(), cudaStream); + // transfer + cms::cuda::copyAsync(product.eid2did, eid2did_, cudaStream); + }); + + return product; + } + + } // namespace raw +} // namespace ecal + +TYPELOOKUP_DATA_REG(ecal::raw::ElectronicsMappingGPU); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGOddWeightGroup.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGOddWeightGroup.cc new file mode 100644 index 0000000000000..fe44799b398ec --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGOddWeightGroup.cc @@ -0,0 +1,5 @@ +// user include files +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalTPGOddWeightGroup); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGOddWeightIdMap.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGOddWeightIdMap.cc new file mode 100644 index 0000000000000..c5a1c7bc79329 --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGOddWeightIdMap.cc @@ -0,0 +1,5 @@ +// user include files +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalTPGOddWeightIdMap); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGTPMode.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGTPMode.cc new file mode 100644 index 0000000000000..3262cf46b4a44 --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalTPGTPMode.cc @@ -0,0 +1,5 @@ +// user include files +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalTPGTPMode); diff --git a/CondFormats/EcalObjects/src/classes.h b/CondFormats/EcalObjects/src/classes.h index 220714ded1644..f35fcf033ea60 100644 --- a/CondFormats/EcalObjects/src/classes.h +++ b/CondFormats/EcalObjects/src/classes.h @@ -45,6 +45,7 @@ #include "CondFormats/EcalObjects/interface/EcalTPGLutIdMap.h" #include "CondFormats/EcalObjects/interface/EcalTPGPedestals.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" #include "CondFormats/EcalObjects/interface/EcalTPGSlidingWindow.h" #include "CondFormats/EcalObjects/interface/EcalMappingElectronics.h" #include "CondFormats/EcalObjects/interface/EcalFunctionParameters.h" @@ -57,6 +58,8 @@ #include "CondFormats/EcalObjects/interface/EcalTPGFineGrainEBGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGLutGroup.h" #include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" #include "CondFormats/EcalObjects/interface/EcalTPGPhysicsConst.h" #include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" #include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatusCode.h" diff --git a/CondFormats/EcalObjects/src/classes_def.xml b/CondFormats/EcalObjects/src/classes_def.xml index 8a64c5b637176..ea50b1da79b67 100644 --- a/CondFormats/EcalObjects/src/classes_def.xml +++ b/CondFormats/EcalObjects/src/classes_def.xml @@ -214,6 +214,10 @@ + + + + @@ -223,6 +227,7 @@ + diff --git a/CondFormats/EcalObjects/src/headers.h b/CondFormats/EcalObjects/src/headers.h index 35296d9e63edb..11b173bbaec83 100644 --- a/CondFormats/EcalObjects/src/headers.h +++ b/CondFormats/EcalObjects/src/headers.h @@ -8,6 +8,11 @@ #include "CondFormats/EcalObjects/interface/EcalSimPulseShape.h" #include "CondFormats/EcalObjects/interface/EcalMustacheSCParameters.h" #include "CondFormats/EcalObjects/interface/EcalSCDynamicDPhiParameters.h" +#include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalTPGOddWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGTPMode.h" #include "CondFormats/External/interface/EcalDetID.h" #include "CondFormats/External/interface/SMatrix.h" 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/HGCalObjects/BuildFile.xml b/CondFormats/HGCalObjects/BuildFile.xml new file mode 100644 index 0000000000000..e017925437cac --- /dev/null +++ b/CondFormats/HGCalObjects/BuildFile.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/CondFormats/HGCalObjects/interface/HeterogeneousHGCalHEFCellPositionsConditions.h b/CondFormats/HGCalObjects/interface/HeterogeneousHGCalHEFCellPositionsConditions.h new file mode 100644 index 0000000000000..5dea507cc7432 --- /dev/null +++ b/CondFormats/HGCalObjects/interface/HeterogeneousHGCalHEFCellPositionsConditions.h @@ -0,0 +1,76 @@ +#ifndef CondFormats_HGCalObjects_HeterogeneousHGCalHEFConditions_h +#define CondFormats_HGCalObjects_HeterogeneousHGCalHEFConditions_h + +#include //accumulate +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h" + +namespace cpar = hgcal_conditions::parameters; +namespace cpos = hgcal_conditions::positions; + +// Declare the wrapper ESProduct. The corresponding ESProducer should +// produce objects of this type. +class HeterogeneousHGCalHEFCellPositionsConditions { +public: + // Constructor takes the standard CPU ESProduct, and transforms the + // necessary data to array(s) in pinned host memory + HeterogeneousHGCalHEFCellPositionsConditions(cpos::HGCalPositionsMapping*); + + // Deallocates all pinned host memory + ~HeterogeneousHGCalHEFCellPositionsConditions(); + + // Function to return the actual payload on the memory of the current device + hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct const* getHeterogeneousConditionsESProductAsync( + cudaStream_t stream) const; + +private: + // Holds the data in pinned CPU memory + // Contrary to its non-heterogeneous counterpart (constructor argument) it is *not* a pointer (so to avoid an extra allocation) + cpos::HeterogeneousHGCalPositionsMapping posmap_; + size_t nelems_posmap_; + + std::vector sizes_; + size_t chunk_; + const size_t number_position_arrays = + 2; //x and y; required due to the assymetry between cpos::HeterogeneousHGCalPositionsMapping and cpos::HGCalPositionsMapping + + std::vector calculate_memory_bytes_(cpos::HGCalPositionsMapping*); + size_t allocate_memory_(const std::vector&); + void transfer_data_to_heterogeneous_pointers_(const std::vector&, cpos::HGCalPositionsMapping*); + void transfer_data_to_heterogeneous_vars_(const cpos::HGCalPositionsMapping*); + + /*methods for managing SoA's pointers*/ + //float + float*& select_pointer_f_(cpos::HeterogeneousHGCalPositionsMapping*, const unsigned int&) const; + std::vector& select_pointer_f_(cpos::HGCalPositionsMapping*, const unsigned int&); + //int32_t + int32_t*& select_pointer_i_(cpos::HeterogeneousHGCalPositionsMapping*, const unsigned int&) const; + std::vector& select_pointer_i_(cpos::HGCalPositionsMapping*, const unsigned int&); + //uint32_t + uint32_t*& select_pointer_u_(cpos::HeterogeneousHGCalPositionsMapping*, const unsigned int&) const; + std::vector& select_pointer_u_(cpos::HGCalPositionsMapping*, const unsigned int&); + + // Helper struct to hold all information that has to be allocated and + // deallocated per device + struct GPUData { + // Destructor should free all member pointers + ~GPUData(); + // internal pointers are on device, struct itself is on CPU + hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* host = nullptr; + // internal pounters and struct are on device + hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* device = nullptr; + }; + + // Helper that takes care of complexity of transferring the data to + // multiple devices + cms::cuda::ESProduct gpuData_; +}; + +#endif //CondFormats_HGCalObjects_HeterogeneousHGCalHEFConditions_h diff --git a/CondFormats/HGCalObjects/src/T_EventSetup_HeterogeneousHGCalHEFCellPositionsConditions.cc b/CondFormats/HGCalObjects/src/T_EventSetup_HeterogeneousHGCalHEFCellPositionsConditions.cc new file mode 100644 index 0000000000000..75c7efd7751c6 --- /dev/null +++ b/CondFormats/HGCalObjects/src/T_EventSetup_HeterogeneousHGCalHEFCellPositionsConditions.cc @@ -0,0 +1,3 @@ +#include "CondFormats/HGCalObjects/interface/HeterogeneousHGCalHEFCellPositionsConditions.h" +#include "FWCore/Utilities/interface/typelookup.h" +TYPELOOKUP_DATA_REG(HeterogeneousHGCalHEFCellPositionsConditions); 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/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_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/headers.h b/CondFormats/PPSObjects/src/headers.h index b21adc5f7c18d..bb179fd8df892 100644 --- a/CondFormats/PPSObjects/src/headers.h +++ b/CondFormats/PPSObjects/src/headers.h @@ -12,3 +12,4 @@ #include "CondFormats/PPSObjects/interface/LHCInterpolatedOpticalFunctionsSetCollection.h" #include "CondFormats/PPSObjects/interface/PPSDirectSimulationData.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" 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/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 { 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/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/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/writehelpers/geometryExtended2021_writer.py b/CondTools/Geometry/test/writehelpers/geometryExtended2021_writer.py index 5f2b657ff2993..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') @@ -34,11 +36,11 @@ 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") @@ -62,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/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/Hcal/plugins/HcalDumpConditions.cc b/CondTools/Hcal/plugins/HcalDumpConditions.cc index d9bcbad238841..4061182459d49 100644 --- a/CondTools/Hcal/plugins/HcalDumpConditions.cc +++ b/CondTools/Hcal/plugins/HcalDumpConditions.cc @@ -42,6 +42,39 @@ namespace edmtest { mDumpRequest = p.getUntrackedParameter >("dump", std::vector()); m_toktopo = esConsumes(); m_tokdb = esConsumes(); + + tok_ElectronicsMap = esConsumes(); + tok_FrontEndMap = esConsumes(); + tok_QIEData = esConsumes(); + tok_QIETypes = esConsumes(); + tok_Pedestals = esConsumes(); + tok_PedestalWidths = esConsumes(); + tok_Pedestals_effective = esConsumes(edm::ESInputTag("", "effective")); + tok_PedestalWidths_effective = + esConsumes(edm::ESInputTag("", "effective")); + tok_Gains = esConsumes(); + tok_GainWidths = esConsumes(); + tok_ChannelQuality = esConsumes(); + tok_RespCorrs = esConsumes(); + tok_ZSThresholds = esConsumes(); + tok_L1TriggerObjects = esConsumes(); + tok_TimeCorrs = esConsumes(); + tok_LUTCorrs = esConsumes(); + tok_PFCorrs = esConsumes(); + tok_ValidationCorrs = esConsumes(); + tok_LutMetadata = esConsumes(); + tok_DcsValues = esConsumes(); + tok_DcsMap = esConsumes(); + tok_RecoParams = esConsumes(); + tok_TimingParams = esConsumes(); + tok_LongRecoParams = esConsumes(); + tok_ZDCLowGainFractions = esConsumes(); + tok_MCParams = esConsumes(); + tok_FlagHFDigiTimeParams = esConsumes(); + tok_SiPMParameters = esConsumes(); + tok_SiPMCharacteristics = esConsumes(); + tok_TPChannelParameters = esConsumes(); + tok_TPParameters = esConsumes(); } explicit HcalDumpConditions(int i) {} @@ -53,13 +86,14 @@ namespace edmtest { const edm::Event& e, const edm::EventSetup& context, const std::string name, - const HcalTopology* topo, - const std::string label = ""); + const edm::ESGetToken tok); template void dumpIt(const std::vector& mDumpRequest, const edm::Event& e, const edm::EventSetup& context, - const std::string name); + const std::string name, + const HcalTopology* topo, + const edm::ESGetToken tok); template void writeToFile(const S& myS, const edm::Event& e, const std::string name); @@ -68,6 +102,37 @@ namespace edmtest { std::vector mDumpRequest; edm::ESGetToken m_toktopo; edm::ESGetToken m_tokdb; + edm::ESGetToken tok_ElectronicsMap; + edm::ESGetToken tok_FrontEndMap; + edm::ESGetToken tok_QIEData; + edm::ESGetToken tok_QIETypes; + edm::ESGetToken tok_Pedestals; + edm::ESGetToken tok_PedestalWidths; + edm::ESGetToken tok_Pedestals_effective; + edm::ESGetToken tok_PedestalWidths_effective; + edm::ESGetToken tok_Gains; + edm::ESGetToken tok_GainWidths; + edm::ESGetToken tok_ChannelQuality; + edm::ESGetToken tok_RespCorrs; + edm::ESGetToken tok_ZSThresholds; + edm::ESGetToken tok_L1TriggerObjects; + edm::ESGetToken tok_TimeCorrs; + edm::ESGetToken tok_LUTCorrs; + edm::ESGetToken tok_PFCorrs; + edm::ESGetToken tok_ValidationCorrs; + edm::ESGetToken tok_LutMetadata; + edm::ESGetToken tok_DcsValues; + edm::ESGetToken tok_DcsMap; + edm::ESGetToken tok_RecoParams; + edm::ESGetToken tok_TimingParams; + edm::ESGetToken tok_LongRecoParams; + edm::ESGetToken tok_ZDCLowGainFractions; + edm::ESGetToken tok_MCParams; + edm::ESGetToken tok_FlagHFDigiTimeParams; + edm::ESGetToken tok_SiPMParameters; + edm::ESGetToken tok_SiPMCharacteristics; + edm::ESGetToken tok_TPChannelParameters; + edm::ESGetToken tok_TPParameters; }; template @@ -75,14 +140,9 @@ namespace edmtest { const edm::Event& e, const edm::EventSetup& context, const std::string name, - const HcalTopology* topo, - const std::string label) { + const edm::ESGetToken tok) { if (std::find(mDumpRequest.begin(), mDumpRequest.end(), name) != mDumpRequest.end()) { - edm::ESGetToken tok = - ((!label.empty()) ? esConsumes(edm::ESInputTag("", label)) : esConsumes()); - S myobject = context.getData(tok); - if (topo) - myobject.setTopo(topo); + const S& myobject = context.getData(tok); writeToFile(myobject, e, name); @@ -95,10 +155,13 @@ namespace edmtest { void HcalDumpConditions::dumpIt(const std::vector& mDumpRequest, const edm::Event& e, const edm::EventSetup& context, - const std::string name) { + const std::string name, + const HcalTopology* topo, + const edm::ESGetToken tok) { if (std::find(mDumpRequest.begin(), mDumpRequest.end(), name) != mDumpRequest.end()) { - edm::ESGetToken tok = esConsumes(); - const S& myobject = context.getData(tok); + S myobject = context.getData(tok); + if (topo) + myobject.setTopo(topo); writeToFile(myobject, e, name); @@ -127,52 +190,50 @@ namespace edmtest { return; // dumpIt called for all possible ValueMaps. The function checks if the dump is actually requested. - dumpIt(mDumpRequest, e, context, "ElectronicsMap"); - dumpIt(mDumpRequest, e, context, "FrontEndMap"); - dumpIt(mDumpRequest, e, context, "QIEData", topo); - dumpIt(mDumpRequest, e, context, "QIETypes", topo); - dumpIt(mDumpRequest, e, context, "Pedestals", topo); - dumpIt(mDumpRequest, e, context, "PedestalWidths", topo); - dumpIt(mDumpRequest, e, context, "EffectivePedestals", topo, "effective"); + + dumpIt(mDumpRequest, e, context, "ElectronicsMap", tok_ElectronicsMap); + dumpIt(mDumpRequest, e, context, "FrontEndMap", tok_FrontEndMap); + dumpIt(mDumpRequest, e, context, "QIEData", topo, tok_QIEData); + dumpIt(mDumpRequest, e, context, "QIETypes", topo, tok_QIETypes); + dumpIt(mDumpRequest, e, context, "Pedestals", topo, tok_Pedestals); dumpIt( - mDumpRequest, e, context, "EffectivePedestalWidths", topo, "effective"); - dumpIt(mDumpRequest, e, context, "Gains", topo); - dumpIt(mDumpRequest, e, context, "GainWidths", topo); - dumpIt(mDumpRequest, e, context, "ChannelQuality", topo, "withTopo"); - dumpIt(mDumpRequest, e, context, "RespCorrs", topo); - dumpIt(mDumpRequest, e, context, "ZSThresholds", topo); - dumpIt(mDumpRequest, e, context, "L1TriggerObjects", topo); - dumpIt(mDumpRequest, e, context, "TimeCorrs", topo); - dumpIt(mDumpRequest, e, context, "LUTCorrs", topo); - dumpIt(mDumpRequest, e, context, "PFCorrs", topo); - dumpIt(mDumpRequest, e, context, "ValidationCorrs", topo); - dumpIt(mDumpRequest, e, context, "LutMetadata", topo); - dumpIt(mDumpRequest, e, context, "DcsValues"); - dumpIt(mDumpRequest, e, context, "DcsMap"); - dumpIt(mDumpRequest, e, context, "RecoParams", topo); - dumpIt(mDumpRequest, e, context, "TimingParams", topo); - dumpIt(mDumpRequest, e, context, "LongRecoParams", topo); - dumpIt(mDumpRequest, e, context, "ZDCLowGainFractions", topo); - dumpIt(mDumpRequest, e, context, "MCParams", topo); + mDumpRequest, e, context, "PedestalWidths", topo, tok_PedestalWidths); + dumpIt( + mDumpRequest, e, context, "EffectivePedestals", topo, tok_Pedestals_effective); + dumpIt( + mDumpRequest, e, context, "EffectivePedestalWidths", topo, tok_PedestalWidths_effective); + dumpIt(mDumpRequest, e, context, "Gains", topo, tok_Gains); + dumpIt(mDumpRequest, e, context, "GainWidths", topo, tok_GainWidths); + dumpIt( + mDumpRequest, e, context, "ChannelQuality", topo, tok_ChannelQuality); + dumpIt(mDumpRequest, e, context, "RespCorrs", topo, tok_RespCorrs); + dumpIt(mDumpRequest, e, context, "ZSThresholds", topo, tok_ZSThresholds); + dumpIt( + mDumpRequest, e, context, "L1TriggerObjects", topo, tok_L1TriggerObjects); + dumpIt(mDumpRequest, e, context, "TimeCorrs", topo, tok_TimeCorrs); + dumpIt(mDumpRequest, e, context, "LUTCorrs", topo, tok_LUTCorrs); + dumpIt(mDumpRequest, e, context, "PFCorrs", topo, tok_PFCorrs); + dumpIt( + mDumpRequest, e, context, "ValidationCorrs", topo, tok_ValidationCorrs); + dumpIt(mDumpRequest, e, context, "LutMetadata", topo, tok_LutMetadata); + dumpIt(mDumpRequest, e, context, "DcsValues", tok_DcsValues); + dumpIt(mDumpRequest, e, context, "DcsMap", tok_DcsMap); + dumpIt(mDumpRequest, e, context, "RecoParams", topo, tok_RecoParams); + dumpIt(mDumpRequest, e, context, "TimingParams", topo, tok_TimingParams); + dumpIt( + mDumpRequest, e, context, "LongRecoParams", topo, tok_LongRecoParams); + dumpIt( + mDumpRequest, e, context, "ZDCLowGainFractions", topo, tok_ZDCLowGainFractions); + dumpIt(mDumpRequest, e, context, "MCParams", topo, tok_MCParams); dumpIt( - mDumpRequest, e, context, "FlagHFDigiTimeParams", topo); - dumpIt(mDumpRequest, e, context, "SiPMParameters", topo); - dumpIt(mDumpRequest, e, context, "SiPMCharacteristics"); - dumpIt(mDumpRequest, e, context, "TPChannelParameters", topo); - dumpIt(mDumpRequest, e, context, "TPParameters"); - - 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()) { - if (std::find(mDumpRequest.begin(), mDumpRequest.end(), std::string("CalibrationsSet")) != mDumpRequest.end()) { - writeToFile(*(pSetup->getHcalCalibrationsSet()), e, "CalibrationsSet"); - } - if (std::find(mDumpRequest.begin(), mDumpRequest.end(), std::string("CalibrationWidthsSet")) != - mDumpRequest.end()) { - writeToFile(*pSetup->getHcalCalibrationWidthsSet(), e, "CalibrationWidthsSet"); - } - } + mDumpRequest, e, context, "FlagHFDigiTimeParams", topo, tok_FlagHFDigiTimeParams); + dumpIt( + mDumpRequest, e, context, "SiPMParameters", topo, tok_SiPMParameters); + dumpIt( + mDumpRequest, e, context, "SiPMCharacteristics", tok_SiPMCharacteristics); + dumpIt( + mDumpRequest, e, context, "TPChannelParameters", topo, tok_TPChannelParameters); + dumpIt(mDumpRequest, e, context, "TPParameters", tok_TPParameters); } DEFINE_FWK_MODULE(HcalDumpConditions); } // namespace edmtest diff --git a/CondTools/Hcal/test/makeDump_Run3.csh b/CondTools/Hcal/test/makeDump_Run3.csh new file mode 100755 index 0000000000000..912e26221184e --- /dev/null +++ b/CondTools/Hcal/test/makeDump_Run3.csh @@ -0,0 +1,55 @@ +#!/bin/csh +cmsenv + +if ("$4" == "test") then + echo "connectstring = sqlite_file:test.db" + set connectstring = sqlite_file:test.db +else if ( $#argv == 3 ) then + echo "connectstring = frontier://FrontierProd/CMS_CONDITIONS" + set connectstring = frontier://FrontierProd/CMS_CONDITIONS +else + echo "connectstring = $4" + set connectstring = $4 +endif + +cat >! temp_dump_cfg.py <<% + +# Usage example: +# ./makeDump_Run3.csh ElectronicsMap HcalElectronicsMap_v9.0_hlt 309055 frontier://FrontierProd/CMS_CONDITIONS +import FWCore.ParameterSet.Config as cms +from Configuration.StandardSequences.Eras import eras +process = cms.Process("DUMP",eras.Run3) + +process.load("Configuration.Geometry.GeometryExtended2021_cff") +process.load("Configuration.Geometry.GeometryExtended2021Reco_cff") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.source = cms.Source("EmptySource", + numberEventsInRun = cms.untracked.uint32(1), + firstRun = cms.untracked.uint32($3) +) + +process.load("CondCore.CondDB.CondDB_cfi") +process.CondDB.connect = '$connectstring' + +process.PoolDBESSource = cms.ESSource("PoolDBESSource", + process.CondDB, + toGet = cms.VPSet(cms.PSet(record = cms.string("Hcal$1Rcd"), + tag = cms.string("$2") + ) + ) +) + +process.dumpcond = cms.EDAnalyzer("HcalDumpConditions", + dump = cms.untracked.vstring("$1") + ) + +process.p = cms.Path(process.dumpcond) + +% +cmsRun temp_dump_cfg.py +rm temp_dump_cfg.py + diff --git a/CondTools/Hcal/test/runDumpHcalCond_cfg.py b/CondTools/Hcal/test/runDumpHcalCond_cfg.py index ad691ce9a3831..3a7bc2575f458 100644 --- a/CondTools/Hcal/test/runDumpHcalCond_cfg.py +++ b/CondTools/Hcal/test/runDumpHcalCond_cfg.py @@ -79,7 +79,7 @@ from Configuration.StandardSequences.Eras import eras process = cms.Process("DUMP",getattr(eras,options.era)) -process.load("CondCore.DBCommon.CondDBSetup_cfi") +process.load("CondCore.CondDB.CondDB_cfi") process.load('Configuration.StandardSequences.Services_cff') if options.globaltag: 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/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 a4d99061654ff..f4f08d09b5c00 100644 --- a/Configuration/AlCa/python/autoCond.py +++ b/Configuration/AlCa/python/autoCond.py @@ -2,88 +2,81 @@ ### NEW KEYS ### # GlobalTag for MC production with perfectly aligned and calibrated detector for Run1 - 'run1_design' : '113X_mcRun1_design_v1', + 'run1_design' : '113X_mcRun1_design_v2', # GlobalTag for MC production (pp collisions) with realistic alignment and calibrations for Run1 - 'run1_mc' : '113X_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' : '113X_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' : '113X_mcRun1_pA_v1', + 'run1_mc_pa' : '113X_mcRun1_pA_v2', # GlobalTag for MC production with pessimistic alignment and calibrations for Run2 - 'run2_mc_50ns' : '113X_mcRun2_startup_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_v2', + 'run2_mc_l1stage1' : '113X_mcRun2_asymptotic_l1stage1_v3', # GlobalTag for MC production with perfectly aligned and calibrated detector for Run2 - 'run2_design' : '113X_mcRun2_design_v2', + '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' : '113X_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' : '113X_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' : '113X_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' : '113X_mcRun2_HeavyIon_v2', + 'run2_mc_hi' : '113X_mcRun2_HeavyIon_v3', # GlobalTag for MC production (p-Pb collisions) with realistic alignment and calibrations for Run2 - 'run2_mc_pa' : '113X_mcRun2_pA_v2', - # GlobalTag for Run1 data reprocessing - 'run1_data' : '113X_dataRun2_v3', + 'run2_mc_pa' : '113X_mcRun2_pA_v3', # GlobalTag for Run2 data reprocessing - 'run2_data' : '113X_dataRun2_v3', + 'run2_data' : '113X_dataRun2_v4', # GlobalTag for Run2 data 2018B relvals only: HEM-15-16 fail - 'run2_data_HEfail' : '113X_dataRun2_HEfail_v3', + 'run2_data_HEfail' : '113X_dataRun2_HEfail_v4', # GlobalTag for Run2 data relvals: allows customization to run with fixed L1 menu - 'run2_data_relval' : '113X_dataRun2_relval_v3', + 'run2_data_relval' : '113X_dataRun2_relval_v4', # GlobalTag for Run2 HI data - 'run2_data_promptlike_hi' : '113X_dataRun2_PromptLike_HI_v3', - # GlobalTag for Run1 HLT: it points to the online GT - 'run1_hlt' : '101X_dataRun2_HLT_frozen_v11', - # GlobalTag for Run2 HLT: it points to the online GT - 'run2_hlt' : '101X_dataRun2_HLT_frozen_v11', - # GlobalTag for Run2 HLT RelVals: customizations to run with fixed L1 Menu - 'run2_hlt_relval' : '112X_dataRun2_HLT_relval_v3', - 'run2_hlt_relval_hi' : '112X_dataRun2_HLT_relval_HI_v2', - # GlobalTag for Run2 HLT for HI (not 2018 HI): it points to the online GT - 'run2_hlt_hi' : '101X_dataRun2_HLTHI_frozen_v11', + 'run2_data_promptlike_hi' : '113X_dataRun2_PromptLike_HI_v4', + # GlobalTag for Run3 HLT: it points to the online GT + 'run3_hlt' : '112X_dataRun3_HLT_v2', + # GlobalTag with fixed snapshot time for Run2 HLT RelVals: customizations to run with fixed L1 Menu + 'run2_hlt_relval' : '112X_dataRun2_HLT_relval_v5', # GlobalTag for Run3 data relvals (express GT) - 'run3_data_express' : '112X_dataRun3_Express_v2', + 'run3_data_express' : '112X_dataRun3_Express_v4', # GlobalTag for Run3 data relvals - 'run3_data_promptlike' : '112X_dataRun3_Prompt_v2', + 'run3_data_prompt' : '112X_dataRun3_Prompt_v4', # GlobalTag for MC production with perfectly aligned and calibrated detector for Phase1 2017 (and 0,0,~0-centred beamspot) - 'phase1_2017_design' : '113X_mc2017_design_v3', + 'phase1_2017_design' : '113X_mc2017_design_v4', # GlobalTag for MC production with realistic conditions for Phase1 2017 detector - 'phase1_2017_realistic' : '113X_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' : '113X_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' : '113X_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' : '113X_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' : '113X_upgrade2018_realistic_v3', + '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_v1', + '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' : '113X_upgrade2018_realistic_HI_v3', + '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' : '113X_upgrade2018_realistic_HEfail_v3', + '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' : '113X_upgrade2018cosmics_realistic_deco_v3', + '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' : '113X_upgrade2018cosmics_realistic_peak_v3', + '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' : '113X_mcRun3_2021_design_v4', # 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' : '113X_mcRun3_2021_realistic_v4', # 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' : '113X_mcRun3_2021cosmics_realistic_deco_v5', + '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' : '113X_mcRun3_2021_realistic_HI_v4', + 'phase1_2021_realistic_hi' : '113X_mcRun3_2021_realistic_HI_v5', # GlobalTag for MC production with realistic conditions for Phase1 2023 - 'phase1_2023_realistic' : '113X_mcRun3_2023_realistic_v4', # 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' : '113X_mcRun3_2024_realistic_v4', # 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' : '113X_mcRun4_realistic_v3' + 'phase2_realistic' : '113X_mcRun4_realistic_v6' } aliases = { @@ -91,6 +84,12 @@ 'BASEGT' : 'BASE1_V1|BASE2_V1' } +### Run 1 data GTs ### + # GlobalTag with fixed snapshot time for Run1 HLT RelVals: customizations to run with fixed L1 Menu +autoCond['run1_hlt_relval'] = autoCond['run2_hlt_relval'] + # GlobalTag for Run1 data reprocessing +autoCond['run1_data'] = autoCond['run2_data'] + # dedicated GlobalTags for HLT from Configuration.HLT.autoCondHLT import autoCondHLT autoCond = autoCondHLT(autoCond) @@ -103,6 +102,10 @@ from Configuration.AlCa.autoCondModifiers import autoCond0T autoCond = autoCond0T(autoCond) +# special GT for 2015 HLT HI run +from Configuration.AlCa.autoCondModifiers import autoCondHLTHI +autoCond = autoCondHLTHI(autoCond) + ### OLD KEYS ### kept for backward compatibility # GlobalTag for MC production with perfectly aligned and calibrated detector autoCond['mc'] = ( autoCond['run1_design'] ) @@ -115,7 +118,7 @@ # GlobalTag for data reprocessing autoCond['com10'] = ( autoCond['run1_data'] ) # GlobalTag for running HLT on recent data: it points to the online GT (remove the snapshot!) -autoCond['hltonline'] = ( autoCond['run1_hlt'] ) +autoCond['hltonline'] = ( autoCond['run3_hlt'] ) # GlobalTag for POSTLS1 upgrade studies: autoCond['upgradePLS1'] = ( autoCond['run2_mc'] ) autoCond['upgradePLS150ns'] = ( autoCond['run2_mc_50ns'] ) diff --git a/Configuration/AlCa/python/autoCondModifiers.py b/Configuration/AlCa/python/autoCondModifiers.py index 19acc692f9f25..2c6254be7e587 100644 --- a/Configuration/AlCa/python/autoCondModifiers.py +++ b/Configuration/AlCa/python/autoCondModifiers.py @@ -11,8 +11,23 @@ def autoCond0T(autoCond): ConditionsFor0T = ','.join( ['RunInfo_0T_v1_mc', "RunInfoRcd", connectionString, "", "2020-07-01 12:00:00.000"] ) GlobalTags0T = {} for key,val in six.iteritems(autoCond): - if "phase" in key: # restric to phase1 upgrade GTs + if "phase" in key: # restrict to phase1 upgrade GTs GlobalTags0T[key+"_0T"] = (autoCond[key], ConditionsFor0T) autoCond.update(GlobalTags0T) return autoCond + +def autoCondHLTHI(autoCond): + + GlobalTagsHLTHI = {} + + # emulate hybrid ZeroSuppression on the VirginRaw data of 2015 + FullPedestalsForHLTHI = ','.join( ['SiStripFullPedestals_GR10_v1_hlt', "SiStripPedestalsRcd", connectionString, "", "2021-03-11 12:00:00.000"] ) + MenuForHLTHI = ','.join( ['L1Menu_CollisionsHeavyIons2015_v5_uGT_xml', "L1TUtmTriggerMenuRcd", connectionString, "", "2021-03-11 12:00:00.000"] ) + + for key,val in six.iteritems(autoCond): + if key == 'run2_hlt_relval': # modification of HLT relval GT + GlobalTagsHLTHI['run2_hlt_hi'] = (autoCond[key], FullPedestalsForHLTHI, MenuForHLTHI) + + autoCond.update(GlobalTagsHLTHI) + return autoCond diff --git a/Configuration/AlCa/python/autoCondPhase2.py b/Configuration/AlCa/python/autoCondPhase2.py index 4b43c7ffb1f87..6106d6e7c0ada 100644 --- a/Configuration/AlCa/python/autoCondPhase2.py +++ b/Configuration/AlCa/python/autoCondPhase2.py @@ -18,6 +18,8 @@ ## (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. +## T25: Phase2 tilted tracker. Outer Tracker (v8.0.0): same as T24/T21. Inner Tracker (v7.0.2): Based on (v6.1.5) (T24/T21), but with 3D sensors in TBPX L1. +## T26: Phase2 tilted tracker. Outer Tracker (v8.0.0): same as T24/T21. Inner Tracker (v7.0.3): Based on (v6.1.5) (T24/T21), but with 3D sensors in TBPX L1 and 50x50 pixel aspect ratio in TFPX and TEPX. ## #combines in a single dict of dict the tags defined below @@ -28,6 +30,8 @@ 'T21' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T15_v5_mc' ,SiPixelLARecord,connectionString, "", "2020-05-05 20:00:00.000"] ), ), #uH = 0.053/T (TBPX), uH=0.0/T (TEPX+TFPX) 'T22' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T15_v5_mc' ,SiPixelLARecord,connectionString, "", "2020-05-05 20:00:00.000"] ), ), #uH = 0.053/T (TBPX), uH=0.0/T (TEPX+TFPX) 'T23' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_v1_mc' ,SiPixelLARecord,connectionString, "", "2020-02-23 14:00:00.000"] ), ), #uH = 0.053/T (TBPX L3,L4), uH=0.0/T (TBPX L1,L2, TEPX+TFPX) + 'T25' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T25_v0_mc' ,SiPixelLARecord,connectionString, "", "2021-03-16 20:00:00.000"] ), ), #uH = 0.053/T (TBPX L2,L3,L4), uH=0.0/T (TBPX L1 TEPX+TFPX) + 'T26' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T25_v0_mc' ,SiPixelLARecord,connectionString, "", "2021-03-16 20:00:00.000"] ), ), #uH = 0.053/T (TBPX L2,L3,L4), uH=0.0/T (TBPX L1 TEPX+TFPX) } allTags["LAWidth"] = { @@ -35,6 +39,8 @@ 'T21' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T15_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "forWidth", "2019-11-05 20:00:00.000"] ), ), # uH=0.0/T (fall-back to offset) 'T22' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T15_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "forWidth", "2019-11-05 20:00:00.000"] ), ), # uH=0.0/T (fall-back to offset) 'T23' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "forWidth", "2020-02-23 14:00:00.000"] ), ), # uH=0.0/T (fall-back to offset) + 'T25' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "forWidth", "2020-02-23 14:00:00.000"] ), ), # uH=0.0/T (fall-back to offset) + 'T26' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "forWidth", "2020-02-23 14:00:00.000"] ), ), # uH=0.0/T (fall-back to offset) } allTags["LAfromAlignment"] = { @@ -42,6 +48,8 @@ 'T21' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T15_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "fromAlignment", "2019-11-05 20:00:00.000"] ), ), # uH=0.0/T (not in use) 'T22' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T15_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "fromAlignment", "2019-11-05 20:00:00.000"] ), ), # uH=0.0/T (not in use) 'T23' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "fromAlignment", "2020-02-23 14:00:00.000"] ), ), # uH=0.0/T (not in use) + 'T25' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "fromAlignment", "2020-02-23 14:00:00.000"] ), ), # uH=0.0/T (not in use) + 'T26' : ( ','.join( [ 'SiPixelLorentzAngle_phase2_T19_mc_forWidthEmpty' ,SiPixelLARecord,connectionString, "fromAlignment", "2020-02-23 14:00:00.000"] ), ), # uH=0.0/T (not in use) } allTags["SimLA"] = { @@ -49,18 +57,24 @@ 'T21' : ( ','.join( [ 'SiPixelSimLorentzAngle_phase2_T15_v5_mc' ,SiPixelSimLARecord,connectionString, "", "2020-05-05 20:00:00.000"] ), ), #uH = 0.053/T (TBPX), uH=0.0/T (TEPX+TFPX) 'T22' : ( ','.join( [ 'SiPixelSimLorentzAngle_phase2_T15_v5_mc' ,SiPixelSimLARecord,connectionString, "", "2020-05-05 20:00:00.000"] ), ), #uH = 0.053/T (TBPX), uH=0.0/T (TEPX+TFPX) 'T23' : ( ','.join( [ 'SiPixelSimLorentzAngle_phase2_T19_v1_mc' ,SiPixelSimLARecord,connectionString, "", "2020-02-23 14:00:00.000"] ), ), #uH = 0.053/T (TBPX L3,L4), uH=0.0/T (TBPX L1,L2, TEPX+TFPX) + 'T25' : ( ','.join( [ 'SiPixelSimLorentzAngle_phase2_T25_v0_mc' ,SiPixelSimLARecord,connectionString, "", "2021-03-16 20:00:00.000"] ), ), #uH = 0.053/T (TBPX L2,L3,L4), uH=0.0/T (TBPX L1 TEPX+TFPX) + 'T26' : ( ','.join( [ 'SiPixelSimLorentzAngle_phase2_T25_v0_mc' ,SiPixelSimLARecord,connectionString, "", "2021-03-16 20:00:00.000"] ), ), #uH = 0.053/T (TBPX L2,L3,L4), uH=0.0/T (TBPX L1 TEPX+TFPX) } allTags["GenError"] = { '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 + 'T25' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v7.0.2_25x100_v1_mc' ,SiPixelGenErrorRecord,connectionString, "", "2021-03-17 20:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V, 3D pixels in TBPX L1 + 'T26' : ( ','.join( [ 'SiPixelGenErrorDBObject_phase2_IT_v7.0.3_mixed_v1_mc' ,SiPixelGenErrorRecord,connectionString, "", "2021-03-17 20:00:00"] ), ), # TBPX cells are 25um (local-x) x 100um (local-y), TFPX TEPX 50 um x 50 um , VBias=350V, 3D pixels in TBPX L1 } allTags["Template"] = { '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 + 'T25' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v7.0.2_25x100_v1_mc' ,SiPixelTemplatesRecord,connectionString, "", "2021-03-17 20:00:00"] ), ), # cell is 25um (local-x) x 100um (local-y) , VBias=350V, 3D pixels in TBPX L1 + 'T26' : ( ','.join( [ 'SiPixelTemplateDBObject_phase2_IT_v7.0.3_mixed_v1_mc' ,SiPixelTemplatesRecord,connectionString, "", "2021-03-17 20:00:00"] ), ), # TBPX cells are 25um (local-x) x 100um (local-y), TFPX TEPX 50 um x 50 um , VBias=350V, 3D pixels in TBPX L1 } ## @@ -73,6 +87,8 @@ 'T21' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngle_v0_mc' ,TrackerLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T 'T22' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngle_v0_mc' ,TrackerLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T 'T23' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngle_v0_mc' ,TrackerLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T + 'T25' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngle_v0_mc' ,TrackerLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T + 'T26' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngle_v0_mc' ,TrackerLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T } allTags["SimOTLA"] = { @@ -80,6 +96,8 @@ 'T21' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngleSim_v0_mc' ,TrackerSimLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T 'T22' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngleSim_v0_mc' ,TrackerSimLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T 'T23' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngleSim_v0_mc' ,TrackerSimLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T + 'T25' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngleSim_v0_mc' ,TrackerSimLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T + 'T26' : ( ','.join( [ 'SiPhase2OuterTrackerLorentzAngleSim_v0_mc' ,TrackerSimLARecord,connectionString, "", "2020-07-19 17:00:00.000"] ), ), #uH = 0.07/T } ''' ## @@ -98,7 +116,7 @@ activeKeys = ["LA","LAWidth","SimLA","LAfromAlignment","GenError","Template"]#,"SimOTLA","OTLA"] # list of geometries supported -activeDets = ["T15","T21","T22","T23"] +activeDets = ["T15","T21","T22","T23","T25","T26"] phase2GTs = {} for det in activeDets: appendedTags = () 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/DataProcessing/python/RecoTLR.py b/Configuration/DataProcessing/python/RecoTLR.py index 5c606690085f0..fda3a2ae70d58 100644 --- a/Configuration/DataProcessing/python/RecoTLR.py +++ b/Configuration/DataProcessing/python/RecoTLR.py @@ -9,17 +9,6 @@ def _swapOfflineBSwithOnline(process): process.offlineBeamSpot = onlineBeamSpotProducer.clone() return process -def _addLumiProducer(process): - if not hasattr(process,'lumiProducer'): - #unscheduled.. - from RecoLuminosity.LumiProducer.lumiProducer_cff import lumiProducer,LumiDBService - process.lumiProducer=lumiProducer - #if it's scheduled - if hasattr(process, 'reconstruction_step'): - process.reconstruction_step+=process.lumiProducer - - return process - def _overridesFor50ns(process): process.bunchSpacingProducer.bunchSpacingOverride = cms.uint32(50) process.bunchSpacingProducer.overrideBunchSpacing = cms.bool(True) @@ -150,7 +139,6 @@ def customiseExpress(process): ############################################################################## def customisePrompt(process): process= customisePPData(process) - process = _addLumiProducer(process) return process @@ -172,8 +160,6 @@ def customiseExpressHI(process): def customisePromptHI(process): process = customiseCommonHI(process) - process = _addLumiProducer(process) - return process ############################################################################## 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_Phase2C11I13T25M9_cff.py b/Configuration/Eras/python/Era_Phase2C11I13T25M9_cff.py new file mode 100644 index 0000000000000..d2a615082c438 --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11I13T25M9_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 + +Phase2C11I13T25M9 = cms.ModifierChain(Phase2C11I13, phase2_3DPixels, phase2_GE0) diff --git a/Configuration/Eras/python/Era_Phase2C11I13T26M9_cff.py b/Configuration/Eras/python/Era_Phase2C11I13T26M9_cff.py new file mode 100644 index 0000000000000..529d56871e905 --- /dev/null +++ b/Configuration/Eras/python/Era_Phase2C11I13T26M9_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 + +Phase2C11I13T26M9 = cms.ModifierChain(Phase2C11I13, phase2_squarePixels, 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_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/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/Herwig7Settings/Herwig7CommonMergingSettings_cfi.py b/Configuration/Generator/python/Herwig7Settings/Herwig7CommonMergingSettings_cfi.py deleted file mode 100644 index 9f66d379f674b..0000000000000 --- a/Configuration/Generator/python/Herwig7Settings/Herwig7CommonMergingSettings_cfi.py +++ /dev/null @@ -1,58 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -herwig7CommonMergingSettingsBlock = cms.PSet( - hw_common_merging_settings = cms.vstring( - 'read snippets/PPCollider.in', - 'cd /Herwig/EventHandlers', - 'library FxFx.so', - 'create Herwig::FxFxEventHandler theLesHouchesHandler', - 'cd /Herwig/EventHandlers', - 'library FxFx.so', - 'create Herwig::FxFxFileReader theLHReader', - 'cd /Herwig/Shower', - 'library FxFxHandler.so', - 'create Herwig::FxFxHandler FxFxHandler', - 'set /Herwig/Shower/FxFxHandler:ShowerModel /Herwig/Shower/ShowerModel', - 'set /Herwig/Shower/FxFxHandler:SplittingGenerator /Herwig/Shower/SplittingGenerator', - 'cd /Herwig/EventHandlers', - 'create ThePEG::Cuts /Herwig/Cuts/NoCuts', - 'cd /Herwig/EventHandlers', - 'insert theLesHouchesHandler:FxFxReaders[0] theLHReader', - 'set theLesHouchesHandler:WeightOption VarNegWeight', - 'set theLesHouchesHandler:PartonExtractor /Herwig/Partons/PPExtractor', - 'set theLesHouchesHandler:CascadeHandler /Herwig/Shower/FxFxHandler', - 'set theLesHouchesHandler:HadronizationHandler /Herwig/Hadronization/ClusterHadHandler', - 'set theLesHouchesHandler:DecayHandler /Herwig/Decays/DecayHandler', - 'set /Herwig/Shower/ShowerHandler:MaxPtIsMuF Yes', - 'set /Herwig/Shower/ShowerHandler:RestrictPhasespace Yes', - 'set /Herwig/Shower/PartnerFinder:PartnerMethod Random', - 'set /Herwig/Shower/PartnerFinder:ScaleChoice Partner', - 'cd /Herwig/EventHandlers', - 'set theLHReader:AllowedToReOpen No', - 'set theLHReader:WeightWarnings false', - 'set theLHReader:FileName cmsgrid_final.lhe', - 'set theLHReader:MomentumTreatment RescaleEnergy', - 'set theLHReader:Cuts /Herwig/Cuts/NoCuts', - 'cd /Herwig/Generators', - 'set EventGenerator:EventHandler /Herwig/EventHandlers/theLesHouchesHandler', - 'set EventGenerator:PrintEvent 1', - 'set EventGenerator:MaxErrors 10000', - 'cd /Herwig/Shower', - 'set /Herwig/Shower/FxFxHandler:MPIHandler /Herwig/UnderlyingEvent/MPIHandler', - 'set /Herwig/Shower/FxFxHandler:RemDecayer /Herwig/Partons/RemnantDecayer', - 'set /Herwig/Shower/FxFxHandler:ShowerAlpha AlphaQCD', - 'set FxFxHandler:HeavyQVeto Yes', - 'set FxFxHandler:HardProcessDetection Automatic', - 'set FxFxHandler:ihrd 3', - 'set FxFxHandler:njetsmax 4', - 'set FxFxHandler:drjmin 0', - 'cd /Herwig/Shower', - 'set FxFxHandler:VetoIsTurnedOff VetoingIsOn', - 'set FxFxHandler:MergeMode TreeMG5', - 'set FxFxHandler:ETClus 20*GeV', - 'set FxFxHandler:RClus 1.0', - 'set FxFxHandler:EtaClusMax 5', - 'set FxFxHandler:RClusFactor 1.5' - - ) -) diff --git a/Configuration/Generator/python/Herwig7Settings/Herwig7LHECommonSettings_cfi.py b/Configuration/Generator/python/Herwig7Settings/Herwig7LHECommonSettings_cfi.py index 280bf2fdff54e..3fbc11971098d 100644 --- a/Configuration/Generator/python/Herwig7Settings/Herwig7LHECommonSettings_cfi.py +++ b/Configuration/Generator/python/Herwig7Settings/Herwig7LHECommonSettings_cfi.py @@ -1,9 +1,9 @@ import FWCore.ParameterSet.Config as cms +# Settings from $HERWIGPATH/LHE.in + herwig7LHECommonSettingsBlock = cms.PSet( hw_lhe_common_settings = cms.vstring( - 'read snippets/PPCollider.in', - 'cd /Herwig/Generators', 'cd /Herwig/EventHandlers', 'library LesHouches.so', 'create ThePEG::LesHouchesEventHandler LesHouchesHandler', @@ -11,8 +11,10 @@ 'set LesHouchesHandler:CascadeHandler /Herwig/Shower/ShowerHandler', 'set LesHouchesHandler:DecayHandler /Herwig/Decays/DecayHandler', 'set LesHouchesHandler:HadronizationHandler /Herwig/Hadronization/ClusterHadHandler', + + # set the weight option (e.g. for MC@NLO) 'set LesHouchesHandler:WeightOption VarNegWeight', - 'set LesHouchesHandler:Weighted On', + 'set /Herwig/Generators/EventGenerator:EventHandler /Herwig/EventHandlers/LesHouchesHandler', 'create ThePEG::Cuts /Herwig/Cuts/NoCuts', 'create ThePEG::LHAPDF /Herwig/Partons/LHAPDF ThePEGLHAPDF.so', @@ -30,6 +32,10 @@ 'set LesHouchesReader:MomentumTreatment RescaleEnergy', 'set LesHouchesReader:PDFA /Herwig/Partons/LHAPDF', 'set LesHouchesReader:PDFB /Herwig/Partons/LHAPDF', - 'insert LesHouchesHandler:LesHouchesReaders 0 LesHouchesReader' + 'insert LesHouchesHandler:LesHouchesReaders 0 LesHouchesReader', + 'set /Herwig/Shower/ShowerHandler:MaxPtIsMuF Yes', + 'set /Herwig/Shower/ShowerHandler:RestrictPhasespace Yes', + 'set /Herwig/Shower/PartnerFinder:PartnerMethod Random', + 'set /Herwig/Shower/PartnerFinder:ScaleChoice Partner' ) ) diff --git a/Configuration/Generator/python/Herwig7Settings/Herwig7LHEMG5aMCatNLOSettings_cfi.py b/Configuration/Generator/python/Herwig7Settings/Herwig7LHEMG5aMCatNLOSettings_cfi.py index f9db2dac221d0..89c9b2200122c 100644 --- a/Configuration/Generator/python/Herwig7Settings/Herwig7LHEMG5aMCatNLOSettings_cfi.py +++ b/Configuration/Generator/python/Herwig7Settings/Herwig7LHEMG5aMCatNLOSettings_cfi.py @@ -1,5 +1,7 @@ import FWCore.ParameterSet.Config as cms +# Settings from $HERWIGPATH/LHE-MCatNLO.in, should be used together with the Herwig7LHECommonSettings + herwig7LHEMG5aMCatNLOSettingsBlock = cms.PSet( hw_lhe_MG5aMCatNLO_settings = cms.vstring( 'set /Herwig/Shower/KinematicsReconstructor:InitialInitialBoostOption LongTransBoost', diff --git a/Configuration/Generator/python/Herwig7Settings/Herwig7LHEPowhegSettings_cfi.py b/Configuration/Generator/python/Herwig7Settings/Herwig7LHEPowhegSettings_cfi.py index 0c0e94c714fbd..d5d15327e7597 100644 --- a/Configuration/Generator/python/Herwig7Settings/Herwig7LHEPowhegSettings_cfi.py +++ b/Configuration/Generator/python/Herwig7Settings/Herwig7LHEPowhegSettings_cfi.py @@ -1,13 +1,13 @@ import FWCore.ParameterSet.Config as cms +# Settings from $HERWIGPATH/LHE-POWHEG.in, should be used together with the Herwig7LHECommonSettings + herwig7LHEPowhegSettingsBlock = cms.PSet( - hw_lhe_Powheg_settings = cms.vstring( + hw_lhe_powheg_settings = cms.vstring( 'set /Herwig/Shower/ShowerHandler:MaxPtIsMuF Yes', 'set /Herwig/Shower/ShowerHandler:RestrictPhasespace Yes', 'set /Herwig/Shower/PartnerFinder:PartnerMethod Random', 'set /Herwig/Shower/PartnerFinder:ScaleChoice Partner', - 'set /Herwig/Shower/GtoQQbarSplitFn:AngularOrdered Yes', - 'set /Herwig/Shower/GammatoQQbarSplitFn:AngularOrdered Yes', 'set /Herwig/Particles/t:NominalMass 172.5' ) ) diff --git a/Configuration/Generator/python/Herwig7Settings/Herwig7LHESettings_cfi.py b/Configuration/Generator/python/Herwig7Settings/Herwig7LHESettings_cfi.py deleted file mode 100644 index 3f1478989e5df..0000000000000 --- a/Configuration/Generator/python/Herwig7Settings/Herwig7LHESettings_cfi.py +++ /dev/null @@ -1,106 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -herwig7LHESettingsBlock = cms.PSet( - hw_lhe_settings = cms.vstring( - '##################################################', - '# Example generator based on LHC parameters', - '# usage: Herwig read LHE.in', - '##################################################', - 'read snippets/PPCollider.in', - '##################################################', - '# Technical parameters for this run', - '##################################################', - 'cd /Herwig/Generators', - '#set EventGenerator:NumberOfEvents 10000000', - '#set EventGenerator:RandomNumberGenerator:Seed 31122001', - '#set EventGenerator:DebugLevel 0', - '#set EventGenerator:PrintEvent 10', - '#set EventGenerator:MaxErrors 10000', - '##################################################', - '# Create the Les Houches file handler and reader', - '##################################################', - 'cd /Herwig/EventHandlers', - 'library LesHouches.so', - '# create the event handler', - 'create ThePEG::LesHouchesEventHandler LesHouchesHandler', - '# set the various step handlers', - 'set LesHouchesHandler:PartonExtractor /Herwig/Partons/PPExtractor', - 'set LesHouchesHandler:CascadeHandler /Herwig/Shower/ShowerHandler', - 'set LesHouchesHandler:DecayHandler /Herwig/Decays/DecayHandler', - 'set LesHouchesHandler:HadronizationHandler /Herwig/Hadronization/ClusterHadHandler', - '# set the weight option (e.g. for MC@NLO)', - 'set LesHouchesHandler:WeightOption VarNegWeight', - '# set event hander as one to be used', - 'set /Herwig/Generators/EventGenerator:EventHandler /Herwig/EventHandlers/LesHouchesHandler', - '# Set up an EMPTY CUTS object', - '# Normally you will have imposed any cuts you want', - '# when generating the event file and do not want any more', - '# in particular for POWHEG and MC@NLO you must not apply cuts on the', - '# the extra jet', - 'create ThePEG::Cuts /Herwig/Cuts/NoCuts', - '# You may wish to use the same PDF as the events were generated with', - 'create ThePEG::LHAPDF /Herwig/Partons/LHAPDF ThePEGLHAPDF.so', - 'set /Herwig/Partons/LHAPDF:PDFName NNPDF31_nnlo_as_0118', - 'set /Herwig/Partons/LHAPDF:RemnantHandler /Herwig/Partons/HadronRemnants', - 'set /Herwig/Particles/p+:PDF /Herwig/Partons/LHAPDF', - 'set /Herwig/Particles/pbar-:PDF /Herwig/Partons/LHAPDF', - 'set /Herwig/Partons/PPExtractor:FirstPDF /Herwig/Partons/LHAPDF', - 'set /Herwig/Partons/PPExtractor:SecondPDF /Herwig/Partons/LHAPDF', - '# We would recommend the shower uses the default PDFs with which it was tuned.', - '# However it can be argued that the same set as for the sample should be used for', - '# matched samples, i.e. MC@NLO (and less so POWHEG)', - '#set /Herwig/Shower/ShowerHandler:PDFA /Herwig/Partons/LHAPDF', - '#set /Herwig/Shower/ShowerHandler:PDFB /Herwig/Partons/LHAPDF', - '# You can in principle also change the PDFs for the remnant extraction and', - '# multiple scattering. As the generator was tuned with the default values', - '# this is STRONGLY DISCOURAGED without retuning the MPI parameters', - '# create the reader and set cuts', - 'create ThePEG::LesHouchesFileReader LesHouchesReader', - 'set LesHouchesReader:FileName cmsgrid_final.lhe', - 'set LesHouchesReader:AllowedToReOpen No', - 'set LesHouchesReader:InitPDFs 0', - 'set LesHouchesReader:Cuts /Herwig/Cuts/NoCuts', - '# option to ensure momentum conservation is O.K. due rounding errors (recommended)', - 'set LesHouchesReader:MomentumTreatment RescaleEnergy', - '# set the pdfs', - 'set LesHouchesReader:PDFA /Herwig/Partons/LHAPDF', - 'set LesHouchesReader:PDFB /Herwig/Partons/LHAPDF', - '# if using BSM models with QNUMBER info', - '#set LesHouchesReader:QNumbers Yes', - '#set LesHouchesReader:Decayer /Herwig/Decays/Mambo', - '# and add to handler', - 'insert LesHouchesHandler:LesHouchesReaders 0 LesHouchesReader', - '##################################################', - '# Shower parameters', - '##################################################', - '# normally, especially for POWHEG, you want', - '# the scale supplied in the event files (SCALUP)', - '# to be used as a pT veto scale in the parton shower', - 'set /Herwig/Shower/ShowerHandler:MaxPtIsMuF Yes', - 'set /Herwig/Shower/ShowerHandler:RestrictPhasespace Yes', - '# Shower parameters', - '# treatment of wide angle radiation', - 'set /Herwig/Shower/PartnerFinder:PartnerMethod Random', - 'set /Herwig/Shower/PartnerFinder:ScaleChoice Partner', - '# fix issue before 7.0.5 (not needed after this)', - 'set /Herwig/Shower/GtoQQbarSplitFn:AngularOrdered Yes', - 'set /Herwig/Shower/GammatoQQbarSplitFn:AngularOrdered Yes', - '# with MC@NLO these parameters are required for consistency of the subtraction terms', - '# suggested parameters (give worse physics results with POWHEG)', - '#set /Herwig/Shower/KinematicsReconstructor:InitialInitialBoostOption LongTransBoost', - '#set /Herwig/Shower/KinematicsReconstructor:ReconstructionOption General', - '#set /Herwig/Shower/KinematicsReconstructor:FinalStateReconOption Default', - '#set /Herwig/Shower/KinematicsReconstructor:InitialStateReconOption Rapidity', - '#set /Herwig/Shower/ShowerHandler:SpinCorrelations No', - '##################################################', - '# LHC physics parameters (override defaults here) ', - '##################################################', - '# e.g if different top mass used', - 'set /Herwig/Particles/t:NominalMass 172.5', - '##################################################', - '# Save run for later usage with `Herwig run`', - '##################################################', - 'cd /Herwig/Generators', - 'saverun LHE EventGenerator' - ) -) diff --git a/Configuration/Generator/python/Herwig7Settings/Herwig7MGMergingSettings_cfi.py b/Configuration/Generator/python/Herwig7Settings/Herwig7MGMergingSettings_cfi.py new file mode 100644 index 0000000000000..c78bd73a1885a --- /dev/null +++ b/Configuration/Generator/python/Herwig7Settings/Herwig7MGMergingSettings_cfi.py @@ -0,0 +1,68 @@ +import FWCore.ParameterSet.Config as cms + +# Settings from $HERWIGPATH/LHE-MGMerging.in, including reading in the LHE file- do not use this together with Herwig7LHECommonSettings +# User needs to include the following lines in their user settings block: +# 'set FxFxHandler:MergeMode TreeMG5' (for mlm merging) OR 'set FxFxHandler:MergeMode FxFx' (for FxFx merging) +# 'set FxFxHandler:njetsmax MAXIMUM_NUMBER_OF_PARTONS_IN_LHE_FILE' + +herwig7MGMergingSettingsBlock = cms.PSet( + hw_mg_merging_settings = cms.vstring( + 'cd /Herwig/EventHandlers', + 'library HwFxFx.so', + 'create Herwig::FxFxEventHandler LesHouchesHandler', + 'set LesHouchesHandler:PartonExtractor /Herwig/Partons/PPExtractor', + 'set LesHouchesHandler:HadronizationHandler /Herwig/Hadronization/ClusterHadHandler', + 'set LesHouchesHandler:DecayHandler /Herwig/Decays/DecayHandler', + 'set LesHouchesHandler:WeightOption VarNegWeight', + 'set /Herwig/Generators/EventGenerator:EventHandler /Herwig/EventHandlers/LesHouchesHandler', + 'create ThePEG::Cuts /Herwig/Cuts/NoCuts', + 'cd /Herwig/EventHandlers', + 'create Herwig::FxFxFileReader FxFxLHReader', + 'insert LesHouchesHandler:FxFxReaders[0] FxFxLHReader', + 'cd /Herwig/Shower', + 'library HwFxFxHandler.so', + 'create Herwig::FxFxHandler FxFxHandler', + 'set /Herwig/Shower/FxFxHandler:SplittingGenerator /Herwig/Shower/SplittingGenerator', + 'set /Herwig/Shower/FxFxHandler:KinematicsReconstructor /Herwig/Shower/KinematicsReconstructor', + 'set /Herwig/Shower/FxFxHandler:PartnerFinder /Herwig/Shower/PartnerFinder', + 'set /Herwig/EventHandlers/LesHouchesHandler:CascadeHandler /Herwig/Shower/FxFxHandler', + 'set /Herwig/Partons/PDFSet_nnlo:PDFName NNPDF31_nnlo_as_0118', + 'set /Herwig/Partons/RemnantDecayer:AllowTop Yes', + 'set /Herwig/Partons/PDFSet_nnlo:RemnantHandler /Herwig/Partons/HadronRemnants', + 'set /Herwig/Particles/p+:PDF /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/Particles/pbar-:PDF /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/Partons/PPExtractor:FirstPDF /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/Partons/PPExtractor:SecondPDF /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:PDFA /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:PDFB /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/EventHandlers/FxFxLHReader:FileName cmsgrid_final.lhe', + 'set /Herwig/EventHandlers/FxFxLHReader:WeightWarnings false', + 'set /Herwig/EventHandlers/FxFxLHReader:AllowedToReOpen No', + 'set /Herwig/EventHandlers/FxFxLHReader:InitPDFs 0', + 'set /Herwig/EventHandlers/FxFxLHReader:Cuts /Herwig/Cuts/NoCuts', + 'set /Herwig/EventHandlers/FxFxLHReader:MomentumTreatment RescaleEnergy', + 'set /Herwig/EventHandlers/FxFxLHReader:PDFA /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/EventHandlers/FxFxLHReader:PDFB /Herwig/Partons/PDFSet_nnlo', + 'set /Herwig/Shower/ShowerHandler:MaxPtIsMuF Yes', + 'set /Herwig/Shower/ShowerHandler:RestrictPhasespace Yes', + 'set /Herwig/Shower/PartnerFinder:PartnerMethod Random', + 'set /Herwig/Shower/PartnerFinder:ScaleChoice Partner', + 'set /Herwig/Shower/KinematicsReconstructor:InitialInitialBoostOption LongTransBoost', + 'set /Herwig/Shower/KinematicsReconstructor:ReconstructionOption General', + 'set /Herwig/Shower/KinematicsReconstructor:InitialStateReconOption Rapidity', + 'set /Herwig/Shower/ShowerHandler:SpinCorrelations Yes', + 'cd /Herwig/Shower', + 'set /Herwig/Shower/FxFxHandler:MPIHandler /Herwig/UnderlyingEvent/MPIHandler', + 'set /Herwig/Shower/FxFxHandler:RemDecayer /Herwig/Partons/RemnantDecayer', + 'set /Herwig/Shower/FxFxHandler:ShowerAlpha AlphaQCD', + 'set FxFxHandler:HeavyQVeto Yes', + 'set FxFxHandler:HardProcessDetection Automatic', + 'set FxFxHandler:drjmin 0', + 'cd /Herwig/Shower', + 'set FxFxHandler:VetoIsTurnedOff VetoingIsOn', + 'set FxFxHandler:ETClus 20*GeV', # Note this is the default, but this parameter should be tuned in future + 'set FxFxHandler:RClus 1.0', + 'set FxFxHandler:EtaClusMax 10', + 'set FxFxHandler:RClusFactor 1.5', + ) +) diff --git a/Configuration/Generator/python/TT_13TeV_Pow_Herwig7_cff.py b/Configuration/Generator/python/TT_13TeV_Pow_Herwig7_cff.py index 4231085495743..c2ff018b3a23b 100644 --- a/Configuration/Generator/python/TT_13TeV_Pow_Herwig7_cff.py +++ b/Configuration/Generator/python/TT_13TeV_Pow_Herwig7_cff.py @@ -1,96 +1,25 @@ import FWCore.ParameterSet.Config as cms from Configuration.Generator.TTbar_Pow_LHE_13TeV_cff import externalLHEProducer +from Configuration.Generator.Herwig7Settings.Herwig7CH3TuneSettings_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7StableParticlesForDetector_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7LHECommonSettings_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7LHEPowhegSettings_cfi import * -generator = cms.EDFilter("Herwig7GeneratorFilter", +generator = cms.EDFilter("Herwig7GeneratorFilter", + herwig7CH3SettingsBlock, + herwig7StableParticlesForDetectorBlock, + herwig7LHECommonSettingsBlock, + herwig7LHEPowhegSettingsBlock, configFiles = cms.vstring(), - - hw_nnpdf31 = cms.vstring( - 'cd /Herwig/Partons', - 'create ThePEG::LHAPDF PDFSet ThePEGLHAPDF.so', - 'set PDFSet:PDFName NNPDF31_nnlo_as_0118.LHgrid', - 'set PDFSet:RemnantHandler HadronRemnants', - 'set /Herwig/Particles/p+:PDF PDFSet', - 'set /Herwig/Particles/pbar-:PDF PDFSet', - 'set /Herwig/Shower/ShowerHandler:PDFA PDFSet', - 'set /Herwig/Shower/ShowerHandler:PDFB PDFSet', - 'set /Herwig/DipoleShower/DipoleShowerHandler:PDFA PDFSet', - 'set /Herwig/DipoleShower/DipoleShowerHandler:PDFB PDFSet', - - 'set /Herwig/Shower/ShowerHandler:PDFARemnant PDFSet', - 'set /Herwig/Shower/ShowerHandler:PDFBRemnant PDFSet', - 'set /Herwig/DipoleShower/DipoleShowerHandler:PDFARemnant PDFSet', - 'set /Herwig/DipoleShower/DipoleShowerHandler:PDFBRemnant PDFSet', - 'set /Herwig/Partons/MPIExtractor:FirstPDF PDFSet', - 'set /Herwig/Partons/MPIExtractor:SecondPDF PDFSet', - - 'cd /', - ), - hw_alphas = cms.vstring( - 'cd /Herwig/Shower', - 'set AlphaQCD:AlphaMZ 0.118', - 'cd /Herwig/DipoleShower', - 'set NLOAlphaS:input_alpha_s 0.118' - ), - hw_LHEsettings = cms.vstring( - 'read snippets/PPCollider.in', - - 'cd /Herwig/Generators', - 'set EventGenerator:NumberOfEvents 10000000', - #'set EventGenerator:RandomNumberGenerator:Seed 31122001' - 'set EventGenerator:DebugLevel 0', - 'set EventGenerator:PrintEvent 10', - 'set EventGenerator:MaxErrors 10000', - - 'cd /Herwig/EventHandlers', - 'library LesHouches.so', - 'create ThePEG::LesHouchesEventHandler LesHouchesHandler', - - 'set LesHouchesHandler:PartonExtractor /Herwig/Partons/PPExtractor', - 'set LesHouchesHandler:CascadeHandler /Herwig/Shower/ShowerHandler', - 'set LesHouchesHandler:DecayHandler /Herwig/Decays/DecayHandler', - 'set LesHouchesHandler:HadronizationHandler /Herwig/Hadronization/ClusterHadHandler', - - 'set LesHouchesHandler:WeightOption VarNegWeight', - - 'set /Herwig/Generators/EventGenerator:EventHandler /Herwig/EventHandlers/LesHouchesHandler', - - 'create ThePEG::Cuts /Herwig/Cuts/NoCuts', - - 'create ThePEG::LHAPDF /Herwig/Partons/LHAPDF ThePEGLHAPDF.so', - 'set /Herwig/Partons/LHAPDF:PDFName NNPDF30_nlo_as_0118', - 'set /Herwig/Partons/LHAPDF:RemnantHandler /Herwig/Partons/HadronRemnants', - 'set /Herwig/Particles/p+:PDF /Herwig/Partons/LHAPDF', - 'set /Herwig/Particles/pbar-:PDF /Herwig/Partons/LHAPDF', - 'set /Herwig/Partons/PPExtractor:FirstPDF /Herwig/Partons/LHAPDF', - 'set /Herwig/Partons/PPExtractor:SecondPDF /Herwig/Partons/LHAPDF', - - 'create ThePEG::LesHouchesFileReader LesHouchesReader', - 'set LesHouchesReader:FileName cmsgrid_final.lhe', - 'set LesHouchesReader:AllowedToReOpen No', - 'set LesHouchesReader:InitPDFs 0', - 'set LesHouchesReader:Cuts /Herwig/Cuts/NoCuts', - - 'set LesHouchesReader:MomentumTreatment RescaleEnergy', - 'set LesHouchesReader:PDFA /Herwig/Partons/LHAPDF', - 'set LesHouchesReader:PDFB /Herwig/Partons/LHAPDF', - - 'insert LesHouchesHandler:LesHouchesReaders 0 LesHouchesReader', - - 'set /Herwig/Shower/ShowerHandler:MaxPtIsMuF Yes', - 'set /Herwig/Shower/ShowerHandler:RestrictPhasespace Yes', - - - 'set /Herwig/Shower/PartnerFinder:PartnerMethod Random', - 'set /Herwig/Shower/PartnerFinder:ScaleChoice Partner', - - 'set /Herwig/Shower/GtoQQbarSplitFn:AngularOrdered Yes', - 'set /Herwig/Shower/GammatoQQbarSplitFn:AngularOrdered Yes', - 'set /Herwig/Particles/t:NominalMass 172.5', - 'cd /Herwig/Generators', - 'saverun LHE EventGenerator'), - parameterSets = cms.vstring('hw_LHEsettings', 'hw_nnpdf31','hw_alphas'), + parameterSets = cms.vstring( + 'herwig7CH3PDF', + 'herwig7CH3AlphaS', + 'herwig7CH3MPISettings', + 'herwig7StableParticlesForDetector', + 'hw_lhe_common_settings', + 'hw_lhe_powheg_settings'), crossSection = cms.untracked.double(-1), dataLocation = cms.string('${HERWIGPATH:-6}'), eventHandlers = cms.string('/Herwig/EventHandlers'), diff --git a/Configuration/Geometry/README.md b/Configuration/Geometry/README.md index fdaf68b944b16..7e7045fefb287 100644 --- a/Configuration/Geometry/README.md +++ b/Configuration/Geometry/README.md @@ -48,6 +48,9 @@ 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. +* T25: Phase2 tilted tracker. Outer Tracker (v8.0.0): same as T24/T21. Inner Tracker (v7.0.2): Based on (v6.1.5) (T24/T21), but with 3D sensors in TBPX L1. +* T26: Phase2 tilted tracker. Outer Tracker (v8.0.0): same as T24/T21. Inner Tracker (v7.0.3): Based on (v6.1.5) (T24/T21), but with 3D sensors in TBPX L1 and 50x50 pixel aspect ratio in TFPX and TEPX. Calorimeters: * C9: HGCal (v11 post TDR HGCal Geometry w/ corner centering for HE part) + Phase2 HCAL and EB + Tracker cables @@ -97,5 +100,10 @@ Several detector combinations have been generated: * 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 +* D80 = T25+C14+M9+I13+O7+F6 +* D81 = T26+C14+M9+I13+O7+F6 D49 is the HLT TDR baseline. 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/GeometryDD4hepExtended2026D80Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D80Reco_cff.py new file mode 100644 index 0000000000000..27a4a56f61932 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D80Reco_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.GeometryDD4hepExtended2026D80_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/GeometryDD4hepExtended2026D80_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D80_cff.py new file mode 100644 index 0000000000000..54a90c198f83b --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D80_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/cmsExtendedGeometry2026D80.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/GeometryDD4hepExtended2026D81Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D81Reco_cff.py new file mode 100644 index 0000000000000..7cb0e40af2cce --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D81Reco_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.GeometryDD4hepExtended2026D81_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/GeometryDD4hepExtended2026D81_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D81_cff.py new file mode 100644 index 0000000000000..201565a6a22a3 --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D81_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/cmsExtendedGeometry2026D81.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/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/GeometryExtended2026D80Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D80Reco_cff.py new file mode 100644 index 0000000000000..b89c9fcec4087 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D80Reco_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.GeometryExtended2026D80_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/GeometryExtended2026D80_cff.py b/Configuration/Geometry/python/GeometryExtended2026D80_cff.py new file mode 100644 index 0000000000000..a3ae710411337 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D80_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.cmsExtendedGeometry2026D80XML_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/GeometryExtended2026D81Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D81Reco_cff.py new file mode 100644 index 0000000000000..177ee4000d5cc --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D81Reco_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.GeometryExtended2026D81_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/GeometryExtended2026D81_cff.py b/Configuration/Geometry/python/GeometryExtended2026D81_cff.py new file mode 100644 index 0000000000000..ccaa22a837bdb --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D81_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.cmsExtendedGeometry2026D81XML_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 7fe1de45416b3..67176d5866955 100644 --- a/Configuration/Geometry/python/dict2021Geometry.py +++ b/Configuration/Geometry/python/dict2021Geometry.py @@ -557,7 +557,7 @@ "T3" : { 1 : [ 'Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml', - 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v2/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v3/pixfwdMaterials.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', @@ -1802,7 +1802,7 @@ '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/v1/hcalSimNumbering.xml', @@ -1814,7 +1814,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/2021/v1/CaloUtil.xml', ], 4 : [ 'Geometry/HcalSimData/data/HcalProdCuts/2021/v2/HcalProdCuts.xml', diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py index e1258e8d2d1f4..d0199c57456c0 100644 --- a/Configuration/Geometry/python/dict2026Geometry.py +++ b/Configuration/Geometry/python/dict2026Geometry.py @@ -256,6 +256,111 @@ '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", + }, + "T25" : { + 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_IT702_2021_03/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_IT702_2021_03/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/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_IT702_2021_03/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, phase2_3DPixels, trackingPhase2PU140", + }, + "T26" : { + 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_IT702_2021_03/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_IT703_2021_03/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/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_IT702_2021_03/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, phase2_squarePixels, trackingPhase2PU140", } } @@ -348,7 +453,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 +478,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil/2026/v5/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v5c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', 'Geometry/ForwardSimData/data/hfnosesens.xml', ], @@ -665,7 +770,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 +791,7 @@ 'Geometry/HcalSimData/data/hf.xml', 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', - 'Geometry/HcalSimData/data/CaloUtil/2026/v2/CaloUtil.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', 'Geometry/HGCalSimData/data/hgcsensv9.xml', ], 4 : [ @@ -1241,6 +1346,11 @@ ("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", + ("O7","T25","C14","M9","F6","I13") : "D80", + ("O7","T26","C14","M9","F6","I13") : "D81", } 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" ]) diff --git a/Configuration/HLT/python/autoCondHLT.py b/Configuration/HLT/python/autoCondHLT.py index e6fe26bee0bdb..f79c5f2d6f3a4 100644 --- a/Configuration/HLT/python/autoCondHLT.py +++ b/Configuration/HLT/python/autoCondHLT.py @@ -39,13 +39,13 @@ 'run3_mc_PIon' : ('phase1_2021_realistic' ,l1Menus['PIon']), 'run3_mc_PRef' : ('phase1_2021_realistic' ,l1Menus['PRef']), - 'run1_hlt_Fake' : ('run1_hlt' ,l1Menus['Fake']), + 'run1_hlt_Fake' : ('run1_hlt_relval' ,l1Menus['Fake']), 'run2_hlt_Fake' : ('run2_hlt_relval' ,l1Menus['Fake']), 'run2_hlt_Fake1' : ('run2_hlt_relval' ,l1Menus['Fake1']), 'run2_hlt_Fake2' : ('run2_hlt_relval' ,l1Menus['Fake2']), 'run3_hlt_FULL' : ('run2_hlt_relval' ,l1Menus['FULL']), 'run3_hlt_GRun' : ('run2_hlt_relval' ,l1Menus['GRun']), - 'run3_hlt_HIon' : ('run2_hlt_relval_hi' ,l1Menus['HIon']), + 'run3_hlt_HIon' : ('run2_hlt_relval' ,l1Menus['HIon']), 'run3_hlt_PIon' : ('run2_hlt_relval' ,l1Menus['PIon']), 'run3_hlt_PRef' : ('run2_hlt_relval' ,l1Menus['PRef']), 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/MatrixInjector.py b/Configuration/PyReleaseValidation/python/MatrixInjector.py index 102f822a2dea5..6d8a1223ef32e 100644 --- a/Configuration/PyReleaseValidation/python/MatrixInjector.py +++ b/Configuration/PyReleaseValidation/python/MatrixInjector.py @@ -65,16 +65,29 @@ def __init__(self,opt,mode='init',options=''): if(opt.batchName): self.batchName = '__'+opt.batchName+'-'+self.batchTime - #wagemt stuff + # WMagent url if not self.wmagent: - self.wmagent=os.getenv('WMAGENT_REQMGR') + # Overwrite with env variable + self.wmagent = os.getenv('WMAGENT_REQMGR') + if not self.wmagent: - if not opt.testbed : + # Default values + if not opt.testbed: self.wmagent = 'cmsweb.cern.ch' - self.DbsUrl = "https://"+self.wmagent+"/dbs/prod/global/DBSReader" - else : + else: self.wmagent = 'cmsweb-testbed.cern.ch' - self.DbsUrl = "https://"+self.wmagent+"/dbs/int/global/DBSReader" + + # DBSReader url + if opt.dbsUrl is not None: + self.DbsUrl = opt.dbsUrl + elif os.getenv('CMS_DBSREADER_URL') is not None: + self.DbsUrl = os.getenv('CMS_DBSREADER_URL') + else: + # Default values + if not opt.testbed: + self.DbsUrl = "https://cmsweb-prod.cern.ch/dbs/prod/global/DBSReader" + else: + self.DbsUrl = "https://cmsweb-testbed.cern.ch/dbs/int/global/DBSReader" if not self.dqmgui: self.dqmgui="https://cmsweb.cern.ch/dqm/relval" diff --git a/Configuration/PyReleaseValidation/python/relval_2017.py b/Configuration/PyReleaseValidation/python/relval_2017.py index 193ab79bcd384..0209452d59050 100644 --- a/Configuration/PyReleaseValidation/python/relval_2017.py +++ b/Configuration/PyReleaseValidation/python/relval_2017.py @@ -30,7 +30,7 @@ # (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) +# (ZMM, TTbar, ZEE, MinBias, TTbar PU, TTbar PU premix, ZEE PU, TTbar design, GluGluTo2Jets, GluGluTo2Jets PU) # (TTbar trackingOnly, pixelTrackingOnly, trackingMkFit, trackdnn) # (Patatrack pixel-only: ZMM - on CPU) # (Patatrack pixel-only: TTbar - on CPU) @@ -57,7 +57,7 @@ 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, + 11650.0,11634.0,11646.0,11640.0,11834.0,11834.99,11846.0,12034.0,11725.0,11925.0, 11634.1,11634.5,11634.7,11634.91, 11650.501, 11634.501, diff --git a/Configuration/PyReleaseValidation/python/relval_2026.py b/Configuration/PyReleaseValidation/python/relval_2026.py index 41815bad8e453..b796058cfc092 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 @@ -33,6 +33,12 @@ 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 +numWFIB.extend([36234.0]) #2026D80 +numWFIB.extend([36634.0]) #2026D81 for numWF in numWFIB: workflows[numWF] = _upgrade_workflows[numWF] diff --git a/Configuration/PyReleaseValidation/python/relval_steps.py b/Configuration/PyReleaseValidation/python/relval_steps.py index 44558dd91cadb..54c56c1f41cab 100644 --- a/Configuration/PyReleaseValidation/python/relval_steps.py +++ b/Configuration/PyReleaseValidation/python/relval_steps.py @@ -2129,7 +2129,7 @@ def lhegensim2018ml(fragment,howMuch): },dataReco]) steps['RECOCOSDRUN2']=merge([{'--conditions':'auto:run2_data','--era':'Run2_2016'},steps['RECOCOSD']]) -steps['RECOCOSDRUN3']=merge([{'--conditions':'auto:run3_data_promptlike','--era':'Run3'},steps['RECOCOSD']]) +steps['RECOCOSDRUN3']=merge([{'--conditions':'auto:run3_data_prompt','--era':'Run3'},steps['RECOCOSD']]) steps['RECOCOSDEXPRUN3']=merge([{'--conditions':'auto:run3_data_express','--era':'Run3'},steps['RECOCOSD']]) # step1 gensim for HI mixing @@ -2539,7 +2539,7 @@ def gen2021HiMix(fragment,howMuch): steps['ALCACOSDRUN2']=merge([{'--conditions':'auto:run2_data','--era':'Run2_2016','-s':'ALCA:SiPixelCalCosmics+TkAlCosmics0T+SiStripCalCosmics+MuAlGlobalCosmics+HcalCalHOCosmics+DQM'},steps['ALCACOSD']]) -steps['ALCACOSDRUN3']=merge([{'--conditions':'auto:run3_data_promptlike','--era':'Run3','-s':'ALCA:SiPixelCalCosmics+TkAlCosmics0T+SiStripCalCosmics+MuAlGlobalCosmics+HcalCalHOCosmics+DQM'},steps['ALCACOSD']]) +steps['ALCACOSDRUN3']=merge([{'--conditions':'auto:run3_data_prompt','--era':'Run3','-s':'ALCA:SiPixelCalCosmics+TkAlCosmics0T+SiStripCalCosmics+MuAlGlobalCosmics+HcalCalHOCosmics+DQM'},steps['ALCACOSD']]) steps['ALCACOSDEXPRUN3']=merge([{'--conditions':'auto:run3_data_express','--era':'Run3','-s':'ALCA:SiPixelCalCosmics+TkAlCosmics0T+SiStripCalCosmics+MuAlGlobalCosmics+HcalCalHOCosmics+DQM'},steps['ALCACOSD']]) steps['ALCAPROMPT']={'-s':'ALCA:PromptCalibProd', @@ -2761,7 +2761,7 @@ def gen2021HiMix(fragment,howMuch): steps['HARVESTDCRUN2']=merge([{'--conditions':'auto:run2_data','--era':'Run2_2016'},steps['HARVESTDC']]) -steps['HARVESTDCRUN3']=merge([{'--conditions':'auto:run3_data_promptlike','--era':'Run3'},steps['HARVESTDC']]) +steps['HARVESTDCRUN3']=merge([{'--conditions':'auto:run3_data_prompt','--era':'Run3'},steps['HARVESTDC']]) steps['HARVESTDCEXPRUN3']=merge([{'--conditions':'auto:run3_data_express','--era':'Run3'},steps['HARVESTDC']]) steps['HARVESTDR2_REMINIAOD_data2016']=merge([{'--data':'', '-s':'HARVESTING:@miniAODDQM','--era':'Run2_2016,run2_miniAOD_80XLegacy'},steps['HARVESTDR2']]) @@ -3221,15 +3221,16 @@ def gen2021HiMix(fragment,howMuch): from Configuration.PyReleaseValidation.upgradeWorkflowComponents import * # imported from above, only non-empty values should be provided here -defaultDataSets['2017']='CMSSW_11_2_0_pre8-112X_mc2017_realistic_v3-v' -defaultDataSets['2017Design']='CMSSW_11_2_0_pre8-112X_mc2017_design_v1-v' -defaultDataSets['2018']='CMSSW_11_2_0_pre8-112X_upgrade2018_realistic_v4-v' -defaultDataSets['2018Design']='CMSSW_11_2_0_pre8-112X_upgrade2018_design_v3-v' -defaultDataSets['2021']='CMSSW_11_2_0_pre8-112X_mcRun3_2021_realistic_v10-v' -defaultDataSets['2021Design']='CMSSW_11_2_0_pre8-112X_mcRun3_2021_design_v10-v' -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['2017']='CMSSW_11_3_0_pre4-113X_mc2017_realistic_v4-v' +defaultDataSets['2017Design']='CMSSW_11_3_0_pre4-113X_mc2017_design_v4-v' +defaultDataSets['2018']='CMSSW_11_3_0_pre4-113X_upgrade2018_realistic_v4-v' +defaultDataSets['2018Design']='CMSSW_11_3_0_pre4-113X_upgrade2018_design_v4-v' +defaultDataSets['2021']='CMSSW_11_3_0_pre4-113X_mcRun3_2021_realistic_v7-v' +defaultDataSets['2021Design']='CMSSW_11_3_0_pre4-113X_mcRun3_2021_design_v5-v' +defaultDataSets['2023']='CMSSW_11_3_0_pre4-113X_mcRun3_2023_realistic_v5-v' +defaultDataSets['2024']='CMSSW_11_3_0_pre4-113X_mcRun3_2024_realistic_v5-v' +defaultDataSets['2026D49']='CMSSW_11_3_0_pre4-113X_mcRun4_realistic_v4_2026D49noPU_rsb-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 ada29d37396f1..e1fd636c5f613 100644 --- a/Configuration/PyReleaseValidation/python/relval_upgrade.py +++ b/Configuration/PyReleaseValidation/python/relval_upgrade.py @@ -42,12 +42,11 @@ def makeStepName(key,frag,step,suffix): 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 013341d373a92..9ff0ae9f22e0d 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -56,6 +56,16 @@ '2026D75PU', '2026D76', '2026D76PU', + '2026D77', + '2026D77PU', + '2026D78', + '2026D78PU', + '2026D79', + '2026D79PU', + '2026D80', + '2026D80PU', + '2026D81', + '2026D81PU', ] # pre-generation of WF numbers @@ -959,6 +969,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']: @@ -968,8 +1026,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_14TeV' or fragment=='ZMM_14' 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', @@ -1183,7 +1240,7 @@ 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'], }, '2026D74' : { @@ -1197,14 +1254,51 @@ def condition(self, fragment, stepList, key, hasHarvest): 'Geom' : 'Extended2026D75', 'HLTmenu': '@fake2', 'GT' : 'auto:phase2_realistic_T21', - 'Era' : 'Phase2C11', + 'Era' : 'Phase2C11I13', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, '2026D76' : { 'Geom' : 'Extended2026D76', 'HLTmenu': '@fake2', 'GT' : 'auto:phase2_realistic_T21', - 'Era' : 'Phase2C11M9', + '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'], + }, + '2026D80' : { + 'Geom' : 'Extended2026D80', # N.B.: Geometry with 3D pixels in the Inner Tracker L1. + 'HLTmenu': '@fake2', + 'GT' : 'auto:phase2_realistic_T25', + 'Era' : 'Phase2C11I13T25M9', # customized for 3D pixels and Muon M9 + 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], + }, + '2026D81' : { + 'Geom' : 'Extended2026D81', # N.B.: Geometry with 3D pixels (TBPX,L1) and square 50x50 um2 pixels (TFPX+TEPX) in the Inner Tracker. + 'HLTmenu': '@fake2', + 'GT' : 'auto:phase2_realistic_T26', + 'Era' : 'Phase2C11I13T26M9', # customized for square pixels and Muon M9 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'], }, } @@ -1352,5 +1446,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 09c3b926d9795..b2e5a18e9b91a 100755 --- a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py +++ b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py @@ -84,12 +84,13 @@ def runSelected(opt): 10024.0, #2017 ttbar 10224.0, #2017 ttbar PU 10824.0, #2018 ttbar - 11634.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 ], @@ -289,6 +290,12 @@ def runSelected(opt): default='T2_CH_CERN', action='store') + parser.add_option('--dbs-url', + help='Overwrite DbsUrl value in JSON submitted to ReqMgr2', + dest='dbsUrl', + default=None, + action='store') + opt,args = parser.parse_args() os.environ["CMSSW_DAS_QUERY_SITES"]=opt.dasSites if opt.IBEos: 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 fba2e99d3116c..373bd11296bb8 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -42,11 +42,16 @@ def __init__(self): 'Phase2C9_dd4hep', 'Phase2C10_dd4hep', 'Phase2C11_dd4hep', - 'Phase2C11_etlV4', + 'Phase2C11I13', 'Phase2C11T22', 'Phase2C11T23', 'Phase2C12_dd4hep', 'Phase2C11M9', + 'Phase2C11I13M9', + 'Phase2C11I13T22M9', + 'Phase2C11I13T23M9', + 'Phase2C11I13T25M9', + 'Phase2C11I13T26M9' ] internalUseMods = ['run2_common', 'run2_25ns_specific', @@ -61,7 +66,7 @@ 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', diff --git a/Configuration/StandardSequences/python/GeometryConf.py b/Configuration/StandardSequences/python/GeometryConf.py index 1af0b359b76e1..e24b07b45d66f 100644 --- a/Configuration/StandardSequences/python/GeometryConf.py +++ b/Configuration/StandardSequences/python/GeometryConf.py @@ -49,6 +49,7 @@ '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', @@ -63,5 +64,10 @@ 'Extended2026D74' : 'Extended2026D74,Extended2026D74Reco', 'Extended2026D75' : 'Extended2026D75,Extended2026D75Reco', 'Extended2026D76' : 'Extended2026D76,Extended2026D76Reco', - 'DD4hepExtended2026D49' : 'DD4hepExtended2026D49,DD4hepExtended2026D49Reco', + 'Extended2026D77' : 'Extended2026D77,Extended2026D77Reco', + 'DD4hepExtended2026D77' : 'DD4hepExtended2026D77,DD4hepExtended2026D77Reco', + 'Extended2026D78' : 'Extended2026D78,Extended2026D78Reco', + 'Extended2026D79' : 'Extended2026D79,Extended2026D79Reco', + 'Extended2026D80' : 'Extended2026D80,Extended2026D80Reco', + 'Extended2026D81' : 'Extended2026D81,Extended2026D81Reco', } 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/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/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/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/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/DataScouting/BuildFile.xml b/DQM/DataScouting/BuildFile.xml index e9bbac313c107..773d9a7f05962 100644 --- a/DQM/DataScouting/BuildFile.xml +++ b/DQM/DataScouting/BuildFile.xml @@ -4,6 +4,7 @@ + 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 1e5597dc44ff1..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); @@ -739,7 +748,7 @@ namespace ecaldqm { 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/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 24a97b7a85c4d..dd0226313863b 100644 --- a/DQM/EcalMonitorTasks/src/PNDiodeTask.cc +++ b/DQM/EcalMonitorTasks/src/PNDiodeTask.cc @@ -62,9 +62,9 @@ namespace ecaldqm { _ids.end(), [&](EcalElectronicsIdCollection::value_type const& id) { if (id.towerId() == 69) - meMEMErrors->fill(id.dccId() + 0.0, errorType); + meMEMErrors->fill(getEcalDQMSetupObjects(), id.dccId() + 0.0, errorType); else if (id.towerId() == 70) - meMEMErrors->fill(id.dccId() + 0.5, errorType); + 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 " @@ -82,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 b59a0739bd8c0..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); } } } @@ -105,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()); @@ -135,21 +135,21 @@ 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.; } } @@ -160,18 +160,18 @@ namespace ecaldqm { // bins correspond to towerId 69 and half integer // number bins correspond to towerId 70. if (iFE + 1 == 69) - meFEStatusMEM.fill(dccId + 0.0, status); + meFEStatusMEM.fill(getEcalDQMSetupObjects(), dccId + 0.0, status); else if (iFE + 1 == 70) - meFEStatusMEM.fill(dccId + 0.5, status); + 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: @@ -192,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()); @@ -206,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); } } @@ -224,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); @@ -235,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 39faf72810d64..3426b1493c859 100644 --- a/DQM/GEM/BuildFile.xml +++ b/DQM/GEM/BuildFile.xml @@ -4,7 +4,6 @@ - diff --git a/DQM/GEM/interface/GEMDQMBase.h b/DQM/GEM/interface/GEMDQMBase.h index 8661344ede667..381b36f28604c 100644 --- a/DQM/GEM/interface/GEMDQMBase.h +++ b/DQM/GEM/interface/GEMDQMBase.h @@ -446,7 +446,7 @@ inline int GEMDQMBase::getVFATNumberGE11(const int station, const int ieta, cons } inline int GEMDQMBase::getVFATNumberByStrip(const int station, const int ieta, const int strip) { - const int vfat_phi = (strip % GEMeMap::maxChan_) ? strip / GEMeMap::maxChan_ + 1 : strip / GEMeMap::maxChan_; + const int vfat_phi = (strip % GEMeMap::maxChan_) ? strip / GEMeMap::maxChan_ : strip / GEMeMap::maxChan_ - 1; return getVFATNumber(station, ieta, vfat_phi); } diff --git a/DQM/GEM/plugins/BuildFile.xml b/DQM/GEM/plugins/BuildFile.xml index b644d1fd4f6d0..a469275194e23 100644 --- a/DQM/GEM/plugins/BuildFile.xml +++ b/DQM/GEM/plugins/BuildFile.xml @@ -7,7 +7,5 @@ - - diff --git a/DQM/GEM/plugins/GEMDAQStatusSource.cc b/DQM/GEM/plugins/GEMDAQStatusSource.cc index a442cf220cecf..e8b978b8311f9 100644 --- a/DQM/GEM/plugins/GEMDAQStatusSource.cc +++ b/DQM/GEM/plugins/GEMDAQStatusSource.cc @@ -393,7 +393,7 @@ void GEMDAQStatusSource::analyze(edm::Event const &event, edm::EventSetup const mapChamberStatus[key4Ch] = false; } - Int_t nIdxVFAT = getVFATNumber(gid.station(), gid.roll(), vfatStat->phi() + 1); + Int_t nIdxVFAT = getVFATNumber(gid.station(), gid.roll(), vfatStat->phi()); mapStatusVFAT_.FillBits(key3, nIdxVFAT, unQFVFAT); mapStatusVFATPerCh_.FillBits(key4Ch, nIdxVFAT, unQFVFAT); } diff --git a/DQM/GEM/plugins/GEMDigiSource.cc b/DQM/GEM/plugins/GEMDigiSource.cc index 6ea39f04a8285..f1c3e72821c81 100644 --- a/DQM/GEM/plugins/GEMDigiSource.cc +++ b/DQM/GEM/plugins/GEMDigiSource.cc @@ -16,6 +16,8 @@ #include "DataFormats/GEMDigi/interface/GEMDigiCollection.h" +#include "DataFormats/Scalers/interface/LumiScalers.h" + #include "DQM/GEM/interface/GEMDQMBase.h" #include @@ -39,6 +41,8 @@ class GEMDigiSource : public GEMDQMBase { edm::EDGetToken tagDigi_; + edm::EDGetTokenT lumiScalers_; + MEMap3Inf mapTotalDigi_layer_; MEMap3Inf mapStripOcc_ieta_; MEMap3Inf mapStripOcc_phi_; @@ -58,6 +62,8 @@ 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) { @@ -161,6 +167,9 @@ int GEMDigiSource::ProcessWithMEMap3WithChamber(BookingHelper& bh, ME4IdsKey key 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(); 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 efdde1512fcf7..6822a38db92e6 100644 --- a/DQM/Integration/python/clients/beam_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beam_dqm_sourceclient-live_cfg.py @@ -6,6 +6,7 @@ BSOnlineRecordName = 'BeamSpotOnlineLegacyObjectsRcd' BSOnlineTag = 'BeamSpotOnlineTestLegacy' BSOnlineJobName = 'BeamSpotOnlineTestLegacy' +BSOnlineOmsServiceUrl = 'http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection' #from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 #process = cms.Process("BeamMonitor", Run2_2018) FIXME @@ -17,6 +18,7 @@ if "dqm_cmssw/playback" in str(sys.argv[1]): BSOnlineTag = BSOnlineTag + 'Playback' BSOnlineJobName = BSOnlineJobName + 'Playback' + BSOnlineOmsServiceUrl = '' # process.MessageLogger = cms.Service("MessageLogger", @@ -368,9 +370,7 @@ 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'), + omsServiceUrl = cms.untracked.string(BSOnlineOmsServiceUrl), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), @@ -396,7 +396,6 @@ 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), 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 d9cb03527386b..3765c52e57290 100644 --- a/DQM/Integration/python/clients/beamfake_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beamfake_dqm_sourceclient-live_cfg.py @@ -7,6 +7,7 @@ BSOnlineRecordName = 'BeamSpotOnlineLegacyObjectsRcd' BSOnlineTag = 'BeamSpotOnlineTestLegacy' BSOnlineJobName = 'BeamSpotOnlineTestLegacy' +BSOnlineOmsServiceUrl = 'http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection' import sys from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 @@ -16,6 +17,7 @@ if "dqm_cmssw/playback" in str(sys.argv[1]): BSOnlineTag = BSOnlineTag + 'Playback' BSOnlineJobName = BSOnlineJobName + 'Playback' + BSOnlineOmsServiceUrl = '' # process.MessageLogger = cms.Service("MessageLogger", @@ -148,9 +150,7 @@ 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'), + omsServiceUrl = cms.untracked.string(BSOnlineOmsServiceUrl), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), @@ -176,7 +176,6 @@ 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), 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 2b7eb6965f27a..9fffc4061cba8 100644 --- a/DQM/Integration/python/clients/beamhlt_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beamhlt_dqm_sourceclient-live_cfg.py @@ -6,6 +6,7 @@ BSOnlineRecordName = 'BeamSpotOnlineHLTObjectsRcd' BSOnlineTag = 'BeamSpotOnlineTestHLT' BSOnlineJobName = 'BeamSpotOnlineTestHLT' +BSOnlineOmsServiceUrl = 'http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection' #from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 #process = cms.Process("BeamMonitor", Run2_2018) # FIMXE @@ -17,6 +18,7 @@ if "dqm_cmssw/playback" in str(sys.argv[1]): BSOnlineTag = BSOnlineTag + 'Playback' BSOnlineJobName = BSOnlineJobName + 'Playback' + BSOnlineOmsServiceUrl = '' # Message logger #process.load("FWCore.MessageLogger.MessageLogger_cfi") @@ -175,9 +177,7 @@ 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'), + omsServiceUrl = cms.untracked.string(BSOnlineOmsServiceUrl), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), @@ -202,7 +202,6 @@ 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), 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 3c0b1b34672cd..a32d96c6d7628 100644 --- a/DQM/Integration/python/clients/beamhltfake_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/beamhltfake_dqm_sourceclient-live_cfg.py @@ -6,6 +6,7 @@ BSOnlineRecordName = 'BeamSpotOnlineHLTObjectsRcd' BSOnlineTag = 'BeamSpotOnlineTestHLT' BSOnlineJobName = 'BeamSpotOnlineTestHLT' +BSOnlineOmsServiceUrl = 'http://cmsoms-services.cms:9949/urn:xdaq-application:lid=100/getRunAndLumiSection' import sys from Configuration.Eras.Era_Run2_2018_cff import Run2_2018 @@ -15,6 +16,7 @@ if "dqm_cmssw/playback" in str(sys.argv[1]): BSOnlineTag = BSOnlineTag + 'Playback' BSOnlineJobName = BSOnlineJobName + 'Playback' + BSOnlineOmsServiceUrl = '' # switch live = True # FIXME @@ -122,9 +124,7 @@ 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'), + omsServiceUrl = cms.untracked.string(BSOnlineOmsServiceUrl), writeTransactionDelay = cms.untracked.uint32(options.transDelay), latency = cms.untracked.uint32(2), autoCommit = cms.untracked.bool(True), @@ -151,7 +151,6 @@ 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), diff --git a/DQM/Integration/python/clients/hcalcalib_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/hcalcalib_dqm_sourceclient-live_cfg.py index 3d402e606bfd5..abaf70993143a 100644 --- a/DQM/Integration/python/clients/hcalcalib_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/hcalcalib_dqm_sourceclient-live_cfg.py @@ -44,7 +44,7 @@ # Central DQM Customization #------------------------------------- process.source.streamLabel = cms.untracked.string("streamDQMCalibration") -process.source.SelectEvents = cms.untracked.vstring("*HcalCalibration*") +#process.source.SelectEvents = cms.untracked.vstring("*HcalCalibration*") process.dqmEnv.subSystemFolder = subsystem process.dqmSaver.tag = subsystem process.dqmSaver.runNumber = options.runNumber @@ -238,7 +238,8 @@ *process.tasksSequence *process.harvestingSequence *process.dqmEnv - *process.dqmSaver) + *process.dqmSaver + *process.dqmSaverPB) #------------------------------------- # Scheduling diff --git a/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py b/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py index 92653dab8d754..189f5d662729b 100644 --- a/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py +++ b/DQM/Integration/python/config/FrontierCondition_GT_autoExpress_cfi.py @@ -1,13 +1,14 @@ from __future__ import print_function import FWCore.ParameterSet.Config as cms from Configuration.StandardSequences.FrontierConditions_GlobalTag_cff import * +from Configuration.AlCa.autoCond import autoCond # Default Express GT: it is the GT that will be used in case we are not able # to retrieve the one used at Tier0. # 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 = "112X_dataRun3_Express_v2" +GlobalTag.globaltag = autoCond['run3_data_express'] # ===== 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 e6ed62c481ded..977d6c93c8e2a 100644 --- a/DQM/Integration/python/config/FrontierCondition_GT_cfi.py +++ b/DQM/Integration/python/config/FrontierCondition_GT_cfi.py @@ -1,3 +1,4 @@ import FWCore.ParameterSet.Config as cms from Configuration.StandardSequences.FrontierConditions_GlobalTag_cff import * -GlobalTag.globaltag = "112X_dataRun3_HLT_v1" +from Configuration.AlCa.autoCond import autoCond +GlobalTag.globaltag = autoCond['run3_hlt'] 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/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/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/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/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/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/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/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/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/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/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/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/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/src/classes_def.xml b/DataFormats/CLHEP/src/classes_def.xml index e7175da02d134..37e65a265cc17 100644 --- a/DataFormats/CLHEP/src/classes_def.xml +++ b/DataFormats/CLHEP/src/classes_def.xml @@ -1,5 +1,6 @@ - + + 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/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/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/src/classes_def.xml b/DataFormats/Common/src/classes_def.xml index a9dc6fe936f0c..82c7ac6170501 100644 --- a/DataFormats/Common/src/classes_def.xml +++ b/DataFormats/Common/src/classes_def.xml @@ -151,12 +151,14 @@ + + diff --git a/DataFormats/DTDigi/BuildFile.xml b/DataFormats/DTDigi/BuildFile.xml index 64f4c2632e8e6..6733c6fb10838 100644 --- a/DataFormats/DTDigi/BuildFile.xml +++ b/DataFormats/DTDigi/BuildFile.xml @@ -1,7 +1,7 @@ - + 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/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/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/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/HGCRecHit/interface/HGCRecHit.h b/DataFormats/HGCRecHit/interface/HGCRecHit.h index b9872ac695de4..c283cf4ed5ee6 100644 --- a/DataFormats/HGCRecHit/interface/HGCRecHit.h +++ b/DataFormats/HGCRecHit/interface/HGCRecHit.h @@ -67,7 +67,13 @@ class HGCRecHit : public CaloRecHit { HGCRecHit(); // by default a recHit is greated with no flag - HGCRecHit(const DetId& id, float energy, float time, uint32_t flags = 0, uint32_t flagBits = 0); + HGCRecHit(const DetId& id, + float energy, + float time, + uint32_t flags = 0, + uint32_t flagBits = 0, + uint8_t son = 0, + float timeError = 0.f); /// get the id // For the moment not returning a specific id for subdetector DetId id() const { return DetId(detid()); } @@ -101,6 +107,9 @@ class HGCRecHit : public CaloRecHit { /// check if one of the flags in a set is true bool checkFlags(const std::vector& flagsvec) const; + //added for validation + uint32_t flagBits() const { return flagBits_; } + private: /// store rechit condition (see Flags enum) in a bit-wise way uint32_t flagBits_; diff --git a/DataFormats/HGCRecHit/src/HGCRecHit.cc b/DataFormats/HGCRecHit/src/HGCRecHit.cc index c9f27e09beb3d..43bed27394082 100644 --- a/DataFormats/HGCRecHit/src/HGCRecHit.cc +++ b/DataFormats/HGCRecHit/src/HGCRecHit.cc @@ -9,8 +9,9 @@ HGCRecHit::HGCRecHit() : CaloRecHit(), flagBits_(0) {} -HGCRecHit::HGCRecHit(const DetId& id, float energy, float time, uint32_t flags, uint32_t flagBits) - : CaloRecHit(id, energy, time, flags), flagBits_(flagBits) {} +HGCRecHit::HGCRecHit( + const DetId& id, float energy, float time, uint32_t flags, uint32_t flagBits, uint8_t son, float timeError) + : CaloRecHit(id, energy, time, flags), flagBits_(flagBits), signalOverSigmaNoise_(son), timeError_(timeError) {} float HGCRecHit::chi2() const { uint32_t rawChi2 = 0x7F & (flags() >> 4); 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 ebf0965502d1a..6e4c24de1329c 100644 --- a/DataFormats/HLTReco/BuildFile.xml +++ b/DataFormats/HLTReco/BuildFile.xml @@ -11,7 +11,7 @@ - + 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/JetMatching/BuildFile.xml b/DataFormats/JetMatching/BuildFile.xml new file mode 100644 index 0000000000000..52c1ff3471571 --- /dev/null +++ b/DataFormats/JetMatching/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SimDataFormats/JetMatching/interface/JetFlavour.h b/DataFormats/JetMatching/interface/JetFlavour.h similarity index 94% rename from SimDataFormats/JetMatching/interface/JetFlavour.h rename to DataFormats/JetMatching/interface/JetFlavour.h index c2018de9b6f54..5779a2f11c1f2 100644 --- a/SimDataFormats/JetMatching/interface/JetFlavour.h +++ b/DataFormats/JetMatching/interface/JetFlavour.h @@ -1,5 +1,5 @@ -#ifndef SimDataFormats_JetMatching_JetFlavour_H -#define SimDataFormats_JetMatching_JetFlavour_H +#ifndef DataFormats_JetMatching_JetFlavour_H +#define DataFormats_JetMatching_JetFlavour_H #include #include "DataFormats/Math/interface/Point3D.h" diff --git a/SimDataFormats/JetMatching/interface/JetFlavourInfo.h b/DataFormats/JetMatching/interface/JetFlavourInfo.h similarity index 92% rename from SimDataFormats/JetMatching/interface/JetFlavourInfo.h rename to DataFormats/JetMatching/interface/JetFlavourInfo.h index aca13b9c5200b..876f2c75c986a 100644 --- a/SimDataFormats/JetMatching/interface/JetFlavourInfo.h +++ b/DataFormats/JetMatching/interface/JetFlavourInfo.h @@ -1,12 +1,12 @@ -#ifndef SimDataFormats_JetMatching_JetFlavourInfo_H -#define SimDataFormats_JetMatching_JetFlavourInfo_H +#ifndef DataFormats_JetMatching_JetFlavourInfo_H +#define DataFormats_JetMatching_JetFlavourInfo_H #include #include "DataFormats/HepMCCandidate/interface/GenParticle.h" #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" namespace reco { - /**\class JetFlavourInfo JetFlavourInfo.h SimDataFormats/JetMatching/interface/JetFlavourInfo.h + /**\class JetFlavourInfo JetFlavourInfo.h DataFormats/JetMatching/interface/JetFlavourInfo.h * \brief Class storing the jet flavour information * * JetFlavourInfo class stores the jet flavour information based on hadrons diff --git a/SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h b/DataFormats/JetMatching/interface/JetFlavourInfoMatching.h similarity index 82% rename from SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h rename to DataFormats/JetMatching/interface/JetFlavourInfoMatching.h index 3f3c9cd4a49d8..cbe88b557f229 100644 --- a/SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h +++ b/DataFormats/JetMatching/interface/JetFlavourInfoMatching.h @@ -1,10 +1,10 @@ -#ifndef SimDataFormats_JetMatching_JetFlavourInfoMatching_h -#define SimDataFormats_JetMatching_JetFlavourInfoMatching_h +#ifndef DataFormats_JetMatching_JetFlavourInfoMatching_h +#define DataFormats_JetMatching_JetFlavourInfoMatching_h #include "DataFormats/JetReco/interface/CaloJetCollection.h" #include "DataFormats/Common/interface/AssociationVector.h" #include "DataFormats/Common/interface/RefToBaseProd.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" #include namespace reco { @@ -33,4 +33,4 @@ namespace reco { } // namespace reco -#endif // SimDataFormats_JetMatching_JetFlavourInfoMatching_h +#endif // DataFormats_JetMatching_JetFlavourInfoMatching_h diff --git a/SimDataFormats/JetMatching/interface/JetFlavourMatching.h b/DataFormats/JetMatching/interface/JetFlavourMatching.h similarity index 82% rename from SimDataFormats/JetMatching/interface/JetFlavourMatching.h rename to DataFormats/JetMatching/interface/JetFlavourMatching.h index 63e75fbef3850..bd174e84db1d3 100644 --- a/SimDataFormats/JetMatching/interface/JetFlavourMatching.h +++ b/DataFormats/JetMatching/interface/JetFlavourMatching.h @@ -1,10 +1,10 @@ -#ifndef SimDataFormats_JetMatching_JetFlavourMatching_h -#define SimDataFormats_JetMatching_JetFlavourMatching_h +#ifndef DataFormats_JetMatching_JetFlavourMatching_h +#define DataFormats_JetMatching_JetFlavourMatching_h #include "DataFormats/JetReco/interface/CaloJetCollection.h" #include "DataFormats/Common/interface/AssociationVector.h" #include "DataFormats/Common/interface/RefToBaseProd.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" #include namespace reco { @@ -32,4 +32,4 @@ namespace reco { } // namespace reco -#endif // SimDataFormats_JetMatching_JetFlavourMatching_h +#endif // DataFormats_JetMatching_JetFlavourMatching_h diff --git a/SimDataFormats/JetMatching/interface/JetMatchedPartons.h b/DataFormats/JetMatching/interface/JetMatchedPartons.h similarity index 82% rename from SimDataFormats/JetMatching/interface/JetMatchedPartons.h rename to DataFormats/JetMatching/interface/JetMatchedPartons.h index 0d5426c5e8b15..8bbf30e8feadb 100644 --- a/SimDataFormats/JetMatching/interface/JetMatchedPartons.h +++ b/DataFormats/JetMatching/interface/JetMatchedPartons.h @@ -1,10 +1,10 @@ -#ifndef SimDataFormats_JetMatching_JetMatchedPartons_h -#define SimDataFormats_JetMatching_JetMatchedPartons_h +#ifndef DataFormats_JetMatching_JetMatchedPartons_h +#define DataFormats_JetMatching_JetMatchedPartons_h #include "DataFormats/JetReco/interface/CaloJetCollection.h" #include "DataFormats/Common/interface/AssociationVector.h" #include "DataFormats/Common/interface/RefToBaseProd.h" -#include "SimDataFormats/JetMatching/interface/MatchedPartons.h" +#include "DataFormats/JetMatching/interface/MatchedPartons.h" #include namespace reco { @@ -32,4 +32,4 @@ namespace reco { } // namespace reco -#endif // SimDataFormats_JetMatching_JetMatchedPartons_h +#endif // DataFormats_JetMatching_JetMatchedPartons_h diff --git a/SimDataFormats/JetMatching/interface/MatchedPartons.h b/DataFormats/JetMatching/interface/MatchedPartons.h similarity index 100% rename from SimDataFormats/JetMatching/interface/MatchedPartons.h rename to DataFormats/JetMatching/interface/MatchedPartons.h diff --git a/DataFormats/JetMatching/src/classes.h b/DataFormats/JetMatching/src/classes.h new file mode 100644 index 0000000000000..d0382618fe835 --- /dev/null +++ b/DataFormats/JetMatching/src/classes.h @@ -0,0 +1,10 @@ +#include +#include + +#include "DataFormats/Common/interface/Wrapper.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/MatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetMatchedPartons.h" diff --git a/SimDataFormats/JetMatching/src/classes_def.xml b/DataFormats/JetMatching/src/classes_def.xml similarity index 100% rename from SimDataFormats/JetMatching/src/classes_def.xml rename to DataFormats/JetMatching/src/classes_def.xml 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/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 855a2f46f4b66..a81d1b9fd188b 100644 --- a/DataFormats/L1THGCal/BuildFile.xml +++ b/DataFormats/L1THGCal/BuildFile.xml @@ -4,6 +4,8 @@ + + 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/L1TrackTrigger/BuildFile.xml b/DataFormats/L1TrackTrigger/BuildFile.xml index 54723d87ca386..8498c87b2b9dc 100644 --- a/DataFormats/L1TrackTrigger/BuildFile.xml +++ b/DataFormats/L1TrackTrigger/BuildFile.xml @@ -5,6 +5,8 @@ + + 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_def.xml b/DataFormats/L1TrackTrigger/src/classes_def.xml index 48c4d162a39ea..b7185b6e76860 100644 --- a/DataFormats/L1TrackTrigger/src/classes_def.xml +++ b/DataFormats/L1TrackTrigger/src/classes_def.xml @@ -23,7 +23,7 @@ - + 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/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/SSEVec.h b/DataFormats/Math/interface/SSEVec.h index 85245862099f4..e474e3fb0485f 100644 --- a/DataFormats/Math/interface/SSEVec.h +++ b/DataFormats/Math/interface/SSEVec.h @@ -6,9 +6,9 @@ #if defined(__GNUC__) #include #define CMS_USE_SSE -#ifdef __AVX__ -#define CMS_USE_AVX -#endif /* __AVX__ */ +#ifdef __AVX2__ +#define CMS_USE_AVX2 +#endif /* __AVX2__ */ #endif /* defined(__GNUC__) */ #endif /* !defined(__arm__) && !defined(__aarch64__) && !defined(__MIC__) */ @@ -63,7 +63,7 @@ namespace mathSSE { } #endif // CMS_USE_SSE -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 inline __m256d __attribute__((always_inline)) __attribute__((pure)) _mm256_dot_pd(__m256d v1, __m256d v2) { __m256d mul = _mm256_mul_pd(v1, v2); mul = _mm256_hadd_pd(mul, mul); @@ -92,7 +92,7 @@ namespace mathSSE { return __m256d(_mm256_xor_si256(__m256i(ret), neg)); } -#endif // CMS_USE_AVX +#endif // CMS_USE_AVX2 template struct OldVec { @@ -101,7 +101,7 @@ namespace mathSSE { T theZ; T theW; } __attribute__((aligned(16))); -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 template <> struct OldVec { double theX; @@ -235,7 +235,7 @@ namespace mathSSE { } }; -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 template <> union Mask4 { __m256d vec; @@ -380,7 +380,7 @@ namespace mathSSE { double operator[](unsigned int n) const { return arr[n]; } }; -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 } // namespace mathSSE #include "private/AVXVec.h" @@ -473,7 +473,7 @@ namespace mathSSE { __m128 v2 = _mm_cvtpd_ps(ivec.vec[1]); vec = _mm_shuffle_ps(vec, v2, _MM_SHUFFLE(1, 0, 1, 0)); } -#endif // CMS_USE_AVX +#endif // CMS_USE_AVX2 #endif // CMS_USE_SSE @@ -602,7 +602,7 @@ inline float cross(mathSSE::Vec2F a, mathSSE::Vec2F b) { return a.arr[0] * b.arr // inline mathSSE::Vec2D::Vec2(Vec4D v4) { -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 vec = _mm256_castpd256_pd128(v4.vec); #else vec = v4.vec[0]; @@ -671,7 +671,7 @@ inline double cross(mathSSE::Vec2D a, mathSSE::Vec2D b) { return s; } -#ifndef CMS_USE_AVX +#ifndef CMS_USE_AVX2 // double op 3d #ifdef __SSE3__ @@ -781,7 +781,7 @@ inline double __attribute__((always_inline)) __attribute__((pure)) dotxy(mathSSE return dot(a.xy(), b.xy()); } -#endif // CMS_USE_AVX +#endif // CMS_USE_AVX2 // sqrt namespace mathSSE { @@ -797,7 +797,7 @@ namespace mathSSE { inline Vec2D sqrt(Vec2D v) { return _mm_sqrt_pd(v.vec); } -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 template <> inline Vec4D sqrt(Vec4D v) { return _mm256_sqrt_pd(v.vec); diff --git a/DataFormats/Math/test/ExtVec_t.cpp b/DataFormats/Math/test/ExtVec_t.cpp index 661bef10a91da..da32db094e462 100644 --- a/DataFormats/Math/test/ExtVec_t.cpp +++ b/DataFormats/Math/test/ExtVec_t.cpp @@ -5,9 +5,9 @@ #include -#ifdef __AVX__ -#define CMS_USE_AVX -#endif /* __AVX__ */ +#ifdef __AVX2__ +#define CMS_USE_AVX2 +#endif /* __AVX2__ */ void addScaleddiff(Vec3F& res, float s, Vec3F const& a, Vec3F const& b) { res = res + s * (a - b); } @@ -232,12 +232,12 @@ void go(bool dovec = true) { } int main() { -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 std::cout << "using AVX" << std::endl; #endif testBa(); go(); -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 go(false); #else go(); diff --git a/DataFormats/Math/test/SSEVec_t.cpp b/DataFormats/Math/test/SSEVec_t.cpp index 13c3552903112..3be62799b56f9 100644 --- a/DataFormats/Math/test/SSEVec_t.cpp +++ b/DataFormats/Math/test/SSEVec_t.cpp @@ -226,12 +226,12 @@ void go(bool dovect = true) { } int main() { -#ifdef CMS_USE_AVX - std::cout << "using AVX" << std::endl; +#ifdef CMS_USE_AVX2 + std::cout << "using AVX2" << std::endl; #endif testBa(); go(); -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 go(false); #else go(); 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/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/HGCalMultiCluster.h b/DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h index 15557770655a9..46b2818177396 100644 --- a/DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h +++ b/DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h @@ -31,5 +31,7 @@ namespace reco { private: edm::PtrVector myclusters; }; + + typedef std::vector HGCalMultiClusterCollection; } // namespace reco #endif 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/BuildFile.xml b/DataFormats/PatCandidates/BuildFile.xml index 6a5afe57858b4..ee04851244b3f 100644 --- a/DataFormats/PatCandidates/BuildFile.xml +++ b/DataFormats/PatCandidates/BuildFile.xml @@ -16,7 +16,7 @@ - + diff --git a/DataFormats/PatCandidates/interface/Jet.h b/DataFormats/PatCandidates/interface/Jet.h index 941c1e9009a6c..448344110938d 100644 --- a/DataFormats/PatCandidates/interface/Jet.h +++ b/DataFormats/PatCandidates/interface/Jet.h @@ -31,7 +31,7 @@ #include "DataFormats/BTauReco/interface/TrackCountingTagInfo.h" #include "DataFormats/BTauReco/interface/CandSoftLeptonTagInfo.h" #include "DataFormats/BTauReco/interface/SoftLeptonTagInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" #include "DataFormats/BTauReco/interface/PixelClusterTagInfo.h" #include "DataFormats/BTauReco/interface/CandSecondaryVertexTagInfo.h" #include "DataFormats/BTauReco/interface/SecondaryVertexTagInfo.h" 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/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/interface/BranchDescription.h b/DataFormats/Provenance/interface/BranchDescription.h index aa0281cd9b1f5..6d913bca365df 100644 --- a/DataFormats/Provenance/interface/BranchDescription.h +++ b/DataFormats/Provenance/interface/BranchDescription.h @@ -84,6 +84,7 @@ namespace edm { bool present() const { return !transient_.dropped_; } bool dropped() const { return transient_.dropped_; } void setDropped(bool isDropped) { transient_.dropped_ = isDropped; } + //returns true if unscheduled (produced()==true) or using delayed reader (produced()==false) bool onDemand() const { return transient_.onDemand_; } void setOnDemand(bool isOnDemand) { transient_.onDemand_ = isOnDemand; } bool availableOnlyAtEndTransition() const { return transient_.availableOnlyAtEndTransition_; } 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/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/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/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/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/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/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/TestObjects/BuildFile.xml b/DataFormats/TestObjects/BuildFile.xml index 78feda1bd1db7..3913ca3c0f1a4 100644 --- a/DataFormats/TestObjects/BuildFile.xml +++ b/DataFormats/TestObjects/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/DataFormats/TestObjects/interface/Thing.h b/DataFormats/TestObjects/interface/Thing.h index 08c082d6e88e7..65edab2393ded 100644 --- a/DataFormats/TestObjects/interface/Thing.h +++ b/DataFormats/TestObjects/interface/Thing.h @@ -8,6 +8,7 @@ namespace edmtest { struct Thing { ~Thing() {} Thing() : a() {} + explicit Thing(cms_int32_t v) : a{v} {} cms_int32_t a; }; diff --git a/DataFormats/TestObjects/interface/ThingWithIsEqual.h b/DataFormats/TestObjects/interface/ThingWithIsEqual.h index 26ebf6e857362..4e2fe02b83b25 100644 --- a/DataFormats/TestObjects/interface/ThingWithIsEqual.h +++ b/DataFormats/TestObjects/interface/ThingWithIsEqual.h @@ -8,6 +8,7 @@ namespace edmtest { struct ThingWithIsEqual { ~ThingWithIsEqual() {} ThingWithIsEqual() : a() {} + explicit ThingWithIsEqual(cms_int32_t v) : a(v) {} bool isProductEqual(ThingWithIsEqual const& thingWithIsEqual) const; cms_int32_t a; }; diff --git a/DataFormats/TestObjects/interface/ThingWithMerge.h b/DataFormats/TestObjects/interface/ThingWithMerge.h index 7c5d57af6c0a4..f5c25df6202ca 100644 --- a/DataFormats/TestObjects/interface/ThingWithMerge.h +++ b/DataFormats/TestObjects/interface/ThingWithMerge.h @@ -8,6 +8,7 @@ namespace edmtest { struct ThingWithMerge { ~ThingWithMerge() {} ThingWithMerge() : a() {} + explicit ThingWithMerge(cms_int32_t v) : a{v} {} bool mergeProduct(ThingWithMerge const& newThing); void swap(ThingWithMerge& iOther); cms_int32_t a; 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/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/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/plugins/DDDetectorESProducer.cc b/DetectorDescription/DDCMS/plugins/DDDetectorESProducer.cc index 82607d5b5aed2..3634507eea779 100644 --- a/DetectorDescription/DDCMS/plugins/DDDetectorESProducer.cc +++ b/DetectorDescription/DDCMS/plugins/DDDetectorESProducer.cc @@ -22,6 +22,7 @@ #include "FWCore/Framework/interface/SourceFactory.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Concurrency/interface/SharedResourceNames.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CondFormats/Common/interface/FileBlob.h" #include "CondFormats/DataRecord/interface/MFGeometryFileRcd.h" @@ -68,6 +69,7 @@ DDDetectorESProducer::DDDetectorESProducer(const ParameterSet& iConfig) confGeomXMLFiles_(iConfig.getParameter("confGeomXMLFiles").fullPath()), rootDDName_(iConfig.getParameter("rootDDName")), label_(iConfig.getParameter("label")) { + usesResources({edm::ESSharedResourceNames::kDD4Hep}); if (rootDDName_ == "MagneticFieldVolumes:MAGF" || rootDDName_ == "cmsMagneticField:MAGF") { auto c = setWhatProduced(this, &DDDetectorESProducer::produceMagField, diff --git a/DetectorDescription/DDCMS/src/DDDetector.cc b/DetectorDescription/DDCMS/src/DDDetector.cc index 0cef53c93bbb3..28e19b40019cf 100644 --- a/DetectorDescription/DDCMS/src/DDDetector.cc +++ b/DetectorDescription/DDCMS/src/DDDetector.cc @@ -11,6 +11,12 @@ namespace cms { DDDetector::DDDetector(const std::string& tag, const std::string& fileName, bool bigXML) : m_tag(tag) { + //We do not want to use any previously created TGeoManager but we do want to reset after we are done. + auto oldGeoManager = gGeoManager; + gGeoManager = nullptr; + auto resetManager = [oldGeoManager](TGeoManager*) { gGeoManager = oldGeoManager; }; + std::unique_ptr sentry(oldGeoManager, resetManager); + m_description = &dd4hep::Detector::getInstance(tag); m_description->addExtension(&m_vectors); m_description->addExtension(&m_partsels); 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/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 4a99374343a41..0000000000000 --- a/ElectroWeakAnalysis/Utilities/test/SimpleSystematicsAnalyzer.py +++ /dev/null @@ -1,101 +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.enable = False -process.MessageLogger.cout = cms.untracked.PSet( - enable = cms.untracked.bool(True), - 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/EcalRawToDigi/BuildFile.xml b/EventFilter/EcalRawToDigi/BuildFile.xml index a00aec3dfa99b..bd9d2ea239e3a 100644 --- a/EventFilter/EcalRawToDigi/BuildFile.xml +++ b/EventFilter/EcalRawToDigi/BuildFile.xml @@ -1,5 +1,4 @@ - @@ -9,8 +8,6 @@ - - diff --git a/EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h b/EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h deleted file mode 100644 index 004821afe3ed8..0000000000000 --- a/EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h +++ /dev/null @@ -1,47 +0,0 @@ -#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/DeclsForKernels.h b/EventFilter/EcalRawToDigi/plugins/DeclsForKernels.h index a6429121adc82..c94cfe0c3805f 100644 --- a/EventFilter/EcalRawToDigi/plugins/DeclsForKernels.h +++ b/EventFilter/EcalRawToDigi/plugins/DeclsForKernels.h @@ -4,9 +4,9 @@ #include #include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" +#include "CondFormats/EcalObjects/interface/ElectronicsMappingGPU.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" diff --git a/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc b/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc index 5563dd5b52cc8..97f9828e9f5ec 100644 --- a/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc +++ b/EventFilter/EcalRawToDigi/plugins/EcalCPUDigisProducer.cc @@ -2,12 +2,12 @@ #include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" #include "CondFormats/DataRecord/interface/EcalMappingElectronicsRcd.h" +#include "CondFormats/EcalObjects/interface/ElectronicsMappingGPU.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" diff --git a/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc b/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc index 84fcc7b2b2952..b2569a57ee575 100644 --- a/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc +++ b/EventFilter/EcalRawToDigi/plugins/EcalRawESProducersGPUDefs.cc @@ -1,5 +1,5 @@ #include "CondFormats/DataRecord/interface/EcalMappingElectronicsRcd.h" -#include "EventFilter/EcalRawToDigi/interface/ElectronicsMappingGPU.h" +#include "CondFormats/EcalObjects/interface/ElectronicsMappingGPU.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "HeterogeneousCore/CUDACore/interface/ConvertingESProducerT.h" diff --git a/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc b/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc index 4f0743c9b1b51..5b58bf159b9d0 100644 --- a/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc +++ b/EventFilter/EcalRawToDigi/plugins/EcalRawToDigiGPU.cc @@ -1,8 +1,8 @@ #include "CUDADataFormats/EcalDigi/interface/DigisCollection.h" #include "CondFormats/DataRecord/interface/EcalMappingElectronicsRcd.h" +#include "CondFormats/EcalObjects/interface/ElectronicsMappingGPU.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" diff --git a/EventFilter/EcalRawToDigi/src/ElectronicsMappingGPU.cc b/EventFilter/EcalRawToDigi/src/ElectronicsMappingGPU.cc deleted file mode 100644 index 8264c501a896c..0000000000000 --- a/EventFilter/EcalRawToDigi/src/ElectronicsMappingGPU.cc +++ /dev/null @@ -1,57 +0,0 @@ -#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/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/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/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/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/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/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 a401c48864829..5cd68dd4023eb 100644 --- a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.cc +++ b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.cc @@ -4,7 +4,6 @@ #include #include #include -//#include // CMSSW headers #include "EventFilter/Utilities/interface/EvFDaqDirector.h" diff --git a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h index 0f345abdc0ccb..056082fe36a7c 100644 --- a/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h +++ b/EventFilter/Utilities/plugins/RawEventFileWriterForBU.h @@ -32,7 +32,6 @@ 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); diff --git a/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h b/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h index 0057d3e807c72..60dd6d01f7e01 100644 --- a/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h +++ b/EventFilter/Utilities/plugins/RawEventOutputModuleForBU.h @@ -159,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 diff --git a/EventFilter/Utilities/plugins/modules.cc b/EventFilter/Utilities/plugins/modules.cc index bc74c8779a0cf..c3b6e33faec44 100644 --- a/EventFilter/Utilities/plugins/modules.cc +++ b/EventFilter/Utilities/plugins/modules.cc @@ -8,6 +8,7 @@ #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" @@ -22,6 +23,7 @@ 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; 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/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/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 553129dfcf4b2..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,41 +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); + 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: - TaskBase* 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: - TaskBase* execute() override; + void execute() final; T m_action; }; @@ -163,7 +155,7 @@ namespace edm { //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; @@ -172,29 +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); - } - - inline SerialTaskQueue::TaskBase* SerialTaskQueue::TaskBase::finishedTask() { return m_queue->finishedTask(); } - - template - SerialTaskQueue::TaskBase* 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/SharedResourceNames.h b/FWCore/Concurrency/interface/SharedResourceNames.h index d9fec9e76b803..0fcd634e8cca4 100644 --- a/FWCore/Concurrency/interface/SharedResourceNames.h +++ b/FWCore/Concurrency/interface/SharedResourceNames.h @@ -35,6 +35,7 @@ namespace edm { class ESSharedResourceNames { public: static const std::string kDDGeometry; + static const std::string kDD4Hep; }; // Each time the following function is called, it returns a different 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 604bd57bf574c..122110640942f 100644 --- a/FWCore/Concurrency/interface/WaitingTaskHolder.h +++ b/FWCore/Concurrency/interface/WaitingTaskHolder.h @@ -20,9 +20,11 @@ // 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 @@ -32,34 +34,47 @@ namespace edm { friend class WaitingTaskList; friend class WaitingTaskWithArenaHolder; - WaitingTaskHolder() : m_task(nullptr) {} + WaitingTaskHolder() : m_task(nullptr), m_group(nullptr) {} - explicit WaitingTaskHolder(edm::WaitingTask* iTask) : m_task(iTask) { m_task->increment_ref_count(); } + 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 --------------------------- @@ -79,14 +94,17 @@ 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(); + }); } } @@ -98,6 +116,7 @@ namespace edm { } // ---------- 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 9e6e51cca6e39..37f1f49c61847 100644 --- a/FWCore/Concurrency/interface/WaitingTaskList.h +++ b/FWCore/Concurrency/interface/WaitingTaskList.h @@ -81,24 +81,6 @@ // 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 @@ -121,12 +103,12 @@ 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. @@ -151,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; @@ -166,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 b7436379f0a73..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,7 @@ 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. @@ -70,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; }; @@ -87,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 447018f1fcb80..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) { auto t = pickNextTask(); if (nullptr != t) { - tbb::task::spawn(*t); + spawn(*t); } return true; } @@ -46,7 +69,7 @@ bool SerialTaskQueue::resume() { void SerialTaskQueue::pushTask(TaskBase* iTask) { auto t = pushAndGetNextTask(iTask); if (nullptr != t) { - tbb::task::spawn(*t); + spawn(*t); } } @@ -88,23 +111,6 @@ SerialTaskQueue::TaskBase* SerialTaskQueue::pickNextTask() { return nullptr; } -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(); - } - } else { - //a task must already be running in this queue - iWait->wait_for_all(); - } - tbb::task::destroy(*iWait); -} - // // const member functions // diff --git a/FWCore/Concurrency/src/SharedResourceNames.cc b/FWCore/Concurrency/src/SharedResourceNames.cc index d3d1afb2fb8c4..b043e9bfd731f 100644 --- a/FWCore/Concurrency/src/SharedResourceNames.cc +++ b/FWCore/Concurrency/src/SharedResourceNames.cc @@ -13,6 +13,7 @@ const std::string edm::SharedResourceNames::kEvtGen = "EvtGen"; const std::string edm::SharedResourceNames::kHerwig6 = "Herwig6"; const std::string edm::ESSharedResourceNames::kDDGeometry = "es_DDGeometry"; +const std::string edm::ESSharedResourceNames::kDD4Hep = "es_DD4Hep"; static std::atomic counter; diff --git a/FWCore/Concurrency/src/WaitingTaskList.cc b/FWCore/Concurrency/src/WaitingTaskList.cc index 6ab2be1531504..c8661fa7009a8 100644 --- a/FWCore/Concurrency/src/WaitingTaskList.cc +++ b/FWCore/Concurrency/src/WaitingTaskList.cc @@ -69,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; @@ -80,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 @@ -95,7 +96,7 @@ void WaitingTaskList::add(WaitingTaskHolder iTask) { } } else { auto task = iTask.release_no_decrement(); - WaitNode* newHead = createNode(task); + WaitNode* newHead = createNode(iTask.group(), task); //This exchange is sequentially consistent thereby // ensuring ordering between it and setNextNode WaitNode* oldHead = m_head.exchange(newHead); @@ -111,7 +112,7 @@ void WaitingTaskList::add(WaitingTaskHolder iTask) { newHead->setNextNode(nullptr); 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 @@ -121,17 +122,20 @@ void WaitingTaskList::add(WaitingTaskHolder iTask) { } } -void WaitingTaskList::add(WaitingTask* iTask) { +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); @@ -146,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 @@ -185,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); } @@ -196,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 8f90a99fca1cd..5dd549a5f2ad1 100644 --- a/FWCore/Concurrency/src/WaitingTaskWithArenaHolder.cc +++ b/FWCore/Concurrency/src/WaitingTaskWithArenaHolder.cc @@ -18,13 +18,15 @@ 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_arena(std::make_shared(tbb::task_arena::attach())) {} + : m_task(iTask.release_no_decrement()), + m_group(iTask.group()), + m_arena(std::make_shared(tbb::task_arena::attach())) {} WaitingTaskWithArenaHolder::~WaitingTaskWithArenaHolder() { if (m_task) { @@ -33,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; } @@ -54,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; } @@ -75,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(); + }); + }); } } @@ -92,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 073387012e34b..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,29 +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] { - while (waitToStart.load()) { + 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; @@ -271,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 18d8660b6ffd1..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,91 +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] { + group.run([&queue, &waitToStart, &waitingTasks, &count, &group] { while (waitToStart.load()) { - }; + } 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 7ff34e5253dd8..d97ed7ba18535 100644 --- a/FWCore/Concurrency/test/waitingtasklist_t.cppunit.cpp +++ b/FWCore/Concurrency/test/waitingtasklist_t.cppunit.cpp @@ -39,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: @@ -55,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: @@ -73,18 +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); CPPUNIT_ASSERT(false == called); waitList.doneWaiting(std::exception_ptr{}); - waitTask->wait_for_all(); + group.wait(); CPPUNIT_ASSERT(true == called); CPPUNIT_ASSERT(bool(excPtr) == false); } @@ -95,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); } @@ -118,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); } @@ -139,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); } @@ -162,15 +157,14 @@ 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); } @@ -185,37 +179,29 @@ namespace { } // namespace void WaitingTaskList_test::stressTest() { - 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()); } } 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 a926661cacaae..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), @@ -69,40 +72,43 @@ namespace edm { 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( - WaitingTaskHolder(runTask), iEventSetupImpl, &((*postMayGetProxies_).front()), token); + 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(WaitingTaskHolder(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(WaitingTaskHolder(task), iEventSetupImpl, getTokenIndices(), token); + prefetchNeededDataAsync(WaitingTaskHolder(*group, task), iEventSetupImpl, getTokenIndices(), token); } } } @@ -140,13 +146,12 @@ namespace edm { 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_}); } } } @@ -154,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) { @@ -168,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] { @@ -177,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); @@ -197,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 372086b245dd4..14e0bd8f69956 100644 --- a/FWCore/Framework/interface/CallbackProxy.h +++ b/FWCore/Framework/interface/CallbackProxy.h @@ -58,9 +58,10 @@ namespace edm::eventsetup { 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 33b21fd9f2915..8fe7b8d733d81 100644 --- a/FWCore/Framework/interface/DataProxy.h +++ b/FWCore/Framework/interface/DataProxy.h @@ -32,6 +32,7 @@ namespace edm { class ActivityRegistry; class EventSetupImpl; class ServiceToken; + class ESParentContext; namespace eventsetup { struct ComponentDescription; @@ -52,13 +53,15 @@ namespace edm { EventSetupRecordImpl const&, DataKey const&, EventSetupImpl const*, - ServiceToken const&) 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 @@ -87,7 +90,8 @@ namespace edm { 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 09a39e33d44d5..c930ece872f69 100644 --- a/FWCore/Framework/interface/DataProxyTemplate.h +++ b/FWCore/Framework/interface/DataProxyTemplate.h @@ -34,6 +34,7 @@ #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 @@ -60,26 +61,26 @@ namespace edm { 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/ESSourceDataProxyBase.h b/FWCore/Framework/interface/ESSourceDataProxyBase.h index 5d1b71d4c9bda..199d14455f2f9 100644 --- a/FWCore/Framework/interface/ESSourceDataProxyBase.h +++ b/FWCore/Framework/interface/ESSourceDataProxyBase.h @@ -58,7 +58,8 @@ namespace edm::eventsetup { 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/EventProcessor.h b/FWCore/Framework/interface/EventProcessor.h index 36da2795a37a4..2713eae17f1f9 100644 --- a/FWCore/Framework/interface/EventProcessor.h +++ b/FWCore/Framework/interface/EventProcessor.h @@ -310,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_; 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..7bc06ef8d671c 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 CMS_THREAD_SAFE() 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 121d5633522ad..2c1379f42b38e 100644 --- a/FWCore/Framework/interface/EventSetupRecordImpl.h +++ b/FWCore/Framework/interface/EventSetupRecordImpl.h @@ -42,6 +42,7 @@ through the 'validityInterval' method. #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" @@ -67,6 +68,7 @@ namespace edm { class ESInputTag; class EventSetupImpl; class ServiceToken; + class ESParentContext; namespace eventsetup { struct ComponentDescription; @@ -88,7 +90,8 @@ namespace edm { void prefetchAsync(WaitingTaskHolder iTask, ESProxyIndex iProxyIndex, EventSetupImpl const*, - ServiceToken const&) const; + ServiceToken const&, + ESParentContext) const; /**returns true only if someone has already requested data for this key and the data was retrieved @@ -146,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*, @@ -158,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, @@ -177,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/LooperFactory.h b/FWCore/Framework/interface/LooperFactory.h index 1274ce0bf723d..4a3b6b9ef65c1 100644 --- a/FWCore/Framework/interface/LooperFactory.h +++ b/FWCore/Framework/interface/LooperFactory.h @@ -25,6 +25,7 @@ // user include files #include "FWCore/Framework/interface/ComponentFactory.h" #include "FWCore/Framework/interface/EventSetupProvider.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescriptionFillerPluginFactory.h" // forward declarations namespace edm { @@ -104,7 +105,8 @@ namespace edm { } // namespace eventsetup } // namespace edm -#define DEFINE_FWK_LOOPER(type) \ - DEFINE_EDM_PLUGIN(edm::eventsetup::LooperPluginFactory, edm::eventsetup::LooperMaker, #type) +#define DEFINE_FWK_LOOPER(type) \ + DEFINE_EDM_PLUGIN(edm::eventsetup::LooperPluginFactory, edm::eventsetup::LooperMaker, #type); \ + DEFINE_DESC_FILLER_FOR_EDLOOPERS(type) #endif diff --git a/FWCore/Framework/interface/Principal.h b/FWCore/Framework/interface/Principal.h index 3d230e4024405..03f7b6b995954 100644 --- a/FWCore/Framework/interface/Principal.h +++ b/FWCore/Framework/interface/Principal.h @@ -47,7 +47,6 @@ namespace edm { class ProductResolverIndexHelper; class EDConsumerBase; class SharedResourcesAcquirer; - class InputProductResolver; class UnscheduledConfigurator; struct FilledProductPtr { @@ -209,7 +208,7 @@ namespace edm { ProductResolverBase const* getExistingProduct(BranchID const& branchID) const; ProductResolverBase const* getExistingProduct(ProductResolverBase const& phb) const; - void putOrMerge(BranchDescription const& bd, std::unique_ptr edp) const; + void put_(BranchDescription const& bd, std::unique_ptr edp) const; //F must take an argument of type ProductResolverBase* template @@ -225,7 +224,8 @@ namespace edm { void addScheduledProduct(std::shared_ptr bd); void addSourceProduct(std::shared_ptr bd); - void addInputProduct(std::shared_ptr bd); + void addDelayedReaderInputProduct(std::shared_ptr bd); + void addPutOnReadInputProduct(std::shared_ptr bd); void addUnscheduledProduct(std::shared_ptr bd); void addAliasedProduct(std::shared_ptr bd); void addSwitchProducerProduct(std::shared_ptr bd); @@ -264,7 +264,7 @@ namespace edm { SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const; - void putOrMerge(std::unique_ptr prod, ProductResolverBase const* productResolver) const; + void put_(std::unique_ptr prod, ProductResolverBase const* productResolver) const; std::shared_ptr processHistoryPtr_; diff --git a/FWCore/Framework/interface/ProductResolverBase.h b/FWCore/Framework/interface/ProductResolverBase.h index c8ebc537100fd..4c7e094c028de 100644 --- a/FWCore/Framework/interface/ProductResolverBase.h +++ b/FWCore/Framework/interface/ProductResolverBase.h @@ -159,15 +159,6 @@ namespace edm { // Retrieves the product ID of the product. ProductID const& productID() const { return provenance()->productID(); } - // Puts the product into the ProductResolver. - void putProduct(std::unique_ptr edp) const { putProduct_(std::move(edp)); } - - // If the product already exists we merge, else will put - void putOrMergeProduct(std::unique_ptr edp, - MergeableRunProductMetadata const* mergeableRunProductMetadata = nullptr) const { - putOrMergeProduct_(std::move(edp), mergeableRunProductMetadata); - } - virtual void connectTo(ProductResolverBase const&, Principal const*) = 0; virtual void setupUnscheduled(UnscheduledConfigurator const&); @@ -192,9 +183,6 @@ namespace edm { virtual bool productWasDeleted_() const = 0; virtual bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const = 0; - virtual void putProduct_(std::unique_ptr edp) const = 0; - virtual void putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const = 0; virtual BranchDescription const& branchDescription_() const = 0; virtual void resetBranchDescription_(std::shared_ptr bd) = 0; virtual Provenance const* provenance_() const = 0; diff --git a/FWCore/Framework/interface/RunPrincipal.h b/FWCore/Framework/interface/RunPrincipal.h index ef1e51553e7be..970b709ac8b10 100644 --- a/FWCore/Framework/interface/RunPrincipal.h +++ b/FWCore/Framework/interface/RunPrincipal.h @@ -76,6 +76,8 @@ namespace edm { void put(ProductResolverIndex index, std::unique_ptr edp) const; + void putOrMerge(BranchDescription const& bd, std::unique_ptr edp) const; + MergeableRunProductMetadata* mergeableRunProductMetadata() { return mergeableRunProductMetadataPtr_.get(); } void preReadFile(); diff --git a/FWCore/Framework/interface/WorkerManager.h b/FWCore/Framework/interface/WorkerManager.h index d77bab1f4582d..4135b42cbd967 100644 --- a/FWCore/Framework/interface/WorkerManager.h +++ b/FWCore/Framework/interface/WorkerManager.h @@ -54,12 +54,6 @@ 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(WaitingTaskHolder, typename T::TransitionInfoType&, ServiceToken const&, @@ -107,38 +101,6 @@ namespace edm { void const* lastSetupEventPrincipal_; }; - 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(WaitingTaskHolder(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(WaitingTaskHolder task, typename T::TransitionInfoType& info, 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/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/src/DataProxy.cc b/FWCore/Framework/src/DataProxy.cc index 642a2c653d468..d6f7597333990 100644 --- a/FWCore/Framework/src/DataProxy.cc +++ b/FWCore/Framework/src/DataProxy.cc @@ -14,16 +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 { @@ -66,8 +69,9 @@ namespace edm { 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, @@ -96,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(WaitingTaskHolder(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/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 ee7deb56ab8db..347444f3ad8ce 100644 --- a/FWCore/Framework/src/ESSourceDataProxyBase.cc +++ b/FWCore/Framework/src/ESSourceDataProxyBase.cc @@ -15,6 +15,8 @@ // 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 @@ -24,15 +26,25 @@ void edm::eventsetup::ESSourceDataProxyBase::prefetchAsyncImpl(edm::WaitingTaskH 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 2a4cfdf8b0072..54dfb44246144 100644 --- a/FWCore/Framework/src/Event.cc +++ b/FWCore/Framework/src/Event.cc @@ -8,6 +8,7 @@ #include "FWCore/Framework/interface/EventPrincipal.h" #include "FWCore/Framework/interface/LuminosityBlock.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "FWCore/ParameterSet/interface/Registry.h" #include "FWCore/Utilities/interface/Algorithms.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -169,7 +170,7 @@ namespace edm { for (auto index : iShouldPut) { auto resolver = p.getProductResolverByIndex(index); if (not resolver->productResolved()) { - resolver->putProduct(std::unique_ptr()); + dynamic_cast(resolver)->putProduct(std::unique_ptr()); } } } diff --git a/FWCore/Framework/src/EventPrincipal.cc b/FWCore/Framework/src/EventPrincipal.cc index 40fe4676307b6..ff4bd4360eb63 100644 --- a/FWCore/Framework/src/EventPrincipal.cc +++ b/FWCore/Framework/src/EventPrincipal.cc @@ -17,6 +17,7 @@ #include "FWCore/Framework/interface/ProductResolverBase.h" #include "FWCore/Framework/interface/LuminosityBlockPrincipal.h" #include "FWCore/Framework/src/ProductDeletedException.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "FWCore/Framework/interface/SharedResourcesAcquirer.h" #include "FWCore/Utilities/interface/Algorithms.h" #include "FWCore/Utilities/interface/EDMException.h" @@ -189,7 +190,7 @@ namespace edm { auto phb = getExistingProduct(bd.branchID()); assert(phb); // ProductResolver assumes ownership - phb->putProduct(std::move(edp)); + dynamic_cast(phb)->putProduct(std::move(edp)); } void EventPrincipal::put(ProductResolverIndex index, std::unique_ptr edp, ParentageID parentage) const { @@ -204,7 +205,7 @@ namespace edm { assert(phb); // ProductResolver assumes ownership - phb->putProduct(std::move(edp)); + dynamic_cast(phb)->putProduct(std::move(edp)); } void EventPrincipal::putOnRead(BranchDescription const& bd, @@ -217,7 +218,7 @@ namespace edm { auto phb = getExistingProduct(bd.branchID()); assert(phb); // ProductResolver assumes ownership - phb->putProduct(std::move(edp)); + dynamic_cast(phb)->putProduct(std::move(edp)); } BranchID EventPrincipal::pidToBid(ProductID const& pid) const { diff --git a/FWCore/Framework/src/EventProcessor.cc b/FWCore/Framework/src/EventProcessor.cc index 6c1bcc6b53aab..3674e0f1e2d6c 100644 --- a/FWCore/Framework/src/EventProcessor.cc +++ b/FWCore/Framework/src/EventProcessor.cc @@ -192,6 +192,21 @@ namespace edm { } // --------------------------------------------------------------- + void validateLooper(ParameterSet& pset) { + auto const modtype = pset.getParameter("@module_type"); + auto const moduleLabel = pset.getParameter("@module_label"); + auto filler = ParameterSetDescriptionFillerPluginFactory::get()->create(modtype); + ConfigurationDescriptions descriptions(filler->baseType(), modtype); + filler->fill(descriptions); + try { + edm::convertException::wrap([&]() { descriptions.validate(pset, moduleLabel); }); + } catch (cms::Exception& iException) { + iException.addContext( + fmt::format("Validating configuration of EDLooper of type {} with label: '{}'", modtype, moduleLabel)); + throw; + } + } + std::shared_ptr fillLooper(eventsetup::EventSetupsController& esController, eventsetup::EventSetupProvider& cp, ParameterSet& params) { @@ -208,6 +223,7 @@ namespace edm { for (std::vector::iterator itName = loopers.begin(), itNameEnd = loopers.end(); itName != itNameEnd; ++itName) { ParameterSet* providerPSet = params.getPSetForUpdate(*itName); + validateLooper(*providerPSet); providerPSet->registerIt(); vLooper = eventsetup::LooperFactory::get()->addTo(esController, cp, *providerPSet); } @@ -534,7 +550,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_) @@ -918,16 +939,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_); + + do { + taskGroup_.wait(); + } while (not globalWaitTask.done()); - globalWaitTask->wait_for_all(); - if (globalWaitTask->exceptionPtr() != nullptr) { - std::rethrow_exception(*(globalWaitTask->exceptionPtr())); + if (globalWaitTask.exceptionPtr() != nullptr) { + std::rethrow_exception(*(globalWaitTask.exceptionPtr())); } beginProcessBlockSucceeded = true; } @@ -944,24 +967,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(); @@ -975,29 +1000,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()); } } @@ -1026,7 +1052,7 @@ namespace edm { } { SendSourceTerminationSignalIfException sentry(actReg_.get()); - espController_->eventSetupForInstance(ts); + synchronousEventSetupForInstance(ts, taskGroup_, *espController_); eventSetupForInstanceSucceeded = true; sentry.completedSuccessfully(); } @@ -1039,14 +1065,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; @@ -1056,22 +1083,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(WaitingTaskHolder(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"; @@ -1090,16 +1117,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()); } } } @@ -1118,29 +1146,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"; @@ -1148,20 +1176,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"; @@ -1171,23 +1200,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(); } @@ -1218,108 +1247,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)) { @@ -1327,9 +1359,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()); @@ -1337,7 +1369,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 (...) { @@ -1350,7 +1382,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()); @@ -1359,7 +1391,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(); @@ -1378,14 +1410,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) { @@ -1407,8 +1437,9 @@ namespace edm { EventSetupImpl const& es = iLumiStatus->eventSetupImpl(esp_->subProcessIndex()); std::vector> const* eventSetupImpls = &iLumiStatus->eventSetupImpls(); + // group is used later in this function, and lives outside of iTask + tbb::task_group& taskGroup = *iTask.group(); 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) { @@ -1465,8 +1496,7 @@ namespace edm { }); auto writeT = edm::make_waiting_task( - tbb::task::allocate_root(), - [this, didGlobalBeginSucceed, &lumiPrincipal = lp, task = WaitingTaskHolder(finalTaskForThisLumi)]( + [this, didGlobalBeginSucceed, &lumiPrincipal = lp, task = WaitingTaskHolder(taskGroup, finalTaskForThisLumi)]( std::exception_ptr const* iExcept) mutable { if (iExcept) { task.doneWaiting(*iExcept); @@ -1482,29 +1512,32 @@ namespace edm { LumiTransitionInfo transitionInfo(lp, es, eventSetupImpls); using Traits = OccurrenceTraits; - endGlobalTransitionAsync( - WaitingTaskHolder(writeT), *schedule_, transitionInfo, serviceToken_, subProcesses_, cleaningUpAfterException); + endGlobalTransitionAsync(WaitingTaskHolder(taskGroup, 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 @@ -1534,19 +1567,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())); } } } @@ -1623,19 +1657,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()); @@ -1646,7 +1679,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); @@ -1658,7 +1690,7 @@ namespace edm { } }); ServiceRegistry::Operate op(serviceToken_); - schedule_->writeRunAsync(WaitingTaskHolder(subsT), + schedule_->writeRunAsync(WaitingTaskHolder(*task.group(), subsT), principalCache_.runPrincipal(phid, run), &processContext_, actReg_.get(), @@ -1672,22 +1704,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) { @@ -1761,7 +1792,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] @@ -1769,27 +1800,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()) { @@ -1833,8 +1863,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) { @@ -1847,8 +1876,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_); @@ -1869,9 +1898,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 diff --git a/FWCore/Framework/src/EventSetupImpl.cc b/FWCore/Framework/src/EventSetupImpl.cc index 61c1d2abf6da0..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 { 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 5bddf2052d2e6..433b06147f6e1 100644 --- a/FWCore/Framework/src/EventSetupRecordImpl.cc +++ b/FWCore/Framework/src/EventSetupRecordImpl.cc @@ -18,6 +18,7 @@ #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" @@ -181,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); @@ -189,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) { @@ -206,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; @@ -220,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; @@ -261,7 +265,8 @@ namespace edm { 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; } @@ -269,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/GlobalSchedule.h b/FWCore/Framework/src/GlobalSchedule.h index e350ef22b20d9..2496704455f83 100644 --- a/FWCore/Framework/src/GlobalSchedule.h +++ b/FWCore/Framework/src/GlobalSchedule.h @@ -176,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) { @@ -221,7 +220,7 @@ 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( diff --git a/FWCore/Framework/src/LuminosityBlock.cc b/FWCore/Framework/src/LuminosityBlock.cc index 518940e203ca0..1deedf0230ba8 100644 --- a/FWCore/Framework/src/LuminosityBlock.cc +++ b/FWCore/Framework/src/LuminosityBlock.cc @@ -3,6 +3,7 @@ #include "FWCore/Framework/interface/LuminosityBlockPrincipal.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "FWCore/Utilities/interface/Algorithms.h" #include "FWCore/Utilities/interface/get_underlying_safe.h" @@ -92,7 +93,7 @@ namespace edm { auto resolver = p.getProductResolverByIndex(index); if (not resolver->productResolved() and isEndTransition(provRecorder_.transition()) == resolver->branchDescription().availableOnlyAtEndTransition()) { - resolver->putProduct(std::unique_ptr()); + dynamic_cast(resolver)->putProduct(std::unique_ptr()); } } } diff --git a/FWCore/Framework/src/LuminosityBlockPrincipal.cc b/FWCore/Framework/src/LuminosityBlockPrincipal.cc index 4f6f6347ea337..e713688b4a065 100644 --- a/FWCore/Framework/src/LuminosityBlockPrincipal.cc +++ b/FWCore/Framework/src/LuminosityBlockPrincipal.cc @@ -1,5 +1,5 @@ #include "FWCore/Framework/interface/LuminosityBlockPrincipal.h" - +#include "FWCore/Framework/src/ProductPutterBase.h" #include "DataFormats/Provenance/interface/ProductRegistry.h" namespace edm { @@ -19,12 +19,12 @@ namespace edm { } void LuminosityBlockPrincipal::put(BranchDescription const& bd, std::unique_ptr edp) const { - putOrMerge(bd, std::move(edp)); + put_(bd, std::move(edp)); } void LuminosityBlockPrincipal::put(ProductResolverIndex index, std::unique_ptr edp) const { auto phb = getProductResolverByIndex(index); - phb->putOrMergeProduct(std::move(edp)); + dynamic_cast(phb)->putProduct(std::move(edp)); } unsigned int LuminosityBlockPrincipal::transitionIndex_() const { return index().value(); } 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 1d1f5e7e15d2c..600f8165734a5 100644 --- a/FWCore/Framework/src/Path.cc +++ b/FWCore/Framework/src/Path.cc @@ -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); @@ -295,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; } } @@ -348,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; @@ -356,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>( - WaitingTaskHolder(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 f55930a927855..ac340a48ac681 100644 --- a/FWCore/Framework/src/Path.h +++ b/FWCore/Framework/src/Path.h @@ -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 { diff --git a/FWCore/Framework/src/Principal.cc b/FWCore/Framework/src/Principal.cc index 25228ea5de14f..47798eabdb057 100644 --- a/FWCore/Framework/src/Principal.cc +++ b/FWCore/Framework/src/Principal.cc @@ -10,6 +10,7 @@ #include "FWCore/Framework/interface/DelayedReader.h" #include "FWCore/Framework/interface/HistoryAppender.h" #include "FWCore/Framework/src/ProductDeletedException.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "FWCore/Framework/interface/EDConsumerBase.h" #include "ProductResolvers.h" #include "FWCore/Utilities/interface/EDMException.h" @@ -166,7 +167,11 @@ namespace edm { addScheduledProduct(cbd); } } else { - addInputProduct(cbd); + if (bd.onDemand()) { + addDelayedReaderInputProduct(cbd); + } else { + addPutOnReadInputProduct(cbd); + } } } } else { @@ -333,8 +338,12 @@ namespace edm { addProductOrThrow(std::move(phb)); } - void Principal::addInputProduct(std::shared_ptr bd) { - addProductOrThrow(std::make_unique(std::move(bd))); + void Principal::addDelayedReaderInputProduct(std::shared_ptr bd) { + addProductOrThrow(std::make_unique(std::move(bd))); + } + + void Principal::addPutOnReadInputProduct(std::shared_ptr bd) { + addProductOrThrow(std::make_unique(std::move(bd))); } void Principal::addUnscheduledProduct(std::shared_ptr bd) { @@ -907,11 +916,11 @@ namespace edm { return std::monostate{}; } - void Principal::putOrMerge(std::unique_ptr prod, ProductResolverBase const* phb) const { - phb->putOrMergeProduct(std::move(prod)); + void Principal::put_(std::unique_ptr prod, ProductResolverBase const* phb) const { + dynamic_cast(phb)->putProduct(std::move(prod)); } - void Principal::putOrMerge(BranchDescription const& bd, std::unique_ptr edp) const { + void Principal::put_(BranchDescription const& bd, std::unique_ptr edp) const { if (edp.get() == nullptr) { throw edm::Exception(edm::errors::InsertFailure, "Null Pointer") << "put: Cannot put because unique_ptr to product is null." @@ -920,7 +929,7 @@ namespace edm { auto phb = getExistingProduct(bd.branchID()); assert(phb); // ProductResolver assumes ownership - putOrMerge(std::move(edp), phb); + put_(std::move(edp), phb); } void Principal::adjustIndexesAfterProductRegistryAddition() { @@ -936,7 +945,11 @@ namespace edm { // no product holder. Must add one. The new entry must be an input product holder. assert(!bd.produced()); auto cbd = std::make_shared(bd); - addInputProduct(cbd); + if (bd.onDemand()) { + addDelayedReaderInputProduct(cbd); + } else { + addPutOnReadInputProduct(cbd); + } changed = true; } } diff --git a/FWCore/Framework/src/ProcessBlock.cc b/FWCore/Framework/src/ProcessBlock.cc index 107a43412c39a..b7e3215c4c55c 100644 --- a/FWCore/Framework/src/ProcessBlock.cc +++ b/FWCore/Framework/src/ProcessBlock.cc @@ -1,5 +1,6 @@ #include "FWCore/Framework/interface/ProcessBlock.h" #include "FWCore/Framework/interface/ProcessBlockPrincipal.h" +#include "FWCore/Framework/src/ProductPutterBase.h" namespace edm { @@ -42,7 +43,7 @@ namespace edm { auto resolver = principal.getProductResolverByIndex(index); if (not resolver->productResolved() and isEndTransition(provRecorder_.transition()) == resolver->branchDescription().availableOnlyAtEndTransition()) { - resolver->putProduct(std::unique_ptr()); + dynamic_cast(resolver)->putProduct(std::unique_ptr()); } } } diff --git a/FWCore/Framework/src/ProcessBlockPrincipal.cc b/FWCore/Framework/src/ProcessBlockPrincipal.cc index 281f1408873c9..a17c489402d52 100644 --- a/FWCore/Framework/src/ProcessBlockPrincipal.cc +++ b/FWCore/Framework/src/ProcessBlockPrincipal.cc @@ -1,4 +1,5 @@ #include "FWCore/Framework/interface/ProcessBlockPrincipal.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "DataFormats/Provenance/interface/ProductRegistry.h" #include "DataFormats/Provenance/interface/BranchType.h" @@ -19,7 +20,7 @@ namespace edm { void ProcessBlockPrincipal::put(ProductResolverIndex index, std::unique_ptr edp) const { auto phb = getProductResolverByIndex(index); - phb->putProduct(std::move(edp)); + dynamic_cast(phb)->putProduct(std::move(edp)); } unsigned int ProcessBlockPrincipal::transitionIndex_() const { diff --git a/FWCore/Framework/src/ProductPutOrMergerBase.h b/FWCore/Framework/src/ProductPutOrMergerBase.h new file mode 100644 index 0000000000000..cd7ed2655011d --- /dev/null +++ b/FWCore/Framework/src/ProductPutOrMergerBase.h @@ -0,0 +1,26 @@ +// +// ProductPutOrMergerBase.h +// CMSSW +// +// Created by Chris Jones on 3/18/21. +// + +#ifndef FWCore_Framework_ProductPutOrMergerBase_h +#define FWCore_Framework_ProductPutOrMergerBase_h + +#include + +namespace edm { + class WrapperBase; + class MergeableRunProductMetadata; + + class ProductPutOrMergerBase { + public: + ProductPutOrMergerBase() = default; + virtual ~ProductPutOrMergerBase() = default; + + virtual void putOrMergeProduct(std::unique_ptr edp) const = 0; + }; +} // namespace edm + +#endif /* ProductPutOrMergerBase_h */ diff --git a/FWCore/Framework/src/ProductPutterBase.h b/FWCore/Framework/src/ProductPutterBase.h new file mode 100644 index 0000000000000..1d3af2479cb1c --- /dev/null +++ b/FWCore/Framework/src/ProductPutterBase.h @@ -0,0 +1,26 @@ +// +// ProductPutterBase.h +// CMSSW +// +// Created by Chris Jones on 3/18/21. +// + +#ifndef FWCore_Framework_ProductPutterBase_h +#define FWCore_Framework_ProductPutterBase_h + +#include + +namespace edm { + class WrapperBase; + + class ProductPutterBase { + public: + ProductPutterBase() = default; + virtual ~ProductPutterBase() = default; + + // Puts the product into the ProductResolver. + virtual void putProduct(std::unique_ptr edp) const = 0; + }; +} // namespace edm + +#endif /* ProductPutterBase_h */ diff --git a/FWCore/Framework/src/ProductResolvers.cc b/FWCore/Framework/src/ProductResolvers.cc index 9ec135694ffa4..62dad4bcdfa93 100644 --- a/FWCore/Framework/src/ProductResolvers.cc +++ b/FWCore/Framework/src/ProductResolvers.cc @@ -77,8 +77,8 @@ namespace edm { return Resolution(nullptr); } - void DataManagingProductResolver::mergeProduct(std::unique_ptr iFrom, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const { + void MergeableInputProductResolver::mergeProduct( + std::unique_ptr iFrom, MergeableRunProductMetadata const* mergeableRunProductMetadata) const { // if its not mergeable and the previous read failed, go ahead and use this one if (status() == ProductStatus::ResolveFailed) { setProduct(std::move(iFrom)); @@ -104,7 +104,7 @@ namespace edm { << "that need to be merged in the first place.\n"; } if (original->isPresent()) { - BranchDescription const& desc = branchDescription_(); + BranchDescription const& desc = branchDescription(); if (mergeableRunProductMetadata == nullptr || desc.branchType() != InRun) { original->mergeProduct(iFrom.get()); } else { @@ -159,10 +159,8 @@ namespace edm { } } - ProductResolverBase::Resolution InputProductResolver::resolveProduct_(Principal const& principal, - bool, - SharedResourcesAcquirer*, - ModuleCallingContext const* mcc) const { + ProductResolverBase::Resolution DelayedReaderInputProductResolver::resolveProduct_( + Principal const& principal, bool, SharedResourcesAcquirer*, ModuleCallingContext const* mcc) const { return resolveProductImpl([this, &principal, mcc]() { auto branchType = principal.branchType(); if (branchType == InLumi || branchType == InRun) { @@ -187,14 +185,14 @@ namespace edm { } if (not productResolved()) { //another thread could have beaten us here - putProduct(reader->getProduct(branchDescription().branchID(), &principal, mcc)); + setProduct(reader->getProduct(branchDescription().branchID(), &principal, mcc)); } } }); } - void InputProductResolver::retrieveAndMerge_(Principal const& principal, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const { + void DelayedReaderInputProductResolver::retrieveAndMerge_( + Principal const& principal, MergeableRunProductMetadata const* mergeableRunProductMetadata) const { if (auto reader = principal.reader()) { std::unique_lock guard; if (auto sr = reader->sharedResources().second) { @@ -215,7 +213,7 @@ namespace edm { } if (status() == defaultStatus() || status() == ProductStatus::ProductSet || (status() == ProductStatus::ResolveFailed && !branchDescription().isMergeable())) { - putOrMergeProduct(std::move(edp), mergeableRunProductMetadata); + setOrMergeProduct(std::move(edp), mergeableRunProductMetadata); } else { // status() == ResolveFailed && branchDescription().isMergeable() throw Exception(errors::MismatchedInputFiles) << "Merge of Run or Lumi product failed for branch " << branchDescription().branchName() << "\n" @@ -239,16 +237,26 @@ namespace edm { } } - void InputProductResolver::setMergeableRunProductMetadata_(MergeableRunProductMetadata const* mrpm) { + void MergeableInputProductResolver::setOrMergeProduct( + std::unique_ptr prod, MergeableRunProductMetadata const* mergeableRunProductMetadata) const { + if (status() == defaultStatus()) { + //resolveProduct has not been called or it failed + setProduct(std::move(prod)); + } else { + mergeProduct(std::move(prod), mergeableRunProductMetadata); + } + } + + void DelayedReaderInputProductResolver::setMergeableRunProductMetadata_(MergeableRunProductMetadata const* mrpm) { setMergeableRunProductMetadataInProductData(mrpm); } - void InputProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, - Principal const& principal, - bool skipCurrentProcess, - ServiceToken const& token, - SharedResourcesAcquirer* sra, - ModuleCallingContext const* mcc) const { + void DelayedReaderInputProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, + Principal const& principal, + bool skipCurrentProcess, + ServiceToken const& token, + SharedResourcesAcquirer* sra, + ModuleCallingContext const* mcc) const { //need to try changing m_prefetchRequested before adding to m_waitingTasks bool expected = false; bool prefetchRequested = m_prefetchRequested.compare_exchange_strong(expected, true); @@ -271,7 +279,7 @@ namespace edm { } if (not productResolved()) { //another thread could have finished this while we were waiting - putProduct(reader->getProduct(branchDescription().branchID(), &principal, mcc)); + setProduct(reader->getProduct(branchDescription().branchID(), &principal, mcc)); } } }); @@ -289,16 +297,19 @@ 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(); + }); } } } - void InputProductResolver::resetProductData_(bool deleteEarly) { + void DelayedReaderInputProductResolver::resetProductData_(bool deleteEarly) { if (not deleteEarly) { m_prefetchRequested = false; m_waitingTasks.reset(); @@ -306,11 +317,40 @@ namespace edm { DataManagingProductResolver::resetProductData_(deleteEarly); } - void InputProductResolver::setupUnscheduled(UnscheduledConfigurator const& iConfigure) { + void DelayedReaderInputProductResolver::setupUnscheduled(UnscheduledConfigurator const& iConfigure) { aux_ = iConfigure.auxiliary(); } - bool InputProductResolver::isFromCurrentProcess() const { return false; } + bool DelayedReaderInputProductResolver::isFromCurrentProcess() const { return false; } + + void PutOnReadInputProductResolver::putProduct(std::unique_ptr edp) const { + if (status() != defaultStatus()) { + throw Exception(errors::InsertFailure) + << "Attempt to insert more than one product on branch " << branchDescription().branchName() << "\n"; + } + + setProduct(std::move(edp)); // ProductResolver takes ownership + } + + bool PutOnReadInputProductResolver::isFromCurrentProcess() const { return false; } + + ProductResolverBase::Resolution PutOnReadInputProductResolver::resolveProduct_(Principal const&, + bool skipCurrentProcess, + SharedResourcesAcquirer*, + ModuleCallingContext const*) const { + return resolveProductImpl([]() { return; }); + } + + void PutOnReadInputProductResolver::prefetchAsync_(WaitingTaskHolder waitTask, + Principal const& principal, + bool skipCurrentProcess, + ServiceToken const& token, + SharedResourcesAcquirer* sra, + ModuleCallingContext const* mcc) const {} + + void PutOnReadInputProductResolver::putOrMergeProduct(std::unique_ptr edp) const { + setOrMergeProduct(std::move(edp), nullptr); + } ProductResolverBase::Resolution PuttableProductResolver::resolveProduct_(Principal const&, bool skipCurrentProcess, @@ -346,20 +386,20 @@ 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(WaitingTaskHolder(waiting)); + worker_->callWhenDoneAsync(WaitingTaskHolder(*waitTask.group(), waiting)); } } } - void PuttableProductResolver::putProduct_(std::unique_ptr edp) const { - ProducedProductResolver::putProduct_(std::move(edp)); + void PuttableProductResolver::putProduct(std::unique_ptr edp) const { + ProducedProductResolver::putProduct(std::move(edp)); bool expected = false; if (prefetchRequested_.compare_exchange_strong(expected, true)) { m_waitingTasks.doneWaiting(std::exception_ptr()); @@ -421,7 +461,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 @@ -441,7 +481,12 @@ namespace edm { ParentContext parentContext(mcc); EventTransitionInfo const& info = aux_->eventTransitionInfo(); worker_->doWorkAsync >( - WaitingTaskHolder(t), info, token, info.principal().streamID(), parentContext, mcc->getStreamContext()); + WaitingTaskHolder(*waitTask.group(), t), + info, + token, + info.principal().streamID(), + parentContext, + mcc->getStreamContext()); } } @@ -453,7 +498,7 @@ namespace edm { DataManagingProductResolver::resetProductData_(deleteEarly); } - void ProducedProductResolver::putProduct_(std::unique_ptr edp) const { + void ProducedProductResolver::putProduct(std::unique_ptr edp) const { if (status() != defaultStatus()) { throw Exception(errors::InsertFailure) << "Attempt to insert more than one product on branch " << branchDescription().branchName() << "\n"; @@ -462,30 +507,10 @@ namespace edm { setProduct(std::move(edp)); // ProductResolver takes ownership } - void InputProductResolver::putProduct_(std::unique_ptr edp) const { - if (not productResolved()) { - //Another thread could have set this - setProduct(std::move(edp)); - } - } - bool ProducedProductResolver::isFromCurrentProcess() const { return true; } void DataManagingProductResolver::connectTo(ProductResolverBase const& iOther, Principal const*) { assert(false); } - void DataManagingProductResolver::putOrMergeProduct_( - std::unique_ptr prod, MergeableRunProductMetadata const* mergeableRunProductMetadata) const { - if (not prod) { - return; - } - if (status() == defaultStatus()) { - //resolveProduct has not been called or it failed - putProduct(std::move(prod)); - } else { - mergeProduct(std::move(prod), mergeableRunProductMetadata); - } - } - void DataManagingProductResolver::checkType(WrapperBase const& prod) const { // Check if the types match. TypeID typeID(prod.dynamicTypeInfo()); @@ -580,20 +605,6 @@ namespace edm { bool AliasProductResolver::singleProduct_() const { return true; } - void AliasProductResolver::putProduct_(std::unique_ptr) const { - throw Exception(errors::LogicError) - << "AliasProductResolver::putProduct_() not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - - void AliasProductResolver::putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const*) const { - throw Exception(errors::LogicError) - << "AliasProductResolver::putOrMergeProduct_(std::unique_ptr edp, MergeableRunProductMetadata " - "const*) not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - SwitchBaseProductResolver::SwitchBaseProductResolver(std::shared_ptr bd, DataManagingOrAliasProductResolver& realProduct) : realProduct_(realProduct), productData_(std::move(bd)), prefetchRequested_(false) { @@ -628,14 +639,6 @@ namespace edm { return false; } - void SwitchBaseProductResolver::putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const*) const { - throw Exception(errors::LogicError) - << "SwitchBaseProductResolver::putOrMergeProduct_(std::unique_ptr edp, " - "MergeableRunProductMetadata const*) not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - void SwitchBaseProductResolver::setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) { productData_.setProvenance(provRetriever); } @@ -698,7 +701,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 { @@ -706,11 +709,11 @@ namespace edm { waitingTasks().doneWaiting(std::exception_ptr()); } }); - worker()->callWhenDoneAsync(WaitingTaskHolder(waiting)); + worker()->callWhenDoneAsync(WaitingTaskHolder(*waitTask.group(), waiting)); } } - void SwitchProducerProductResolver::putProduct_(std::unique_ptr edp) const { + void SwitchProducerProductResolver::putProduct(std::unique_ptr edp) const { if (status_ != defaultStatus_) { throw Exception(errors::InsertFailure) << "Attempt to insert more than one product for a branch " << branchDescription().branchName() @@ -768,7 +771,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 { @@ -776,16 +779,11 @@ namespace edm { waitingTasks().doneWaiting(std::exception_ptr()); } }); - realProduct().prefetchAsync(WaitingTaskHolder(waiting), principal, skipCurrentProcess, token, sra, mcc); + realProduct().prefetchAsync( + WaitingTaskHolder(*waitTask.group(), waiting), principal, skipCurrentProcess, token, sra, mcc); } } - void SwitchAliasProductResolver::putProduct_(std::unique_ptr edp) const { - throw Exception(errors::LogicError) - << "SwitchAliasProductResolver::putProduct() not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - void ParentProcessProductResolver::setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) { provRetriever_ = provRetriever; } @@ -800,20 +798,6 @@ namespace edm { bool ParentProcessProductResolver::singleProduct_() const { return true; } - void ParentProcessProductResolver::putProduct_(std::unique_ptr) const { - throw Exception(errors::LogicError) - << "ParentProcessProductResolver::putProduct_() not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - - void ParentProcessProductResolver::putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const*) const { - throw Exception(errors::LogicError) - << "ParentProcessProductResolver::putOrMergeProduct_(std::unique_ptr edp, " - "MergeableRunProductMetadata const*) not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - void ParentProcessProductResolver::throwNullRealProduct() const { // In principle, this ought to be fixed. I noticed one hits this error // when in a SubProcess and calling the Event::getProvenance function @@ -924,14 +908,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()); } } } @@ -957,26 +941,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: @@ -984,6 +969,7 @@ namespace edm { Principal const* principal_; SharedResourcesAcquirer* sra_; ModuleCallingContext const* mcc_; + tbb::task_group* group_; ServiceToken serviceToken_; unsigned int index_; bool skipCurrentProcess_; @@ -1019,7 +1005,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; @@ -1038,9 +1025,8 @@ namespace edm { if (matchingHolders_[k] != ProductResolverIndexInvalid) { //make new task - auto task = new (tbb::task::allocate_root()) - TryNextResolverWaitingTask(this, index, &principal, sra, mcc, skipCurrentProcess, token); - WaitingTaskHolder hTask(task); + 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 @@ -1108,20 +1094,6 @@ namespace edm { << "Contact a Framework developer\n"; } - void NoProcessProductResolver::putProduct_(std::unique_ptr) const { - throw Exception(errors::LogicError) - << "NoProcessProductResolver::putProduct_() not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - - void NoProcessProductResolver::putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const*) const { - throw Exception(errors::LogicError) - << "NoProcessProductResolver::putOrMergeProduct_(std::unique_ptr edp, MergeableRunProductMetadata " - "const*) not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - BranchDescription const& NoProcessProductResolver::branchDescription_() const { throw Exception(errors::LogicError) << "NoProcessProductResolver::branchDescription_() not implemented and should never be called.\n" @@ -1208,20 +1180,6 @@ namespace edm { << "Contact a Framework developer\n"; } - void SingleChoiceNoProcessProductResolver::putProduct_(std::unique_ptr) const { - throw Exception(errors::LogicError) - << "SingleChoiceNoProcessProductResolver::putProduct_() not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - - void SingleChoiceNoProcessProductResolver::putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const*) const { - throw Exception(errors::LogicError) - << "SingleChoiceNoProcessProductResolver::putOrMergeProduct_(std::unique_ptr edp, " - "MergeableRunProductMetadata const*) not implemented and should never be called.\n" - << "Contact a Framework developer\n"; - } - BranchDescription const& SingleChoiceNoProcessProductResolver::branchDescription_() const { throw Exception(errors::LogicError) << "SingleChoiceNoProcessProductResolver::branchDescription_() not implemented and should never be called.\n" diff --git a/FWCore/Framework/src/ProductResolvers.h b/FWCore/Framework/src/ProductResolvers.h index 37b39e802c6b5..e22c691677ef0 100644 --- a/FWCore/Framework/src/ProductResolvers.h +++ b/FWCore/Framework/src/ProductResolvers.h @@ -8,6 +8,8 @@ a set of related EDProducts. This is the storage unit of such information. ----------------------------------------------------------------------*/ #include "FWCore/Framework/interface/ProductResolverBase.h" +#include "FWCore/Framework/src/ProductPutterBase.h" +#include "FWCore/Framework/src/ProductPutOrMergerBase.h" #include "DataFormats/Common/interface/WrapperBase.h" #include "DataFormats/Common/interface/ProductData.h" #include "DataFormats/Provenance/interface/BranchDescription.h" @@ -71,15 +73,12 @@ namespace edm { ProductData const& getProductData() const final { return productData_; } void setMergeableRunProductMetadataInProductData(MergeableRunProductMetadata const*); + void checkType(WrapperBase const& prod) const; + private: void throwProductDeletedException() const; - void checkType(WrapperBase const& prod) const; virtual bool isFromCurrentProcess() const = 0; - // merges the product with the pre-existing product - void mergeProduct(std::unique_ptr edp, MergeableRunProductMetadata const*) const; - void putOrMergeProduct_(std::unique_ptr prod, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const final; bool productUnavailable_() const final; bool productResolved_() const final; bool productWasDeleted_() const final; @@ -102,10 +101,26 @@ namespace edm { ProductStatus const defaultStatus_; }; - class InputProductResolver : public DataManagingProductResolver { + class MergeableInputProductResolver : public DataManagingProductResolver { + public: + MergeableInputProductResolver(std::shared_ptr bd, ProductStatus iDefaultStatus) + : DataManagingProductResolver(bd, iDefaultStatus) {} + + protected: + void setOrMergeProduct(std::unique_ptr prod, + MergeableRunProductMetadata const* mergeableRunProductMetadata) const; + + // merges the product with the pre-existing product + void mergeProduct(std::unique_ptr edp, MergeableRunProductMetadata const*) const; + }; + + class DelayedReaderInputProductResolver : public MergeableInputProductResolver { public: - explicit InputProductResolver(std::shared_ptr bd) - : DataManagingProductResolver(bd, ProductStatus::ResolveNotRun), m_prefetchRequested{false}, aux_{nullptr} {} + explicit DelayedReaderInputProductResolver(std::shared_ptr bd) + : MergeableInputProductResolver(bd, ProductStatus::ResolveNotRun), m_prefetchRequested{false}, aux_{nullptr} { + assert(bd->onDemand()); + assert(not bd->produced()); + } void setupUnscheduled(UnscheduledConfigurator const&) final; @@ -122,7 +137,6 @@ namespace edm { ServiceToken const& token, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const override; - void putProduct_(std::unique_ptr edp) const override; void retrieveAndMerge_(Principal const& principal, MergeableRunProductMetadata const* mergeableRunProductMetadata) const override; @@ -138,7 +152,37 @@ namespace edm { UnscheduledAuxiliary const* aux_; //provides access to the delayedGet signals }; - class ProducedProductResolver : public DataManagingProductResolver { + class PutOnReadInputProductResolver : public MergeableInputProductResolver, + public ProductPutterBase, + public ProductPutOrMergerBase { + public: + PutOnReadInputProductResolver(std::shared_ptr bd) + : MergeableInputProductResolver(bd, ProductStatus::ResolveNotRun) { + assert(not bd->produced()); + assert(not bd->onDemand()); + } + + protected: + void putProduct(std::unique_ptr edp) const override; + void putOrMergeProduct(std::unique_ptr prod) const override; + + Resolution resolveProduct_(Principal const& principal, + bool skipCurrentProcess, + SharedResourcesAcquirer* sra, + ModuleCallingContext const* mcc) const final; + void prefetchAsync_(WaitingTaskHolder waitTask, + Principal const& principal, + bool skipCurrentProcess, + ServiceToken const& token, + SharedResourcesAcquirer* sra, + ModuleCallingContext const* mcc) const final; + bool unscheduledWasNotRun_() const final { return false; } + + private: + bool isFromCurrentProcess() const final; + }; + + class ProducedProductResolver : public DataManagingProductResolver, public ProductPutterBase { public: ProducedProductResolver(std::shared_ptr bd, ProductStatus iDefaultStatus) : DataManagingProductResolver(bd, iDefaultStatus) { @@ -146,7 +190,7 @@ namespace edm { } protected: - void putProduct_(std::unique_ptr edp) const override; + void putProduct(std::unique_ptr edp) const override; private: bool isFromCurrentProcess() const final; @@ -172,7 +216,7 @@ namespace edm { ModuleCallingContext const* mcc) const override; bool unscheduledWasNotRun_() const override { return false; } - void putProduct_(std::unique_ptr edp) const override; + void putProduct(std::unique_ptr edp) const override; void resetProductData_(bool deleteEarly) override; CMS_THREAD_SAFE mutable WaitingTaskList m_waitingTasks; @@ -242,9 +286,6 @@ namespace edm { return realProduct_.productWasFetchedAndIsValid(iSkipCurrentProcess); } - void putProduct_(std::unique_ptr edp) const override; - void putOrMergeProduct_(std::unique_ptr prod, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const final; BranchDescription const& branchDescription_() const override { return *bd_; } void resetBranchDescription_(std::shared_ptr bd) override { bd_ = bd; } Provenance const* provenance_() const final { return realProduct_.provenance(); } @@ -286,8 +327,6 @@ namespace edm { bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final { return realProduct_.productWasFetchedAndIsValid(iSkipCurrentProcess); } - void putOrMergeProduct_(std::unique_ptr edp, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const final; BranchDescription const& branchDescription_() const final { return *productData_.branchDescription(); ; @@ -315,7 +354,7 @@ namespace edm { }; // For the case when SwitchProducer is on a Path - class SwitchProducerProductResolver : public SwitchBaseProductResolver { + class SwitchProducerProductResolver : public SwitchBaseProductResolver, public ProductPutterBase { public: SwitchProducerProductResolver(std::shared_ptr bd, DataManagingOrAliasProductResolver& realProduct); @@ -331,7 +370,7 @@ namespace edm { ServiceToken const& token, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const final; - void putProduct_(std::unique_ptr edp) const final; + void putProduct(std::unique_ptr edp) const final; bool unscheduledWasNotRun_() const final { return false; } bool productUnavailable_() const final; void resetProductData_(bool deleteEarly) final; @@ -362,7 +401,6 @@ namespace edm { ServiceToken const& token, SharedResourcesAcquirer* sra, ModuleCallingContext const* mcc) const final; - void putProduct_(std::unique_ptr edp) const final; bool unscheduledWasNotRun_() const final { return realProduct().unscheduledWasNotRun(); } bool productUnavailable_() const final { return realProduct().productUnavailable(); } }; @@ -409,9 +447,6 @@ namespace edm { return realProduct_->productWasFetchedAndIsValid(iSkipCurrentProcess); } - void putProduct_(std::unique_ptr edp) const override; - void putOrMergeProduct_(std::unique_ptr prod, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const final; BranchDescription const& branchDescription_() const override { return *bd_; } void resetBranchDescription_(std::shared_ptr bd) override { bd_ = bd; } Provenance const* provenance_() const final { return realProduct_->provenance(); } @@ -443,7 +478,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, @@ -472,9 +508,6 @@ namespace edm { bool productResolved_() const final; bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override; - void putProduct_(std::unique_ptr edp) const override; - void putOrMergeProduct_(std::unique_ptr prod, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const final; BranchDescription const& branchDescription_() const override; void resetBranchDescription_(std::shared_ptr bd) override; Provenance const* provenance_() const override; @@ -530,9 +563,6 @@ namespace edm { bool productResolved_() const final; bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override; - void putProduct_(std::unique_ptr edp) const override; - void putOrMergeProduct_(std::unique_ptr prod, - MergeableRunProductMetadata const* mergeableRunProductMetadata) const final; BranchDescription const& branchDescription_() const override; void resetBranchDescription_(std::shared_ptr bd) override; Provenance const* provenance_() const override; diff --git a/FWCore/Framework/src/Run.cc b/FWCore/Framework/src/Run.cc index eced7503b8337..27d9590b80495 100644 --- a/FWCore/Framework/src/Run.cc +++ b/FWCore/Framework/src/Run.cc @@ -2,6 +2,7 @@ #include "FWCore/Framework/interface/RunPrincipal.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "FWCore/Utilities/interface/Algorithms.h" #include "FWCore/Utilities/interface/get_underlying_safe.h" @@ -98,7 +99,7 @@ namespace edm { auto resolver = p.getProductResolverByIndex(index); if (not resolver->productResolved() and isEndTransition(provRecorder_.transition()) == resolver->branchDescription().availableOnlyAtEndTransition()) { - resolver->putProduct(std::unique_ptr()); + dynamic_cast(resolver)->putProduct(std::unique_ptr()); } } } diff --git a/FWCore/Framework/src/RunPrincipal.cc b/FWCore/Framework/src/RunPrincipal.cc index f2f56768cbd31..b49e4ece31207 100644 --- a/FWCore/Framework/src/RunPrincipal.cc +++ b/FWCore/Framework/src/RunPrincipal.cc @@ -4,6 +4,8 @@ #include "DataFormats/Provenance/interface/ProductRegistry.h" #include "FWCore/Framework/interface/ProductResolverBase.h" #include "FWCore/Framework/interface/MergeableRunProductMetadata.h" +#include "FWCore/Framework/src/ProductPutterBase.h" +#include "FWCore/Framework/src/ProductPutOrMergerBase.h" namespace edm { RunPrincipal::RunPrincipal(std::shared_ptr aux, @@ -34,12 +36,23 @@ namespace edm { } void RunPrincipal::put(BranchDescription const& bd, std::unique_ptr edp) const { - putOrMerge(bd, std::move(edp)); + put_(bd, std::move(edp)); } void RunPrincipal::put(ProductResolverIndex index, std::unique_ptr edp) const { auto phb = getProductResolverByIndex(index); - phb->putOrMergeProduct(std::move(edp)); + dynamic_cast(phb)->putProduct(std::move(edp)); + } + + void RunPrincipal::putOrMerge(BranchDescription const& bd, std::unique_ptr prod) const { + if (prod.get() == nullptr) { + throw edm::Exception(edm::errors::InsertFailure, "Null Pointer") + << "putOrMerge: Cannot put because unique_ptr to product is null." + << "\n"; + } + auto phb = getExistingProduct(bd.branchID()); + assert(phb); + dynamic_cast(phb)->putOrMergeProduct(std::move(prod)); } unsigned int RunPrincipal::transitionIndex_() const { return index().value(); } diff --git a/FWCore/Framework/src/Schedule.cc b/FWCore/Framework/src/Schedule.cc index a12b4f3eccdf2..41e674fdbec66 100644 --- a/FWCore/Framework/src/Schedule.cc +++ b/FWCore/Framework/src/Schedule.cc @@ -1233,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); @@ -1272,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); @@ -1311,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); } diff --git a/FWCore/Framework/src/StreamSchedule.cc b/FWCore/Framework/src/StreamSchedule.cc index e9dd60e03a252..ddd24d4482e6e 100644 --- a/FWCore/Framework/src/StreamSchedule.cc +++ b/FWCore/Framework/src/StreamSchedule.cc @@ -609,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); @@ -626,28 +625,27 @@ 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(allPathsDone); + WaitingTaskHolder hAllPathsDone(*iTask.group(), allPathsDone); for (auto it = end_paths_.rbegin(), itEnd = end_paths_.rend(); it != itEnd; ++it) { it->processOneOccurrenceAsync(hAllPathsDone, info, serviceToken, streamID_, &streamContext_); } diff --git a/FWCore/Framework/src/StreamSchedule.h b/FWCore/Framework/src/StreamSchedule.h index d861f8afa6696..7c8a3efb5901c 100644 --- a/FWCore/Framework/src/StreamSchedule.h +++ b/FWCore/Framework/src/StreamSchedule.h @@ -386,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; @@ -422,7 +421,7 @@ namespace edm { }); auto task = make_functor_task( - tbb::task::allocate_root(), [this, h = WaitingTaskHolder(doneTask), info = transitionInfo, token]() mutable { + [this, h = WaitingTaskHolder(*iHolder.group(), doneTask), info = transitionInfo, token]() mutable { ServiceRegistry::Operate op(token); // Caught exception is propagated via WaitingTaskHolder CMS_SA_ALLOW try { @@ -449,9 +448,16 @@ namespace edm { //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 d4e3fcc3d04f4..3d1e1446b1869 100644 --- a/FWCore/Framework/src/SubProcess.cc +++ b/FWCore/Framework/src/SubProcess.cc @@ -431,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_); @@ -549,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()); @@ -576,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); @@ -587,7 +585,7 @@ namespace edm { } } }); - schedule_->writeRunAsync(WaitingTaskHolder(subTasks), + schedule_->writeRunAsync(WaitingTaskHolder(*task.group(), subTasks), principalCache_.runPrincipal(childPhID, runNumber), &processContext_, actReg_.get(), @@ -651,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/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/Worker.cc b/FWCore/Framework/src/Worker.cc index 28c84a4a59866..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 { @@ -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); @@ -266,45 +270,32 @@ 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 = std::move(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); - { - //Need hWaitTask to go out of scope before calling wait_for_all - WaitingTaskHolder hWaitTask(waitTask.get()); - 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); - } - } + 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_)); } } - 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{}); - } - }); - }); - })); + } + }); //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(std::move(iTask))](std::exception_ptr const* iExcept) mutable { if (iExcept) { holder.doneWaiting(*iExcept); @@ -313,13 +304,13 @@ namespace edm { } }); - WaitingTaskHolder tempH(task); - esTaskArena().execute([&]() { + 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(tempH, items[i], &iImpl, iToken); + rec->prefetchAsync(tempH, items[i], &iImpl, iToken, ESParentContext(&moduleCallingContext_)); } } } @@ -510,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 72e0cf75f0fc4..5820b77a3deb7 100644 --- a/FWCore/Framework/src/Worker.h +++ b/FWCore/Framework/src/Worker.h @@ -102,11 +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); + limited_->push(iG, iF); } } }; @@ -132,9 +132,11 @@ namespace edm { virtual SerialTaskQueue* globalRunsQueue() = 0; virtual SerialTaskQueue* globalLuminosityBlocksQueue() = 0; - 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); } @@ -371,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_; @@ -393,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); @@ -437,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: @@ -459,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 @@ -473,7 +477,7 @@ namespace edm { ServiceToken const&, ParentContext const&, WaitingTaskWithArenaHolder) {} - tbb::task* execute() override { return nullptr; } + void execute() final {} }; template @@ -490,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); @@ -511,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: @@ -543,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; }; @@ -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(WaitingTaskHolder(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(WaitingTaskHolder(moduleTask), token, parentContext, transitionInfo, T::transition_); + prefetchAsync(WaitingTaskHolder(*group, moduleTask), token, parentContext, transitionInfo, T::transition_); } } } @@ -1048,27 +1053,27 @@ 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( - WaitingTaskHolder(afterPrefetch), transitionInfo.eventSetupImpl(), T::transition_, serviceToken); + 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); } } } 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 96f0076c59730..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" @@ -151,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; @@ -169,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); } @@ -181,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); } @@ -196,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); } @@ -208,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 447dd2b64874e..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 @@ -190,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); } @@ -202,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); } @@ -218,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); } @@ -232,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 4d7b8ac555cd8..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,7 +86,7 @@ namespace edm { } }); - WaitingTaskHolder h(subs); + WaitingTaskHolder h(*iWait.group(), subs); iSchedule.processOneStreamAsync(std::move(h), iStreamIndex, transitionInfo, token); } @@ -116,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); } @@ -137,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/callback_t.cppunit.cc b/FWCore/Framework/test/callback_t.cppunit.cc index 6e6a988de149c..0a84052105711 100644 --- a/FWCore/Framework/test/callback_t.cppunit.cc +++ b/FWCore/Framework/test/callback_t.cppunit.cc @@ -10,9 +10,12 @@ #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 @@ -36,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 { @@ -60,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(); } }; @@ -98,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(edm::WaitingTaskHolder(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 8cfda84716ee6..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(edm::WaitingTaskHolder(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(edm::WaitingTaskHolder(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 f1c1a597e6dfa..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()); @@ -457,7 +466,8 @@ namespace { 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/eventsetup_t.cppunit.cc b/FWCore/Framework/test/eventsetup_t.cppunit.cc index b569e6a1f82d9..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(WaitingTaskHolder(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 072db2c9b00e9..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(WaitingTaskHolder(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(WaitingTaskHolder(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 bc07a7e48c847..820b0e62f8497 100644 --- a/FWCore/Framework/test/global_filter_t.cppunit.cc +++ b/FWCore/Framework/test/global_filter_t.cppunit.cc @@ -126,12 +126,14 @@ class testGlobalFilter : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); + edm::FinalWaitingTask task; + tbb::task_group group; iBase->doWorkAsync( - edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } diff --git a/FWCore/Framework/test/global_outputmodule_t.cppunit.cc b/FWCore/Framework/test/global_outputmodule_t.cppunit.cc index e5eebfe1d57c8..757d20126ddfc 100644 --- a/FWCore/Framework/test/global_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/global_outputmodule_t.cppunit.cc @@ -96,11 +96,13 @@ class testGlobalOutputModule : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::StreamID id, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); - iBase->doWorkAsync(edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), id, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } @@ -217,12 +219,14 @@ testGlobalOutputModule::testGlobalOutputModule() edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); - 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()); + 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()); } }; @@ -231,12 +235,14 @@ testGlobalOutputModule::testGlobalOutputModule() edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); - 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()); + 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()); } }; diff --git a/FWCore/Framework/test/global_producer_t.cppunit.cc b/FWCore/Framework/test/global_producer_t.cppunit.cc index 67f1b5a1c54fa..de5bc6f94ae92 100644 --- a/FWCore/Framework/test/global_producer_t.cppunit.cc +++ b/FWCore/Framework/test/global_producer_t.cppunit.cc @@ -126,12 +126,14 @@ class testGlobalProducer : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); + edm::FinalWaitingTask task; + tbb::task_group group; iBase->doWorkAsync( - edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } diff --git a/FWCore/Framework/test/limited_filter_t.cppunit.cc b/FWCore/Framework/test/limited_filter_t.cppunit.cc index 869ba40b89471..491499e82f558 100644 --- a/FWCore/Framework/test/limited_filter_t.cppunit.cc +++ b/FWCore/Framework/test/limited_filter_t.cppunit.cc @@ -136,12 +136,14 @@ class testLimitedFilter : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); + edm::FinalWaitingTask task; + tbb::task_group group; iBase->doWorkAsync( - edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } diff --git a/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc b/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc index 5c00eccfd179b..0f19cc6480b3b 100644 --- a/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/limited_outputmodule_t.cppunit.cc @@ -96,11 +96,13 @@ class testLimitedOutputModule : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::StreamID id, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); - iBase->doWorkAsync(edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), id, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } @@ -216,12 +218,14 @@ testLimitedOutputModule::testLimitedOutputModule() edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); - 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()); + 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()); } }; @@ -230,12 +234,14 @@ testLimitedOutputModule::testLimitedOutputModule() edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); - 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()); + 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()); } }; diff --git a/FWCore/Framework/test/limited_producer_t.cppunit.cc b/FWCore/Framework/test/limited_producer_t.cppunit.cc index d0ba40b4144de..55daba9996f82 100644 --- a/FWCore/Framework/test/limited_producer_t.cppunit.cc +++ b/FWCore/Framework/test/limited_producer_t.cppunit.cc @@ -136,12 +136,14 @@ class testLimitedProducer : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); + edm::FinalWaitingTask task; + tbb::task_group group; iBase->doWorkAsync( - edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } diff --git a/FWCore/Framework/test/one_outputmodule_t.cppunit.cc b/FWCore/Framework/test/one_outputmodule_t.cppunit.cc index 60178663c4b1c..64db3bbad0969 100644 --- a/FWCore/Framework/test/one_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/one_outputmodule_t.cppunit.cc @@ -108,11 +108,13 @@ class testOneOutputModule : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::StreamID id, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); - iBase->doWorkAsync(edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), id, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } @@ -311,12 +313,14 @@ testOneOutputModule::testOneOutputModule() edm::ParentContext parentContext; edm::LumiTransitionInfo info(*m_lbp, *m_es); doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); - 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()); + 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()); } }; @@ -325,12 +329,14 @@ testOneOutputModule::testOneOutputModule() edm::ParentContext parentContext; edm::RunTransitionInfo info(*m_rp, *m_es); doWork(iBase, info, edm::StreamID::invalidStreamID(), parentContext); - 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()); + 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()); } }; diff --git a/FWCore/Framework/test/stream_filter_t.cppunit.cc b/FWCore/Framework/test/stream_filter_t.cppunit.cc index 62e9eb8efb801..9eb42597c0330 100644 --- a/FWCore/Framework/test/stream_filter_t.cppunit.cc +++ b/FWCore/Framework/test/stream_filter_t.cppunit.cc @@ -125,12 +125,14 @@ class testStreamFilter : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); + edm::FinalWaitingTask task; + tbb::task_group group; iBase->doWorkAsync( - edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } diff --git a/FWCore/Framework/test/stream_producer_t.cppunit.cc b/FWCore/Framework/test/stream_producer_t.cppunit.cc index fa6d134d54260..28aa558b67221 100644 --- a/FWCore/Framework/test/stream_producer_t.cppunit.cc +++ b/FWCore/Framework/test/stream_producer_t.cppunit.cc @@ -125,12 +125,14 @@ class testStreamProducer : public CppUnit::TestFixture { template void doWork(edm::Worker* iBase, Info const& info, edm::ParentContext const& iContext) { - auto task = edm::make_empty_waiting_task(); - task->increment_ref_count(); + edm::FinalWaitingTask task; + tbb::task_group group; iBase->doWorkAsync( - edm::WaitingTaskHolder(task.get()), info, edm::ServiceToken(), s_streamID0, iContext, nullptr); - task->wait_for_all(); - if (auto e = task->exceptionPtr()) { + 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); } } diff --git a/FWCore/Integration/test/BuildFile.xml b/FWCore/Integration/test/BuildFile.xml index b8e76e43976f8..d0b88cd5df008 100644 --- a/FWCore/Integration/test/BuildFile.xml +++ b/FWCore/Integration/test/BuildFile.xml @@ -199,7 +199,7 @@ - + @@ -244,6 +244,12 @@ + + + + + + @@ -431,4 +437,6 @@ + + diff --git a/FWCore/Integration/test/PutOrMergeTestSource.cc b/FWCore/Integration/test/PutOrMergeTestSource.cc new file mode 100644 index 0000000000000..4a49359e8c693 --- /dev/null +++ b/FWCore/Integration/test/PutOrMergeTestSource.cc @@ -0,0 +1,151 @@ +// +// PutOrMergeTestSource.cc +// CMSSW +// +// Created by Chris Jones on 3/23/21. +// + +#include "FWCore/Framework/interface/InputSource.h" +#include "FWCore/Framework/interface/InputSourceMacros.h" +#include "FWCore/Framework/interface/FileBlock.h" +#include "FWCore/Framework/interface/RunPrincipal.h" + +#include "DataFormats/Provenance/interface/ProductRegistry.h" +#include "DataFormats/Provenance/interface/ProcessHistory.h" +#include "DataFormats/Provenance/interface/ProcessHistoryRegistry.h" + +#include "DataFormats/TestObjects/interface/Thing.h" +#include "DataFormats/TestObjects/interface/ThingWithMerge.h" +#include "DataFormats/TestObjects/interface/ThingWithIsEqual.h" + +#include +using namespace edm; + +namespace edmtest { + class PutOrMergeTestSource : public InputSource { + public: + PutOrMergeTestSource(ParameterSet const&, InputSourceDescription const&); + + /// Register any produced products + void registerProducts() final; + + private: + ItemType getNextItemType() final; + std::shared_ptr readRunAuxiliary_() final; + std::shared_ptr readLuminosityBlockAuxiliary_() final; + std::unique_ptr readFile_() final; + void readRun_(RunPrincipal& runPrincipal) final; + void readEvent_(EventPrincipal& eventPrincipal) final; + + int stage_; + ParameterSet const dummyPSet_; + BranchDescription thingDesc_; + BranchDescription thingWithMergeDesc_; + BranchDescription thingWithEqualDesc_; + ProcessHistoryID historyID_; + }; +} // namespace edmtest + +using namespace edmtest; + +PutOrMergeTestSource::PutOrMergeTestSource(ParameterSet const& iPS, InputSourceDescription const& iISD) + : InputSource(iPS, iISD), + stage_(0), + dummyPSet_([]() { + ParameterSet dummy; + dummy.registerIt(); + return dummy; + }()), + thingDesc_(InRun, + "thingWithMergeProducer", + "PROD", + "edmtest::Thing", + "edmtestThing", + "endRun", + "PutOrMergeTestSource", + dummyPSet_.id(), + edm::TypeWithDict(typeid(edmtest::Thing)), + false, + true), + thingWithMergeDesc_(InRun, + "thingWithMergeProducer", + "PROD", + "edmtest::ThingWithMerge", + "edmtestThingWithMerge", + "endRun", + "PutOrMergeTestSource", + dummyPSet_.id(), + edm::TypeWithDict(typeid(edmtest::ThingWithMerge)), + false, + true), + thingWithEqualDesc_(InRun, + "thingWithMergeProducer", + "PROD", + "edmtest::ThingWithIsEqual", + "edmtestThingWithIsEqual", + "endRun", + "PutOrMergeTestSource", + dummyPSet_.id(), + edm::TypeWithDict(typeid(edmtest::ThingWithIsEqual)), + false, + true) { + edm::ParameterSet dummyPset; + dummyPset.registerIt(); + + ProcessHistory history; + history.emplace_back("PROD", dummyPset.id(), "RELVERSION", "PASSID"); + processHistoryRegistry().registerProcessHistory(history); + historyID_ = history.id(); +} + +void PutOrMergeTestSource::registerProducts() { + edm::ParameterSet dummyPset; + dummyPset.registerIt(); + + thingDesc_.setIsProvenanceSetOnRead(); + thingWithMergeDesc_.setIsProvenanceSetOnRead(); + productRegistryUpdate().copyProduct(thingDesc_); + productRegistryUpdate().copyProduct(thingWithMergeDesc_); + productRegistryUpdate().copyProduct(thingWithEqualDesc_); +} + +InputSource::ItemType PutOrMergeTestSource::getNextItemType() { + switch (stage_) { + case 0: { + return IsFile; + } + case 1: { + return IsRun; + } + case 2: { + return IsRun; + } + default: + return IsStop; + } + return IsInvalid; +} + +std::shared_ptr PutOrMergeTestSource::readRunAuxiliary_() { + auto id = std::make_shared(1, Timestamp::beginOfTime(), Timestamp::endOfTime()); + id->setProcessHistoryID(historyID_); + return id; +} +std::shared_ptr PutOrMergeTestSource::readLuminosityBlockAuxiliary_() { return {}; } +std::unique_ptr PutOrMergeTestSource::readFile_() { + ++stage_; + return std::make_unique(); +} +void PutOrMergeTestSource::readRun_(RunPrincipal& runPrincipal) { + runAuxiliary()->setProcessHistoryID(historyID_); + runPrincipal.fillRunPrincipal(processHistoryRegistry()); + ++stage_; + runPrincipal.putOrMerge(thingDesc_, std::make_unique>(WrapperBase::Emplace{}, 100001)); + runPrincipal.putOrMerge(thingWithMergeDesc_, + std::make_unique>(WrapperBase::Emplace{}, 100002)); + runPrincipal.putOrMerge(thingWithEqualDesc_, + std::make_unique>(WrapperBase::Emplace{}, 100003)); +} +void PutOrMergeTestSource::readEvent_(EventPrincipal& eventPrincipal) { assert(false); } + +DEFINE_FWK_INPUT_SOURCE(PutOrMergeTestSource); 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/putOrMergeTest_cfg.py b/FWCore/Integration/test/putOrMergeTest_cfg.py new file mode 100644 index 0000000000000..7852805a95d66 --- /dev/null +++ b/FWCore/Integration/test/putOrMergeTest_cfg.py @@ -0,0 +1,35 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TEST") + +process.source = cms.Source("PutOrMergeTestSource") + + +process.test = cms.EDAnalyzer("TestMergeResults", + + # Check to see that the value we read matches what we know + # was written. Expected values listed below come in sets of three + # value expected in Thing + # value expected in ThingWithMerge + # value expected in ThingWithIsEqual + # Each set of 3 is tested at endRun for the expected + # run values or at endLuminosityBlock for the expected + # lumi values. And then the next set of three values + # is tested at the next endRun or endLuminosityBlock. + # When the sequence of parameter values is exhausted it stops checking + + expectedBeginRunProd = cms.untracked.vint32( + ), + + expectedEndRunProd = cms.untracked.vint32( + 100001, 200004, 100003, + ), + + expectedEndRunProdImproperlyMerged = cms.untracked.vint32( + ) +) + +#process.dump = cms.EDAnalyzer("EventContentAnalyzer") +process.end = cms.EndPath(process.test) + +#process.add_(cms.Service("Tracer")) 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 dfa01a9603366..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 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/interface/MessageLogger.h b/FWCore/MessageLogger/interface/MessageLogger.h index ff44326e3df8a..a61d10e414d23 100644 --- a/FWCore/MessageLogger/interface/MessageLogger.h +++ b/FWCore/MessageLogger/interface/MessageLogger.h @@ -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,6 +169,8 @@ 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 diff --git a/FWCore/MessageService/test/standAloneTest.cpp b/FWCore/MessageService/test/standAloneTest.cpp index 26d5f0e20413b..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"; 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/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/interface/ParameterSetDescriptionFiller.h b/FWCore/ParameterSet/interface/ParameterSetDescriptionFiller.h index 980be433769c6..cd6a04db2cb70 100644 --- a/FWCore/ParameterSet/interface/ParameterSetDescriptionFiller.h +++ b/FWCore/ParameterSet/interface/ParameterSetDescriptionFiller.h @@ -198,5 +198,33 @@ namespace edm { const std::string& extendedBaseType() const override { return kEmpty; } }; + + template + class DescriptionFillerForEDLoopers : public ParameterSetDescriptionFillerBase { + public: + DescriptionFillerForEDLoopers() {} + DescriptionFillerForEDLoopers(const DescriptionFillerForEDLoopers&) = delete; // stop default + const DescriptionFillerForEDLoopers& operator=(const DescriptionFillerForEDLoopers&) = delete; // stop default + + // If T has a fillDescriptions function then just call that, otherwise + // put in an "unknown description" as a default. + void fill(ConfigurationDescriptions& descriptions) const override { + std::conditional_t::value, + edm::fillDetails::DoFillDescriptions, + edm::fillDetails::DoFillAsUnknown> + fill_descriptions; + fill_descriptions(descriptions); + + std::conditional_t::value, + edm::fillDetails::DoPrevalidate, + edm::fillDetails::DoNothing> + prevalidate; + prevalidate(descriptions); + } + + const std::string& baseType() const override { return kBaseForEDLooper; } + + const std::string& extendedBaseType() const override { return kEmpty; } + }; } // namespace edm #endif diff --git a/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerBase.h b/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerBase.h index d518d4e382ff0..9e5daeda46845 100644 --- a/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerBase.h +++ b/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerBase.h @@ -83,6 +83,7 @@ namespace edm { static const std::string kBaseForService; static const std::string kBaseForESSource; static const std::string kBaseForESProducer; + static const std::string kBaseForEDLooper; static const std::string kExtendedBaseForEDAnalyzer; static const std::string kExtendedBaseForEDProducer; static const std::string kExtendedBaseForEDFilter; diff --git a/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerPluginFactory.h b/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerPluginFactory.h index 233621e0afd39..e7448ac8c84b5 100644 --- a/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerPluginFactory.h +++ b/FWCore/ParameterSet/interface/ParameterSetDescriptionFillerPluginFactory.h @@ -50,4 +50,8 @@ namespace edm { static const edm::ParameterSetDescriptionFillerPluginFactory::PMaker > \ EDM_PLUGIN_SYM(s_filler, __LINE__)(#type) +#define DEFINE_DESC_FILLER_FOR_EDLOOPERS(type) \ + static const edm::ParameterSetDescriptionFillerPluginFactory::PMaker > \ + EDM_PLUGIN_SYM(s_filler, __LINE__)(#type) + #endif 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/ParameterSetDescriptionFillerBase.cc b/FWCore/ParameterSet/src/ParameterSetDescriptionFillerBase.cc index 9337093bdd115..affb5b4314c26 100644 --- a/FWCore/ParameterSet/src/ParameterSetDescriptionFillerBase.cc +++ b/FWCore/ParameterSet/src/ParameterSetDescriptionFillerBase.cc @@ -22,6 +22,7 @@ const std::string edm::ParameterSetDescriptionFillerBase::kEmpty(""); const std::string edm::ParameterSetDescriptionFillerBase::kBaseForService("Service"); const std::string edm::ParameterSetDescriptionFillerBase::kBaseForESSource("ESSource"); const std::string edm::ParameterSetDescriptionFillerBase::kBaseForESProducer("ESProducer"); +const std::string edm::ParameterSetDescriptionFillerBase::kBaseForEDLooper("EDLooper"); const std::string edm::ParameterSetDescriptionFillerBase::kExtendedBaseForEDAnalyzer("EDAnalyzer"); const std::string edm::ParameterSetDescriptionFillerBase::kExtendedBaseForEDProducer("EDProducer"); const std::string edm::ParameterSetDescriptionFillerBase::kExtendedBaseForEDFilter("EDFilter"); 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/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 b5327a4b34acd..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 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/src/ActivityRegistry.cc b/FWCore/ServiceRegistry/src/ActivityRegistry.cc index 3aeb9e8d724f7..865a2cfc1918a 100644 --- a/FWCore/ServiceRegistry/src/ActivityRegistry.cc +++ b/FWCore/ServiceRegistry/src/ActivityRegistry.cc @@ -275,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_)); @@ -483,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/plugins/InitRootHandlers.cc b/FWCore/Services/plugins/InitRootHandlers.cc index 23571132c0d57..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,7 +127,7 @@ 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_; @@ -156,7 +166,7 @@ namespace { } //Contents of a message which should be reported as an INFO not a ERROR - constexpr std::array in_message{ + constexpr std::array in_message{ {"no dictionary for class", "already in TClassTable", "matrix not positive definite", @@ -164,7 +174,8 @@ 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"}}; //Location generating messages which should be reported as an INFO not a ERROR constexpr std::array in_location{{"Fit", @@ -175,10 +186,9 @@ namespace { "Inverter::Dinv", "RTaskArenaWrapper"}}; - constexpr std::array in_message_print{{"number of iterations was insufficient", - "bad integrand behavior", - "integral is divergent, or slowly convergent", - "tbb::global_control is limiting"}}; + 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; @@ -262,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; @@ -745,10 +755,10 @@ 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(), @@ -759,6 +769,10 @@ namespace edm { 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); @@ -830,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)); } } @@ -847,6 +863,8 @@ namespace edm { iter = TIter(gROOT->GetListOfFiles()); } } + //disengage from TBB to avoid possible at exit problems + threadTracker_.reset(); } void InitRootHandlers::willBeUsingThreads() { diff --git a/FWCore/Services/plugins/Tracer.cc b/FWCore/Services/plugins/Tracer.cc index 95b6bac3c54f4..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" @@ -206,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_; @@ -384,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_); @@ -1612,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/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/TFWLiteSelector/src/TFWLiteSelectorBasic.cc b/FWCore/TFWLiteSelector/src/TFWLiteSelectorBasic.cc index 964f9fdc5d9d1..608ef59fecd8d 100644 --- a/FWCore/TFWLiteSelector/src/TFWLiteSelectorBasic.cc +++ b/FWCore/TFWLiteSelector/src/TFWLiteSelectorBasic.cc @@ -477,6 +477,7 @@ void TFWLiteSelectorBasic::setupNewFile(TFile& iFile) { if (m_->tree_->GetBranch(prod.branchName().c_str()) == nullptr) { prod.setDropped(true); } + prod.setOnDemand(true); //std::cout << "id " << it->first << " branch " << it->second << std::endl; //m_->pointerToBranchBuffer_.push_back(&(*itB)); 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 914b3e939e7b5..37768a1ec533f 100644 --- a/FWCore/TestProcessor/interface/TestDataProxy.h +++ b/FWCore/TestProcessor/interface/TestDataProxy.h @@ -41,7 +41,8 @@ namespace edm { 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 781e07ae40c08..9b870bad14cd7 100644 --- a/FWCore/TestProcessor/src/TestProcessor.cc +++ b/FWCore/TestProcessor/src/TestProcessor.cc @@ -29,6 +29,7 @@ #include "FWCore/Framework/src/globalTransitionAsync.h" #include "FWCore/Framework/src/streamTransitionAsync.h" #include "FWCore/Framework/src/TransitionInfoTypes.h" +#include "FWCore/Framework/src/ProductPutterBase.h" #include "FWCore/Framework/interface/DelayedReader.h" #include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" @@ -381,7 +382,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 +428,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 +450,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 +459,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(WaitingTaskHolder(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 +501,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 +510,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(WaitingTaskHolder(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; @@ -554,21 +562,22 @@ namespace edm { //The data product was not set so we need to // tell the ProductResolver not to wait auto r = pep->getProductResolver(p.first.branchID()); - r->putProduct(std::unique_ptr()); + dynamic_cast(r)->putProduct(std::unique_ptr()); } } 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 +589,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 +599,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 +611,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 +650,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 +660,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 +672,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 +709,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/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/FastSimulation/Calorimetry/python/Calorimetry_cff.py b/FastSimulation/Calorimetry/python/Calorimetry_cff.py index bf9a36ac7959a..b52357cefeb28 100644 --- a/FastSimulation/Calorimetry/python/Calorimetry_cff.py +++ b/FastSimulation/Calorimetry/python/Calorimetry_cff.py @@ -5,6 +5,7 @@ #Global fast calorimetry parameters from FastSimulation.Calorimetry.HcalResponse_cfi import * from FastSimulation.Calorimetry.HSParameters_cfi import * +from Geometry.HcalSimData.HFParameters_cff import * #from FastSimulation.Configuration.CommonInputs_cff import * from FastSimulation.Calorimetry.ECALResponse_cfi import * @@ -262,22 +263,13 @@ timeShiftHF = cms.vdouble(50.7, 52.5, 52.9, 53.9, 54.5, 55.1, 55.1, 55.7, 55.9, 56.1, 56.1, 56.1, 56.5), ), HFShower = cms.PSet( - ProbMax = cms.double(1.0), - CFibre = cms.double(0.5), - OnlyLong = cms.bool(True) + HFShowerBlock = cms.PSet(refToPSet_ = cms.string("HFShowerBlock")) ), HFShowerLibrary = cms.PSet( useShowerLibrary = cms.untracked.bool(True), useCorrectionSL = cms.untracked.bool(True), - FileName = cms.FileInPath('SimG4CMS/Calo/data/HFShowerLibrary_oldpmt_noatt_eta4_16en_v3.root'), - BackProbability = cms.double(0.2), - TreeEMID = cms.string('emParticles'), - TreeHadID = cms.string('hadParticles'), - Verbosity = cms.untracked.bool(False), ApplyFiducialCut = cms.bool(True), - BranchEvt = cms.untracked.string(''), - BranchPre = cms.untracked.string(''), - BranchPost = cms.untracked.string('') + HFLibraryFileBlock = cms.PSet(refToPSet_ = cms.string("HFLibraryFileBlock")) ) ), GFlash = cms.PSet( @@ -299,4 +291,3 @@ FamosCalorimetryBlock.Calorimetry.HCAL.Digitizer = True 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' ) 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/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/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc index c0cac5f22e988..02d32a07b5fd4 100644 --- a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc @@ -1,3 +1,4 @@ +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h" #include "Fireworks/Core/interface/FWEventItem.h" #include "Fireworks/Core/interface/FWGeometry.h" @@ -5,6 +6,9 @@ #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" @@ -59,16 +63,18 @@ void FWTracksterHitsProxyBuilder::build(const FWEventItem *iItem, TEveElementLis iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters", "timeLayerCluster"), TimeValueMapHandle); iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters"), layerClustersHandle); if (TimeValueMapHandle.isValid()) { - timeLowerBound = std::min(item()->getConfig()->value("TimeLowerBound(ns)"), - item()->getConfig()->value("TimeUpperBound(ns)")); - timeUpperBound = std::max(item()->getConfig()->value("TimeLowerBound(ns)"), - item()->getConfig()->value("TimeUpperBound(ns)")); + 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 { - std::cerr << "Warning: couldn't locate 'timeLayerCluster' ValueMap in root file." << std::endl; + edm::LogWarning("DataNotFound|InvalidData") << "couldn't locate 'timeLayerCluster' ValueMap in root file."; } if (!layerClustersHandle.isValid()) { - std::cerr << "Warning: couldn't locate 'hgcalLayerClusters' collection in root file." << std::endl; + edm::LogWarning("DataNotFound|InvalidData") << "couldn't locate 'timeLayerCluster' ValueMap in root file."; } layer = item()->getConfig()->value("Layer"); @@ -249,17 +255,40 @@ void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, 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); - marker->SetLineColor(kRed); + if (isAdjacent) { + marker->SetLineColor(kYellow); + } else { + marker->SetLineColor(kRed); + } // draw 3D cross - marker->AddLine(doublet.first.x(), - doublet.first.y(), - doublet.first.z(), - doublet.second.x(), - doublet.second.y(), - doublet.second.z()); + 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); } 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/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/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 200531a26e15c..ac67cf9292992 100644 --- a/GeneratorInterface/GenFilters/plugins/MCSmartSingleParticleFilter.cc +++ b/GeneratorInterface/GenFilters/plugins/MCSmartSingleParticleFilter.cc @@ -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/Herwig7Interface/python/DYToll01234Jets_5f_LO_MLM_Madgraph_Herwig_13TeV_cff.py b/GeneratorInterface/Herwig7Interface/python/DYToll01234Jets_5f_LO_MLM_Madgraph_Herwig_13TeV_cff.py new file mode 100644 index 0000000000000..4e2484ee675ee --- /dev/null +++ b/GeneratorInterface/Herwig7Interface/python/DYToll01234Jets_5f_LO_MLM_Madgraph_Herwig_13TeV_cff.py @@ -0,0 +1,38 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.DYToll01234Jets_5f_LO_MLM_Madgraph_LHE_13TeV_cff import externalLHEProducer +from Configuration.Generator.Herwig7Settings.Herwig7CH3TuneSettings_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7StableParticlesForDetector_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7MGMergingSettings_cfi import * + + +generator = cms.EDFilter("Herwig7GeneratorFilter", + herwig7CH3SettingsBlock, + herwig7StableParticlesForDetectorBlock, + herwig7MGMergingSettingsBlock, + configFiles = cms.vstring(), + hw_user_settings = cms.vstring( + 'set FxFxHandler:MergeMode TreeMG5', + 'set FxFxHandler:njetsmax 4' + ), + parameterSets = cms.vstring( + 'herwig7CH3PDF', + 'herwig7CH3AlphaS', + 'herwig7CH3MPISettings', + 'herwig7StableParticlesForDetector', + 'hw_mg_merging_settings', + 'hw_user_settings' + ), + 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'), + repository = cms.string('${HERWIGPATH}/HerwigDefaults.rpo'), + run = cms.string('InterfaceMatchboxTest'), + runModeList = cms.untracked.string("read,run"), + seed = cms.untracked.int32(12345) +) + + +ProductionFilterSequence = cms.Sequence(generator) diff --git a/GeneratorInterface/Herwig7Interface/python/DYToll012Jets_5f_NLO_FXFX_Madgraph_Herwig_13TeV_cff.py b/GeneratorInterface/Herwig7Interface/python/DYToll012Jets_5f_NLO_FXFX_Madgraph_Herwig_13TeV_cff.py new file mode 100644 index 0000000000000..3b89a0fc18b76 --- /dev/null +++ b/GeneratorInterface/Herwig7Interface/python/DYToll012Jets_5f_NLO_FXFX_Madgraph_Herwig_13TeV_cff.py @@ -0,0 +1,45 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.Herwig7Settings.Herwig7CH3TuneSettings_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7StableParticlesForDetector_cfi import * +from Configuration.Generator.Herwig7Settings.Herwig7MGMergingSettings_cfi import * + + +generator = cms.EDFilter("Herwig7GeneratorFilter", + herwig7CH3SettingsBlock, + herwig7StableParticlesForDetectorBlock, + herwig7MGMergingSettingsBlock, + configFiles = cms.vstring(), + hw_user_settings = cms.vstring( + 'set FxFxHandler:MergeMode FxFx', + 'set FxFxHandler:njetsmax 2' + ), + parameterSets = cms.vstring( + 'herwig7CH3PDF', + 'herwig7CH3AlphaS', + 'herwig7CH3MPISettings', + 'herwig7StableParticlesForDetector', + 'hw_mg_merging_settings', + 'hw_user_settings' + ), + 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'), + repository = cms.string('${HERWIGPATH}/HerwigDefaults.rpo'), + run = cms.string('InterfaceMatchboxTest'), + runModeList = cms.untracked.string("read,run"), + seed = cms.untracked.int32(12345) +) + +externalLHEProducer = cms.EDProducer("ExternalLHEProducer", + args = cms.vstring('/cvmfs/cms.cern.ch/phys_generator/gridpacks/2017/13TeV/madgraph/V5_2.6.1/DYellell012j_5f_NLO_FXFX/dyellell012j_5f_NLO_FXFX_slc7_amd64_gcc700_CMSSW_10_6_4_tarball.tar.xz'), + nEvents = cms.untracked.uint32(5000), + numberOfParameters = cms.uint32(1), + outputFile = cms.string('cmsgrid_final.lhe'), + scriptName = cms.FileInPath('GeneratorInterface/LHEInterface/data/run_generic_tarball_cvmfs.sh') +) + + +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/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..e6c8e6511e3e7 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" @@ -66,7 +65,7 @@ Description: [one line class summary] // class declaration // -class ExternalLHEProducer : public edm::one::EDProducer { +class ExternalLHEProducer : public edm::one::EDProducer { public: explicit ExternalLHEProducer(const edm::ParameterSet& iConfig); @@ -75,7 +74,8 @@ class ExternalLHEProducer : public edm::one::EDProducer makeArgs(uint32_t nEvents, unsigned int nThreads, std::uint32_t seed) const; @@ -83,6 +83,7 @@ class ExternalLHEProducer : public edm::one::EDProducer const& args, int id) const; void nextEvent(); + std::unique_ptr generateRunInfo(std::vector const& files) const; // ----------member data --------------------------- std::string scriptName_; @@ -99,12 +100,12 @@ class ExternalLHEProducer : public edm::one::EDProducer> nPartonMapping_{}; std::unique_ptr reader_; - std::shared_ptr runInfoLast_; - std::shared_ptr runInfo_; std::shared_ptr partonLevel_; - std::deque> runInfoProducts_; - bool wasMerged; + bool wasMerged_; + edm::EDPutTokenT xmlPutToken_; + edm::EDPutTokenT eventPutToken_; + edm::EDPutTokenT beginRunPutToken_; class FileCloseSentry { public: explicit FileCloseSentry(int fd) : fd_(fd){}; @@ -156,11 +157,10 @@ ExternalLHEProducer::ExternalLHEProducer(const edm::ParameterSet& iConfig) } } - produces("LHEScriptOutput"); + xmlPutToken_ = produces("LHEScriptOutput"); - produces(); - produces(); - produces(); + eventPutToken_ = produces(); + beginRunPutToken_ = produces(); } // @@ -224,28 +224,7 @@ void ExternalLHEProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe partonLevel_->getComments().end(), std::bind(&LHEEventProduct::addComment, product.get(), std::placeholders::_1)); - iEvent.put(std::move(product)); - - if (runInfo_) { - std::unique_ptr product(new LHERunInfoProduct(*runInfo_->getHEPRUP())); - std::for_each(runInfo_->getHeaders().begin(), - runInfo_->getHeaders().end(), - std::bind(&LHERunInfoProduct::addHeader, product.get(), std::placeholders::_1)); - std::for_each(runInfo_->getComments().begin(), - runInfo_->getComments().end(), - std::bind(&LHERunInfoProduct::addComment, product.get(), std::placeholders::_1)); - - if (!runInfoProducts_.empty()) { - runInfoProducts_.front()->mergeProduct(*product); - if (!wasMerged) { - runInfoProducts_.pop_front(); - runInfoProducts_.emplace_front(product.release()); - wasMerged = true; - } - } - - runInfo_.reset(); - } + iEvent.put(eventPutToken_, std::move(product)); partonLevel_.reset(); return; @@ -276,35 +255,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); @@ -336,44 +309,25 @@ void ExternalLHEProducer::beginRunProduce(edm::Run& run, edm::EventSetup const& p->fillCompressedContent(instream, 0.25 * insize); instream.close(); } - run.put(std::move(p), "LHEScriptOutput"); + run.put(xmlPutToken_, std::move(p)); + + //Read the beginning of each file to get the run info in order to do the merge + auto runInfo = generateRunInfo(infiles); + if (runInfo) { + run.put(beginRunPutToken_, std::move(runInfo)); + } // LHE C++ classes translation // (read back uncompressed file from disk in streaming mode again to save memory) - unsigned int skip = 0; reader_ = std::make_unique(infiles, skip); nextEvent(); - if (runInfoLast_) { - runInfo_ = runInfoLast_; - - std::unique_ptr product(new LHERunInfoProduct(*runInfo_->getHEPRUP())); - std::for_each(runInfo_->getHeaders().begin(), - runInfo_->getHeaders().end(), - std::bind(&LHERunInfoProduct::addHeader, product.get(), std::placeholders::_1)); - std::for_each(runInfo_->getComments().begin(), - runInfo_->getComments().end(), - std::bind(&LHERunInfoProduct::addComment, product.get(), std::placeholders::_1)); - - // keep a copy around in case of merging - runInfoProducts_.emplace_back(new LHERunInfoProduct(*product)); - wasMerged = false; - - run.put(std::move(product)); - - runInfo_.reset(); - } } +void ExternalLHEProducer::beginRun(edm::Run const& run, edm::EventSetup const& es) {} // ------------ method called when ending the processing of a run ------------ -void ExternalLHEProducer::endRunProduce(edm::Run& run, edm::EventSetup const& es) { - if (!runInfoProducts_.empty()) { - std::unique_ptr product(runInfoProducts_.front().release()); - runInfoProducts_.pop_front(); - run.put(std::move(product)); - } - +void ExternalLHEProducer::endRun(edm::Run const& run, edm::EventSetup const& es) { nextEvent(); if (partonLevel_) { throw edm::Exception(edm::errors::EventGenerationFailure) @@ -581,6 +535,36 @@ void ExternalLHEProducer::fillDescriptions(edm::ConfigurationDescriptions& descr descriptions.addDefault(desc); } +std::unique_ptr ExternalLHEProducer::generateRunInfo(std::vector const& iFiles) const { + std::unique_ptr retValue; + //read each file in turn and only get the header info + for (auto const& file : iFiles) { + unsigned int skip = 0; + std::vector infiles(1, file); + auto reader = std::make_unique(infiles, skip); + auto parton = reader->next(); + if (!parton) { + break; + } + auto runInfo = parton->getRunInfo(); + LHERunInfoProduct product(*runInfo->getHEPRUP()); + + std::for_each(runInfo->getHeaders().begin(), + runInfo->getHeaders().end(), + std::bind(&LHERunInfoProduct::addHeader, product, std::placeholders::_1)); + std::for_each(runInfo->getComments().begin(), + runInfo->getComments().end(), + std::bind(&LHERunInfoProduct::addComment, product, std::placeholders::_1)); + if (not retValue) { + retValue = std::make_unique(std::move(product)); + } else { + retValue->mergeProduct(product); + } + } + + return retValue; +} + void ExternalLHEProducer::nextEvent() { if (partonLevel_) return; @@ -598,14 +582,6 @@ void ExternalLHEProducer::nextEvent() { partonLevel_ = reader_->next(&newFileOpened); } while (newFileOpened && !partonLevel_); } - if (!partonLevel_) - return; - - std::shared_ptr runInfoThis = partonLevel_->getRunInfo(); - if (runInfoThis != runInfoLast_) { - runInfo_ = runInfoThis; - runInfoLast_ = runInfoThis; - } } //define this as a plug-in diff --git a/GeneratorInterface/LHEInterface/plugins/LHESource.cc b/GeneratorInterface/LHEInterface/plugins/LHESource.cc index fa3362b081866..e3601a4012659 100644 --- a/GeneratorInterface/LHEInterface/plugins/LHESource.cc +++ b/GeneratorInterface/LHEInterface/plugins/LHESource.cc @@ -115,7 +115,7 @@ void LHESource::putRunInfoProduct(edm::RunPrincipal& iRunPrincipal) { if (runInfoProductLast_) { auto product = std::make_unique(*runInfoProductLast_); std::unique_ptr rdp(new edm::Wrapper(std::move(product))); - iRunPrincipal.put(lheProvenanceHelper_.runProductBranchDescription_, std::move(rdp)); + iRunPrincipal.putOrMerge(lheProvenanceHelper_.runProductBranchDescription_, std::move(rdp)); } } 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/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/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/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/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/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/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml index 982a013ac1c23..350081a97ee46 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021.xml @@ -25,7 +25,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -359,7 +359,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml index 2f49bfb9f0dcb..27df4d10c9cd2 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus05Percent.xml @@ -230,7 +230,7 @@ - + @@ -359,7 +359,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml index 81f4821eea96c..14f76d7bc2eea 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatMinus10Percent.xml @@ -230,7 +230,7 @@ - + @@ -359,7 +359,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml index bd9a2cec74572..4fae7d8c6e643 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus05Percent.xml @@ -230,7 +230,7 @@ - + @@ -359,7 +359,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml index 16852695286f7..8c3823c4c9e59 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021FlatPlus10Percent.xml @@ -230,7 +230,7 @@ - + @@ -359,7 +359,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml index 07bc6511c27f4..2e9a1fd37418b 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2021ZeroMaterial.xml @@ -230,7 +230,7 @@ - + @@ -359,7 +359,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D60.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D60.xml index f13c360fcee05..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/cmsExtendedGeometry2026D71.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D71.xml index a107e9708a7ac..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/cmsExtendedGeometry2026D74.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D74.xml index 136c5b85a09a9..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 index e63558e2a691f..530bfeeace755 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D75.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D75.xml @@ -52,7 +52,7 @@ - + @@ -102,7 +102,7 @@ - + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml index 1f3c602f758af..3b392a7b84a2e 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D76.xml @@ -52,7 +52,7 @@ - + @@ -102,7 +102,7 @@ - + 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/dd4hep/cmsExtendedGeometry2026D80.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D80.xml new file mode 100644 index 0000000000000..191e51ba964e0 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D80.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D81.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D81.xml new file mode 100644 index 0000000000000..3ba8b48d3dc20 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D81.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py index 117ad57873106..f6f2f6cf06d23 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus05PercentXML_cfi.py @@ -231,7 +231,7 @@ '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/v1/hcalSimNumbering.xml', @@ -362,7 +362,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/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py index 09acb0f15c6d8..a41a3051a90a6 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatMinus10PercentXML_cfi.py @@ -231,7 +231,7 @@ '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/v1/hcalSimNumbering.xml', @@ -362,7 +362,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/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py index a425db1e90b70..c8f975766fc33 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus05PercentXML_cfi.py @@ -231,7 +231,7 @@ '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/v1/hcalSimNumbering.xml', @@ -362,7 +362,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/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py index 8b49320d678c7..ce736f4b9f258 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021FlatPlus10PercentXML_cfi.py @@ -231,7 +231,7 @@ '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/v1/hcalSimNumbering.xml', @@ -362,7 +362,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/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py index 5077825ddc868..b727645b9079f 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021XML_cfi.py @@ -26,7 +26,7 @@ '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/pixfwdMaterials/2021/v2/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v3/pixfwdMaterials.xml', 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdCylinder.xml', 'Geometry/TrackerCommonData/data/PhaseI/v2/pixfwdDisks.xml', @@ -231,7 +231,7 @@ '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/v1/hcalSimNumbering.xml', @@ -362,7 +362,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/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py index a1289fd9b7d82..11876df440471 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2021ZeroMaterialXML_cfi.py @@ -231,7 +231,7 @@ '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/v1/hcalSimNumbering.xml', @@ -362,7 +362,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/2021/v1/CaloUtil.xml', 'Geometry/MuonSimData/data/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D60XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D60XML_cfi.py index bf6bfaebdb2d1..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/2026/v5/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/cmsExtendedGeometry2026D71XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D71XML_cfi.py index e352733c4d56a..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/2026/v2/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/cmsExtendedGeometry2026D74XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D74XML_cfi.py index b8134ec812c12..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/2026/v2/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 index de16cad5793e4..1f08ffced3064 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D75XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D75XML_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/2026/v2/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/cmsExtendedGeometry2026D76XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D76XML_cfi.py index 817ebaf4c477f..4a2cee92e3932 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D76XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D76XML_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/2026/v2/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/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/cmsExtendedGeometry2026D80XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D80XML_cfi.py new file mode 100644 index 0000000000000..3c62f3b439999 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D80XML_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_IT702_2021_03/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_IT702_2021_03/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/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_IT702_2021_03/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/cmsExtendedGeometry2026D81XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D81XML_cfi.py new file mode 100644 index 0000000000000..e54f9bf2cb626 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D81XML_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_IT702_2021_03/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_IT703_2021_03/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/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_IT702_2021_03/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/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/CaloTopology/interface/HGCalTopology.h b/Geometry/CaloTopology/interface/HGCalTopology.h index 4d2abbdcbf8ec..708c408b9c2be 100644 --- a/Geometry/CaloTopology/interface/HGCalTopology.h +++ b/Geometry/CaloTopology/interface/HGCalTopology.h @@ -122,14 +122,15 @@ class HGCalTopology : public CaloSubdetectorTopology { } bool tileTrapezoid() const { - return ((mode_ == HGCalGeometryMode::Trapezoid) || (mode_ == HGCalGeometryMode::TrapezoidFile)); + return ((mode_ == HGCalGeometryMode::Trapezoid) || (mode_ == HGCalGeometryMode::TrapezoidFile) || + (mode_ == HGCalGeometryMode::TrapezoidModule)); } bool waferHexagon6() const { return ((mode_ == HGCalGeometryMode::Hexagon) || (mode_ == HGCalGeometryMode::HexagonFull)); } bool waferHexagon8() const { return ((mode_ == HGCalGeometryMode::Hexagon8) || (mode_ == HGCalGeometryMode::Hexagon8Full) || - (mode_ == HGCalGeometryMode::Hexagon8File)); + (mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module)); } private: @@ -152,7 +153,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/src/HcalTopology.cc b/Geometry/CaloTopology/src/HcalTopology.cc index 6fd4317d08524..0f5cc39e845e0 100644 --- a/Geometry/CaloTopology/src/HcalTopology.cc +++ b/Geometry/CaloTopology/src/HcalTopology.cc @@ -245,7 +245,8 @@ bool HcalTopology::validHT(const HcalTrigTowerDetId& id) const { if (id.ietaAbs() > lastHBRing_ && id.ietaAbs() < firstHFRing_) return false; } - if (id.version() == 0) { + // Version 2 TPs should be for HBHE when using 1TS filter scheme + if (id.version() == 0 or id.version() == 2) { if (id.ietaAbs() > 28) { if (triggerMode_ >= HcalTopologyMode::TriggerMode_2017) return false; @@ -265,8 +266,8 @@ bool HcalTopology::validHT(const HcalTrigTowerDetId& id) const { return false; if (id.ietaAbs() > 39 && ((id.iphi() % 4) != 3)) return false; - } else if (id.version() > 1) { - // only versions 0 and 1 are supported + } else if (id.version() > 2) { + // only versions 0, 1, and 2 are supported return false; } 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/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 d09163e395024..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() << ":" << copyOne << " positioned in " << parent().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,20 +1646,30 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(sideLog, spmName(), icopy, sideddtra, sideddrot); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << sideLog.name() << ":" << icopy << " positioned in " << spmName(); + 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() << ":" << icopy << " positioned in " << spmName(); + 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 } } } @@ -1670,7 +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() << ":" << (iphi + 1) << " positioned in " << barName(); + edm::LogVerbatim("EBGeomX") << spmLog.name() << ":" << (iphi + 1) << " positioned in " << barName() << " at " + << myTran << " with rotation"; #endif } } @@ -1686,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 << ":" << copyOne << " positioned in " << spmLog.name(); + edm::LogVerbatim("EBGeomX") << ilyDDName << ":" << copyOne << " positioned in " << spmLog.name() << " at " + << DDTranslation(0, 0, ilyLength / 2) << " with no rotation"; #endif DDLogicalPart ilyPipeLog[200]; @@ -1699,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 << ":" << copyOne << " positioned in " << pName; + 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(), @@ -1738,7 +1810,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyDiffLength() / 2 + ilyDiffOff()), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyDiffName() << ":" << copyOne << " positioned in " << ilyFanOutName(); + 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(), @@ -1746,20 +1820,27 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyBndlLength() / 2 + ilyBndlOff()), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << ilyBndlName() << ":" << copyOne << " positioned in " << ilyFanOutName(); + 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") << xilyLog.name() << ":" << copyOne << " positioned in " << ilyLog.name(); + 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}; @@ -1778,7 +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() << ":" << ptmCopy << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") + << ilyPTMLog.name() << ":" << ptmCopy << " positioned in " << xilyLog.name() << " at " + << DDTranslation(xx, yy, vecIlyPTMZ()[ilyPTM] - ilyLength / 2) << " with rotation"; #endif } } @@ -1797,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() << ":" << fanOutCopy << " positioned in " << xilyLog.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); @@ -1814,7 +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() << ":" << femCopy << " positioned in " << xilyLog.name(); + edm::LogVerbatim("EBGeomX") + << ilyFEMLog.name() << ":" << femCopy << " positioned in " << xilyLog.name() << " at " + << DDTranslation(xx, yy, vecIlyFEMZ()[ilyFEM] - ilyLength / 2) << " with rotation"; #endif } } @@ -1838,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() << ":" << copyNum[type] << " positioned in " << xilyLog.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 } } @@ -1860,10 +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() << ":" << copyOne << " positioned in " << spmLog.name(); + edm::LogVerbatim("EBGeomX") << clyrLog.name() << ":" << copyOne << " positioned in " << spmLog.name() << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif // Begin Alveolar Wedge parent ------------------------------------------------------ //---------------- @@ -1940,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); @@ -1963,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); @@ -1990,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], @@ -2005,7 +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() << ":" << copyOne << " positioned in " << fawLog.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, @@ -2016,7 +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() << ":" << copyTwo << " positioned in " << fawLog.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, @@ -2040,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() << ":" << iPhi << " positioned in " << spmLog.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 } @@ -2081,7 +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() << ":" << copyOne << " positioned in " << hawRLog.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 @@ -2151,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); @@ -2165,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); @@ -2173,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); @@ -2181,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); @@ -2189,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); @@ -2197,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); @@ -2205,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); @@ -2331,18 +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() << ":" << copyOne << " positioned in " << clrLog.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() << ":" << copyAGL << " positioned in " << bsiLog.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() << ":" << copyAND << " positioned in " << bsiLog.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, @@ -2350,7 +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() << ":" << copyAPD << " positioned in " << bsiLog.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, @@ -2358,15 +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() << ":" << copyATJ << " positioned in " << bsiLog.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() << ":" << copyBSi << " positioned in " << cerLog.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() << ":" << copySGL << " positioned in " << capLog.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, @@ -2377,7 +2550,11 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { -sglThick() - cerThick() / 2. + capThick() / 2.), DDRotation()); #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 " + << DDTranslation(trapCry.bl1() - (0 == ijkl ? apdX1() : apdX2()), + (trapCry.h1() - apdZ()), + (-sglThick() - cerThick() / 2. + capThick() / 2.)) + << " with no rotation"; #endif } cpv.position(capLog, @@ -2386,7 +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() << ":" << copyCap << " positioned in " << clrLog.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 } @@ -2398,7 +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() << ":" << copyOne << " positioned in " << wrapLog.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 @@ -2411,7 +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() << ":" << copyOne << " positioned in " << wallLog.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()); @@ -2440,14 +2622,14 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { for (unsigned int etaAlv(1); etaAlv <= nCryPerAlvEta(); ++etaAlv) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeomX") << "theta=" << theta / deg << ", sidePrime=" << sidePrime - << ", frontPrime=" << frontPrime << ", zeta=" << zeta << ", delta=" << delta - << ", zee=" << zee; + edm::LogVerbatim("EcalGeom") << "theta=" << theta / deg << ", sidePrime=" << sidePrime + << ", frontPrime=" << frontPrime << ", zeta=" << zeta << ", delta=" << delta + << ", zee=" << zee; #endif zee += 0.075 * mm + (side * cos(zeta) + trapWall.h() - sidePrime) / sin(theta); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeomX") << "New zee=" << zee; + edm::LogVerbatim("EcalGeom") << "New zee=" << zee; #endif // make transform for placing enclosed crystal @@ -2472,7 +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() << ":" << etaAlv << " positioned in " << hawRLog.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; @@ -2525,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); @@ -2533,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); @@ -2540,7 +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() << ":" << copyOne << " positioned in " << backPlateName(); + edm::LogVerbatim("EBGeomX") << backPlate2Log.name() << ":" << copyOne << " positioned in " << backPlateName() + << " at " << backPlate2Tra << " with no rotation"; #endif cpv.position(backPlateLog, spmName(), @@ -2548,7 +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() << ":" << copyOne << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << backPlateLog.name() << ":" << copyOne << " positioned in " << spmName() << " at " + << (outtra + backPlateTra) << " with rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2586,7 +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() << ":" << copyOne << " positioned in " << spmName(); + 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, @@ -2595,7 +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() << ":" << copyTwo << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyTwo << " positioned in " << spmName() << " at " + << (outtra + backSideTra2) << " with rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2617,15 +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() << ":" << copyOne << " positioned in " << mBManifName(); + edm::LogVerbatim("EBGeomX") << mBManifWaLog.name() << ":" << copyOne << " positioned in " << mBManifName() + << " at " << DDTranslation(0, 0, 0) << " with no rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2643,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); @@ -2654,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, @@ -2666,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], @@ -2675,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() << ":" << midSlotCopy << " positioned in " - << gName; + 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], @@ -2686,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() << ":" << midSlotCopy << " positioned in " - << gName; + 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 } @@ -2700,7 +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() << ":" << edgeSlotCopy << " positioned in " << gName; + 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, @@ -2710,13 +2944,19 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " << gName; + 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() << ":" << iGr << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << grilleLog.name() << ":" << iGr << " positioned in " << spmName() << " at " + << gTra << " with no rotation"; #endif } if ((0 != iGr % 2) && (0 != mBManifHere())) { @@ -2728,7 +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() << ":" << iGr << " positioned in " << spmName(); + 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(), @@ -2738,7 +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() << ":" << (iGr - 1) << " positioned in " << spmName(); + 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 } } @@ -2757,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() << ":" << copyOne << " positioned in " - << backCoolBarName(); + 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() << ":" << copyOne << " positioned in " - << backCoolBarSSName(); + edm::LogVerbatim("EBGeomX") << backCoolBarWaLog.name() << ":" << copyOne << " positioned in " + << backCoolBarSSName() << " at " << backCoolBarWaTra << " with no rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2797,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) { @@ -2804,12 +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() << ":" << copyOne << " positioned in " << backVFEName(); + edm::LogVerbatim("EBGeomX") << backVFELyrLog.name() << ":" << copyOne << " positioned in " << backVFEName() + << " at " << (backVFELyrTra + offTra) << " with no rotation"; #endif offTra += 2 * backVFELyrTra; } @@ -2829,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() << ":" << copyOne << " positioned in " - << backCoolVFEName(); + edm::LogVerbatim("EBGeomX") << backCoolBarLog.name() << ":" << copyOne << " positioned in " << backCoolVFEName() + << " at " << DDTranslation() << " with no rotation"; #endif } if (0 != backCoolVFEHere()) { @@ -2844,7 +3118,9 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, backCoolBarThick() / 2. + thickVFE / 2.), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backVFELog.name() << ":" << copyOne << " positioned in " << backCoolVFEName(); + edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyOne << " positioned in " << backCoolVFEName() + << " at " << DDTranslation(0, 0, backCoolBarThick() / 2. + thickVFE / 2.) + << " with no rotation"; #endif } cpv.position(backVFELog, @@ -2853,7 +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() << ":" << copyTwo << " positioned in " << backCoolVFEName(); + edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyTwo << " positioned in " << backCoolVFEName() + << " at " << DDTranslation(0, 0, -backCoolBarThick() / 2. - thickVFE / 2.) + << " with rotation"; #endif //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2890,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( @@ -2899,7 +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() << ":" << (iMod + 1) << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << backCoolLog.name() << ":" << (iMod + 1) << " positioned in " << spmName() + << " at " << (outtra + backPlateTra + bCoolTra) << " with no rotation"; #endif } //=== @@ -2910,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, @@ -2920,7 +3207,12 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backCoolTankLog.name() << ":" << copyOne << " positioned in " << backCName; + 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 } @@ -2929,15 +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() << ":" << copyOne << " positioned in " << bTankName; + 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, @@ -2948,7 +3250,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backBracketLog.name() << ":" << copyOne << " positioned in " << backCName; + 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 } @@ -2970,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); @@ -2978,7 +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() << ":" << copyOne << " positioned in " << backCName; + edm::LogVerbatim("EBGeomX") << bLog.name() << ":" << copyOne << " positioned in " << backCName << " at " + << (bSumTra + bTra) << " with no rotation"; #endif } bSumTra += 2 * bTra; @@ -2993,13 +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() << ":" << copyOne << " positioned in " << backCName; + 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); } @@ -3010,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() << ":" << copyOne << " positioned in " << mBName; + 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 { @@ -3030,7 +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() << ":" << (2 * j + 1) << " positioned in " << backCName; + 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 } } @@ -3046,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, @@ -3053,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); @@ -3065,7 +3405,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(backPipeLog, spmName(), copyOne, bPipeTra1, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPipeLog.name() << ":" << copyOne << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyOne << " positioned in " << spmName() + << " at " << bPipeTra1 << " with no rotation"; #endif const DDTranslation bPipeTra2(bPipeTra1.x(), @@ -3074,11 +3415,13 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(backPipeLog, spmName(), copyTwo, bPipeTra2, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << backPipeLog.name() << ":" << copyTwo << " positioned in " << spmName(); + 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() << ":" << copyOne << " positioned in " << bPipeName; + edm::LogVerbatim("EBGeomX") << backInnerLog.name() << ":" << copyOne << " positioned in " << bPipeName + << " at " << DDTranslation() << " with no rotation"; #endif } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -3094,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); @@ -3104,7 +3451,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(dryAirTubeLog, spmName(), copyOne, dryAirTubeTra1, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " << spmName() + << " at " << dryAirTubeTra1 << " with no rotation"; #endif const DDTranslation dryAirTubeTra2( @@ -3114,7 +3462,8 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { cpv.position(dryAirTubeLog, spmName(), copyTwo, dryAirTubeTra2, DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " << spmName() + << " at " << dryAirTubeTra2 << " with no rotation"; #endif } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -3132,7 +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() << ":" << iCVFECopy << " positioned in " << backCName; + edm::LogVerbatim("EBGeomX") << backCoolVFELog.name() << ":" << iCVFECopy << " positioned in " << backCName + << " at " << cTra << " with no rotation"; #endif cTra += DDTranslation(0, 0, backCBStdSep()); } @@ -3168,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()); @@ -3177,7 +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() << ":" << copyOne << " positioned in " << spmName(); + edm::LogVerbatim("EBGeomX") << patchLog.name() << ":" << copyOne << " positioned in " << spmName() << " at " + << patchTra << " with no rotation"; #endif } DDTranslation pTra(-patchParms[0], 0, 0); @@ -3186,14 +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() << ":" << copyOne << " positioned in " << patchPanelName(); + edm::LogVerbatim("EBGeomX") << pLog.name() << ":" << copyOne << " positioned in " << patchPanelName() << " at " + << pTra << " with no rotation"; #endif pTra += DDTranslation(vecPatchPanelThick()[j] / 2, 0 * mm, 0 * mm); } @@ -3214,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, @@ -3231,11 +3602,17 @@ void DDEcalBarrelNewAlgo::execute(DDCompactView& cpv) { DDTranslation(0, 0, pincerEnvLength() / 2 - pincerBlkLength() / 2), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << blkLog.name() << ":" << copyOne << " positioned in " << pincerEnvName(); + 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( @@ -3246,11 +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() << ":" << copyOne << " positioned in " << pincerBlkName(); + 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, @@ -3259,13 +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() << ":" << copyOne << " positioned in " << pincerCutName(); + 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()); @@ -3276,7 +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() << ":" << copyOne << " positioned in " << pincerEnvName(); + 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, @@ -3285,7 +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() << ":" << (1 + iEnv) << " positioned in " << pincerRodName(); + edm::LogVerbatim("EBGeomX") << envLog.name() << ":" << (1 + iEnv) << " positioned in " << pincerRodName() + << " at " + << DDTranslation( + 0, 0, -ilyLength / 2. + vecPincerEnvZOff()[iEnv] - pincerEnvLength() / 2.) + << " with no rotation"; #endif } @@ -3306,7 +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() << ":" << (1 + iRod) << " positioned in " << xilyName; + edm::LogVerbatim("EBGeomX") << rodLog.name() << ":" << (1 + iRod) << " positioned in " << xilyName << " at " + << rodTra << " with rotation"; #endif } } @@ -3342,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()); } @@ -3399,7 +3807,8 @@ void DDEcalBarrelNewAlgo::web(unsigned int iWeb, DDTranslation(0, 0, 0), DDRotation()); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeom") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrDDName; + edm::LogVerbatim("EBGeomX") << webPlLog.name() << ":" << copyOne << " positioned in " << webClrDDName << " at " + << DDTranslation(0, 0, 0) << " with no rotation"; #endif const Trap::VertexList vWeb(trapWebClr.vertexList()); @@ -3415,9 +3824,9 @@ void DDEcalBarrelNewAlgo::web(unsigned int iWeb, const Pt3D wedge1(wedge3 + Pt3D(trapWebClr.a(), 0, 0)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeomX") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3]; + edm::LogVerbatim("EcalGeom") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3]; - edm::LogVerbatim("EcalGeomX") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3; + edm::LogVerbatim("EcalGeom") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3; #endif const Tf3D tForm(vWeb[0], vWeb[2], vWeb[3], wedge1, wedge2, wedge3); @@ -3428,7 +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() << ":" << copyOne << " positioned in " << logPar.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/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 35b324ffdf070..636a7357a2a0d 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc @@ -3,6 +3,7 @@ #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" @@ -449,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(':'); @@ -678,7 +675,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ily.bndlName = myns + args.str("IlyBndlName"); ily.bndlMat = args.str("IlyBndlMat"); ily.bndlOff = args.dble("IlyBndlOff"); - ily.bndlLengthHalf = args.dble("IlyBndlLength"); + 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"); @@ -897,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", @@ -907,14 +911,24 @@ 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()); @@ -923,11 +937,20 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * spm.cutThick, 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; @@ -950,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]) + @@ -971,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 " << spmLog.name(); + 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 " << spmLog.name(); + 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 " << spmLog.name(); + 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 " << spmLog.name(); + 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)); @@ -1017,7 +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") << spmLog.name() << ":" << (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 } } @@ -1036,10 +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 " << spmLog.name(); + 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) { @@ -1052,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)); @@ -1061,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, 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, 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; @@ -1101,11 +1188,17 @@ 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}; @@ -1123,7 +1216,10 @@ 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 } } @@ -1140,8 +1236,10 @@ 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); @@ -1156,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 } } @@ -1174,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( @@ -1184,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 } } @@ -1207,10 +1311,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext cri.emplace_back(spm.vecRMin[2]); 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 " << spmLog.name(); + edm::LogVerbatim("EBGeomX") << clyrLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + << " at (0,0,0) with no rotation"; #endif // Begin Alveolar Wedge parent ------------------------------------------------------ //---------------- @@ -1279,6 +1390,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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]); @@ -1300,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,13 +1442,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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], @@ -1340,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); @@ -1368,7 +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 " << spmLog.name(); + 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 } } @@ -1410,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 @@ -1477,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); @@ -1585,35 +1758,52 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Vec3 cryToClr(0., 0., 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, 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, 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, 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, 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, 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, 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) { @@ -1623,19 +1813,27 @@ 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, 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, 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 @@ -1646,7 +1844,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext copyOne, 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()); @@ -1696,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()); @@ -1711,8 +1912,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Pt3D wedge2(wedge3 + Pt3D(0, trapWebClr.h() * cos(theta), -trapWebClr.h() * sin(theta))); const Pt3D wedge1(wedge3 + Pt3D(trapWebClr.a(), 0, 0)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeomX") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3]; - edm::LogVerbatim("EcalGeomX") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3; + edm::LogVerbatim("EcalGeom") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3]; + edm::LogVerbatim("EcalGeom") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3; #endif const Tf3D tForm(vWeb[0], vWeb[2], vWeb[3], wedge1, wedge2, wedge3); @@ -1724,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]; @@ -1732,9 +1936,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int etaAlv(1); etaAlv <= alv.nCryPerAlvEta; ++etaAlv) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeomX") << "theta=" << convertRadToDeg(theta) << ", sidePrime=" << sidePrime - << ", frontPrime=" << frontPrime << ", zeta=" << zeta << ", delta=" << delta - << ", zee=" << zee; + edm::LogVerbatim("EcalGeom") << "theta=" << convertRadToDeg(theta) << ", sidePrime=" << sidePrime + << ", frontPrime=" << frontPrime << ", zeta=" << zeta << ", delta=" << delta + << ", zee=" << zee; #endif zee += 0.075 * dd4hep::mm + (side * cos(zeta) + trapWall.h() - sidePrime) / sin(theta); @@ -1761,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; @@ -1807,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()); @@ -1822,8 +2030,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Pt3D wedge2(wedge3 + Pt3D(0, trapWebClr.h() * cos(theta), -trapWebClr.h() * sin(theta))); const Pt3D wedge1(wedge3 + Pt3D(trapWebClr.a(), 0, 0)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalGeomX") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3]; - edm::LogVerbatim("EcalGeomX") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3; + edm::LogVerbatim("EcalGeom") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3]; + edm::LogVerbatim("EcalGeom") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3; #endif const Tf3D tForm(vWeb[0], vWeb[2], vWeb[3], wedge1, wedge2, wedge3); @@ -1835,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 } @@ -1868,28 +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, 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, -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 " << spmLog.name(); + 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 } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1926,7 +2152,10 @@ 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 " << spmLog.name(); + 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, -back.plateWidth / 2 + back.sideYOff2, 1 * dd4hep::mm); spmLog.placeVolume( @@ -1934,7 +2163,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 " << spmLog.name(); + 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 } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1955,14 +2187,23 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1979,7 +2220,13 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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); @@ -1990,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, @@ -2002,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( @@ -2010,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], @@ -2019,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 } @@ -2031,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, @@ -2040,14 +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 " << spmLog.name(); + 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 } @@ -2059,7 +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 " << spmLog.name(); + 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, @@ -2068,7 +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 " << spmLog.name(); + 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 } } @@ -2085,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 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2122,20 +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.); + 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 " - << backVFELog.name(); + 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; } @@ -2154,20 +2474,25 @@ 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); +#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") << backVFELog.name() << ":" << 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, @@ -2175,7 +2500,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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") << backVFELog.name() << ":" << 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 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2210,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( @@ -2220,7 +2551,11 @@ 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 " << spmLog.name(); + 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 } @@ -2229,7 +2564,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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, @@ -2239,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, @@ -2267,16 +2622,28 @@ 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])); @@ -2286,7 +2653,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 } @@ -2300,13 +2670,20 @@ 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, 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, 0); } @@ -2316,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 @@ -2335,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 } } @@ -2353,6 +2741,13 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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)); @@ -2363,20 +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 " << spmLog.name(); + 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 " << spmLog.name(); + 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 } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2392,6 +2793,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid dryAirTubeSolid = Tube(dryAirTubName, dryAirTube.innDiam / 2, dryAirTube.outDiam / 2, pipeLength / 2, 0_deg, 360_deg); +#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], @@ -2400,7 +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 " << spmLog.name(); + 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(), @@ -2409,7 +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 " << spmLog.name(); + 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 } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -2427,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); } @@ -2463,13 +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 * 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 " << spmLog.name(); + 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 } @@ -2477,12 +2897,18 @@ 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, 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, 0); @@ -2503,23 +2929,41 @@ 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, 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, @@ -2527,33 +2971,53 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Position( +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)); #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, 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 } @@ -2570,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/DDEcalPreshowerAlgo.cc b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc index 323f7198917be..fabe6d3cf75ac 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalPreshowerAlgo.cc @@ -1,6 +1,7 @@ #include "DD4hep/DetFactoryHelper.h" #include "DetectorDescription/DDCMS/interface/DDPlugins.h" #include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h" +#include "DetectorDescription/DDCMS/interface/DDutils.h" #include "DataFormats/Math/interface/angle_units.h" #include "DD4hep/Shapes.h" @@ -12,6 +13,8 @@ using namespace cms; using namespace dd4hep; using namespace angle_units::operators; +//#define EDM_ML_DEBUG + namespace { struct EcalPreshower { @@ -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 @@ -207,6 +214,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 * dd4hep::mm - es.absAlX_subtr1_Yshift; @@ -224,6 +236,15 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 * dd4hep::mm - es.absAlX_subtr1_Xshift; @@ -250,7 +271,25 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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) { @@ -303,7 +342,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Solid solid_b = Box(dd_tmp_name_b, bdx, bdy, 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 * dd4hep::cm) @@ -320,22 +364,56 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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))); +#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 } } @@ -347,17 +425,44 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 * 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)); +#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; } @@ -441,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 @@ -452,10 +600,14 @@ 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 * dd4hep::mm; @@ -471,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.; @@ -483,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.; @@ -496,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.; @@ -505,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))); @@ -519,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; @@ -527,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.; @@ -534,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))); } @@ -551,10 +737,14 @@ 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 * dd4hep::mm; @@ -569,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.; @@ -578,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.; @@ -590,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))); @@ -607,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.; @@ -619,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.; @@ -629,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))); @@ -642,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.; @@ -654,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.; @@ -667,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.; @@ -676,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))); @@ -691,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; @@ -699,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))); } @@ -729,6 +983,15 @@ 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 * dd4hep::mm + es.zwedge_ceramic_diff; @@ -738,6 +1001,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 } } } @@ -759,6 +1030,15 @@ 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 * dd4hep::mm + es.zwedge_ceramic_diff; @@ -768,6 +1048,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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 } } } @@ -836,11 +1124,21 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 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++) @@ -880,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); @@ -887,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 } } } @@ -901,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/ForwardCommonData/python/hfnoseParametersInitialization_cfi.py b/Geometry/ForwardCommonData/python/hfnoseParametersInitialization_cfi.py index 40d59a31facf7..c589884e80b74 100644 --- a/Geometry/ForwardCommonData/python/hfnoseParametersInitialization_cfi.py +++ b/Geometry/ForwardCommonData/python/hfnoseParametersInitialization_cfi.py @@ -9,6 +9,7 @@ nameW = cms.string("HFNoseWafer"), nameC = cms.string("HFNoseCell"), nameT = cms.string("HFNose"), + nameX = cms.string("HGCalHFNoseSensitive"), ) from Configuration.ProcessModifiers.dd4hep_cff import dd4hep 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/GEMGeometryParsFromDD.cc b/Geometry/GEMGeometryBuilder/src/GEMGeometryParsFromDD.cc index 3f4c4db97aede..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,9 +17,14 @@ #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 "DetectorDescription/DDCMS/interface/DDFilteredView.h" +#include "DetectorDescription/DDCMS/interface/DDCompactView.h" +#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h" + #include #include @@ -23,6 +32,8 @@ GEMGeometryParsFromDD::GEMGeometryParsFromDD() {} GEMGeometryParsFromDD::~GEMGeometryParsFromDD() {} +// DDD + void GEMGeometryParsFromDD::build(const DDCompactView* cview, const MuonGeometryConstants& muonConstants, RecoIdealGeometry& rgeo) { @@ -43,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) { @@ -95,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()}); } @@ -134,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()}); } @@ -172,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()}; } @@ -185,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/ME0GeometryParsFromDD.cc b/Geometry/GEMGeometryBuilder/src/ME0GeometryParsFromDD.cc index d6fbe9f642b62..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,7 +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 "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, @@ -29,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); @@ -82,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()}); } @@ -93,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()}); } @@ -122,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()}); } @@ -133,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()}; } @@ -145,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/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/testHGCalV15.xml b/Geometry/HGCalCommonData/data/dd4hep/testHGCalV15.xml new file mode 100644 index 0000000000000..c19b4e431a436 --- /dev/null +++ b/Geometry/HGCalCommonData/data/dd4hep/testHGCalV15.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcal/v11/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v11/hgcal.xml index f33d5e6791e17..55ce69779d7ad 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v11/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v11/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -171,10 +171,10 @@ - + - + diff --git a/Geometry/HGCalCommonData/data/hgcal/v11m20/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v11m20/hgcal.xml index 80acf2b194bd6..a651b2321fa0b 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v11m20/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v11m20/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -171,10 +171,10 @@ - + - + diff --git a/Geometry/HGCalCommonData/data/hgcal/v11p20/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v11p20/hgcal.xml index 88effe79e4348..0bd42bb8e97f7 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v11p20/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v11p20/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -171,10 +171,10 @@ - + - + diff --git a/Geometry/HGCalCommonData/data/hgcal/v12/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v12/hgcal.xml index 5836596562be9..d0c99f67fc772 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v12/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v12/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -177,10 +177,10 @@ - + - + diff --git a/Geometry/HGCalCommonData/data/hgcal/v13/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v13/hgcal.xml index 4fa27227588fd..0ae42dde2a74a 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v13/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v13/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -173,10 +173,10 @@ - + - + diff --git a/Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml index dd4ee83e97d1c..4e5e50302b334 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v14/hgcal.xml @@ -1,5 +1,5 @@ - + @@ -109,7 +109,7 @@ - + diff --git a/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml index 7a48a55cbc1bd..7acd3d00380c3 100644 --- a/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml +++ b/Geometry/HGCalCommonData/data/hgcal/v15/hgcal.xml @@ -112,7 +112,7 @@ - + diff --git a/Geometry/HGCalCommonData/data/hgcalCons/v15/hgcalCons.xml b/Geometry/HGCalCommonData/data/hgcalCons/v15/hgcalCons.xml new file mode 100644 index 0000000000000..c696ebea261e7 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalCons/v15/hgcalCons.xml @@ -0,0 +1,199 @@ + + + + + + + [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:zHGCalEE1], [hgcal:zHGCalHEsil1], [hgcal:zHGCalHEmix1], + [hgcal:zHGCalHEmix6] + + 0, 0, 0, 0, 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, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v10/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v10/hgcalEE.xml index 22192f163b69e..9c6dab450d121 100644 --- a/Geometry/HGCalCommonData/data/hgcalEE/v10/hgcalEE.xml +++ b/Geometry/HGCalCommonData/data/hgcalEE/v10/hgcalEE.xml @@ -30,36 +30,36 @@ 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, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, 15 + 0, 2, 5, 6, 5, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, 15 - 0,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,-2 + 0,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v12/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v12/hgcalEE.xml index 22192f163b69e..9c6dab450d121 100644 --- a/Geometry/HGCalCommonData/data/hgcalEE/v12/hgcalEE.xml +++ b/Geometry/HGCalCommonData/data/hgcalEE/v12/hgcalEE.xml @@ -30,36 +30,36 @@ 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, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, 15 + 0, 2, 5, 6, 5, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, 15 - 0,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,-2 + 0,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml index a1374a0d68c92..e15d3904decc1 100644 --- a/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml +++ b/Geometry/HGCalCommonData/data/hgcalEE/v14/hgcalEE.xml @@ -30,36 +30,36 @@ 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, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, - 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 12, 10, 11, 10, 11, 10, 13, 14, 13, 10, 11, 10, 11, 10, 12, 10, 9, 8, 7, 0, 15 + 0, 2, 5, 6, 5, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, + 0, 1, 2, 3, 4, 3, 2, 1, 7, 8, 9, 10, 11, 10, 11, 10, 12, 10, 13, 14, 13, 10, 12, 10, 11, 10, 11, 10, 9, 8, 7, 0, 15 - 0,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0,-2,-2,-2,-2,-2,-2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,-2 + 0,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2,-2,-2,-2,-2,-2, 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,-2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml b/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml index b19aa3ca70748..a3b2263380a36 100644 --- a/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml +++ b/Geometry/HGCalCommonData/data/hgcalEE/v15/hgcalEE.xml @@ -154,7 +154,7 @@ HGCalEEHardPointGap, HGCalEEAbsorberCopper, HGCalEEAbsorberStainlessSteel, HGCalEEAbsorberEpoxy1, HGCalEEAbsorberLead1, HGCalEEAbsorberEpoxy2, HGCalEEAbsorberLead2, HGCalEECoolingPlate, HGCalEECopperCover, - HGCalEEModuleF, HGCalEEModuleB + HGCalEELayerF, HGCalEELayerB 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] diff --git a/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml index fba46e1ac708e..7a37296e120da 100644 --- a/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml +++ b/Geometry/HGCalCommonData/data/hgcalHEmix/v15/hgcalHEmix.xml @@ -104,7 +104,7 @@ materials:Copper, materials:Air, materials:Copper HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, - HGCalHEMix, HGCalHECoolingPlate + HGCalHESiliconLayer, HGCalHECoolingPlate 35.0*mm, 66.0*mm, 3.7*mm, 1.1*mm, 8.6*mm, 6.1*mm diff --git a/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml b/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml index 7719bd48913c8..e6bf2e6322817 100644 --- a/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml +++ b/Geometry/HGCalCommonData/data/hgcalHEsil/v15/hgcalHEsil.xml @@ -87,7 +87,7 @@ materials:Copper, materials:Copper, materials:Air HGCalHEAbsorber1, HGCalHEAbsorber2, HGCalHEAirGap1, HGCalHECopperCover, - HGCalHECoolingPlate, HGCalHESiliconModule + HGCalHECoolingPlate, HGCalHESiliconLayer 40.0*mm, 35.0*mm, 3.7*mm, 1.1*mm, 6.1*mm, 8.6*mm diff --git a/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml b/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml index 397d2e844cd1d..0a38adcf89a0d 100644 --- a/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml +++ b/Geometry/HGCalCommonData/data/hgcalcell/v15/hgcalcell.xml @@ -207,27 +207,27 @@ - + HGCalHECellTrunc01Fine, HGCalHECellTrunc02Fine, HGCalHECellTrunc03Fine - HGCalHESensitiveTrunc01Fine, HGCalHESensitiveTrunc02Fine, - HGCalHESensitiveTrunc03Fine + HGCalHESiliconSensitiveTrunc01Fine, HGCalHESiliconSensitiveTrunc02Fine, + HGCalHESiliconSensitiveTrunc03Fine HGCalHECellExten01Fine, HGCalHECellExten02Fine, HGCalHECellExten03Fine - HGCalHESensitiveExten01Fine, HGCalHESensitiveExten02Fine, - HGCalHESensitiveExten03Fine + HGCalHESiliconSensitiveExten01Fine, HGCalHESiliconSensitiveExten02Fine, + HGCalHESiliconSensitiveExten03Fine HGCalHECellCorner01Fine, HGCalHECellCorner02Fine, HGCalHECellCorner03Fine, HGCalHECellCorner04Fine, HGCalHECellCorner05Fine, HGCalHECellCorner06Fine - HGCalHESensitiveCorner01Fine, HGCalHESensitiveCorner02Fine, - HGCalHESensitiveCorner03Fine, HGCalHESensitiveCorner04Fine, - HGCalHESensitiveCorner05Fine, HGCalHESensitiveCorner06Fine + HGCalHESiliconSensitiveCorner01Fine, HGCalHESiliconSensitiveCorner02Fine, + HGCalHESiliconSensitiveCorner03Fine, HGCalHESiliconSensitiveCorner04Fine, + HGCalHESiliconSensitiveCorner05Fine, HGCalHESiliconSensitiveCorner06Fine @@ -238,27 +238,27 @@ - + HGCalHECellTrunc01Coarse1, HGCalHECellTrunc02Coarse1, HGCalHECellTrunc03Coarse1 - HGCalHESensitiveTrunc01Coarse1, HGCalHESensitiveTrunc02Coarse1, - HGCalHESensitiveTrunc03Coarse1 + HGCalHESiliconSensitiveTrunc01Coarse1, HGCalHESiliconSensitiveTrunc02Coarse1, + HGCalHESiliconSensitiveTrunc03Coarse1
HGCalHECellExten01Coarse1, HGCalHECellExten02Coarse1, HGCalHECellExten03Coarse1 - HGCalHESensitiveExten01Coarse1, HGCalHESensitiveExten02Coarse1, - HGCalHESensitiveExten03Coarse1 + HGCalHESiliconSensitiveExten01Coarse1, HGCalHESiliconSensitiveExten02Coarse1, + HGCalHESiliconSensitiveExten03Coarse1
HGCalHECellCorner01Coarse1, HGCalHECellCorner02Coarse1, HGCalHECellCorner03Coarse1, HGCalHECellCorner04Coarse1, HGCalHECellCorner05Coarse1, HGCalHECellCorner06Coarse1 - HGCalHESensitiveCorner01Coarse1, HGCalHESensitiveCorner02Coarse1, - HGCalHESensitiveCorner03Coarse1, HGCalHESensitiveCorner04Coarse1, - HGCalHESensitiveCorner05Coarse1, HGCalHESensitiveCorner06Coarse1 + HGCalHESiliconSensitiveCorner01Coarse1, HGCalHESiliconSensitiveCorner02Coarse1, + HGCalHESiliconSensitiveCorner03Coarse1, HGCalHESiliconSensitiveCorner04Coarse1, + HGCalHESiliconSensitiveCorner05Coarse1, HGCalHESiliconSensitiveCorner06Coarse1
@@ -269,27 +269,27 @@ - + HGCalHECellTrunc01Coarse2, HGCalHECellTrunc02Coarse2, HGCalHECellTrunc03Coarse2 - HGCalHESensitiveTrunc01Coarse2, HGCalHESensitiveTrunc02Coarse2, - HGCalHESensitiveTrunc03Coarse2 + HGCalHESiliconSensitiveTrunc01Coarse2, HGCalHESiliconSensitiveTrunc02Coarse2, + HGCalHESiliconSensitiveTrunc03Coarse2
HGCalHECellExten01Coarse2, HGCalHECellExten02Coarse2, HGCalHECellExten03Coarse2 - HGCalHESensitiveExten01Coarse2, HGCalHESensitiveExten02Coarse2, - HGCalHESensitiveExten03Coarse2 + HGCalHESiliconSensitiveExten01Coarse2, HGCalHESiliconSensitiveExten02Coarse2, + HGCalHESiliconSensitiveExten03Coarse2
HGCalHECellCorner01Coarse2, HGCalHECellCorner02Coarse2, HGCalHECellCorner03Coarse2, HGCalHECellCorner04Coarse2, HGCalHECellCorner05Coarse2, HGCalHECellCorner06Coarse2 - HGCalHESensitiveCorner01Coarse2, HGCalHESensitiveCorner02Coarse2, - HGCalHESensitiveCorner03Coarse2, HGCalHESensitiveCorner04Coarse2, - HGCalHESensitiveCorner05Coarse2, HGCalHESensitiveCorner06Coarse2 + HGCalHESiliconSensitiveCorner01Coarse2, HGCalHESiliconSensitiveCorner02Coarse2, + HGCalHESiliconSensitiveCorner03Coarse2, HGCalHESiliconSensitiveCorner04Coarse2, + HGCalHESiliconSensitiveCorner05Coarse2, HGCalHESiliconSensitiveCorner06Coarse2
diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml index 86b232b0694a7..f2c7eb02d6e59 100644 --- a/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15f/hgcalwafer.xml @@ -212,7 +212,7 @@ HGCalHEMotherBoard0Fine, HGCalHEConnector0Fine, HGCalHEPCB0Fine, - HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESensitive0Fine, + HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESiliconSensitive0Fine, HGCalHEBasePlate0Fine hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, @@ -244,7 +244,7 @@ HGCalHEMotherBoard0Coarse1, HGCalHEConnector0Coarse1, HGCalHEPCB0Coarse1, - HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESensitive0Coarse1, + HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESiliconSensitive0Coarse1, HGCalHEBasePlate0Coarse1 hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, @@ -276,7 +276,7 @@ HGCalHEMotherBoard0Coarse2, HGCalHEConnector0Coarse2, HGCalHEPCB0Coarse2, - HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESensitive0Coarse2, + HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESiliconSensitive0Coarse2, HGCalHEBasePlate0Coarse2 hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml index 0a8f0f9efde9f..29a967d041e8d 100644 --- a/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v15p/hgcalwafer.xml @@ -247,7 +247,7 @@ 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, + HGCalHEEpoxy0Fine, HGCalHEKapton0Fine, HGCalHESiliconSensitive0Fine, HGCalHEBasePlate0Fine hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, @@ -283,7 +283,7 @@ 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, + HGCalHEEpoxy0Coarse1, HGCalHEKapton0Coarse1, HGCalHESiliconSensitive0Coarse1, HGCalHEBasePlate0Coarse1 hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, @@ -319,7 +319,7 @@ 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, + HGCalHEEpoxy0Coarse2, HGCalHEKapton0Coarse2, HGCalHESiliconSensitive0Coarse2, HGCalHEBasePlate0Coarse2 hgcalMaterial:HGC_G10-FR4, materials:Air, hgcalMaterial:HGC_G10-FR4, diff --git a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h index 8a2560efe8cb7..a95022998ee0d 100644 --- a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h +++ b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h @@ -110,7 +110,8 @@ class HGCalDDDConstants { 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)); + return ((mode_ == HGCalGeometryMode::Trapezoid) || (mode_ == HGCalGeometryMode::TrapezoidFile) || + (mode_ == HGCalGeometryMode::TrapezoidModule)); } std::pair tileType(int layer, int ring, int phi) const { int indx = HGCalTileIndex::tileIndex(layer, ring, phi); @@ -140,7 +141,7 @@ class HGCalDDDConstants { } bool waferHexagon8() const { return ((mode_ == HGCalGeometryMode::Hexagon8) || (mode_ == HGCalGeometryMode::Hexagon8Full) || - (mode_ == HGCalGeometryMode::Hexagon8File)); + (mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module)); } bool waferInLayer(int wafer, int lay, bool reco) const; bool waferFullInLayer(int wafer, int lay, bool reco) const; diff --git a/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h b/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h index 3e9d06f4cf3e2..21c53524d958c 100644 --- a/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h +++ b/Geometry/HGCalCommonData/interface/HGCalGeomParameters.h @@ -49,6 +49,16 @@ class HGCalGeomParameters { HGCalParameters& php, const std::string& sdTag1, int firstLayer); + void loadGeometryHexagonModule(const DDCompactView* cpv, + HGCalParameters& php, + const std::string& sdTag1, + const std::string& sdTag2, + int firstLayer); + void loadGeometryHexagonModule(const cms::DDCompactView* cpv, + HGCalParameters& php, + const std::string& sdTag1, + const std::string& sdTag2, + int firstLayer); void loadSpecParsHexagon(const DDFilteredView& fv, HGCalParameters& php, const DDCompactView* cpv, diff --git a/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h b/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h index edd88dcc029c0..07fae409aa0de 100644 --- a/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h +++ b/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h @@ -30,7 +30,9 @@ namespace HGCalGeometryMode { Hexagon8Full = 4, Trapezoid = 5, Hexagon8File = 6, - TrapezoidFile = 7 + TrapezoidFile = 7, + Hexagon8Module = 8, + TrapezoidModule = 9, }; enum WaferMode { Polyhedra = 0, ExtrudedPolygon = 1 }; } // namespace HGCalGeometryMode diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc b/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc index 9a26ae246f654..38e01eaa6c426 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalCell.cc @@ -153,7 +153,7 @@ void DDHGCalCell::execute(DDCompactView& cpv) { cpv.position(glog2, glog1, 1, tran, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalCell: " << glog2.name() << " number 1 position in " << glog1.name() << " at " - << tran << " with " << rot; + << tran << " with no rotation"; #endif static constexpr int ir0[] = {0, 1, 0}; diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc index d302c0813646b..418b9ba12029b 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc @@ -325,7 +325,7 @@ void DDHGCalEEAlgo::constructLayers(const DDLogicalPart& module, DDCompactView& ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEAlgo: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with " << rot; + << module.name() << " at " << r1 << " with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -410,7 +410,7 @@ void DDHGCalEEAlgo::positionSensitive(const DDLogicalPart& glog, #ifdef EDM_ML_DEBUG ++ntype[type]; edm::LogVerbatim("HGCalGeom") << " DDHGCalEEAlgo: " << name << " number " << copy << " positioned in " - << glog.ddname() << " at " << tran << " with " << rotation; + << glog.ddname() << " at " << tran << " with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc index 718a40da7ac44..3c1472fab82f5 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalEEFileAlgo.cc @@ -250,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); @@ -290,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 @@ -315,7 +302,7 @@ void DDHGCalEEFileAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalEEFileAlgo: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with " << rot; + << module.name() << " at " << r1 << " with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -404,7 +391,7 @@ void DDHGCalEEFileAlgo::positionSensitive( ++ntype[type]; edm::LogVerbatim("HGCalGeom") << " DDHGCalEEFileAlgo: " << name << " number " << copy << " type " << layertype << ":" << type << " positioned in " << glog.ddname() << " at " << tran - << " with " << rotation; + << " with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc index 2633ff06d4453..5c268d0f39125 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalHEAlgo.cc @@ -369,7 +369,7 @@ void DDHGCalHEAlgo::constructLayers(const DDLogicalPart& module, DDCompactView& ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with " << rot; + << module.name() << " at " << r1 << " with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -420,7 +420,7 @@ void DDHGCalHEAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog1, glog, 1, tran, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at " << tran << " with " << rot; + << " at " << tran << " with no rotation"; #endif double thickTot(0), zpos(-hthick); for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { @@ -450,7 +450,7 @@ void DDHGCalHEAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog2, glog1, copy, r1, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with " << rot; + << glog1.name() << " at " << r1 << " with no rotation"; #endif ++copyNumberTop_[ii]; zpos += hthickl; @@ -476,7 +476,7 @@ void DDHGCalHEAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog1, glog, 1, tran, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at " << tran << " with " << rot; + << " at " << tran << " with no rotation"; #endif thickTot = 0; zpos = -hthick; @@ -507,7 +507,7 @@ void DDHGCalHEAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog2, glog1, copy, r1, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with " << rot; + << glog1.name() << " at " << r1 << " with no rotation"; #endif if (layerSenseBot_[ly] != 0) { #ifdef EDM_ML_DEBUG @@ -591,7 +591,7 @@ void DDHGCalHEAlgo::positionSensitive(const DDLogicalPart& glog, #ifdef EDM_ML_DEBUG ++ntype[type]; edm::LogVerbatim("HGCalGeom") << "DDHGCalHEAlgo: " << name << " number " << copy << " positioned in " - << glog.ddname() << " at " << tran << " with " << rotation; + << glog.ddname() << " at " << tran << " with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc index e554615dae6a2..79855c0748031 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalHEFileAlgo.cc @@ -304,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); @@ -361,7 +355,7 @@ void DDHGCalHEFileAlgo::constructLayers(const DDLogicalPart& module, DDCompactVi ++copyNumber_[ii]; #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog.name() << " number " << copy << " positioned in " - << module.name() << " at " << r1 << " with " << rot; + << module.name() << " at " << r1 << " with no rotation"; #endif zz += hthick; } // End of loop over layers in a block @@ -413,7 +407,7 @@ void DDHGCalHEFileAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog1, glog, 1, tran, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at " << tran << " with " << rot; + << " at " << tran << " with no rotation"; #endif double thickTot(0), zpos(-hthick); for (unsigned int ly = 0; ly < layerTypeTop_.size(); ++ly) { @@ -443,7 +437,7 @@ void DDHGCalHEFileAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog2, glog1, copy, r1, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with " << rot; + << glog1.name() << " at " << r1 << " with no rotation"; #endif ++copyNumberTop_[ii]; zpos += hthickl; @@ -469,7 +463,7 @@ void DDHGCalHEFileAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog1, glog, 1, tran, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: " << glog1.name() << " number 1 positioned in " << glog.name() - << " at " << tran << " with " << rot; + << " at " << tran << " with no rotation"; #endif thickTot = 0; zpos = -hthick; @@ -500,7 +494,7 @@ void DDHGCalHEFileAlgo::positionMix(const DDLogicalPart& glog, cpv.position(glog2, glog1, copy, r1, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalHEFileAlgo: Position " << glog2.name() << " number " << copy << " in " - << glog1.name() << " at " << r1 << " with " << rot; + << glog1.name() << " at " << r1 << " with no rotation"; #endif if (layerSenseBot_[ly] != 0) { #ifdef EDM_ML_DEBUG @@ -587,7 +581,7 @@ void DDHGCalHEFileAlgo::positionSensitive( ++ntype[type]; edm::LogVerbatim("HGCalGeom") << " DDHGCalHEFileAlgo: " << name << " number " << copy << " type " << layertype << ":" << type << " positioned in " << glog.ddname() << " at " << tran - << " with " << rotation; + << " with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc b/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc index 53ccbdfb53446..a3cd21f75a1eb 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalMixLayer.cc @@ -338,32 +338,26 @@ void DDHGCalMixLayer::constructLayers(const DDLogicalPart& module, DDCompactView 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); @@ -498,7 +492,7 @@ void DDHGCalMixLayer::positionMix(const DDLogicalPart& glog, int layercenter = layerCenter_[layer]; int firstWafer = waferLayerStart_[layer]; int lastWafer = ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] - : static_cast(waferLayerStart_.size())); + : static_cast(waferIndex_.size())); double r = 0.5 * (waferSize_ + waferSepar_); double R = 2.0 * r / sqrt3; double dy = 0.75 * R; diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc b/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc index 18171ea14b26f..04c7f29732614 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalSiliconModule.cc @@ -284,38 +284,25 @@ void DDHGCalSiliconModule::constructLayers(const DDLogicalPart& module, DDCompac 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") << "DDHGCalSiliconModule: 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); @@ -374,7 +361,7 @@ void DDHGCalSiliconModule::positionSensitive(const DDLogicalPart& glog, int laye int layercenter = layerCenter_[layer]; int firstWafer = waferLayerStart_[layer]; int lastWafer = ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] - : static_cast(waferLayerStart_.size())); + : static_cast(waferIndex_.size())); double r = 0.5 * (waferSize_ + waferSepar_); double R = 2.0 * r / sqrt3; double dy = 0.75 * R; diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalWafer8.cc b/Geometry/HGCalCommonData/plugins/DDHGCalWafer8.cc index e2d96bfe987d3..3e548f5c551b9 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalWafer8.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalWafer8.cc @@ -141,7 +141,7 @@ void DDHGCalWafer8::execute(DDCompactView& cpv) { cpv.position(DDName(cellNames_[cell]), glog, copy, tran, rot); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "DDHGCalWafer8: " << cellNames_[cell] << " number " << copy << " position in " - << glog.name() << " at " << tran << " with " << rot; + << glog.name() << " at " << tran << " with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc b/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc index 512fff2791492..476781c405725 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalWaferF.cc @@ -159,7 +159,7 @@ void DDHGCalWaferF::execute(DDCompactView& cpv) { 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; + << " positioned in " << glogM.name() << " at " << tran0 << " with no rotation"; #endif ++copyNumber_[i]; zi += layerThick_[i]; @@ -200,8 +200,9 @@ void DDHGCalWaferF::execute(DDCompactView& cpv) { 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; + edm::LogVerbatim("HGCalGeom") + << "DDHGCalWaferF: " << cellNames_[cell] << " number " << copy << " positioned in " << glogs[i].name() + << " at " << tran << " with no rotation"; #endif } } diff --git a/Geometry/HGCalCommonData/plugins/HGCalParametersESModule.cc b/Geometry/HGCalCommonData/plugins/HGCalParametersESModule.cc index 732056183a4e9..6d05bf9d7aada 100644 --- a/Geometry/HGCalCommonData/plugins/HGCalParametersESModule.cc +++ b/Geometry/HGCalCommonData/plugins/HGCalParametersESModule.cc @@ -24,7 +24,7 @@ class HGCalParametersESModule : public edm::ESProducer { ReturnType produce(const IdealGeometryRecord&); private: - std::string name_, name2_, namew_, namec_, namet_; + std::string name_, name2_, namew_, namec_, namet_, namex_; bool fromDD4Hep_; edm::ESGetToken cpvTokenDDD_; edm::ESGetToken cpvTokenDD4Hep_; @@ -36,12 +36,13 @@ HGCalParametersESModule::HGCalParametersESModule(const edm::ParameterSet& iC) { namew_ = iC.getParameter("nameW"); namec_ = iC.getParameter("nameC"); namet_ = iC.getParameter("nameT"); + namex_ = iC.getParameter("nameX"); fromDD4Hep_ = iC.getParameter("fromDD4Hep"); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "HGCalParametersESModule for " << name_ << ":" << namew_ << ":" << namec_ << ":" << namet_ << " and fromDD4Hep flag " << fromDD4Hep_; #endif - auto cc = setWhatProduced(this, name_); + auto cc = setWhatProduced(this, namex_); cpvTokenDDD_ = cc.consumes(edm::ESInputTag()); cpvTokenDD4Hep_ = cc.consumesFrom(edm::ESInputTag()); } @@ -53,6 +54,7 @@ void HGCalParametersESModule::fillDescriptions(edm::ConfigurationDescriptions& d desc.add("nameW", "HGCalEEWafer"); desc.add("nameC", "HGCalEECell"); desc.add("nameT", "HGCal"); + desc.add("nameX", "HGCalEESensitive"); desc.add("fromDD4Hep", false); descriptions.add("hgcalEEParametersInitialize", desc); } diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc index 076231373569b..85889d6090eb4 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalEEFileAlgo.cc @@ -171,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 " << 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 " << 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; + 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); diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc index 4681f83fc1809..7391cb5c74fbb 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalHEFileAlgo.cc @@ -206,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); diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc index 4a5f4d18bb1ae..d2c8431174eb2 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixLayer.cc @@ -244,33 +244,26 @@ struct HGCalMixLayer { 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); @@ -427,9 +420,8 @@ struct HGCalMixLayer { 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())); + int lastWafer = ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] + : static_cast(waferIndex_.size())); double r = 0.5 * (waferSize_ + waferSepar_); double R = 2.0 * r / sqrt3; double dy = 0.75 * R; diff --git a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc index c0c9c9526f969..04fad4b9d4c6c 100644 --- a/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc +++ b/Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalSiliconModule.cc @@ -200,38 +200,25 @@ struct HGCalSiliconModule { 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") << "DDHGCalSiliconModule: 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 " << 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; + 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); @@ -308,9 +295,8 @@ struct HGCalSiliconModule { 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())); + int lastWafer = ((layer + 1 < static_cast(waferLayerStart_.size())) ? waferLayerStart_[layer + 1] + : static_cast(waferIndex_.size())); double r = 0.5 * (waferSize_ + waferSepar_); double R = 2.0 * r / sqrt3; double dy = 0.75 * R; diff --git a/Geometry/HGCalCommonData/python/hgcalParametersInitialization_cfi.py b/Geometry/HGCalCommonData/python/hgcalParametersInitialization_cfi.py index 7f9639a4c4398..f3b1524bc3ca1 100644 --- a/Geometry/HGCalCommonData/python/hgcalParametersInitialization_cfi.py +++ b/Geometry/HGCalCommonData/python/hgcalParametersInitialization_cfi.py @@ -12,10 +12,12 @@ name = cms.string("HGCalHESiliconSensitive"), nameW = cms.string("HGCalHEWafer"), nameC = cms.string("HGCalHECell"), + nameX = cms.string("HGCalHESiliconSensitive"), ) hgcalHEScParametersInitialize = hgcalEEParametersInitialize.clone( name = cms.string("HGCalHEScintillatorSensitive"), nameW = cms.string("HGCalWafer"), nameC = cms.string("HGCalCell"), + nameX = cms.string("HGCalHEScintillatorSensitive"), ) diff --git a/Geometry/HGCalCommonData/python/hgcalV15ParametersInitialization_cfi.py b/Geometry/HGCalCommonData/python/hgcalV15ParametersInitialization_cfi.py new file mode 100644 index 0000000000000..a058e0a4a5cc7 --- /dev/null +++ b/Geometry/HGCalCommonData/python/hgcalV15ParametersInitialization_cfi.py @@ -0,0 +1,34 @@ +import FWCore.ParameterSet.Config as cms + +hgcalEEParametersInitialize = cms.ESProducer('HGCalParametersESModule', + name = cms.string('HGCalEELayer'), + name2 = cms.string('HGCalEESensitive'), + nameW = cms.string('HGCalEEWafer'), + nameC = cms.string('HGCalEESensitive'), + nameT = cms.string('HGCal'), + nameX = cms.string('HGCalEESensitive'), + fromDD4Hep = cms.bool(False), + appendToDataLabel = cms.string('') +) + +from Configuration.ProcessModifiers.dd4hep_cff import dd4hep + +dd4hep.toModify(hgcalEEParametersInitialize, + fromDD4Hep = cms.bool(True) +) + +hgcalHESiParametersInitialize = hgcalEEParametersInitialize.clone( + name = cms.string("HGCalHESiliconLayer"), + name2 = cms.string("HGCalHESiliconSensitive"), + nameW = cms.string("HGCalHEWafer"), + nameC = cms.string("HGCalHESiliconSensitive"), + nameX = cms.string("HGCalHESiliconSensitive"), +) + +hgcalHEScParametersInitialize = hgcalEEParametersInitialize.clone( + name = cms.string("HGCalHEScintillatorSensitive"), + name2 = cms.string("HGCalHEScintillatorSensitive"), + nameW = cms.string("HGCalWafer"), + nameC = cms.string("HGCalHEScintillatorSensitive"), + nameX = cms.string("HGCalHEScintillatorSensitive"), +) diff --git a/Geometry/HGCalCommonData/python/hgcalV6ParametersInitialization_cfi.py b/Geometry/HGCalCommonData/python/hgcalV6ParametersInitialization_cfi.py index 826a081d646cb..d8948826904fa 100644 --- a/Geometry/HGCalCommonData/python/hgcalV6ParametersInitialization_cfi.py +++ b/Geometry/HGCalCommonData/python/hgcalV6ParametersInitialization_cfi.py @@ -13,4 +13,5 @@ nameW = cms.string("HGCalHEWafer"), nameC = cms.string("HGCalHECell"), name2 = cms.string("HGCalHEsil"), + nameX = cms.string("HGCalHESiliconSensitive"), ) diff --git a/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py index 86aef458491ae..6ac5104762b48 100644 --- a/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py +++ b/Geometry/HGCalCommonData/python/testHGCalV15XML_cfi.py @@ -40,7 +40,7 @@ '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/hgcalCons/v15/hgcalCons.xml', 'Geometry/HGCalCommonData/data/hgcalConsData/v15/hgcalConsData.xml', 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', 'Geometry/ForwardCommonData/data/brmrotations.xml', @@ -67,7 +67,7 @@ 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', 'Geometry/HcalSimData/data/CaloUtil.xml', - 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/HGCalSimData/data/hgcsensv15.xml', 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', @@ -77,7 +77,7 @@ 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecs.xml', 'Geometry/HcalSimData/data/HcalProdCuts.xml', 'Geometry/EcalSimData/data/EcalProdCuts.xml', - 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv15.xml', 'Geometry/CMSCommonData/data/FieldParameters.xml', 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', ), diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index e81554c5523d8..65ff2182351a5 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -25,7 +25,7 @@ using namespace geant_units::operators; HGCalDDDConstants::HGCalDDDConstants(const HGCalParameters* hp, const std::string& name) : hgpar_(hp), sqrt3_(std::sqrt(3.0)) { mode_ = hgpar_->mode_; - fullAndPart_ = (mode_ == HGCalGeometryMode::Hexagon8File); + fullAndPart_ = ((mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "Mode " << mode_ << " FullAndPart " << fullAndPart_; #endif @@ -615,9 +615,10 @@ std::pair HGCalDDDConstants::locateCell( auto itr = hgpar_->typesInLayers_.find(indx); int type = ((itr == hgpar_->typesInLayers_.end()) ? 2 : hgpar_->waferTypeL_[itr->second]); #ifdef EDM_ML_DEBUG - if (debug) + if (debug) { edm::LogVerbatim("HGCalGeom") << "LocateCell " << lay << ":" << waferU << ":" << waferV << ":" << indx << ":" << (itr == hgpar_->typesInLayers_.end()) << ":" << type; + } #endif int kndx = cellV * 100 + cellU; if (type == 0) { @@ -729,7 +730,7 @@ 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 - if (mode_ != HGCalGeometryMode::TrapezoidFile) + if ((mode_ != HGCalGeometryMode::TrapezoidFile) && (mode_ != HGCalGeometryMode::TrapezoidModule)) r = std::max(range.first, std::min(r, range.second)); x = r * std::cos(phi); y = r * std::sin(phi); @@ -1131,7 +1132,7 @@ void HGCalDDDConstants::waferFromPosition(const double x, if ((dy <= 0.5 * hexside_) || (dx * tan30deg_ <= (hexside_ - dy))) { waferU = HGCalWaferIndex::waferU(hgpar_->waferCopy_[k]); waferV = HGCalWaferIndex::waferV(hgpar_->waferCopy_[k]); - if (mode_ == HGCalGeometryMode::Hexagon8File) { + if ((mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module)) { int index = HGCalWaferIndex::waferIndex(layer, waferU, waferV); celltype = HGCalWaferType::getType(index, hgpar_->waferInfoMap_); } else { @@ -1590,7 +1591,7 @@ bool HGCalDDDConstants::isValidCell8(int lay, int waferU, int waferV, int cellU, << cellV << " Position " << x << ":" << y << ":" << rr << " Compare Limits " << hgpar_->rMinLayHex_[ll] << ":" << hgpar_->rMaxLayHex_[ll] << " Flag " << result; #endif - if (result && (mode_ == HGCalGeometryMode::Hexagon8File)) { + if (result && ((mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module))) { int N = (type == 0) ? hgpar_->nCellsFine_ : hgpar_->nCellsCoarse_; auto partn = waferTypeRotation(lay, waferU, waferV, false, false); result = HGCalWaferMask::goodCell(cellU, cellV, N, partn.first, partn.second); @@ -1614,28 +1615,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 d59abd7570240..935ad9a04ce10 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeomParameters.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeomParameters.cc @@ -20,6 +20,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" #include +#include #include //#define EDM_ML_DEBUG @@ -706,17 +707,20 @@ void HGCalGeomParameters::loadGeometryHexagon8(const DDFilteredView& _fv, HGCalP if (lay == 0) { throw cms::Exception("DDException") << "Funny layer # " << lay << " zp " << zside << " in " << nsiz << " components"; - } else { + } else if (sol.shape() == DDSolidShape::ddtubs) { if (std::find(php.layer_.begin(), php.layer_.end(), lay) == php.layer_.end()) php.layer_.emplace_back(lay); + const DDTubs& tube = static_cast(sol); + double rin = HGCalParameters::k_ScaleFromDDD * tube.rIn(); + double rout = HGCalParameters::k_ScaleFromDDD * tube.rOut(); auto itr = layers.find(lay); if (itr == layers.end()) { - const DDTubs& tube = static_cast(sol); - double rin = HGCalParameters::k_ScaleFromDDD * tube.rIn(); - double rout = HGCalParameters::k_ScaleFromDDD * tube.rOut(); double zp = HGCalParameters::k_ScaleFromDDD * fv.translation().Z(); HGCalGeomParameters::layerParameters laypar(rin, rout, zp); layers[lay] = laypar; + } else { + (itr->second).rmin = std::min(rin, (itr->second).rmin); + (itr->second).rmax = std::max(rout, (itr->second).rmax); } if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) { DD3Vector x, y, z; @@ -781,17 +785,20 @@ void HGCalGeomParameters::loadGeometryHexagon8(const cms::DDCompactView* cpv, if (lay == 0) { throw cms::Exception("DDException") << "Funny layer # " << lay << " zp " << zside << " in " << nsiz << " components"; - } else { + } else if (fv.shape() == cms::DDSolidShape::ddtubs) { if (std::find(php.layer_.begin(), php.layer_.end(), lay) == php.layer_.end()) php.layer_.emplace_back(lay); + const std::vector& pars = fv.parameters(); + double rin = HGCalParameters::k_ScaleFromDD4Hep * pars[0]; + double rout = HGCalParameters::k_ScaleFromDD4Hep * pars[1]; auto itr = layers.find(lay); if (itr == layers.end()) { - const std::vector& pars = fv.parameters(); - double rin = HGCalParameters::k_ScaleFromDD4Hep * pars[0]; - double rout = HGCalParameters::k_ScaleFromDD4Hep * pars[1]; double zp = HGCalParameters::k_ScaleFromDD4Hep * fv.translation().Z(); HGCalGeomParameters::layerParameters laypar(rin, rout, zp); layers[lay] = laypar; + } else { + (itr->second).rmin = std::min(rin, (itr->second).rmin); + (itr->second).rmax = std::max(rout, (itr->second).rmax); } if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) { DD3Vector x, y, z; @@ -823,6 +830,271 @@ void HGCalGeomParameters::loadGeometryHexagon8(const cms::DDCompactView* cpv, loadGeometryHexagon8(layers, trforms, firstLayer, php); } +void HGCalGeomParameters::loadGeometryHexagonModule(const DDCompactView* cpv, + HGCalParameters& php, + const std::string& sdTag1, + const std::string& sdTag2, + int firstLayer) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "HGCalGeomParameters (DDD)::loadGeometryHexagonModule called with tags " << sdTag1 + << ":" << sdTag2 << " firstLayer " << firstLayer << ":" << php.firstMixedLayer_; + int ntot1(0), ntot2(0); +#endif + std::map layers; + std::map, double> zvals; + std::map, HGCalParameters::hgtrform> trforms; + int levelTop = php.levelT_[0]; + + std::string attribute = "Volume"; + DDValue val1(attribute, sdTag2, 0.0); + DDSpecificsMatchesValueFilter filter1{val1}; + DDFilteredView fv1(*cpv, filter1); + bool dodet = fv1.firstChild(); + while (dodet) { +#ifdef EDM_ML_DEBUG + ++ntot1; +#endif + std::vector copy = fv1.copyNumbers(); + int nsiz = static_cast(copy.size()); + if (levelTop < nsiz) { + int lay = copy[levelTop]; + int zside = (nsiz > php.levelZSide_) ? copy[php.levelZSide_] : -1; + if (zside != 1) + zside = -1; + if (lay == 0) { + throw cms::Exception("DDException") + << "Funny layer # " << lay << " zp " << zside << " in " << nsiz << " components"; + } else { + if (zvals.find(std::make_pair(lay, zside)) == zvals.end()) { + zvals[std::make_pair(lay, zside)] = HGCalParameters::k_ScaleFromDDD * fv1.translation().Z(); +#ifdef EDM_ML_DEBUG + std::ostringstream st1; + st1 << "Name0 " << fv1.name() << " LTop " << levelTop << ":" << lay << " ZSide " << zside << " # of levels " + << nsiz; + for (const auto& c : copy) + st1 << ":" << c; + st1 << " Z " << zvals[std::make_pair(lay, zside)]; + edm::LogVerbatim("HGCalGeom") << st1.str(); +#endif + } + } + } + dodet = fv1.next(); + } + + DDValue val2(attribute, sdTag1, 0.0); + DDSpecificsMatchesValueFilter filter2{val2}; + DDFilteredView fv2(*cpv, filter2); + dodet = fv2.firstChild(); + while (dodet) { +#ifdef EDM_ML_DEBUG + ++ntot2; +#endif + std::vector copy = fv2.copyNumbers(); + int nsiz = static_cast(copy.size()); + if (levelTop < nsiz) { + int lay = copy[levelTop]; + int zside = (nsiz > php.levelZSide_) ? copy[php.levelZSide_] : -1; + if (zside != 1) + zside = -1; + const DDSolid& sol = fv2.logicalPart().solid(); +#ifdef EDM_ML_DEBUG + std::ostringstream st2; + st2 << "Name1 " << sol.name() << " shape " << sol.shape() << " LTop " << levelTop << ":" << lay << " ZSide " + << zside << ":" << php.levelZSide_ << " # of levels " << nsiz; + for (const auto& c : copy) + st2 << ":" << c; + edm::LogVerbatim("HGCalGeom") << st2.str(); +#endif + if (lay == 0) { + throw cms::Exception("DDException") + << "Funny layer # " << lay << " zp " << zside << " in " << nsiz << " components"; + } else if (sol.shape() == DDSolidShape::ddtubs) { + if (zvals.find(std::make_pair(lay, zside)) != zvals.end()) { + if (std::find(php.layer_.begin(), php.layer_.end(), lay) == php.layer_.end()) + php.layer_.emplace_back(lay); + auto itr = layers.find(lay); + if (itr == layers.end()) { + const DDTubs& tube = static_cast(sol); + double rin = HGCalParameters::k_ScaleFromDDD * tube.rIn(); + double rout = (php.firstMixedLayer_ > 0 && lay >= php.firstMixedLayer_) + ? php.radiusMixBoundary_[lay - php.firstMixedLayer_] + : HGCalParameters::k_ScaleFromDDD * tube.rOut(); + double zp = zvals[std::make_pair(lay, 1)]; + HGCalGeomParameters::layerParameters laypar(rin, rout, zp); + layers[lay] = laypar; +#ifdef EDM_ML_DEBUG + std::ostringstream st3; + st3 << "Name1 " << fv2.name() << " LTop " << levelTop << ":" << lay << " ZSide " << zside << " # of levels " + << nsiz; + for (const auto& c : copy) + st3 << ":" << c; + st3 << " R " << rin << ":" << rout; + edm::LogVerbatim("HGCalGeom") << st3.str(); +#endif + } + + if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) { + DD3Vector x, y, z; + fv2.rotation().GetComponents(x, y, z); + const CLHEP::HepRep3x3 rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z()); + const CLHEP::HepRotation hr(rotation); + double xx = ((std::abs(fv2.translation().X()) < tolerance) + ? 0 + : HGCalParameters::k_ScaleFromDDD * fv2.translation().X()); + double yy = ((std::abs(fv2.translation().Y()) < tolerance) + ? 0 + : HGCalParameters::k_ScaleFromDDD * fv2.translation().Y()); + const CLHEP::Hep3Vector h3v(xx, yy, zvals[std::make_pair(lay, zside)]); + HGCalParameters::hgtrform mytrf; + mytrf.zp = zside; + mytrf.lay = lay; + mytrf.sec = 0; + mytrf.subsec = 0; + mytrf.h3v = h3v; + mytrf.hr = hr; + trforms[std::make_pair(lay, zside)] = mytrf; + } + } + } + } + dodet = fv2.next(); + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "Total # of views " << ntot1 << ":" << ntot2; +#endif + loadGeometryHexagon8(layers, trforms, firstLayer, php); +} + +void HGCalGeomParameters::loadGeometryHexagonModule(const cms::DDCompactView* cpv, + HGCalParameters& php, + const std::string& sdTag1, + const std::string& sdTag2, + int firstLayer) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "HGCalGeomParameters (DD4Hep)::loadGeometryHexagonModule called with tags " << sdTag1 + << ":" << sdTag2 << " firstLayer " << firstLayer; + int ntot1(0), ntot2(0); +#endif + std::map layers; + std::map, HGCalParameters::hgtrform> trforms; + std::map, double> zvals; + int levelTop = php.levelT_[0]; + + const cms::DDFilter filter1("Volume", sdTag2); + cms::DDFilteredView fv1((*cpv), filter1); + while (fv1.firstChild()) { +#ifdef EDM_ML_DEBUG + ++ntot1; +#endif + int nsiz = static_cast(fv1.level()); + if (nsiz > levelTop) { + std::vector copy = fv1.copyNos(); + int lay = copy[nsiz - levelTop - 1]; + int zside = (nsiz > php.levelZSide_) ? copy[nsiz - php.levelZSide_ - 1] : -1; + if (zside != 1) + zside = -1; + if (lay == 0) { + throw cms::Exception("DDException") + << "Funny layer # " << lay << " zp " << zside << " in " << nsiz << " components"; + } else { + if (zvals.find(std::make_pair(lay, zside)) == zvals.end()) { + zvals[std::make_pair(lay, zside)] = HGCalParameters::k_ScaleFromDD4Hep * fv1.translation().Z(); +#ifdef EDM_ML_DEBUG + std::ostringstream st1; + st1 << "Name0 " << fv1.name() << " LTop " << levelTop << ":" << lay << " ZSide " << zside << " # of levels " + << nsiz; + for (const auto& c : copy) + st1 << ":" << c; + st1 << " Z " << zvals[std::make_pair(lay, zside)]; + edm::LogVerbatim("HGCalGeom") << st1.str(); +#endif + } + } + } + } + + const cms::DDFilter filter2("Volume", sdTag1); + cms::DDFilteredView fv2((*cpv), filter2); + while (fv2.firstChild()) { + // Layers first + int nsiz = static_cast(fv2.level()); +#ifdef EDM_ML_DEBUG + ++ntot2; +#endif + if (nsiz > levelTop) { + std::vector copy = fv2.copyNos(); + int lay = copy[nsiz - levelTop - 1]; + int zside = (nsiz > php.levelZSide_) ? copy[nsiz - php.levelZSide_ - 1] : -1; + if (zside != 1) + zside = -1; +#ifdef EDM_ML_DEBUG + std::ostringstream st2; + st2 << "Name1 " << fv2.name() << "Shape " << cms::dd::name(cms::DDSolidShapeMap, fv2.shape()) << " LTop " + << levelTop << ":" << lay << " ZSide " << zside << ":" << php.levelZSide_ << " # of levels " << nsiz; + for (const auto& c : copy) + st2 << ":" << c; + edm::LogVerbatim("HGCalGeom") << st2.str(); +#endif + if (lay == 0) { + throw cms::Exception("DDException") + << "Funny layer # " << lay << " zp " << zside << " in " << nsiz << " components"; + } else { + if (zvals.find(std::make_pair(lay, zside)) != zvals.end()) { + if (std::find(php.layer_.begin(), php.layer_.end(), lay) == php.layer_.end()) + php.layer_.emplace_back(lay); + auto itr = layers.find(lay); + if (itr == layers.end()) { + const std::vector& pars = fv2.parameters(); + double rin = HGCalParameters::k_ScaleFromDD4Hep * pars[0]; + double rout = (php.firstMixedLayer_ > 0 && lay >= php.firstMixedLayer_) + ? php.radiusMixBoundary_[lay - php.firstMixedLayer_] + : HGCalParameters::k_ScaleFromDD4Hep * pars[1]; + double zp = zvals[std::make_pair(lay, 1)]; + HGCalGeomParameters::layerParameters laypar(rin, rout, zp); + layers[lay] = laypar; +#ifdef EDM_ML_DEBUG + std::ostringstream st3; + st3 << "Name2 " << fv2.name() << " LTop " << levelTop << ":" << lay << " ZSide " << zside << " # of levels " + << nsiz; + for (const auto& c : copy) + st3 << ":" << c; + st3 << " R " << rin << ":" << rout; + edm::LogVerbatim("HGCalGeom") << st3.str(); +#endif + } + + if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) { + DD3Vector x, y, z; + fv2.rotation().GetComponents(x, y, z); + const CLHEP::HepRep3x3 rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z()); + const CLHEP::HepRotation hr(rotation); + double xx = ((std::abs(fv2.translation().X()) < tolerance) + ? 0 + : HGCalParameters::k_ScaleFromDD4Hep * fv2.translation().X()); + double yy = ((std::abs(fv2.translation().Y()) < tolerance) + ? 0 + : HGCalParameters::k_ScaleFromDD4Hep * fv2.translation().Y()); + const CLHEP::Hep3Vector h3v(xx, yy, zvals[std::make_pair(lay, zside)]); + HGCalParameters::hgtrform mytrf; + mytrf.zp = zside; + mytrf.lay = lay; + mytrf.sec = 0; + mytrf.subsec = 0; + mytrf.h3v = h3v; + mytrf.hr = hr; + trforms[std::make_pair(lay, zside)] = mytrf; + } + } + } + } + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "Total # of views " << ntot1 << ":" << ntot2; +#endif + loadGeometryHexagon8(layers, trforms, firstLayer, php); +} + void HGCalGeomParameters::loadGeometryHexagon8(const std::map& layers, std::map, HGCalParameters::hgtrform>& trforms, const int& firstLayer, @@ -1570,7 +1842,7 @@ void HGCalGeomParameters::loadWaferHexagon8(HGCalParameters& php) { double zpos = php.zLayerHex_[i]; int kndx = HGCalWaferIndex::waferIndex(lay, u, v); int type(-1); - if (php.mode_ == HGCalGeometryMode::Hexagon8File) + if ((php.mode_ == HGCalGeometryMode::Hexagon8File) || (php.mode_ == HGCalGeometryMode::Hexagon8Module)) type = wType->getType(kndx, php.waferInfoMap_); if (type < 0) type = wType->getType(HGCalParameters::k_ScaleToDDD * xpos0, @@ -1602,7 +1874,7 @@ void HGCalGeomParameters::loadWaferHexagon8(HGCalParameters& php) { if (php.waferMaskMode_ > 0) { std::pair corner0 = HGCalWaferMask::getTypeMode( xpos0, ypos0, r1, R1, php.rMinLayHex_[i], php.rMaxLayHex_[i], type, php.waferMaskMode_); - if (php.mode_ == HGCalGeometryMode::Hexagon8File) { + if ((php.mode_ == HGCalGeometryMode::Hexagon8File) || (php.mode_ == HGCalGeometryMode::Hexagon8Module)) { auto itr = php.waferInfoMap_.find(wl); if (itr != php.waferInfoMap_.end()) { int part = (itr->second).part; @@ -1758,7 +2030,7 @@ void HGCalGeomParameters::loadCellTrapezoid(HGCalParameters& php) { #endif // Find the radius of each eta-partitions - if (php.mode_ == HGCalGeometryMode::TrapezoidFile) { + if ((php.mode_ == HGCalGeometryMode::TrapezoidFile) || (php.mode_ == HGCalGeometryMode::TrapezoidModule)) { //Ring radii for each partition for (unsigned int k = 0; k < 2; ++k) { for (unsigned int kk = 0; kk < php.tileRingR_.size(); ++kk) { diff --git a/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc b/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc index c6d10e52f8f3f..49ae8e3c1a6ec 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeomRotation.cc @@ -36,8 +36,7 @@ void HGCalGeomRotation::uvMappingFrom60DegreeSector0(WaferCentring waferCentring 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; + "incompatible, assuming WaferCentred centring"; } if (sector > 5) { @@ -125,8 +124,7 @@ unsigned HGCalGeomRotation::uvMappingTo60DegreeSector0(WaferCentring waferCentri 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; + "incompatible, assuming WaferCentred centring"; } if (moduleU > 0 && moduleV >= 0) { @@ -135,8 +133,7 @@ unsigned HGCalGeomRotation::uvMappingTo60DegreeSector0(WaferCentring waferCentri } else { sector = 1; } - } - if (moduleU >= moduleV && moduleV < 0) { + } else if (moduleU >= moduleV && moduleV < 0) { if (moduleU >= 0) { sector = 5; } else { diff --git a/Geometry/HGCalCommonData/src/HGCalGeomTools.cc b/Geometry/HGCalCommonData/src/HGCalGeomTools.cc index ab5069aaa7585..6b9a600edd98f 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeomTools.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeomTools.cc @@ -38,12 +38,18 @@ void HGCalGeomTools::radius(double zf, --zb1; dz2 = -2 * tol_; } + if (((zb1 + 1) != zFront1.end()) && (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/HGCalGeometryMode.cc b/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc index f3288922929de..84af1dce96222 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc @@ -10,6 +10,8 @@ HGCalStringToEnumParser::HGCalStringToEnumParse enumMap["HGCalGeometryMode::Trapezoid"] = HGCalGeometryMode::Trapezoid; enumMap["HGCalGeometryMode::Hexagon8File"] = HGCalGeometryMode::Hexagon8File; enumMap["HGCalGeometryMode::TrapezoidFile"] = HGCalGeometryMode::TrapezoidFile; + enumMap["HGCalGeometryMode::Hexagon8Module"] = HGCalGeometryMode::Hexagon8Module; + enumMap["HGCalGeometryMode::TrapezoidModule"] = HGCalGeometryMode::TrapezoidModule; } template <> diff --git a/Geometry/HGCalCommonData/src/HGCalParametersFromDD.cc b/Geometry/HGCalCommonData/src/HGCalParametersFromDD.cc index 4c80478bf5cb4..6fcd0bad59173 100644 --- a/Geometry/HGCalCommonData/src/HGCalParametersFromDD.cc +++ b/Geometry/HGCalCommonData/src/HGCalParametersFromDD.cc @@ -78,10 +78,12 @@ bool HGCalParametersFromDD::build(const DDCompactView* cpv, DDsvalues_type sv(fv.mergedSpecifics()); php.mode_ = getGeometryMode("GeometryMode", sv); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "GeometryMode " << php.mode_ << ":" << HGCalGeometryMode::Hexagon << ":" - << HGCalGeometryMode::HexagonFull << ":" << HGCalGeometryMode::Hexagon8 << ":" - << HGCalGeometryMode::Hexagon8Full << ":" << HGCalGeometryMode::Hexagon8File << ":" - << HGCalGeometryMode::Trapezoid << ":" << HGCalGeometryMode::TrapezoidFile; + edm::LogVerbatim("HGCalGeom") << "Volume " << name << " GeometryMode " << php.mode_ << ":" + << HGCalGeometryMode::Hexagon << ":" << HGCalGeometryMode::HexagonFull << ":" + << HGCalGeometryMode::Hexagon8 << ":" << HGCalGeometryMode::Hexagon8Full << ":" + << HGCalGeometryMode::Hexagon8File << ":" << HGCalGeometryMode::Hexagon8Module << ":" + << HGCalGeometryMode::Trapezoid << ":" << HGCalGeometryMode::TrapezoidFile << ":" + << HGCalGeometryMode::TrapezoidModule; #endif php.levelZSide_ = 3; // Default level for ZSide php.detectorType_ = 0; // These two parameters are @@ -107,7 +109,7 @@ bool HGCalParametersFromDD::build(const DDCompactView* cpv, php.waferZSide_ = 0; } if ((php.mode_ == HGCalGeometryMode::Hexagon8) || (php.mode_ == HGCalGeometryMode::Hexagon8Full) || - (php.mode_ == HGCalGeometryMode::Hexagon8File)) { + (php.mode_ == HGCalGeometryMode::Hexagon8File) || (php.mode_ == HGCalGeometryMode::Hexagon8Module)) { php.levelT_ = dbl_to_int(getDDDArray("LevelTop", sv)); php.levelZSide_ = static_cast(getDDDValue("LevelZSide", sv)); php.nCellsFine_ = php.nCellsCoarse_ = 0; @@ -193,7 +195,17 @@ bool HGCalParametersFromDD::build(const DDCompactView* cpv, php.defineFull_ = true; // Load wafer positions geom->loadWaferHexagon8(php); - } else if ((php.mode_ == HGCalGeometryMode::Trapezoid) || (php.mode_ == HGCalGeometryMode::TrapezoidFile)) { + } else if (php.mode_ == HGCalGeometryMode::Hexagon8Module) { + // Load the SpecPars + geom->loadSpecParsHexagon8(fv, php); + // Load Geometry parameters + geom->loadGeometryHexagonModule(cpv, php, name, namec, 1); + // Set complete fill mode + php.defineFull_ = true; + // Load wafer positions + geom->loadWaferHexagon8(php); + } else if ((php.mode_ == HGCalGeometryMode::Trapezoid) || (php.mode_ == HGCalGeometryMode::TrapezoidFile) || + (php.mode_ == HGCalGeometryMode::TrapezoidModule)) { // Load maximum eta & top level php.levelT_ = dbl_to_int(getDDDArray("LevelTop", sv)); php.firstLayer_ = (int)(getDDDValue("FirstLayer", sv)); @@ -243,7 +255,7 @@ bool HGCalParametersFromDD::build(const cms::DDCompactView* cpv, const std::string& name2) { #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCalGeom") << "HGCalParametersFromDD (DD4Hep)::build called with " - << "names " << name << ":" << namew << ":" << namec << ":" << namet; + << "names " << name << ":" << namew << ":" << namec << ":" << namet << ":" << name2; #endif cms::DDVectorsMap vmap = cpv->detector()->vectors(); const cms::DDFilter filter("Volume", name); @@ -252,18 +264,21 @@ bool HGCalParametersFromDD::build(const cms::DDCompactView* cpv, std::vector tempD; bool ok = fv.firstChild(); tempS = fv.get >(name2, "GeometryMode"); - if (tempS.empty()) + if (tempS.empty()) { tempS = fv.get >(name, "GeometryMode"); + } std::string sv = (!tempS.empty()) ? tempS[0] : "HGCalGeometryMode::Hexagon8Full"; HGCalGeometryMode::WaferMode mode(HGCalGeometryMode::Polyhedra); if (ok) { php.mode_ = getGeometryMode(sv); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCalGeom") << "GeometryMode " << php.mode_ << ":" << HGCalGeometryMode::Hexagon << ":" - << HGCalGeometryMode::HexagonFull << ":" << HGCalGeometryMode::Hexagon8 << ":" - << HGCalGeometryMode::Hexagon8Full << ":" << HGCalGeometryMode::Hexagon8File << ":" - << HGCalGeometryMode::Trapezoid << ":" << HGCalGeometryMode::TrapezoidFile; + edm::LogVerbatim("HGCalGeom") << "Volume " << name << " GeometryMode " << php.mode_ << ":" + << HGCalGeometryMode::Hexagon << ":" << HGCalGeometryMode::HexagonFull << ":" + << HGCalGeometryMode::Hexagon8 << ":" << HGCalGeometryMode::Hexagon8Full << ":" + << HGCalGeometryMode::Hexagon8File << ":" << HGCalGeometryMode::Hexagon8Module << ":" + << HGCalGeometryMode::Trapezoid << ":" << HGCalGeometryMode::TrapezoidFile << ":" + << HGCalGeometryMode::TrapezoidModule; #endif php.levelZSide_ = 3; // Default level for ZSide php.detectorType_ = 0; // These two parameters are @@ -282,7 +297,7 @@ bool HGCalParametersFromDD::build(const cms::DDCompactView* cpv, php.waferZSide_ = 0; } if ((php.mode_ == HGCalGeometryMode::Hexagon8) || (php.mode_ == HGCalGeometryMode::Hexagon8Full) || - (php.mode_ == HGCalGeometryMode::Hexagon8File)) { + (php.mode_ == HGCalGeometryMode::Hexagon8File) || (php.mode_ == HGCalGeometryMode::Hexagon8Module)) { php.levelT_ = dbl_to_int(fv.get >(name, "LevelTop")); tempD = fv.get >(name, "LevelZSide"); php.levelZSide_ = static_cast(tempD[0]); @@ -373,7 +388,17 @@ bool HGCalParametersFromDD::build(const cms::DDCompactView* cpv, php.defineFull_ = true; // Load wafer positions geom->loadWaferHexagon8(php); - } else if ((php.mode_ == HGCalGeometryMode::Trapezoid) || (php.mode_ == HGCalGeometryMode::TrapezoidFile)) { + } else if (php.mode_ == HGCalGeometryMode::Hexagon8Module) { + // Load the SpecPars + geom->loadSpecParsHexagon8(fv, vmap, php, name); + // Load Geometry parameters + geom->loadGeometryHexagonModule(cpv, php, name, namec, 1); + // Set complete fill mode + php.defineFull_ = true; + // Load wafer positions + geom->loadWaferHexagon8(php); + } else if ((php.mode_ == HGCalGeometryMode::Trapezoid) || (php.mode_ == HGCalGeometryMode::TrapezoidFile) || + (php.mode_ == HGCalGeometryMode::TrapezoidModule)) { // Load maximum eta & top level php.levelT_ = dbl_to_int(fv.get >(name, "LevelTop")); tempD = fv.get >(name, "LevelZSide"); 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/runHGCalTestV14_cfg.py b/Geometry/HGCalCommonData/test/python/runHGCalTestV14_cfg.py index 2ca3a90ae637b..fe7b7fb0e3cb0 100644 --- a/Geometry/HGCalCommonData/test/python/runHGCalTestV14_cfg.py +++ b/Geometry/HGCalCommonData/test/python/runHGCalTestV14_cfg.py @@ -1,8 +1,8 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 +from Configuration.Eras.Era_Phase2C11M9_cff import Phase2C11M9 -process = cms.Process('SIM',Phase2C11) +process = cms.Process('SIM',Phase2C11M9) # import of standard configurations process.load('Configuration.StandardSequences.Services_cff') @@ -10,7 +10,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.EventContent.EventContent_cff') process.load('SimGeneral.MixingModule.mixNoPU_cfi') -process.load('Geometry.HGCalCommonData.testGeometryV14_cff') +process.load('Configuration.Geometry.GeometryExtended2026D76Reco_cff') process.load('Configuration.StandardSequences.MagneticField_cff') process.load('Configuration.StandardSequences.Generator_cff') process.load('IOMC.EventVertexGenerators.VtxSmearedHLLHC14TeV_cfi') diff --git a/Geometry/HGCalCommonData/test/python/testHGCalNumberingV15_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalNumberingV15_cfg.py new file mode 100644 index 0000000000000..8695ce672afde --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/testHGCalNumberingV15_cfg.py @@ -0,0 +1,66 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 + +process = cms.Process("PROD",Phase2C11) + +process.load("SimGeneral.HepPDTESSource.pdt_cfi") +process.load("Geometry.HGCalCommonData.testHGCalV15XML_cfi") +process.load("Geometry.HGCalCommonData.hgcalV15ParametersInitialization_cfi") +process.load("Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi") +process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") +process.load("Geometry.HcalCommonData.hcalDDDSimConstants_cff") +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.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.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + +process.prodEE = cms.EDAnalyzer("HGCalNumberingTester", + NameSense = cms.string("HGCalEESensitive"), + NameDevice = cms.string("HGCal EE"), + LocalPositionX= cms.vdouble(500.0,350.0,800.0,1400.0), + LocalPositionY= cms.vdouble(500.0,0.0,0.0,0.0), + Increment = cms.int32(19), + DetType = cms.int32(2), + Reco = cms.bool(False) +) + +process.prodHEF = process.prodEE.clone( + NameSense = "HGCalHESiliconSensitive", + NameDevice = "HGCal HE Front", + Increment = 9 +) + +process.prodHEB = process.prodEE.clone( + NameSense = "HGCalHEScintillatorSensitive", + NameDevice = "HGCal HE Back", + Increment = 9, + LocalPositionX= [1100.0,1400.0,1500.0,1600.0], + LocalPositionY= [1100.0,1000.0,500.0,0.0], + DetType = 0 +) + +process.p1 = cms.Path(process.generator*process.prodEE*process.prodHEF*process.prodHEB) diff --git a/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py index 36c25ccb73c1b..8e358ccd39a49 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalNumbering_cfg.py @@ -1,11 +1,14 @@ import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 + +process = cms.Process("PROD",Phase2C11) -process = cms.Process("PROD") process.load("SimGeneral.HepPDTESSource.pdt_cfi") #process.load("Geometry.CMSCommonData.cmsExtendedGeometry2026D49XML_cfi") #process.load("Geometry.CMSCommonData.cmsExtendedGeometry2026D68XML_cfi") #process.load("Geometry.CMSCommonData.cmsExtendedGeometry2026D70XML_cfi") process.load("Geometry.HGCalCommonData.testHGCalV14XML_cfi") +#process.load("Geometry.HGCalCommonData.testHGCalV15XML_cfi") process.load("Geometry.HGCalCommonData.hgcalParametersInitialization_cfi") process.load("Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi") process.load("Geometry.EcalCommonData.ecalSimulationParameters_cff") diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py index 026529d225852..0b7d030a56b2b 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersDD4Hep_cfg.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C11_dd4hep_cff import Phase2C11_dd4hep -process = cms.Process("HGCalParametersTest") +process = cms.Process("HGCalParametersTest",Phase2C11_dd4hep) process.load("SimGeneral.HepPDTESSource.pdt_cfi") process.load("Geometry.HGCalCommonData.hgcalParametersInitialization_cfi") process.load('FWCore.MessageService.MessageLogger_cfi') @@ -41,10 +42,6 @@ firstRun = cms.untracked.uint32(1) ) -process.hgcalEEParametersInitialize.fromDD4Hep = cms.bool(True) -process.hgcalHESiParametersInitialize.fromDD4Hep = cms.bool(True) -process.hgcalHEScParametersInitialize.fromDD4Hep = cms.bool(True) - process.testEE = cms.EDAnalyzer("HGCalParameterTester", Name = cms.untracked.string("HGCalEESensitive"), Mode = cms.untracked.int32(1) diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py index baaeab78dfa00..04e7aa94936fa 100644 --- a/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersDDD_cfg.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 -process = cms.Process("HGCalParametersTest") +process = cms.Process("HGCalParametersTest",Phase2C11) process.load("SimGeneral.HepPDTESSource.pdt_cfi") #process.load("Geometry.CMSCommonData.cmsExtendedGeometry2026D71XML_cfi") process.load("Geometry.HGCalCommonData.testHGCalV14XML_cfi") diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersV15DD4Hep_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersV15DD4Hep_cfg.py new file mode 100644 index 0000000000000..8df3f1bf5314e --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersV15DD4Hep_cfg.py @@ -0,0 +1,63 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C11_dd4hep_cff import Phase2C11_dd4hep + +process = cms.Process("HGCalParametersTest",Phase2C11_dd4hep) +process.load("SimGeneral.HepPDTESSource.pdt_cfi") +process.load("Geometry.HGCalCommonData.hgcalV15ParametersInitialization_cfi") +process.load('FWCore.MessageService.MessageLogger_cfi') + +if hasattr(process,'MessageLogger'): + process.MessageLogger.HGCalGeom=dict() + +process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", + confGeomXMLFiles = cms.FileInPath('Geometry/HGCalCommonData/data/dd4hep/testHGCalV15.xml'), + appendToDataLabel = cms.string('') + ) + +process.DDCompactViewESProducer = cms.ESProducer("DDCompactViewESProducer", + appendToDataLabel = cms.string('') +) + +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.hgcalEEParametersInitialize.fromDD4Hep = cms.bool(True) +process.hgcalHESiParametersInitialize.fromDD4Hep = cms.bool(True) +process.hgcalHEScParametersInitialize.fromDD4Hep = cms.bool(True) + +process.testEE = cms.EDAnalyzer("HGCalParameterTester", + Name = cms.untracked.string("HGCalEESensitive"), + Mode = cms.untracked.int32(1) +) + +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) diff --git a/Geometry/HGCalCommonData/test/python/testHGCalParametersV15DDD_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalParametersV15DDD_cfg.py new file mode 100644 index 0000000000000..11244d09d603c --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/testHGCalParametersV15DDD_cfg.py @@ -0,0 +1,51 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C11_cff import Phase2C11 + +process = cms.Process("HGCalParametersTest",Phase2C11) +process.load("SimGeneral.HepPDTESSource.pdt_cfi") +process.load("Geometry.HGCalCommonData.testHGCalV15XML_cfi") +process.load("Geometry.HGCalCommonData.hgcalV15ParametersInitialization_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) +) + +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) 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 cd3e2ec9ca42d..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,20 +86,26 @@ 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() << " R " << ht3d.getTranslation().perp() << " and " << ht3d.getRotation(); @@ -119,7 +125,7 @@ HGCalGeometry* HGCalGeometryLoader::build(const HGCalTopology& topology) { ++kount; #endif } - ++irad; + ++ring; } } else { DetId::Detector det = topology.detector(); diff --git a/Geometry/HGCalSimData/data/hgcProdCutsv15.xml b/Geometry/HGCalSimData/data/hgcProdCutsv15.xml new file mode 100644 index 0000000000000..0b1832a3524b3 --- /dev/null +++ b/Geometry/HGCalSimData/data/hgcProdCutsv15.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalSimData/data/hgcsensv15.xml b/Geometry/HGCalSimData/data/hgcsensv15.xml new file mode 100644 index 0000000000000..d6d11ff3f11c1 --- /dev/null +++ b/Geometry/HGCalSimData/data/hgcsensv15.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + 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/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/test/python/runCaloPararemetrsAnalyzer_cfg.py b/Geometry/HcalCommonData/test/python/runCaloPararemetrsAnalyzer_cfg.py deleted file mode 100644 index 52e274bd51252..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.HCalGeom=dict() - -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 75a667c936988..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.HCalGeom=dict() - process.MessageLogger.Geometry=dict() - -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.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 bf1486d925f79..640a29b75a600 100644 --- a/Geometry/HcalCommonData/test/python/runHcalParametersFromDD4HepAnalyzer_cfg.py +++ b/Geometry/HcalCommonData/test/python/runHcalParametersFromDD4HepAnalyzer_cfg.py @@ -1,8 +1,9 @@ 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'): @@ -14,18 +15,7 @@ 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 308717c6b5163..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") diff --git a/Geometry/HcalCommonData/test/python/runHcalSimParametersAnalyzer_cfg.py b/Geometry/HcalCommonData/test/python/runHcalSimParametersAnalyzer_cfg.py deleted file mode 100644 index 867c481bd5667..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.HCalGeom=dict() - -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 102632a97daeb..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.HCalGeom=dict() - process.MessageLogger.Geometry=dict() - -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/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/python/HFParameters_cff.py b/Geometry/HcalSimData/python/HFParameters_cff.py new file mode 100644 index 0000000000000..e79157a943118 --- /dev/null +++ b/Geometry/HcalSimData/python/HFParameters_cff.py @@ -0,0 +1,28 @@ +import FWCore.ParameterSet.Config as cms + +# Several parameters needed for HF simulation + +HFLibraryFileBlock = cms.PSet( + FileName = cms.FileInPath('SimG4CMS/Calo/data/HFShowerLibrary_oldpmt_noatt_eta4_16en_v3.root'), + BackProbability = cms.double(0.2), + TreeEMID = cms.string('emParticles'), + TreeHadID = cms.string('hadParticles'), + ApplyFiducialCut= cms.bool(True), + Verbosity = cms.untracked.bool(False), + BranchPost = cms.untracked.string(''), + BranchEvt = cms.untracked.string(''), + BranchPre = cms.untracked.string('') +) + +HFShowerBlock = cms.PSet( + ProbMax = cms.double(1.0), + CFibre = cms.double(0.5), + OnlyLong = cms.bool(True) +) + +## +## Change the HFShowerLibrary file from Run 2 +## +from Configuration.Eras.Modifier_run2_common_cff import run2_common +run2_common.toModify( HFLibraryFileBlock, FileName = 'SimG4CMS/Calo/data/HFShowerLibrary_npmt_noatt_eta4_16en_v4.root' ) +run2_common.toModify( HFShowerBlock, ProbMax = 0.5) diff --git a/Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h b/Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h index f9c7e7cd2fd93..b8b4039e6f1e5 100644 --- a/Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h +++ b/Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h @@ -15,13 +15,13 @@ class HcalTrigTowerGeometry { std::vector towerIds(const HcalDetId& cellId) const; std::vector detIds(const HcalTrigTowerDetId&) const; - int firstHFTower(int version) const { return (version == 0) ? (29) : (30); } + int firstHFTower(int version) const { return (version == 1) ? (30) : (29); } /// where this tower begins and ends in eta void towerEtaBounds(int ieta, int version, double& eta1, double& eta2) const; /// number of towers (version dependent) - int nTowers(int version) const { return (version == 0) ? (32) : (41); } + int nTowers(int version) const { return (version == 1) ? (41) : (32); } // get the topology pointer const HcalTopology& topology() const { return *theTopology; } 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/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/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/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml new file mode 100644 index 0000000000000..deb5218ebf58b --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml @@ -0,0 +1,13795 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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_IT702_2021_03/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelStructureTopology.xml new file mode 100644 index 0000000000000..68cb06cf663b9 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelStructureTopology.xml @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT703_2021_03/pixelStructureTopology.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT703_2021_03/pixelStructureTopology.xml new file mode 100644 index 0000000000000..fa295205cfd57 --- /dev/null +++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT703_2021_03/pixelStructureTopology.xml @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v3/pixfwdMaterials.xml b/Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v3/pixfwdMaterials.xml new file mode 100644 index 0000000000000..48dd67ba8ddf3 --- /dev/null +++ b/Geometry/TrackerCommonData/data/pixfwdMaterials/2021/v3/pixfwdMaterials.xml @@ -0,0 +1,698 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/DDTIBLayerAlgo.cc b/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc index 3ea40574e4dcf..2aa79f129ec9e 100644 --- a/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc +++ b/Geometry/TrackerCommonData/plugins/dd4hep/DDTIBLayerAlgo.cc @@ -362,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"; @@ -374,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"; @@ -383,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"; @@ -392,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"; @@ -401,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/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp b/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp index 8dfae57b685b4..2dda8ed41500b 100644 --- a/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp +++ b/Geometry/TrackerGeometryBuilder/test/phase1PixelTopology_t.cpp @@ -149,9 +149,9 @@ int main() { } for (auto i = 0U; i < phase1PixelTopology::numberOfModules; ++i) { - int layer = phase1PixelTopology::layer[i / phase1PixelTopology::maxModuleStride]; + auto layer = static_cast(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(layer < phase1PixelTopology::numberOfLayers); assert(i >= phase1PixelTopology::layerStart[layer]); assert(i < phase1PixelTopology::layerStart[layer + 1]); } 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/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/trackerRecoMaterial.xml b/Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/trackerRecoMaterial.xml new file mode 100644 index 0000000000000..e3c16c7a718f5 --- /dev/null +++ b/Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/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/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelProdCuts.xml b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelProdCuts.xml new file mode 100644 index 0000000000000..7a6c92904c9c8 --- /dev/null +++ b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelProdCuts.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml new file mode 100644 index 0000000000000..f10ca2309d86e --- /dev/null +++ b/Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/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/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/HLTrigger/Configuration/python/HLT_FULL_cff.py b/HLTrigger/Configuration/python/HLT_FULL_cff.py index aa1dcb9b29020..6578d3c322fde 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_3_0/HLT --type FULL -# /dev/CMSSW_11_3_0/HLT/V13 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/HLT/V19 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/HLT/V13') + tableName = cms.string('/dev/CMSSW_11_3_0/HLT/V19') ) fragment.transferSystem = cms.PSet( @@ -6377,16 +6377,6 @@ ), appendToDataLabel = cms.string( "HBHE" ) ) -fragment.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -fragment.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) fragment.hltESSBTagRecord = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "JetTagComputerRecord" ), @@ -6613,62 +6603,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -fragment.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -fragment.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) fragment.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -8459,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 ), @@ -13791,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 ), @@ -32540,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 ), @@ -32924,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" ), @@ -32937,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 ), @@ -32962,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 ), @@ -33016,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" ), @@ -33029,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 ), @@ -33054,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( @@ -33719,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" ), @@ -33732,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 ), @@ -33757,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 ), @@ -33811,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" ), @@ -33824,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 ), @@ -33849,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( @@ -34010,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" ), @@ -34023,7 +33963,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 ), @@ -34048,15 +33988,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34102,10 +34043,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" ), @@ -34115,7 +34056,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 ), @@ -34140,15 +34081,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.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -34277,10 +34219,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" ), @@ -34290,7 +34232,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 ), @@ -34315,15 +34257,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34369,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" ), @@ -34382,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 ), @@ -34407,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( @@ -34544,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" ), @@ -34557,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 ), @@ -34582,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( @@ -34897,8 +34842,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -38347,6 +38291,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 ), @@ -38752,10 +38697,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" ), @@ -38765,7 +38710,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 ), @@ -38790,15 +38735,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 ), @@ -38844,10 +38790,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" ), @@ -38857,7 +38803,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 ), @@ -38882,15 +38828,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( @@ -39007,10 +38954,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" ), @@ -39020,7 +38967,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 ), @@ -39045,15 +38992,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( @@ -39170,10 +39118,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" ), @@ -39183,7 +39131,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 ), @@ -39208,15 +39156,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 ), @@ -39262,10 +39211,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" ), @@ -39275,7 +39224,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 ), @@ -39300,15 +39249,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( @@ -40031,10 +39981,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" ), @@ -40044,7 +39994,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 ), @@ -40069,15 +40019,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.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -40123,10 +40074,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" ), @@ -40136,7 +40087,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 ), @@ -40161,15 +40112,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.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -40286,10 +40238,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" ), @@ -40299,7 +40251,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 ), @@ -40324,15 +40276,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.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -40378,10 +40331,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" ), @@ -40391,7 +40344,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 ), @@ -40416,15 +40369,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( @@ -40486,10 +40440,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" ), @@ -40499,7 +40453,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 ), @@ -40524,15 +40478,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( @@ -51940,8 +51895,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -55033,13 +54987,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtag" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtag" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -62055,10 +62009,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" ), @@ -62068,7 +62022,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 ), @@ -62093,15 +62047,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 ), @@ -62147,10 +62102,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" ), @@ -62160,7 +62115,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 ), @@ -62185,15 +62140,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( @@ -80706,6 +80662,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 ), @@ -88940,8 +88897,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -94312,10 +94268,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" ), @@ -94325,7 +94281,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 ), @@ -94350,15 +94306,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 ), @@ -94403,10 +94360,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" ), @@ -94416,7 +94373,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 ), @@ -94441,15 +94398,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( @@ -98839,13 +98797,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -99062,13 +99020,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForDBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForDBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -105912,6 +105870,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 ), @@ -106185,8 +106144,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -127826,7 +127784,7 @@ 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 c2a62e5e85010..649cb8b36a99c 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_3_0/Fake1 --type Fake1 -# /dev/CMSSW_11_3_0/Fake1/V5 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/Fake1/V8 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/Fake1/V5') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake1/V8') ) 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 14ccca563505a..f8c70b854983e 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_3_0/Fake2 --type Fake2 -# /dev/CMSSW_11_3_0/Fake2/V5 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/Fake2/V8 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/Fake2/V5') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake2/V8') ) 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 627781fc447b4..7ccdf436d9ace 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_3_0/Fake --type Fake -# /dev/CMSSW_11_3_0/Fake/V5 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/Fake/V8 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/Fake/V5') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake/V8') ) 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 192bc08871153..05eafb977746b 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_3_0/GRun --type GRun -# /dev/CMSSW_11_3_0/GRun/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/GRun/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/GRun/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/GRun/V13') ) fragment.transferSystem = cms.PSet( @@ -5017,16 +5017,6 @@ ), appendToDataLabel = cms.string( "HBHE" ) ) -fragment.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -fragment.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) fragment.hltESSBTagRecord = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "JetTagComputerRecord" ), @@ -5253,62 +5243,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -fragment.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -fragment.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) fragment.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -7099,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 ), @@ -12431,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 ), @@ -31132,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 ), @@ -31516,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" ), @@ -31529,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 ), @@ -31554,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 ), @@ -31608,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" ), @@ -31621,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 ), @@ -31646,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( @@ -32311,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" ), @@ -32324,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 ), @@ -32349,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 ), @@ -32403,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" ), @@ -32416,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 ), @@ -32441,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( @@ -32602,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" ), @@ -32615,7 +32555,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 ), @@ -32640,15 +32580,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32694,10 +32635,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" ), @@ -32707,7 +32648,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 ), @@ -32732,15 +32673,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.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -32869,10 +32811,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" ), @@ -32882,7 +32824,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 ), @@ -32907,15 +32849,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) fragment.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32961,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" ), @@ -32974,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 ), @@ -32999,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( @@ -33136,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" ), @@ -33149,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 ), @@ -33174,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( @@ -33489,8 +33434,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -36915,6 +36859,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 ), @@ -37320,10 +37265,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" ), @@ -37333,7 +37278,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 ), @@ -37358,15 +37303,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 ), @@ -37412,10 +37358,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" ), @@ -37425,7 +37371,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 ), @@ -37450,15 +37396,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( @@ -37575,10 +37522,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" ), @@ -37588,7 +37535,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 ), @@ -37613,15 +37560,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( @@ -37738,10 +37686,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" ), @@ -37751,7 +37699,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 ), @@ -37776,15 +37724,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 ), @@ -37830,10 +37779,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" ), @@ -37843,7 +37792,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 ), @@ -37868,15 +37817,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( @@ -38599,10 +38549,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" ), @@ -38612,7 +38562,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 ), @@ -38637,15 +38587,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.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -38691,10 +38642,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" ), @@ -38704,7 +38655,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 ), @@ -38729,15 +38680,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.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -38854,10 +38806,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" ), @@ -38867,7 +38819,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 ), @@ -38892,15 +38844,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.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -38946,10 +38899,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" ), @@ -38959,7 +38912,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 ), @@ -38984,15 +38937,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( @@ -39054,10 +39008,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" ), @@ -39067,7 +39021,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 ), @@ -39092,15 +39046,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( @@ -50124,8 +50079,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -53217,13 +53171,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtag" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtag" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -59829,10 +59783,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" ), @@ -59842,7 +59796,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 ), @@ -59867,15 +59821,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 ), @@ -59921,10 +59876,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" ), @@ -59934,7 +59889,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 ), @@ -59959,15 +59914,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( @@ -76900,6 +76856,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 ), @@ -83578,10 +83535,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" ), @@ -83591,7 +83548,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 ), @@ -83616,15 +83573,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 ), @@ -83669,10 +83627,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" ), @@ -83682,7 +83640,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 ), @@ -83707,15 +83665,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( @@ -88090,13 +88049,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -88313,13 +88272,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForDBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForDBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -91024,7 +90983,7 @@ 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 0df6be875a19b..074e2b36491d1 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_3_0/HIon --type HIon -# /dev/CMSSW_11_3_0/HIon/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/HIon/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/HIon/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/HIon/V13') ) fragment.transferSystem = cms.PSet( @@ -4180,16 +4180,6 @@ ), appendToDataLabel = cms.string( "HBHE" ) ) -fragment.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -fragment.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) fragment.hltESSBTagRecord = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "JetTagComputerRecord" ), @@ -4416,62 +4406,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -fragment.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -fragment.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) fragment.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -7232,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 ), @@ -12428,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 ), @@ -12701,8 +12636,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -32527,7 +32461,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 0439333ef3989..78b861ecc1f7c 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_3_0/PIon --type PIon -# /dev/CMSSW_11_3_0/PIon/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/PIon/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/PIon/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/PIon/V13') ) fragment.transferSystem = cms.PSet( @@ -3651,16 +3651,6 @@ ), appendToDataLabel = cms.string( "HBHE" ) ) -fragment.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -fragment.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) fragment.hltESSBTagRecord = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "JetTagComputerRecord" ), @@ -3887,62 +3877,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -fragment.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -fragment.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) fragment.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -5549,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 dd86147462f48..f01b067180428 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_3_0/PRef --type PRef -# /dev/CMSSW_11_3_0/PRef/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/PRef/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms fragment = cms.ProcessFragment( "HLT" ) fragment.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/PRef/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/PRef/V13') ) fragment.transferSystem = cms.PSet( @@ -3730,16 +3730,6 @@ ), appendToDataLabel = cms.string( "HBHE" ) ) -fragment.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -fragment.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) fragment.hltESSBTagRecord = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "JetTagComputerRecord" ), @@ -3966,62 +3956,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -fragment.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -fragment.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) fragment.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -5812,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 ), @@ -10029,8 +9963,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -11045,7 +10978,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/Tools/confdb.py b/HLTrigger/Configuration/python/Tools/confdb.py index a36c92386f756..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.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.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 24caf0affc4c0..d2ae065a20beb 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,7 +125,7 @@ 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) return process diff --git a/HLTrigger/Configuration/test/OnLine_HLT_FULL.py b/HLTrigger/Configuration/test/OnLine_HLT_FULL.py index ed71cb1809730..7662d05eb98ad 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_3_0/HLT --type FULL --unprescale --process HLTFULL --globaltag auto:run3_hlt_FULL --input file:RelVal_Raw_FULL_DATA.root -# /dev/CMSSW_11_3_0/HLT/V13 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/HLT/V19 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFULL" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/HLT/V13') + tableName = cms.string('/dev/CMSSW_11_3_0/HLT/V19') ) process.transferSystem = cms.PSet( @@ -6404,16 +6404,6 @@ process.HepPDTESSource = cms.ESSource( "HepPDTESSource", pdtFileName = cms.FileInPath( "SimGeneral/HepPDTESSource/data/pythiaparticle.tbl" ) ) -process.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -process.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) process.eegeom = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "EcalMappingRcd" ), @@ -6777,62 +6767,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -process.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -process.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) process.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -8713,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 ), @@ -14045,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 ), @@ -32794,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 ), @@ -33178,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" ), @@ -33191,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 ), @@ -33216,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 ), @@ -33270,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" ), @@ -33283,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 ), @@ -33308,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( @@ -33973,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" ), @@ -33986,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 ), @@ -34011,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 ), @@ -34065,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" ), @@ -34078,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 ), @@ -34103,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( @@ -34264,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" ), @@ -34277,7 +34217,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 ), @@ -34302,15 +34242,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34356,10 +34297,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" ), @@ -34369,7 +34310,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 ), @@ -34394,15 +34335,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.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -34531,10 +34473,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" ), @@ -34544,7 +34486,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 ), @@ -34569,15 +34511,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -34623,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" ), @@ -34636,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 ), @@ -34661,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( @@ -34798,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" ), @@ -34811,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 ), @@ -34836,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( @@ -35151,8 +35096,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -38601,6 +38545,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 ), @@ -39006,10 +38951,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" ), @@ -39019,7 +38964,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 ), @@ -39044,15 +38989,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 ), @@ -39098,10 +39044,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" ), @@ -39111,7 +39057,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 ), @@ -39136,15 +39082,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( @@ -39261,10 +39208,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" ), @@ -39274,7 +39221,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 ), @@ -39299,15 +39246,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( @@ -39424,10 +39372,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" ), @@ -39437,7 +39385,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 ), @@ -39462,15 +39410,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 ), @@ -39516,10 +39465,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" ), @@ -39529,7 +39478,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 ), @@ -39554,15 +39503,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( @@ -40285,10 +40235,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" ), @@ -40298,7 +40248,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 ), @@ -40323,15 +40273,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.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -40377,10 +40328,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" ), @@ -40390,7 +40341,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 ), @@ -40415,15 +40366,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.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -40540,10 +40492,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" ), @@ -40553,7 +40505,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 ), @@ -40578,15 +40530,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.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -40632,10 +40585,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" ), @@ -40645,7 +40598,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 ), @@ -40670,15 +40623,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( @@ -40740,10 +40694,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" ), @@ -40753,7 +40707,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 ), @@ -40778,15 +40732,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( @@ -52194,8 +52149,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -55287,13 +55241,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtag" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtag" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -62309,10 +62263,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" ), @@ -62322,7 +62276,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 ), @@ -62347,15 +62301,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 ), @@ -62401,10 +62356,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" ), @@ -62414,7 +62369,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 ), @@ -62439,15 +62394,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( @@ -80960,6 +80916,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 ), @@ -89194,8 +89151,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -94566,10 +94522,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" ), @@ -94579,7 +94535,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 ), @@ -94604,15 +94560,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 ), @@ -94657,10 +94614,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" ), @@ -94670,7 +94627,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 ), @@ -94695,15 +94652,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( @@ -99093,13 +99051,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -99316,13 +99274,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForDBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForDBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -106166,6 +106124,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 ), @@ -106439,8 +106398,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -134668,7 +134626,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 @@ -134677,11 +134634,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_FULL') if 'MessageLogger' in process.__dict__: - 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.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 a085d4126d8dd..0f3b446df9665 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_3_0/Fake --type Fake --unprescale --process HLTFake --globaltag auto:run1_hlt_Fake --input file:RelVal_Raw_Fake_DATA.root -# /dev/CMSSW_11_3_0/Fake/V5 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/Fake/V8 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFake" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/Fake/V5') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake/V8') ) process.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -343,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 @@ -352,11 +351,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run1_hlt_Fake') if 'MessageLogger' in process.__dict__: - 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.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 2efdc6433fc8f..5ca28322afc46 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_3_0/Fake1 --type Fake1 --unprescale --process HLTFake1 --globaltag auto:run2_hlt_Fake1 --input file:RelVal_Raw_Fake1_DATA.root -# /dev/CMSSW_11_3_0/Fake1/V5 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/Fake1/V8 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFake1" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/Fake1/V5') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake1/V8') ) process.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -360,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 @@ -369,11 +368,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run2_hlt_Fake1') if 'MessageLogger' in process.__dict__: - 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.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 34df4f1d2408c..53bc127f15baa 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_3_0/Fake2 --type Fake2 --unprescale --process HLTFake2 --globaltag auto:run2_hlt_Fake2 --input file:RelVal_Raw_Fake2_DATA.root -# /dev/CMSSW_11_3_0/Fake2/V5 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/Fake2/V8 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTFake2" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/Fake2/V5') + tableName = cms.string('/dev/CMSSW_11_3_0/Fake2/V8') ) process.streams = cms.PSet( A = cms.vstring( 'InitialPD' ) ) @@ -368,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 @@ -377,11 +376,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run2_hlt_Fake2') if 'MessageLogger' in process.__dict__: - 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.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 f0f883c8ef72c..e6e1efaac0562 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_3_0/GRun --type GRun --unprescale --process HLTGRun --globaltag auto:run3_hlt_GRun --input file:RelVal_Raw_GRun_DATA.root -# /dev/CMSSW_11_3_0/GRun/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/GRun/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTGRun" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/GRun/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/GRun/V13') ) process.transferSystem = cms.PSet( @@ -5044,16 +5044,6 @@ process.HepPDTESSource = cms.ESSource( "HepPDTESSource", pdtFileName = cms.FileInPath( "SimGeneral/HepPDTESSource/data/pythiaparticle.tbl" ) ) -process.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -process.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) process.eegeom = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "EcalMappingRcd" ), @@ -5417,62 +5407,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -process.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -process.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) process.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -7353,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 ), @@ -12685,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 ), @@ -31386,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 ), @@ -31770,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" ), @@ -31783,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 ), @@ -31808,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 ), @@ -31862,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" ), @@ -31875,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 ), @@ -31900,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( @@ -32565,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" ), @@ -32578,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 ), @@ -32603,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 ), @@ -32657,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" ), @@ -32670,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 ), @@ -32695,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( @@ -32856,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" ), @@ -32869,7 +32809,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 ), @@ -32894,15 +32834,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauMediumRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -32948,10 +32889,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" ), @@ -32961,7 +32902,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 ), @@ -32986,15 +32927,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.hltHpsPFTauMediumAbsOrRelChargedIsolationDiscriminator = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -33123,10 +33065,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" ), @@ -33136,7 +33078,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 ), @@ -33161,15 +33103,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( "hltParticleFlowForTaus" ) + particleFlowSrc = cms.InputTag( "hltParticleFlowForTaus" ), + verbosity = cms.int32( 0 ) ) process.hltHpsPFTauTightRelativeChargedIsolationDiscriminator = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -33215,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" ), @@ -33228,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 ), @@ -33253,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( @@ -33390,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" ), @@ -33403,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 ), @@ -33428,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( @@ -33743,8 +33688,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -37169,6 +37113,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 ), @@ -37574,10 +37519,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" ), @@ -37587,7 +37532,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 ), @@ -37612,15 +37557,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 ), @@ -37666,10 +37612,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" ), @@ -37679,7 +37625,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 ), @@ -37704,15 +37650,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( @@ -37829,10 +37776,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" ), @@ -37842,7 +37789,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 ), @@ -37867,15 +37814,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( @@ -37992,10 +37940,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" ), @@ -38005,7 +37953,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 ), @@ -38030,15 +37978,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 ), @@ -38084,10 +38033,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" ), @@ -38097,7 +38046,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 ), @@ -38122,15 +38071,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( @@ -38853,10 +38803,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" ), @@ -38866,7 +38816,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 ), @@ -38891,15 +38841,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.hltHpsPFTauTightRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -38945,10 +38896,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" ), @@ -38958,7 +38909,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 ), @@ -38983,15 +38934,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.hltHpsPFTauTightAbsOrRelChargedIsolationDiscriminatorReg = cms.EDProducer( "PFTauDiscriminatorLogicalAndProducer", Prediscriminants = cms.PSet( @@ -39108,10 +39060,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" ), @@ -39121,7 +39073,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 ), @@ -39146,15 +39098,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.hltHpsPFTauMediumRelativeChargedIsolationDiscriminatorReg = cms.EDProducer( "PFRecoTauDiscriminationByIsolation", applyRhoCorrection = cms.bool( False ), @@ -39200,10 +39153,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" ), @@ -39213,7 +39166,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 ), @@ -39238,15 +39191,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( @@ -39308,10 +39262,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" ), @@ -39321,7 +39275,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 ), @@ -39346,15 +39300,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( @@ -50378,8 +50333,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -53471,13 +53425,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtag" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtag" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -60083,10 +60037,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" ), @@ -60096,7 +60050,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 ), @@ -60121,15 +60075,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 ), @@ -60175,10 +60130,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" ), @@ -60188,7 +60143,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 ), @@ -60213,15 +60168,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( @@ -77154,6 +77110,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 ), @@ -83832,10 +83789,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" ), @@ -83845,7 +83802,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 ), @@ -83870,15 +83827,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 ), @@ -83923,10 +83881,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" ), @@ -83936,7 +83894,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 ), @@ -83961,15 +83919,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( @@ -88344,13 +88303,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -88567,13 +88526,13 @@ minimumTransverseMomentum = cms.double( 1.0 ), primaryVertex = cms.InputTag( "hltVerticesPFFilter" ), maximumLongitudinalImpactParameter = cms.double( 17.0 ), - jets = cms.InputTag( "hltPFJetForDBtagAK8" ), + computeGhostTrack = cms.bool( True ), maxDeltaR = cms.double( 0.4 ), candidates = cms.InputTag( "hltParticleFlow" ), jetDirectionUsingGhostTrack = cms.bool( False ), minimumNumberOfPixelHits = cms.int32( 2 ), jetDirectionUsingTracks = cms.bool( False ), - computeGhostTrack = cms.bool( True ), + jets = cms.InputTag( "hltPFJetForDBtagAK8" ), useTrackQuality = cms.bool( False ), ghostTrackPriorDeltaR = cms.double( 0.03 ), maximumChiSquared = cms.double( 5.0 ), @@ -94037,7 +93996,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 @@ -94046,11 +94004,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_GRun') if 'MessageLogger' in process.__dict__: - 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.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 c3c566a3b2ebf..eb6bee4de36f9 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_3_0/HIon --type HIon --unprescale --process HLTHIon --globaltag auto:run3_hlt_HIon --input file:RelVal_Raw_HIon_DATA.root -# /dev/CMSSW_11_3_0/HIon/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/HIon/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTHIon" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/HIon/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/HIon/V13') ) process.transferSystem = cms.PSet( @@ -4207,16 +4207,6 @@ process.HepPDTESSource = cms.ESSource( "HepPDTESSource", pdtFileName = cms.FileInPath( "SimGeneral/HepPDTESSource/data/pythiaparticle.tbl" ) ) -process.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -process.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) process.eegeom = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "EcalMappingRcd" ), @@ -4580,62 +4570,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -process.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -process.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) process.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -7486,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 ), @@ -12682,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 ), @@ -12955,8 +12890,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -34444,7 +34378,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 @@ -34453,11 +34386,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_HIon') if 'MessageLogger' in process.__dict__: - 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.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 2b1b42b532776..b79b955142ba0 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_3_0/PIon --type PIon --unprescale --process HLTPIon --globaltag auto:run3_hlt_PIon --input file:RelVal_Raw_PIon_DATA.root -# /dev/CMSSW_11_3_0/PIon/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/PIon/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTPIon" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/PIon/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/PIon/V13') ) process.transferSystem = cms.PSet( @@ -3678,16 +3678,6 @@ process.HepPDTESSource = cms.ESSource( "HepPDTESSource", pdtFileName = cms.FileInPath( "SimGeneral/HepPDTESSource/data/pythiaparticle.tbl" ) ) -process.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -process.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) process.eegeom = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "EcalMappingRcd" ), @@ -4051,62 +4041,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -process.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -process.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) process.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -5908,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 @@ -5917,11 +5850,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_PIon') if 'MessageLogger' in process.__dict__: - 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.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 6166333fbf565..303d60afdbb9f 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_3_0/PRef --type PRef --unprescale --process HLTPRef --globaltag auto:run3_hlt_PRef --input file:RelVal_Raw_PRef_DATA.root -# /dev/CMSSW_11_3_0/PRef/V9 (CMSSW_11_3_0_pre2) +# /dev/CMSSW_11_3_0/PRef/V13 (CMSSW_11_3_0_pre5) import FWCore.ParameterSet.Config as cms process = cms.Process( "HLTPRef" ) process.HLTConfigVersion = cms.PSet( - tableName = cms.string('/dev/CMSSW_11_3_0/PRef/V9') + tableName = cms.string('/dev/CMSSW_11_3_0/PRef/V13') ) process.transferSystem = cms.PSet( @@ -3757,16 +3757,6 @@ process.HepPDTESSource = cms.ESSource( "HepPDTESSource", pdtFileName = cms.FileInPath( "SimGeneral/HepPDTESSource/data/pythiaparticle.tbl" ) ) -process.ecalMustacheSCParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalMustacheSCParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) -process.ecalSCDynamicDPhiParamsSource = cms.ESSource( "EmptyESSource", - iovIsRunNotTime = cms.bool( True ), - recordName = cms.string( "EcalSCDynamicDPhiParametersRcd" ), - firstValid = cms.vuint32( 1 ) -) process.eegeom = cms.ESSource( "EmptyESSource", iovIsRunNotTime = cms.bool( True ), recordName = cms.string( "EcalMappingRcd" ), @@ -4130,62 +4120,6 @@ includeME0 = cms.bool( False ), includeGEM = cms.bool( False ) ) -process.ecalMustacheSCParametersESProducer = cms.ESProducer( "EcalMustacheSCParametersESProducer", - sqrtLogClustETuning = cms.double( 1.1 ), - appendToDataLabel = cms.string( "" ), - parabolaParameterSets = cms.VPSet( - cms.PSet( pLow = cms.vdouble( -0.0268843, 0.147742, -0.0191235 ), - w0Up = cms.vdouble( -0.00681785, -0.00239516 ), - w1Low = cms.vdouble( 6.99995E-4, -0.00554331 ), - w0Low = cms.vdouble( -0.00681785, -0.00239516 ), - etaMin = cms.double( 0.0 ), - log10EMin = cms.double( -3.0 ), - w1Up = cms.vdouble( 6.99995E-4, -0.00554331 ), - pUp = cms.vdouble( -0.107537, 0.590969, -0.076494 ) - ) - ) -) -process.ecalSCDynamicDPhiParametersESProducer = cms.ESProducer( "EcalSCDynamicDPhiParametersESProducer", - dynamicDPhiParameterSets = cms.VPSet( - cms.PSet( cutoff = cms.double( 0.3 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 2.0 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.22321 ), - width = cms.double( 0.345852 ), - xoffset = cms.double( -0.260256 ), - yoffset = cms.double( 0.0928887 ) - ), - cms.PSet( cutoff = cms.double( 0.45 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.75 ), - saturation = cms.double( 0.12 ), - scale = cms.double( 1.60429 ), - width = cms.double( 0.458106 ), - xoffset = cms.double( -0.642352 ), - yoffset = cms.double( 0.05643 ) - ), - cms.PSet( cutoff = cms.double( 0.55 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 1.479 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.975707 ), - width = cms.double( 0.431729 ), - xoffset = cms.double( -0.18149 ), - yoffset = cms.double( 0.0497038 ) - ), - cms.PSet( cutoff = cms.double( 0.6 ), - eMin = cms.double( 0.0 ), - etaMin = cms.double( 0.0 ), - saturation = cms.double( 0.14 ), - scale = cms.double( 0.946048 ), - width = cms.double( 0.432767 ), - xoffset = cms.double( -0.101172 ), - yoffset = cms.double( 0.0280506 ) - ) - ), - appendToDataLabel = cms.string( "" ) -) process.ecalSeverityLevel = cms.ESProducer( "EcalSeverityLevelESProducer", dbstatusMask = cms.PSet( kBad = cms.vstring( 'kNonRespondingIsolated', @@ -6066,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 ), @@ -10283,8 +10217,7 @@ coolingFactor = cms.double( 0.6 ), Tpurge = cms.double( 2.0 ), Tmin = cms.double( 2.4 ), - uniquetrkweight = cms.double( 0.9 ), - use_vdt = cms.untracked.bool( True ) + uniquetrkweight = cms.double( 0.9 ) ), algorithm = cms.string( "DA_vect" ) ) @@ -11910,7 +11843,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 @@ -11919,11 +11851,12 @@ process.GlobalTag = customiseGlobalTag(process.GlobalTag, globaltag = 'auto:run3_hlt_PRef') if 'MessageLogger' in process.__dict__: - 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.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/Egamma/plugins/HLTEgammaL1MatchFilterPairs.cc b/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterPairs.cc index f0f3d0d0cdada..cb0f04e04e031 100644 --- a/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterPairs.cc +++ b/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterPairs.cc @@ -4,23 +4,12 @@ * \author Monica Vazquez Acosta (CERN) * */ - #include "HLTEgammaL1MatchFilterPairs.h" - -//#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h" - #include "DataFormats/Common/interface/Handle.h" - #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "CondFormats/L1TObjects/interface/L1CaloGeometry.h" -#include "CondFormats/DataRecord/interface/L1CaloGeometryRecord.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include @@ -143,10 +132,6 @@ bool HLTEgammaL1MatchFilterPairs::hltFilter(edm::Event& iEvent, } } - // Get the CaloGeometry - edm::ESHandle l1CaloGeom; - iSetup.get().get(l1CaloGeom); - // look at all candidates, check cuts and add to filter object int n(0); diff --git a/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterRegional.cc b/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterRegional.cc index b15c7c2a7916e..3a347f8db595b 100644 --- a/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterRegional.cc +++ b/HLTrigger/Egamma/plugins/HLTEgammaL1MatchFilterRegional.cc @@ -4,26 +4,14 @@ * \author Monica Vazquez Acosta (CERN) * */ - #include "HLTEgammaL1MatchFilterRegional.h" - -//#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h" - #include "DataFormats/Common/interface/Handle.h" - #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" - #include "DataFormats/L1Trigger/interface/L1JetParticle.h" #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "CondFormats/L1TObjects/interface/L1CaloGeometry.h" -#include "CondFormats/DataRecord/interface/L1CaloGeometryRecord.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #define TWOPI 6.283185308 @@ -92,10 +80,6 @@ bool HLTEgammaL1MatchFilterRegional::hltFilter(edm::Event& iEvent, edm::Ref ref; - // Get the CaloGeometry - edm::ESHandle l1CaloGeom; - iSetup.get().get(l1CaloGeom); - // look at all candidates, check cuts and add to filter object int n(0); diff --git a/HLTrigger/Egamma/plugins/HLTEgammaL1TMatchFilterRegional.cc b/HLTrigger/Egamma/plugins/HLTEgammaL1TMatchFilterRegional.cc index f6873b1eb509e..a32787e5f2fe1 100644 --- a/HLTrigger/Egamma/plugins/HLTEgammaL1TMatchFilterRegional.cc +++ b/HLTrigger/Egamma/plugins/HLTEgammaL1TMatchFilterRegional.cc @@ -4,27 +4,13 @@ * \author Monica Vazquez Acosta (CERN) * */ - #include "HLTEgammaL1TMatchFilterRegional.h" - -//#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h" - #include "DataFormats/Common/interface/Handle.h" - #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" - -//#include "DataFormats/L1Trigger/interface/L1JetParticle.h" -//#include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h" #include "DataFormats/L1Trigger/interface/Jet.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "CondFormats/L1TObjects/interface/L1CaloGeometry.h" -#include "CondFormats/DataRecord/interface/L1CaloGeometryRecord.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #define TWOPI 6.283185308 @@ -103,10 +89,6 @@ bool HLTEgammaL1TMatchFilterRegional::hltFilter(edm::Event& iEvent, edm::Ref ref; - // Get the CaloGeometry - edm::ESHandle l1CaloGeom; - iSetup.get().get(l1CaloGeom); - // look at all candidates, check cuts and add to filter object int n(0); diff --git a/HLTrigger/Egamma/plugins/HLTPMMassFilter.cc b/HLTrigger/Egamma/plugins/HLTPMMassFilter.cc index 37c8ad7634e8e..3e6a0fc37e507 100644 --- a/HLTrigger/Egamma/plugins/HLTPMMassFilter.cc +++ b/HLTrigger/Egamma/plugins/HLTPMMassFilter.cc @@ -5,15 +5,12 @@ * Contact: Jeremy.Werner@cern.ch * Date: February 21, 2007 */ - -#include "FWCore/Framework/interface/ESHandle.h" - #include "HLTPMMassFilter.h" // // constructors and destructor // -HLTPMMassFilter::HLTPMMassFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) { +HLTPMMassFilter::HLTPMMassFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), magFieldToken_(esConsumes()) { candTag_ = iConfig.getParameter("candTag"); beamSpot_ = iConfig.getParameter("beamSpot"); l1EGTag_ = iConfig.getParameter("l1EGCand"); @@ -60,8 +57,7 @@ bool HLTPMMassFilter::hltFilter(edm::Event& iEvent, filterproduct.addCollectionTag(l1EGTag_); } - edm::ESHandle theMagField; - iSetup.get().get(theMagField); + auto const& theMagField = iSetup.getData(magFieldToken_); edm::Handle PrevFilterOutput; iEvent.getByToken(candToken_, PrevFilterOutput); @@ -133,10 +129,10 @@ bool HLTPMMassFilter::hltFilter(edm::Event& iEvent, for (auto& i : scs) { refsc = i; const reco::SuperClusterRef sc = refsc->superCluster(); - TLorentzVector pscPos = approxMomAtVtx(theMagField.product(), vertexPos, sc, 1); + TLorentzVector pscPos = approxMomAtVtx(theMagField, vertexPos, sc, 1); pEleCh1.push_back(pscPos); - TLorentzVector pscEle = approxMomAtVtx(theMagField.product(), vertexPos, sc, -1); + TLorentzVector pscEle = approxMomAtVtx(theMagField, vertexPos, sc, -1); pEleCh2.push_back(pscEle); etaOrig.push_back(sc->eta()); } @@ -170,13 +166,13 @@ bool HLTPMMassFilter::hltFilter(edm::Event& iEvent, return accept; } -TLorentzVector HLTPMMassFilter::approxMomAtVtx(const MagneticField* magField, +TLorentzVector HLTPMMassFilter::approxMomAtVtx(const MagneticField& magField, const GlobalPoint& xvert, const reco::SuperClusterRef sc, int charge) const { GlobalPoint xsc(sc->position().x(), sc->position().y(), sc->position().z()); float energy = sc->energy(); - auto theFTS = trackingTools::ftsFromVertexToPoint(*magField, xsc, xvert, energy, charge); + auto theFTS = trackingTools::ftsFromVertexToPoint(magField, xsc, xvert, energy, charge); float theApproxMomMod = theFTS.momentum().x() * theFTS.momentum().x() + theFTS.momentum().y() * theFTS.momentum().y() + theFTS.momentum().z() * theFTS.momentum().z(); TLorentzVector theApproxMom( diff --git a/HLTrigger/Egamma/plugins/HLTPMMassFilter.h b/HLTrigger/Egamma/plugins/HLTPMMassFilter.h index 5980e5d73a353..87e26ce9e7bac 100644 --- a/HLTrigger/Egamma/plugins/HLTPMMassFilter.h +++ b/HLTrigger/Egamma/plugins/HLTPMMassFilter.h @@ -9,48 +9,25 @@ * Date: February 21, 2007 */ -#include "HLTrigger/HLTcore/interface/HLTFilter.h" - -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "TrackingTools/TrajectoryState/interface/ftsFromVertexToPoint.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/Math/interface/Point3D.h" - -#include "FWCore/Framework/interface/EventSetup.h" - -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "MagneticField/Engine/interface/MagneticField.h" - -#include "DataFormats/Common/interface/Handle.h" - -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" - +#include "DataFormats/EgammaCandidates/interface/Electron.h" +#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" - +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/Math/interface/Point3D.h" #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "TrackingTools/TrajectoryState/interface/ftsFromVertexToPoint.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h" - -// TEST -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "TFile.h" -#include "TDirectory.h" -#include "TH1F.h" -#include "TH2F.h" #include "TLorentzVector.h" -#include "TVector3.h" - -// -// class declaration -// class HLTPMMassFilter : public HLTFilter { public: @@ -62,7 +39,7 @@ class HLTPMMassFilter : public HLTFilter { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - TLorentzVector approxMomAtVtx(const MagneticField* magField, + TLorentzVector approxMomAtVtx(const MagneticField& magField, const GlobalPoint& xvert, const reco::SuperClusterRef sc, int charge) const; @@ -79,6 +56,8 @@ class HLTPMMassFilter : public HLTFilter { bool isElectron1_; bool isElectron2_; edm::InputTag l1EGTag_; + + edm::ESGetToken const magFieldToken_; }; #endif //HLTPMMassFilter_h diff --git a/HLTrigger/HLTanalyzers/plugins/HLTBitAnalyzer.h b/HLTrigger/HLTanalyzers/plugins/HLTBitAnalyzer.h index 7f65296fab83d..d6132f4db1212 100644 --- a/HLTrigger/HLTanalyzers/plugins/HLTBitAnalyzer.h +++ b/HLTrigger/HLTanalyzers/plugins/HLTBitAnalyzer.h @@ -7,7 +7,6 @@ #include "DataFormats/L1TGlobal/interface/GlobalAlgBlk.h" #include "DataFormats/L1TGlobal/interface/GlobalExtBlk.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" diff --git a/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.cc b/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.cc index ec1c30caf659e..a49e9acf1dbaf 100644 --- a/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.cc +++ b/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.cc @@ -13,7 +13,6 @@ #include #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -26,7 +25,7 @@ using namespace std; // // constructors and destructor // -HLTGetDigi::HLTGetDigi(const edm::ParameterSet& ps) { +HLTGetDigi::HLTGetDigi(const edm::ParameterSet& ps) : l1GtParamsToken_(esConsumes()) { EBdigiCollection_ = ps.getParameter("EBdigiCollection"); EEdigiCollection_ = ps.getParameter("EEdigiCollection"); ESdigiCollection_ = ps.getParameter("ESdigiCollection"); @@ -295,9 +294,8 @@ void HLTGetDigi::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup edm::Handle gtMap; edm::Handle gtRR; - edm::ESHandle l1GtPar; - iSetup.get().get(l1GtPar); - int nBx = l1GtPar->gtTotalBxInEvent(); + auto const& l1GtParamsHandle = iSetup.getHandle(l1GtParamsToken_); + auto const nBx = l1GtParamsHandle->gtTotalBxInEvent(); std::unique_ptr newGtEvm(new L1GlobalTriggerEvmReadoutRecord(nBx)); std::unique_ptr newGtMap(new L1GlobalTriggerObjectMapRecord()); diff --git a/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.h b/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.h index 34303d22f6caf..a38adf59ef49c 100644 --- a/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.h +++ b/HLTrigger/HLTanalyzers/plugins/HLTGetDigi.h @@ -67,6 +67,8 @@ class HLTGetDigi : public edm::EDAnalyzer { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: + edm::ESGetToken const l1GtParamsToken_; + edm::InputTag EBdigiCollection_; edm::EDGetTokenT EBdigiToken_; edm::InputTag EEdigiCollection_; diff --git a/HLTrigger/HLTanalyzers/plugins/HLTInfo.cc b/HLTrigger/HLTanalyzers/plugins/HLTInfo.cc index e13aa64d66cac..487d0f46f5066 100644 --- a/HLTrigger/HLTanalyzers/plugins/HLTInfo.cc +++ b/HLTrigger/HLTanalyzers/plugins/HLTInfo.cc @@ -169,8 +169,8 @@ void HLTInfo::analyze(const edm::Handle& hltresults, if (id != cache_id_) { cache_id_ = id; */ - edm::ESHandle menu; - eventSetup.get().get(menu); + auto const& menu = eventSetup.getHandle(l1tUtmTriggerMenuToken_); + //std::map const & algorithmMap_ = &(menu->getAlgorithmMap()); /* // get the bit/name association diff --git a/HLTrigger/HLTanalyzers/plugins/HLTInfo.h b/HLTrigger/HLTanalyzers/plugins/HLTInfo.h index 27a7c850c5d94..7868a0fb05307 100644 --- a/HLTrigger/HLTanalyzers/plugins/HLTInfo.h +++ b/HLTrigger/HLTanalyzers/plugins/HLTInfo.h @@ -1,6 +1,7 @@ #ifndef HLTINFO_H #define HLTINFO_H +#include #include #include @@ -26,7 +27,6 @@ #include "DataFormats/L1TGlobal/interface/GlobalExtBlk.h" #include "DataFormats/METReco/interface/CaloMETCollection.h" #include "FWCore/Common/interface/Provenance.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventPrincipal.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "HLTrigger/HLTcore/interface/HLTPrescaleProvider.h" @@ -41,13 +41,14 @@ namespace edm { typedef std::vector MyStrings; /** \class HLTInfo - * + * * $Date: November 2006 - * $Revision: + * $Revision: * \author P. Bargassa - Rice U. - * $Date: April 2016 - * $Revision: - * \author G. Karapostoli - ULB + + * $Date: April 2016 + * $Revision: + * \author G. Karapostoli - ULB */ class HLTInfo { public: @@ -72,6 +73,8 @@ class HLTInfo { private: HLTInfo(); + edm::ESGetToken l1tUtmTriggerMenuToken_; + // Tree variables float *hltppt, *hltpeta; int L1EvtCnt, HltEvtCnt, nhltpart; @@ -109,7 +112,8 @@ HLTInfo::HLTInfo(edm::ParameterSet const& pset, edm::ConsumesCollector&& iC, T& template HLTInfo::HLTInfo(edm::ParameterSet const& pset, edm::ConsumesCollector& iC, T& module) : HLTInfo() { - hltPrescaleProvider_.reset(new HLTPrescaleProvider(pset, iC, module)); + l1tUtmTriggerMenuToken_ = iC.esConsumes(); + hltPrescaleProvider_ = std::make_unique(pset, iC, module); } #endif diff --git a/HLTrigger/HLTcore/interface/HLTPrescaleRecorder.h b/HLTrigger/HLTcore/interface/HLTPrescaleRecorder.h index 078a1a9996796..eb17eefd5c432 100644 --- a/HLTrigger/HLTcore/interface/HLTPrescaleRecorder.h +++ b/HLTrigger/HLTcore/interface/HLTPrescaleRecorder.h @@ -27,6 +27,7 @@ #include "DataFormats/HLTReco/interface/HLTPrescaleTable.h" #include "CondFormats/HLTObjects/interface/HLTPrescaleTableCond.h" +#include "CondFormats/DataRecord/interface/HLTPrescaleTableRcd.h" #include #include @@ -76,6 +77,7 @@ class HLTPrescaleRecorder : public edm::one::EDProducer hltInputToken_; /// Tag of DB entry (HLT Key Name) (src=4) std::string hltDBTag_; + edm::ESGetToken const hltPrescaleTableCondToken_; /// Prescale service edm::service::PrescaleService* ps_; @@ -84,7 +86,6 @@ class HLTPrescaleRecorder : public edm::one::EDProducer hltHandle_; - edm::ESHandle hltESHandle_; /// payload HLT object trigger::HLTPrescaleTable hlt_; diff --git a/HLTrigger/HLTcore/plugins/HLTPrescaleRecorder.cc b/HLTrigger/HLTcore/plugins/HLTPrescaleRecorder.cc index 97d93ff78bc05..2a4b51dde3282 100644 --- a/HLTrigger/HLTcore/plugins/HLTPrescaleRecorder.cc +++ b/HLTrigger/HLTcore/plugins/HLTPrescaleRecorder.cc @@ -8,19 +8,10 @@ */ #include "HLTrigger/HLTcore/interface/HLTPrescaleRecorder.h" - -#include "CondFormats/HLTObjects/interface/HLTPrescaleTableCond.h" -#include "CondFormats/DataRecord/interface/HLTPrescaleTableRcd.h" - #include "DataFormats/Provenance/interface/ProcessHistory.h" - +#include "DataFormats/Provenance/interface/Timestamp.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/PrescaleService/interface/PrescaleService.h" - -#include "DataFormats/Provenance/interface/Timestamp.h" #include #include @@ -43,10 +34,10 @@ HLTPrescaleRecorder::HLTPrescaleRecorder(const edm::ParameterSet& ps) hltInputTag_(ps.getParameter("hltInputTag")), hltInputToken_(), hltDBTag_(ps.getParameter("hltDBTag")), + hltPrescaleTableCondToken_(esConsumes(edm::ESInputTag("", hltDBTag_))), ps_(nullptr), db_(nullptr), hltHandle_(), - hltESHandle_(), hlt_() { if (src_ == 1) { // Run @@ -155,9 +146,8 @@ void HLTPrescaleRecorder::beginRun(edm::Run const& iRun, const edm::EventSetup& } } else if (src_ == 4) { /// From CondDB (needs ESProducer module as well) - const HLTPrescaleTableRcd& hltRecord(iSetup.get()); - hltRecord.get(hltDBTag_, hltESHandle_); - hlt_ = hltESHandle_->hltPrescaleTable(); + auto const& hltPrescaleTableCond = iSetup.getData(hltPrescaleTableCondToken_); + hlt_ = hltPrescaleTableCond.hltPrescaleTable(); } return; diff --git a/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.cc b/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.cc index ad6da68ce339f..54c0ac6ca21c4 100644 --- a/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.cc +++ b/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.cc @@ -52,13 +52,6 @@ #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" -#include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h" - -#include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h" -#include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h" -#include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h" - #include "CondFormats/L1TObjects/interface/L1GtCondition.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -70,7 +63,6 @@ #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" // constructors HLTLevel1GTSeed::HLTLevel1GTSeed(const edm::ParameterSet& parSet) @@ -79,6 +71,11 @@ HLTLevel1GTSeed::HLTLevel1GTSeed(const edm::ParameterSet& parSet) m_l1GtMenu(nullptr), m_l1GtMenuCacheID(0ULL), + // trigger records + m_l1GtTriggerMenuToken(esConsumes()), + m_l1GtTriggerMaskAlgoTrigRcdToken(esConsumes()), + m_l1GtTriggerMaskTechTrigRcdToken(esConsumes()), + // seeding done via L1 trigger object maps, with objects that fired m_l1UseL1TriggerObjectMaps(parSet.getParameter("L1UseL1TriggerObjectMaps")), @@ -256,8 +253,7 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, } // get the trigger mask from the EventSetup - edm::ESHandle l1GtTmAlgo; - evSetup.get().get(l1GtTmAlgo); + auto const& l1GtTmAlgo = evSetup.getHandle(m_l1GtTriggerMaskAlgoTrigRcdToken); // get L1GlobalTriggerReadoutRecord and GT decision edm::Handle gtReadoutRecord; @@ -291,8 +287,7 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, // seeding done via technical trigger bits if (m_l1TechTriggerSeeding) { // get the technical trigger mask from the EventSetup - edm::ESHandle l1GtTmTech; - evSetup.get().get(l1GtTmTech); + auto const& l1GtTmTech = evSetup.getHandle(m_l1GtTriggerMaskTechTrigRcdToken); // get Global Trigger technical trigger word, update the tokenResult members // from m_l1AlgoLogicParser and get the result for the logical expression @@ -317,8 +312,7 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, unsigned long long l1GtMenuCacheID = evSetup.get().cacheIdentifier(); if (m_l1GtMenuCacheID != l1GtMenuCacheID) { - edm::ESHandle l1GtMenu; - evSetup.get().get(l1GtMenu); + auto const& l1GtMenu = evSetup.getHandle(m_l1GtTriggerMenuToken); m_l1GtMenu = l1GtMenu.product(); m_l1GtMenuCacheID = l1GtMenuCacheID; diff --git a/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.h b/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.h index cb4700f8647d8..4acee0b4121e5 100644 --- a/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.h +++ b/HLTrigger/HLTfilters/plugins/HLTLevel1GTSeed.h @@ -22,21 +22,19 @@ #include // user include files - -// base class -#include "HLTrigger/HLTcore/interface/HLTStreamFilter.h" - +#include "FWCore/Utilities/interface/InputTag.h" +#include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h" +#include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h" +#include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" - #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h" -#include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h" #include "DataFormats/L1GlobalTrigger/interface/L1GtLogicParser.h" - -#include "FWCore/Utilities/interface/InputTag.h" +#include "HLTrigger/HLTcore/interface/HLTStreamFilter.h" // forward declarations -class L1GtTriggerMenu; -class L1GtTriggerMask; class L1GlobalTriggerReadoutRecord; class L1GlobalTriggerObjectMapRecord; namespace edm { @@ -109,6 +107,11 @@ class HLTLevel1GTSeed : public HLTStreamFilter { const L1GtTriggerMenu *m_l1GtMenu; unsigned long long m_l1GtMenuCacheID; + // trigger records + edm::ESGetToken const m_l1GtTriggerMenuToken; + edm::ESGetToken const m_l1GtTriggerMaskAlgoTrigRcdToken; + edm::ESGetToken const m_l1GtTriggerMaskTechTrigRcdToken; + /// logic parser for m_l1SeedsLogicalExpression L1GtLogicParser m_l1AlgoLogicParser; diff --git a/HLTrigger/HLTfilters/plugins/HLTLevel1Pattern.cc b/HLTrigger/HLTfilters/plugins/HLTLevel1Pattern.cc index 8dc181f706c14..694a6a08ccb93 100644 --- a/HLTrigger/HLTfilters/plugins/HLTLevel1Pattern.cc +++ b/HLTrigger/HLTfilters/plugins/HLTLevel1Pattern.cc @@ -24,6 +24,9 @@ #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h" #include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h" #include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h" +#include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" // @@ -51,13 +54,16 @@ class HLTLevel1Pattern : public edm::EDFilter { bool m_invert; bool m_throw; + edm::ESGetToken const m_l1GtTriggerMenuToken; + edm::ESGetToken const m_l1GtTriggerMaskAlgoTrigRcdToken; + edm::ESGetToken const m_l1GtTriggerMaskTechTrigRcdToken; + edm::ESWatcher m_watchL1Menu; edm::ESWatcher m_watchPhysicsMask; edm::ESWatcher m_watchTechnicalMask; }; #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" #include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h" @@ -76,7 +82,10 @@ HLTLevel1Pattern::HLTLevel1Pattern(const edm::ParameterSet& config) m_triggerMasked(false), m_ignoreL1Mask(config.getParameter("ignoreL1Mask")), m_invert(config.getParameter("invert")), - m_throw(config.getParameter("throw")) { + m_throw(config.getParameter("throw")), + m_l1GtTriggerMenuToken(esConsumes()), + m_l1GtTriggerMaskAlgoTrigRcdToken(esConsumes()), + m_l1GtTriggerMaskTechTrigRcdToken(esConsumes()) { m_gtReadoutRecordToken = consumes(m_gtReadoutRecord); std::vector pattern(config.getParameter >("triggerPattern")); if (pattern.size() != m_bunchCrossings.size()) @@ -127,9 +136,7 @@ void HLTLevel1Pattern::fillDescriptions(edm::ConfigurationDescriptions& descript bool HLTLevel1Pattern::filter(edm::Event& event, const edm::EventSetup& setup) { // determine the L1 algo or tech bit to use if (m_watchL1Menu.check(setup)) { - edm::ESHandle h_menu; - setup.get().get(h_menu); - + auto const& h_menu = setup.getHandle(m_l1GtTriggerMenuToken); // look for an Algo L1 bit const AlgorithmMap& algoMap = h_menu->gtAlgorithmAliasMap(); const AlgorithmMap& techMap = h_menu->gtTechnicalTriggerMap(); @@ -156,8 +163,7 @@ bool HLTLevel1Pattern::filter(edm::Event& event, const edm::EventSetup& setup) { // - mask & partition == 0x00 --> fully unmasked // - mask & partition != part. --> unmasked in some partitions, consider as unmasked if (m_watchPhysicsMask.check(setup)) { - edm::ESHandle h_mask; - setup.get().get(h_mask); + auto const& h_mask = setup.getHandle(m_l1GtTriggerMaskAlgoTrigRcdToken); m_triggerMasked = ((h_mask->gtTriggerMask()[m_triggerNumber] & m_daqPartitions) == m_daqPartitions); } } else { @@ -166,8 +172,7 @@ bool HLTLevel1Pattern::filter(edm::Event& event, const edm::EventSetup& setup) { // - mask & partition == 0x00 --> fully unmasked // - mask & partition != part. --> unmasked in some partitions, consider as unmasked if (m_watchTechnicalMask.check(setup)) { - edm::ESHandle h_mask; - setup.get().get(h_mask); + auto const& h_mask = setup.getHandle(m_l1GtTriggerMaskTechTrigRcdToken); m_triggerMasked = ((h_mask->gtTriggerMask()[m_triggerNumber] & m_daqPartitions) == m_daqPartitions); } } diff --git a/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc index 28441229cc793..339bedecfadc4 100644 --- a/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc +++ b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.cc @@ -17,6 +17,7 @@ #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" @@ -26,18 +27,34 @@ // 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_)) { + 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"); + barrelScalings_ = scalings_.getParameter>("barrel"); + overlapScalings_ = scalings_.getParameter>("overlap"); + endcapScalings_ = scalings_.getParameter>("endcap"); } L1TTkMuonFilter::~L1TTkMuonFilter() = default; @@ -54,11 +71,14 @@ void L1TTkMuonFilter::fillDescriptions(edm::ConfigurationDescriptions& descripti 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}); + 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); @@ -88,25 +108,70 @@ bool L1TTkMuonFilter::hltFilter(edm::Event& iEvent, Handle tkMuons; iEvent.getByToken(tkMuonToken_, tkMuons); - // trkMuon - int ntrkmuon(0); + //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()); - if (offlinePt >= min_Pt_ && itkMuon->eta() <= max_Eta_ && itkMuon->eta() >= min_Eta_) { - ntrkmuon++; + 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))); - filterproduct.addObject(trigger::TriggerObjectType::TriggerL1TkMu, ref); + 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(ntrkmuon >= min_N_); + 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)); diff --git a/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h index 9f3d977c8b690..f011045b7e836 100644 --- a/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h +++ b/HLTrigger/HLTfilters/plugins/L1TTkMuonFilter.h @@ -31,6 +31,17 @@ class L1TTkMuonFilter : public HLTFilter { 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 @@ -39,11 +50,15 @@ class L1TTkMuonFilter : public HLTFilter { 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; }; diff --git a/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.cc b/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.cc index 40aa1f2527191..fd6471a614f12 100644 --- a/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.cc +++ b/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.cc @@ -32,6 +32,7 @@ TriggerResultsFilterFromDB::TriggerResultsFilterFromDB(const edm::ParameterSet& config) : m_eventSetupPathsKey(config.getParameter("eventSetupPathsKey")), m_eventSetupWatcher(), + m_alcaRecoTriggerBitsRcdToken(esConsumes()), m_expression(nullptr), m_eventCache(config, consumesCollector()) {} @@ -87,8 +88,8 @@ void TriggerResultsFilterFromDB::parse(const std::string& expression) { // read the triggerConditions from the database void TriggerResultsFilterFromDB::pathsFromSetup(const edm::Event& event, const edm::EventSetup& setup) { // Get map of strings to concatenated list of names of HLT paths from EventSetup: - edm::ESHandle triggerBits; - setup.get().get(triggerBits); + auto const& triggerBits = setup.getHandle(m_alcaRecoTriggerBitsRcdToken); + typedef std::map TriggerMap; const TriggerMap& triggerMap = triggerBits->m_alcarecoToTrig; diff --git a/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.h b/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.h index de02d451b782e..3ee1439bdd85c 100644 --- a/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.h +++ b/HLTrigger/HLTfilters/plugins/TriggerResultsFilterFromDB.h @@ -53,6 +53,7 @@ class TriggerResultsFilterFromDB : public edm::stream::EDFilter<> { /// read the triggerConditions from the database std::string m_eventSetupPathsKey; edm::ESWatcher m_eventSetupWatcher; + edm::ESGetToken const m_alcaRecoTriggerBitsRcdToken; /// evaluator for the trigger condition triggerExpression::Evaluator *m_expression; diff --git a/HLTrigger/JSONMonitoring/plugins/L1TriggerJSONMonitoring.cc b/HLTrigger/JSONMonitoring/plugins/L1TriggerJSONMonitoring.cc index be9f44ab32263..a52f6286e0177 100644 --- a/HLTrigger/JSONMonitoring/plugins/L1TriggerJSONMonitoring.cc +++ b/HLTrigger/JSONMonitoring/plugins/L1TriggerJSONMonitoring.cc @@ -20,7 +20,6 @@ #include "EventFilter/Utilities/interface/FastMonitoringService.h" #include "EventFilter/Utilities/interface/JSONSerializer.h" #include "EventFilter/Utilities/interface/JsonMonitorable.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/LuminosityBlock.h" @@ -150,8 +149,9 @@ class L1TriggerJSONMonitoring : public edm::global::EDAnalyzer< static void writeIniFile(L1TriggerJSONMonitoringData::run const&, unsigned int, std::vector const&); // configuration - const edm::InputTag level1Results_; // InputTag for L1 trigge results - const edm::EDGetTokenT level1ResultsToken_; // Token for L1 trigge results + const edm::InputTag level1Results_; // InputTag for L1 trigger results + const edm::EDGetTokenT level1ResultsToken_; // Token for L1 trigger results + const edm::ESGetToken l1tUtmTriggerMenuRcdToken_; }; // instantiate static data members @@ -160,7 +160,8 @@ constexpr const std::array L1TriggerJSONMonitoring::tcdsTrigger // constructor L1TriggerJSONMonitoring::L1TriggerJSONMonitoring(edm::ParameterSet const& config) : level1Results_(config.getParameter("L1Results")), - level1ResultsToken_(consumes(level1Results_)) {} + level1ResultsToken_(consumes(level1Results_)), + l1tUtmTriggerMenuRcdToken_(esConsumes()) {} // validate the configuration and optionally fill the default values void L1TriggerJSONMonitoring::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -193,8 +194,7 @@ std::shared_ptr L1TriggerJSONMonitoring::globa // read the L1 trigger names from the EventSetup std::vector triggerNames(GlobalAlgBlk::maxPhysicsTriggers, ""s); - edm::ESHandle menuHandle; - setup.get().get(menuHandle); + auto const& menuHandle = setup.getHandle(l1tUtmTriggerMenuRcdToken_); if (menuHandle.isValid()) { for (auto const& algo : menuHandle->getAlgorithmMap()) triggerNames[algo.second.getIndex()] = algo.first; diff --git a/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleaner.h b/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleaner.h index 18ab6d4a6eb44..279e213d92781 100644 --- a/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleaner.h +++ b/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleaner.h @@ -10,11 +10,12 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "RecoMET/METAlgorithms/interface/HcalNoiseAlgo.h" - #include "DataFormats/CaloTowers/interface/CaloTower.h" #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" #include "DataFormats/METReco/interface/HcalNoiseRBX.h" +#include "Geometry/CaloTopology/interface/CaloTowerTopology.h" +#include "Geometry/Records/interface/HcalRecNumberingRecord.h" +#include "RecoMET/METAlgorithms/interface/HcalNoiseAlgo.h" namespace edm { class ConfigurationDescriptions; @@ -28,6 +29,7 @@ class HLTHcalTowerNoiseCleaner : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; private: + edm::ESGetToken const hcalRecNumberingRecordToken_; edm::EDGetTokenT m_theHcalNoiseToken; edm::EDGetTokenT m_theCaloTowerCollectionToken; // parameters diff --git a/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleanerWithrechit.h b/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleanerWithrechit.h index a270f47653b88..5d8e5e388b9b1 100644 --- a/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleanerWithrechit.h +++ b/HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleanerWithrechit.h @@ -10,11 +10,12 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "RecoMET/METAlgorithms/interface/HcalNoiseAlgo.h" - #include "DataFormats/CaloTowers/interface/CaloTower.h" #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" #include "DataFormats/METReco/interface/HcalNoiseRBX.h" +#include "Geometry/CaloTopology/interface/CaloTowerTopology.h" +#include "Geometry/Records/interface/HcalRecNumberingRecord.h" +#include "RecoMET/METAlgorithms/interface/HcalNoiseAlgo.h" namespace edm { class ConfigurationDescriptions; @@ -28,6 +29,7 @@ class HLTHcalTowerNoiseCleanerWithrechit : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; private: + edm::ESGetToken const hcalRecNumberingRecordToken_; edm::EDGetTokenT m_theHcalNoiseToken; edm::EDGetTokenT m_theCaloTowerCollectionToken; // parameters 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/plugins/PixelJetPuId.cc b/HLTrigger/JetMET/plugins/PixelJetPuId.cc index b3509570d70f4..252213bde5bae 100644 --- a/HLTrigger/JetMET/plugins/PixelJetPuId.cc +++ b/HLTrigger/JetMET/plugins/PixelJetPuId.cc @@ -63,6 +63,8 @@ class PixelJetPuId : public edm::global::EDProducer<> { void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override; // ----------member data --------------------------- + edm::ESGetToken const transientTrackRecordToken_; + edm::InputTag m_primaryVertex; edm::InputTag m_tracks; edm::InputTag m_jets; @@ -86,7 +88,8 @@ class PixelJetPuId : public edm::global::EDProducer<> { // // constructors and destructor // -PixelJetPuId::PixelJetPuId(const edm::ParameterSet& iConfig) { +PixelJetPuId::PixelJetPuId(const edm::ParameterSet& iConfig) + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))) { //InputTag m_tracks = iConfig.getParameter("tracks"); tracksToken = consumes >(m_tracks); @@ -167,8 +170,7 @@ void PixelJetPuId::produce(edm::StreamID sid, edm::Event& iEvent, const edm::Eve iEvent.getByToken(primaryVertexToken, primaryVertex); //get Transient Track Builder - edm::ESHandle builder; - iSetup.get().get("TransientTrackBuilder", builder); + auto const& builder = iSetup.getHandle(transientTrackRecordToken_); //init JetTagCollection if (!generaljets.product()->empty()) { diff --git a/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleaner.cc b/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleaner.cc index f2a3f5fd1c7df..cc5b3188984cb 100644 --- a/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleaner.cc +++ b/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleaner.cc @@ -15,42 +15,26 @@ // // // +#include -#include "DataFormats/Common/interface/Handle.h" #include "FWCore/MessageLogger/interface/MessageLogger.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/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/CaloJet.h" #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "Geometry/CaloTopology/interface/CaloTowerTopology.h" -#include "Geometry/Records/interface/HcalRecNumberingRecord.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/Math/interface/Point3D.h" - -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include -#include -#include -#include -#include -#include - #include "HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleaner.h" -//#include - HLTHcalTowerNoiseCleaner::HLTHcalTowerNoiseCleaner(const edm::ParameterSet& iConfig) - : HcalNoiseRBXCollectionTag_(iConfig.getParameter("HcalNoiseRBXCollection")), + : hcalRecNumberingRecordToken_(esConsumes()), + HcalNoiseRBXCollectionTag_(iConfig.getParameter("HcalNoiseRBXCollection")), TowerCollectionTag_(iConfig.getParameter("CaloTowerCollection")), severity_(iConfig.getParameter("severity")), maxNumRBXs_(iConfig.getParameter("maxNumRBXs")), @@ -155,8 +139,7 @@ void HLTHcalTowerNoiseCleaner::produce(edm::Event& iEvent, const edm::EventSetup } //get the calotower topology - edm::ESHandle caloTowerTopology; - iSetup.get().get(caloTowerTopology); + auto const& caloTowerTopology = iSetup.getHandle(hcalRecNumberingRecordToken_); // get the RBXs produced by RecoMET/METProducers/HcalNoiseInfoProducer edm::Handle rbxs_h; diff --git a/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleanerWithrechit.cc b/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleanerWithrechit.cc index b994f12aed157..e2b9a347b94fd 100644 --- a/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleanerWithrechit.cc +++ b/HLTrigger/JetMET/src/HLTHcalTowerNoiseCleanerWithrechit.cc @@ -15,42 +15,27 @@ // // // +#include -#include "DataFormats/Common/interface/Handle.h" #include "FWCore/MessageLogger/interface/MessageLogger.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/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/CaloJet.h" #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" -#include "Geometry/CaloTopology/interface/CaloTowerTopology.h" -#include "Geometry/Records/interface/HcalRecNumberingRecord.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/Math/interface/Point3D.h" - -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include -#include -#include -#include -#include -#include - #include "HLTrigger/JetMET/interface/HLTHcalTowerNoiseCleanerWithrechit.h" -//#include - HLTHcalTowerNoiseCleanerWithrechit::HLTHcalTowerNoiseCleanerWithrechit(const edm::ParameterSet& iConfig) - : HcalNoiseRBXCollectionTag_(iConfig.getParameter("HcalNoiseRBXCollection")), + : hcalRecNumberingRecordToken_(esConsumes()), + HcalNoiseRBXCollectionTag_(iConfig.getParameter("HcalNoiseRBXCollection")), TowerCollectionTag_(iConfig.getParameter("CaloTowerCollection")), severity_(iConfig.getParameter("severity")), maxNumRBXs_(iConfig.getParameter("maxNumRBXs")), @@ -147,8 +132,7 @@ void HLTHcalTowerNoiseCleanerWithrechit::fillDescriptions(edm::ConfigurationDesc void HLTHcalTowerNoiseCleanerWithrechit::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace reco; - edm::ESHandle caloTowerTopology; - iSetup.get().get(caloTowerTopology); + auto const& caloTowerTopology = iSetup.getHandle(hcalRecNumberingRecordToken_); //get the calo MET / MHT edm::Handle tower_h; diff --git a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc index f70eb359c5c5e..49db0a676ecfc 100644 --- a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc +++ b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc @@ -1,31 +1,26 @@ +#include "HLTDiMuonGlbTrkFilter.h" #include "DataFormats/Common/interface/Handle.h" - #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.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 "HLTDiMuonGlbTrkFilter.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeed.h" #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeedCollection.h" - +#include "DataFormats/Math/interface/deltaR.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" +#include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Math/interface/deltaR.h" - -HLTDiMuonGlbTrkFilter::HLTDiMuonGlbTrkFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) { +HLTDiMuonGlbTrkFilter::HLTDiMuonGlbTrkFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), idealMagneticFieldRecordToken_(esConsumes()) { m_muonsTag = iConfig.getParameter("inputMuonCollection"); m_muonsToken = consumes(m_muonsTag); m_candsTag = iConfig.getParameter("inputCandCollection"); @@ -116,7 +111,7 @@ bool HLTDiMuonGlbTrkFilter::hltFilter(edm::Event& iEvent, // Needed for DCA calculation edm::ESHandle bFieldHandle; if (m_maxDCAMuMu < 100.) - iSetup.get().get(bFieldHandle); + bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); for (unsigned int i = 0; i < filteredMuons.size() - 1; ++i) for (unsigned int j = i + 1; j < filteredMuons.size(); ++j) { const reco::Muon& mu1(muons->at(filteredMuons.at(i))); diff --git a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h index 6c2e8cda30dee..f68b58f3aee95 100644 --- a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h +++ b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h @@ -5,6 +5,8 @@ #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" #include "DataFormats/MuonReco/interface/MuonFwd.h" #include "DataFormats/MuonReco/interface/MuonSelectors.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" namespace edm { class ConfigurationDescriptions; @@ -20,6 +22,7 @@ class HLTDiMuonGlbTrkFilter : public HLTFilter { trigger::TriggerFilterObjectWithRefs& filterproduct) const override; private: + edm::ESGetToken const idealMagneticFieldRecordToken_; // 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 diff --git a/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.cc b/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.cc index ffa94e5b78826..589cc8716d105 100644 --- a/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.cc +++ b/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.cc @@ -19,7 +19,6 @@ #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/Math/interface/deltaR.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" using namespace edm; using namespace std; @@ -50,6 +49,7 @@ namespace { HLTMuonDimuonL3Filter::HLTMuonDimuonL3Filter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + idealMagneticFieldRecordToken_(esConsumes()), beamspotTag_(iConfig.getParameter("BeamSpotTag")), beamspotToken_(consumes(beamspotTag_)), candTag_(iConfig.getParameter("CandTag")), @@ -290,8 +290,7 @@ bool HLTMuonDimuonL3Filter::hltFilter(edm::Event& iEvent, } //end of using normal TrajectorySeeds // Needed for DCA calculation - ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); // look at all mucands, check cuts and add to filter object int n = 0; diff --git a/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.h b/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.h index 073d1c3f0003e..a84b54119c1b8 100644 --- a/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.h +++ b/HLTrigger/Muon/plugins/HLTMuonDimuonL3Filter.h @@ -21,8 +21,9 @@ #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "DataFormats/Common/interface/Handle.h" -#include "MagneticField/Engine/interface/MagneticField.h" #include "FWCore/Framework/interface/ESHandle.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" namespace edm { class ConfigurationDescriptions; @@ -44,6 +45,7 @@ class HLTMuonDimuonL3Filter : public HLTFilter { const reco::RecoChargedCandidateRef&, const reco::BeamSpot&, const edm::ESHandle&) const; + const edm::ESGetToken idealMagneticFieldRecordToken_; const edm::InputTag beamspotTag_; const edm::EDGetTokenT beamspotToken_; const edm::InputTag candTag_; // input tag identifying product contains muons diff --git a/HLTrigger/Muon/plugins/HLTMuonL1Filter.cc b/HLTrigger/Muon/plugins/HLTMuonL1Filter.cc index 517079ae68c12..cd7f7be092001 100644 --- a/HLTrigger/Muon/plugins/HLTMuonL1Filter.cc +++ b/HLTrigger/Muon/plugins/HLTMuonL1Filter.cc @@ -17,7 +17,6 @@ #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h" #include "FWCore/Utilities/interface/EDMException.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "TMath.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" @@ -31,6 +30,7 @@ // HLTMuonL1Filter::HLTMuonL1Filter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + l1MuTriggerScalesRcdToken_(esConsumes()), candTag_(iConfig.getParameter("CandTag")), candToken_(consumes(candTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), @@ -130,9 +130,7 @@ bool HLTMuonL1Filter::hltFilter(edm::Event& iEvent, csctfTracks = csctfTracksHandle.product(); // read scales for every event (fast, no need to cache this) - ESHandle scales; - iSetup.get().get(scales); - l1MuTriggerScales = scales.product(); + l1MuTriggerScales = &iSetup.getData(l1MuTriggerScalesRcdToken_); } // get hold of muons that fired the previous level diff --git a/HLTrigger/Muon/plugins/HLTMuonL1Filter.h b/HLTrigger/Muon/plugins/HLTMuonL1Filter.h index 53eb2498d688b..4e279f6c9e153 100644 --- a/HLTrigger/Muon/plugins/HLTMuonL1Filter.h +++ b/HLTrigger/Muon/plugins/HLTMuonL1Filter.h @@ -36,6 +36,8 @@ class HLTMuonL1Filter : public HLTFilter { trigger::TriggerFilterObjectWithRefs& filterproduct) const override; private: + edm::ESGetToken const l1MuTriggerScalesRcdToken_; + /// input tag identifying the product containing muons edm::InputTag candTag_; edm::EDGetTokenT candToken_; diff --git a/HLTrigger/Muon/plugins/HLTMuonL1TFilter.cc b/HLTrigger/Muon/plugins/HLTMuonL1TFilter.cc index b7813b87bb648..7f1ae1066c5d1 100644 --- a/HLTrigger/Muon/plugins/HLTMuonL1TFilter.cc +++ b/HLTrigger/Muon/plugins/HLTMuonL1TFilter.cc @@ -7,21 +7,15 @@ */ #include "HLTMuonL1TFilter.h" - #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" - #include "FWCore/Utilities/interface/EDMException.h" - -#include "FWCore/Framework/interface/ESHandle.h" -#include "TMath.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "TMath.h" #include diff --git a/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.cc b/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.cc index 6dc6f0f533fee..13d2ae1349294 100644 --- a/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.cc +++ b/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.cc @@ -23,8 +23,6 @@ #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/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -32,11 +30,11 @@ #include #include -#include #include HLTMuonTrackMassFilter::HLTMuonTrackMassFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + idealMagneticFieldRecordToken_(esConsumes()), beamspotTag_(iConfig.getParameter("BeamSpotTag")), beamspotToken_(consumes(beamspotTag_)), muonTag_(iConfig.getParameter("CandTag")), @@ -147,8 +145,7 @@ bool HLTMuonTrackMassFilter::hltFilter(edm::Event& iEvent, iEvent.getByToken(beamspotToken_, beamspotHandle); reco::BeamSpot::Point beamspot(beamspotHandle->position()); // Needed for DCA calculation - edm::ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); // // Muons // diff --git a/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.h b/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.h index 6c05e26364638..40830df327523 100644 --- a/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.h +++ b/HLTrigger/Muon/plugins/HLTMuonTrackMassFilter.h @@ -7,6 +7,8 @@ #include "HLTrigger/HLTcore/interface/HLTFilter.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include @@ -30,6 +32,7 @@ class HLTMuonTrackMassFilter : public HLTFilter { const reco::RecoChargedCandidateRef& trackRef) const; private: + edm::ESGetToken const idealMagneticFieldRecordToken_; edm::InputTag beamspotTag_; ///< beamspot used for quality cuts edm::EDGetTokenT beamspotToken_; ///< beamspot used for quality cuts edm::InputTag muonTag_; ///< RecoChargedCandidateCollection (muons) diff --git a/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.cc b/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.cc index 94d71421773ea..508e1c41bc9eb 100644 --- a/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.cc +++ b/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.cc @@ -25,8 +25,6 @@ #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/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -43,6 +41,7 @@ using namespace trigger; // HLTMuonTrimuonL3Filter::HLTMuonTrimuonL3Filter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + idealMagneticFieldRecordToken_(esConsumes()), beamspotTag_(iConfig.getParameter("BeamSpotTag")), beamspotToken_(consumes(beamspotTag_)), candTag_(iConfig.getParameter("CandTag")), @@ -186,8 +185,7 @@ bool HLTMuonTrimuonL3Filter::hltFilter(edm::Event& iEvent, beamSpot = *recoBeamSpotHandle; // Needed for DCA calculation - ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); // needed to compare to L2 vector vl2cands; @@ -283,8 +281,8 @@ bool HLTMuonTrimuonL3Filter::hltFilter(edm::Event& iEvent, // Pt threshold cut double pt2 = cand2->pt(); - // double err2 = tk2->error(0); - // double abspar2 = fabs(tk2->parameter(0)); + // double err2 = tk2->error(0); + // double abspar2 = fabs(tk2->parameter(0)); double ptLx2 = pt2; // Don't convert to 90% efficiency threshold LogDebug("HLTMuonTrimuonL3Filter") << " ... 2nd muon in loop, pt2= " << pt2 << ", ptLx2= " << ptLx2; diff --git a/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.h b/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.h index 225bb24def6e0..3e6e082beead6 100644 --- a/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.h +++ b/HLTrigger/Muon/plugins/HLTMuonTrimuonL3Filter.h @@ -17,6 +17,8 @@ #include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "DataFormats/MuonReco/interface/MuonTrackLinks.h" #include "DataFormats/MuonReco/interface/MuonFwd.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" namespace edm { class ConfigurationDescriptions; @@ -34,6 +36,7 @@ class HLTMuonTrimuonL3Filter : public HLTFilter { private: static bool triggeredByLevel2(const reco::TrackRef& track, std::vector& vcands); + edm::ESGetToken const idealMagneticFieldRecordToken_; edm::InputTag beamspotTag_; edm::EDGetTokenT beamspotToken_; edm::InputTag candTag_; // input tag identifying product contains muons diff --git a/HLTrigger/Muon/test/HLTMuonRateAnalyzer.cc b/HLTrigger/Muon/test/HLTMuonRateAnalyzer.cc index 3ec4e5a5d9d20..514a55e17b9c9 100644 --- a/HLTrigger/Muon/test/HLTMuonRateAnalyzer.cc +++ b/HLTrigger/Muon/test/HLTMuonRateAnalyzer.cc @@ -11,7 +11,6 @@ #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 "DataFormats/TrackReco/interface/Track.h" diff --git a/HLTrigger/Muon/test/HLTMuonRateAnalyzerWithWeight.cc b/HLTrigger/Muon/test/HLTMuonRateAnalyzerWithWeight.cc index 1cea8f16049ad..f3bdd2a5064ab 100644 --- a/HLTrigger/Muon/test/HLTMuonRateAnalyzerWithWeight.cc +++ b/HLTrigger/Muon/test/HLTMuonRateAnalyzerWithWeight.cc @@ -11,7 +11,6 @@ #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 "DataFormats/L1Trigger/interface/L1MuonParticle.h" #include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h" diff --git a/HLTrigger/Muon/test/HLTMuonTurnOnAnalyzer.cc b/HLTrigger/Muon/test/HLTMuonTurnOnAnalyzer.cc index 055cbcb6ab31c..67c9d9d82399a 100644 --- a/HLTrigger/Muon/test/HLTMuonTurnOnAnalyzer.cc +++ b/HLTrigger/Muon/test/HLTMuonTurnOnAnalyzer.cc @@ -11,7 +11,6 @@ #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 "DataFormats/L1Trigger/interface/L1MuonParticle.h" diff --git a/HLTrigger/Timer/plugins/FastTimerService.cc b/HLTrigger/Timer/plugins/FastTimerService.cc index 62abb7a78f1fe..7d9eaefdfe613 100644 --- a/HLTrigger/Timer/plugins/FastTimerService.cc +++ b/HLTrigger/Timer/plugins/FastTimerService.cc @@ -34,6 +34,7 @@ using json = nlohmann::json; #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/Exception.h" #include "FWCore/Utilities/interface/StreamID.h" #include "HLTrigger/Timer/interface/memory_usage.h" #include "HLTrigger/Timer/interface/processor_model.h" @@ -766,7 +767,8 @@ void FastTimerService::PlotsPerJob::fill_lumi(AtomicResources const& data, unsig /////////////////////////////////////////////////////////////////////////////// FastTimerService::FastTimerService(const edm::ParameterSet& config, edm::ActivityRegistry& registry) - : // configuration + : tbb::task_scheduler_observer(true), + // configuration callgraph_(), // job configuration concurrent_lumis_(0), @@ -1099,6 +1101,7 @@ void FastTimerService::postSourceLumi(edm::LuminosityBlockIndex index) { } void FastTimerService::postEndJob() { + guard_.finalize(); if (print_job_summary_) { edm::LogVerbatim out("FastReport"); printSummary(out, job_summary_, "Job"); @@ -1662,17 +1665,68 @@ void FastTimerService::postModuleStreamEndLumi(edm::StreamContext const& sc, edm thread().measure_and_accumulate(lumi_transition_[index]); } -void FastTimerService::on_scheduler_entry(bool worker) { - // initialise the measurement point for a thread that has newly joining the TBB pool - thread().measure(); +FastTimerService::ThreadGuard::ThreadGuard() { + auto err = ::pthread_key_create(&key_, retire_thread); + if (err) { + throw cms::Exception("FastTimerService") << "ThreadGuard key creation failed: " << ::strerror(err); + } } -void FastTimerService::on_scheduler_exit(bool worker) { - // account any resources used or freed by the thread before leaving the TBB pool - thread().measure_and_accumulate(overhead_); +// If this is a new thread, register it and return true +bool FastTimerService::ThreadGuard::register_thread(FastTimerService::AtomicResources& r) { + auto ptr = ::pthread_getspecific(key_); + + if (not ptr) { + auto p = thread_resources_.emplace_back(std::make_shared(r)); + auto pp = new std::shared_ptr(*p); + auto err = ::pthread_setspecific(key_, pp); + if (err) { + throw cms::Exception("FastTimerService") << "ThreadGuard pthread_setspecific failed: " << ::strerror(err); + } + return true; + } + return false; +} + +std::shared_ptr* FastTimerService::ThreadGuard::ptr(void* p) { + return static_cast*>(p); +} + +// called when a thread exits +void FastTimerService::ThreadGuard::retire_thread(void* p) { + auto ps = ptr(p); + auto expected = true; + if ((*ps)->live_.compare_exchange_strong(expected, false)) { + // account any resources used or freed by the thread before leaving the TBB pool + (*ps)->measurement_.measure_and_accumulate((*ps)->resource_); + } + delete ps; } -FastTimerService::Measurement& FastTimerService::thread() { return threads_.local(); } +// finalize all threads that have not retired +void FastTimerService::ThreadGuard::finalize() { + for (auto& p : thread_resources_) { + auto expected = true; + if (p->live_.compare_exchange_strong(expected, false)) { + p->measurement_.measure_and_accumulate(p->resource_); + } + } +} + +FastTimerService::Measurement& FastTimerService::ThreadGuard::thread() { + return (*ptr(::pthread_getspecific(key_)))->measurement_; +} + +void FastTimerService::on_scheduler_entry(bool worker) { + if (guard_.register_thread(overhead_)) { + // initialise the measurement point for a thread that has newly joined the TBB pool + thread().measure(); + } +} + +void FastTimerService::on_scheduler_exit(bool worker) {} + +FastTimerService::Measurement& FastTimerService::thread() { return guard_.thread(); } // describe the module's configuration void FastTimerService::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { diff --git a/HLTrigger/Timer/plugins/FastTimerService.h b/HLTrigger/Timer/plugins/FastTimerService.h index ac8dc872ec89b..f7616173e5ebd 100644 --- a/HLTrigger/Timer/plugins/FastTimerService.h +++ b/HLTrigger/Timer/plugins/FastTimerService.h @@ -3,6 +3,7 @@ // system headers #include +#include // C++ headers #include @@ -455,9 +456,33 @@ class FastTimerService : public tbb::task_scheduler_observer { std::vector run_summary_; // whole event time accounting per-run std::mutex summary_mutex_; // synchronise access to the summary objects across different threads - // per-thread quantities, lazily allocated - tbb::enumerable_thread_specific, tbb::ets_key_per_instance> - threads_; + // + struct ThreadGuard { + struct specific_t { + specific_t(AtomicResources& r) : resource_(r), live_(true) {} + ~specific_t() = default; + + Measurement measurement_; + AtomicResources& resource_; + std::atomic live_; + }; + + ThreadGuard(); + ~ThreadGuard() = default; + + static void retire_thread(void* t); + static std::shared_ptr* ptr(void* p); + + bool register_thread(FastTimerService::AtomicResources& r); + Measurement& thread(); + void finalize(); + + tbb::concurrent_vector> thread_resources_; + pthread_key_t key_; + }; + + // + ThreadGuard guard_; // atomic variables to keep track of the completion of each step, process by process std::unique_ptr[]> subprocess_event_check_; 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/HLTDisplacedmumuVtxProducer.cc b/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.cc index 0530724aaeab6..0569a594034e3 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.cc @@ -3,7 +3,6 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - #include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" @@ -11,18 +10,13 @@ #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" - #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/TrackReco/interface/Track.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" -#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/Common/interface/RefToBase.h" - +#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" +#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "HLTDisplacedmumuVtxProducer.h" using namespace edm; @@ -33,7 +27,8 @@ using namespace trigger; // constructors and destructor // HLTDisplacedmumuVtxProducer::HLTDisplacedmumuVtxProducer(const edm::ParameterSet& iConfig) - : srcTag_(iConfig.getParameter("Src")), + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + srcTag_(iConfig.getParameter("Src")), srcToken_(consumes(srcTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), previousCandToken_(consumes(previousCandTag_)), @@ -72,9 +67,8 @@ void HLTDisplacedmumuVtxProducer::produce(edm::StreamID, edm::Event& iEvent, con Handle mucands; iEvent.getByToken(srcToken_, mucands); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); std::unique_ptr vertexCollection(new VertexCollection()); diff --git a/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.h b/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.h index 6ff338cd99df6..403f828a20cb9 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTDisplacedmumuVtxProducer.h @@ -21,6 +21,9 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" + #include namespace edm { @@ -37,6 +40,7 @@ class HLTDisplacedmumuVtxProducer : public edm::global::EDProducer<> { private: bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector& ref2) const; + const edm::ESGetToken transientTrackRecordToken_; const edm::InputTag srcTag_; const edm::EDGetTokenT srcToken_; const edm::InputTag previousCandTag_; diff --git a/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.cc b/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.cc index 931c0ba45e8b8..b56605d3c7992 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.cc @@ -1,9 +1,7 @@ #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - #include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" @@ -11,18 +9,13 @@ #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" - #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/TrackReco/interface/Track.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" -#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/Common/interface/RefToBase.h" - +#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" +#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "HLTDisplacedmumumuVtxProducer.h" using namespace edm; @@ -33,7 +26,8 @@ using namespace trigger; // constructors and destructor // HLTDisplacedmumumuVtxProducer::HLTDisplacedmumumuVtxProducer(const edm::ParameterSet& iConfig) - : srcTag_(iConfig.getParameter("Src")), + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + srcTag_(iConfig.getParameter("Src")), srcToken_(consumes(srcTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), previousCandToken_(consumes(previousCandTag_)), @@ -70,9 +64,8 @@ void HLTDisplacedmumumuVtxProducer::produce(edm::StreamID, edm::Event& iEvent, c Handle mucands; iEvent.getByToken(srcToken_, mucands); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); std::unique_ptr vertexCollection(new VertexCollection()); diff --git a/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.h b/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.h index cc0fab1a9fd12..ca954b62f318d 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTDisplacedmumumuVtxProducer.h @@ -21,6 +21,8 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include namespace edm { @@ -37,6 +39,7 @@ class HLTDisplacedmumumuVtxProducer : public edm::global::EDProducer<> { private: bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector& ref2) const; + const edm::ESGetToken transientTrackRecordToken_; const edm::InputTag srcTag_; const edm::EDGetTokenT srcToken_; const edm::InputTag previousCandTag_; diff --git a/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.cc b/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.cc index 858acbb80bc1b..b2a4b13cb72f7 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.cc @@ -1,9 +1,7 @@ #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - #include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" @@ -11,18 +9,13 @@ #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" - #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/TrackReco/interface/Track.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" -#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/Common/interface/RefToBase.h" - +#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" +#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "HLTDisplacedtktkVtxProducer.h" using namespace edm; @@ -33,7 +26,8 @@ using namespace trigger; // constructors and destructor // HLTDisplacedtktkVtxProducer::HLTDisplacedtktkVtxProducer(const edm::ParameterSet& iConfig) - : srcTag_(iConfig.getParameter("Src")), + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + srcTag_(iConfig.getParameter("Src")), srcToken_(consumes(srcTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), previousCandToken_(consumes(previousCandTag_)), @@ -45,9 +39,7 @@ HLTDisplacedtktkVtxProducer::HLTDisplacedtktkVtxProducer(const edm::ParameterSet massParticle1_(iConfig.getParameter("massParticle1")), massParticle2_(iConfig.getParameter("massParticle2")), chargeOpt_(iConfig.getParameter("ChargeOpt")), - triggerTypeDaughters_(iConfig.getParameter("triggerTypeDaughters")) - -{ + triggerTypeDaughters_(iConfig.getParameter("triggerTypeDaughters")) { produces(); } @@ -81,9 +73,8 @@ void HLTDisplacedtktkVtxProducer::produce(edm::Event& iEvent, const edm::EventSe Handle trackcands; iEvent.getByToken(srcToken_, trackcands); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); std::unique_ptr vertexCollection(new VertexCollection()); diff --git a/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.h b/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.h index ede224a3e548b..949c209d7c012 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTDisplacedtktkVtxProducer.h @@ -24,6 +24,8 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include namespace edm { @@ -40,6 +42,7 @@ class HLTDisplacedtktkVtxProducer : public edm::stream::EDProducer<> { private: bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector& ref2) const; + const edm::ESGetToken transientTrackRecordToken_; const edm::InputTag srcTag_; const edm::EDGetTokenT srcToken_; const edm::InputTag previousCandTag_; diff --git a/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.cc b/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.cc index 50eb2ecd073f6..f5a54a6a986c6 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.cc @@ -3,7 +3,6 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - #include "DataFormats/Candidate/interface/CandidateFwd.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" @@ -11,18 +10,13 @@ #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" - #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/TrackReco/interface/Track.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" -#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/Common/interface/RefToBase.h" - +#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" +#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "HLTDisplacedtktktkVtxProducer.h" using namespace edm; @@ -33,7 +27,8 @@ using namespace trigger; // constructors and destructor // HLTDisplacedtktktkVtxProducer::HLTDisplacedtktktkVtxProducer(const edm::ParameterSet& iConfig) - : srcTag_(iConfig.getParameter("Src")), + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + srcTag_(iConfig.getParameter("Src")), srcToken_(consumes(srcTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), previousCandToken_(consumes(previousCandTag_)), @@ -52,9 +47,7 @@ HLTDisplacedtktktkVtxProducer::HLTDisplacedtktktkVtxProducer(const edm::Paramete massParticle3_(iConfig.getParameter("massParticle3")), chargeOpt_(iConfig.getParameter("ChargeOpt")), resOpt_(iConfig.getParameter("ResOpt")), - triggerTypeDaughters_(iConfig.getParameter("triggerTypeDaughters")) - -{ + triggerTypeDaughters_(iConfig.getParameter("triggerTypeDaughters")) { produces(); firstTrackMass = massParticle1_; @@ -112,9 +105,8 @@ void HLTDisplacedtktktkVtxProducer::produce(edm::Event& iEvent, const edm::Event if (trackcands->size() < 3) return; - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); std::unique_ptr vertexCollection(new VertexCollection()); diff --git a/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.h b/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.h index 877405a1bdbbe..f3138ca5d3e2e 100644 --- a/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTDisplacedtktktkVtxProducer.h @@ -24,6 +24,8 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include namespace edm { @@ -40,6 +42,7 @@ class HLTDisplacedtktktkVtxProducer : public edm::stream::EDProducer<> { private: bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector& ref2) const; + const edm::ESGetToken transientTrackRecordToken_; const edm::InputTag srcTag_; const edm::EDGetTokenT srcToken_; const edm::InputTag previousCandTag_; diff --git a/HLTrigger/btau/plugins/HLTmmkFilter.cc b/HLTrigger/btau/plugins/HLTmmkFilter.cc index a920c18840478..8c970e872917e 100644 --- a/HLTrigger/btau/plugins/HLTmmkFilter.cc +++ b/HLTrigger/btau/plugins/HLTmmkFilter.cc @@ -35,6 +35,8 @@ using namespace trigger; // ---------------------------------------------------------------------- HLTmmkFilter::HLTmmkFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + idealMagneticFieldRecordToken_(esConsumes()), muCandTag_(iConfig.getParameter("MuCand")), muCandToken_(consumes(muCandTag_)), trkCandTag_(iConfig.getParameter("TrackCand")), @@ -95,18 +97,15 @@ bool HLTmmkFilter::hltFilter(edm::Event& iEvent, unique_ptr output(new CandidateCollection()); unique_ptr vertexCollection(new VertexCollection()); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); - //get the beamspot position + // get the beamspot position edm::Handle recoBeamSpotHandle; iEvent.getByToken(beamSpotToken_, recoBeamSpotHandle); const reco::BeamSpot& vertexBeamSpot = *recoBeamSpotHandle; - ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); - + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); const MagneticField* magField = bFieldHandle.product(); TSCBLBuilderNoMaterial blsBuilder; diff --git a/HLTrigger/btau/plugins/HLTmmkFilter.h b/HLTrigger/btau/plugins/HLTmmkFilter.h index 9d7127a21b2a3..8ee7444e67f2b 100644 --- a/HLTrigger/btau/plugins/HLTmmkFilter.h +++ b/HLTrigger/btau/plugins/HLTmmkFilter.h @@ -18,16 +18,19 @@ // Last Modification: 13.02.2007 // -// system include files #include #include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/Engine/interface/MagneticField.h" + namespace edm { class ConfigurationDescriptions; } -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -// ---------------------------------------------------------------------- namespace reco { class Candidate; @@ -53,6 +56,9 @@ class HLTmmkFilter : public HLTFilter { static int overlap(const reco::Candidate&, const reco::Candidate&); static FreeTrajectoryState initialFreeState(const reco::Track&, const MagneticField*); + const edm::ESGetToken transientTrackRecordToken_; + const edm::ESGetToken idealMagneticFieldRecordToken_; + edm::InputTag muCandTag_; edm::EDGetTokenT muCandToken_; edm::InputTag trkCandTag_; diff --git a/HLTrigger/btau/plugins/HLTmmkkFilter.cc b/HLTrigger/btau/plugins/HLTmmkkFilter.cc index fabbb20d964bf..17fb2922c5854 100644 --- a/HLTrigger/btau/plugins/HLTmmkkFilter.cc +++ b/HLTrigger/btau/plugins/HLTmmkkFilter.cc @@ -2,29 +2,20 @@ #include #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Math/interface/deltaPhi.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" - -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" - -#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" -#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h" #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" - -#include "DataFormats/Math/interface/deltaPhi.h" - +#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" +#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "HLTmmkkFilter.h" using namespace edm; @@ -35,6 +26,8 @@ using namespace trigger; // ---------------------------------------------------------------------- HLTmmkkFilter::HLTmmkkFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + idealMagneticFieldRecordToken_(esConsumes()), muCandTag_(iConfig.getParameter("MuCand")), muCandToken_(consumes(muCandTag_)), trkCandTag_(iConfig.getParameter("TrackCand")), @@ -98,18 +91,15 @@ bool HLTmmkkFilter::hltFilter(edm::Event& iEvent, unique_ptr output(new CandidateCollection()); unique_ptr vertexCollection(new VertexCollection()); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); - //get the beamspot position + // get the beamspot position edm::Handle recoBeamSpotHandle; iEvent.getByToken(beamSpotToken_, recoBeamSpotHandle); const reco::BeamSpot& vertexBeamSpot = *recoBeamSpotHandle; - ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); - + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); const MagneticField* magField = bFieldHandle.product(); TSCBLBuilderNoMaterial blsBuilder; diff --git a/HLTrigger/btau/plugins/HLTmmkkFilter.h b/HLTrigger/btau/plugins/HLTmmkkFilter.h index 708250d4e1bf2..c7d3be929c249 100644 --- a/HLTrigger/btau/plugins/HLTmmkkFilter.h +++ b/HLTrigger/btau/plugins/HLTmmkkFilter.h @@ -18,16 +18,19 @@ // Last Modification: 13.02.2007 // -// system include files #include #include "HLTrigger/HLTcore/interface/HLTFilter.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/Engine/interface/MagneticField.h" + namespace edm { class ConfigurationDescriptions; } -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -// ---------------------------------------------------------------------- namespace reco { class Candidate; @@ -53,6 +56,9 @@ class HLTmmkkFilter : public HLTFilter { static int overlap(const reco::Candidate &, const reco::Candidate &); static FreeTrajectoryState initialFreeState(const reco::Track &, const MagneticField *); + const edm::ESGetToken transientTrackRecordToken_; + const edm::ESGetToken idealMagneticFieldRecordToken_; + edm::InputTag muCandTag_; edm::EDGetTokenT muCandToken_; edm::InputTag trkCandTag_; diff --git a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc index 8727c463bff60..ed46fdb03ab6f 100644 --- a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc @@ -2,25 +2,20 @@ #include #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h" #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" - #include "HLTmumutkVtxProducer.h" -#include using namespace edm; using namespace reco; @@ -29,13 +24,15 @@ using namespace trigger; // ---------------------------------------------------------------------- HLTmumutkVtxProducer::HLTmumutkVtxProducer(const edm::ParameterSet& iConfig) - : muCandTag_(iConfig.getParameter("MuCand")), + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + muCandTag_(iConfig.getParameter("MuCand")), muCandToken_(consumes(muCandTag_)), trkCandTag_(iConfig.getParameter("TrackCand")), trkCandToken_(consumes(trkCandTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), previousCandToken_(consumes(previousCandTag_)), mfName_(iConfig.getParameter("SimpleMagneticField")), + idealMagneticFieldRecordToken_(esConsumes(edm::ESInputTag("", mfName_))), thirdTrackMass_(iConfig.getParameter("ThirdTrackMass")), maxEta_(iConfig.getParameter("MaxEta")), minPt_(iConfig.getParameter("MinPt")), @@ -78,17 +75,15 @@ void HLTmumutkVtxProducer::produce(edm::Event& iEvent, const edm::EventSetup& iS Handle mucands; iEvent.getByToken(muCandToken_, mucands); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); //get the beamspot position edm::Handle recoBeamSpotHandle; iEvent.getByToken(beamSpotToken_, recoBeamSpotHandle); //get the b field - ESHandle bFieldHandle; - iSetup.get().get(mfName_, bFieldHandle); + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); const MagneticField* magField = bFieldHandle.product(); TSCBLBuilderNoMaterial blsBuilder; diff --git a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h index b178c11b71b6c..84a8890e4035a 100644 --- a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h @@ -24,6 +24,10 @@ #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/Engine/interface/MagneticField.h" #include namespace edm { @@ -52,6 +56,8 @@ class HLTmumutkVtxProducer : public edm::stream::EDProducer<> { static FreeTrajectoryState initialFreeState(const reco::Track&, const MagneticField*); bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector& ref2) const; + const edm::ESGetToken transientTrackRecordToken_; + const edm::InputTag muCandTag_; const edm::EDGetTokenT muCandToken_; const edm::InputTag trkCandTag_; @@ -60,6 +66,7 @@ class HLTmumutkVtxProducer : public edm::stream::EDProducer<> { const edm::EDGetTokenT previousCandToken_; const std::string mfName_; + const edm::ESGetToken idealMagneticFieldRecordToken_; const double thirdTrackMass_; const double maxEta_; diff --git a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc index 4a69670edefce..0caf95649a1f9 100644 --- a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc @@ -5,23 +5,18 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" - #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h" #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" - #include "HLTmumutktkVtxProducer.h" -#include -#include "TMath.h" using namespace edm; using namespace reco; @@ -30,13 +25,15 @@ using namespace trigger; // ---------------------------------------------------------------------- HLTmumutktkVtxProducer::HLTmumutktkVtxProducer(const edm::ParameterSet& iConfig) - : muCandTag_(iConfig.getParameter("MuCand")), + : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + muCandTag_(iConfig.getParameter("MuCand")), muCandToken_(consumes(muCandTag_)), trkCandTag_(iConfig.getParameter("TrackCand")), trkCandToken_(consumes(trkCandTag_)), previousCandTag_(iConfig.getParameter("PreviousCandTag")), previousCandToken_(consumes(previousCandTag_)), mfName_(iConfig.getParameter("SimpleMagneticField")), + idealMagneticFieldRecordToken_(esConsumes(edm::ESInputTag("", mfName_))), thirdTrackMass_(iConfig.getParameter("ThirdTrackMass")), fourthTrackMass_(iConfig.getParameter("FourthTrackMass")), maxEta_(iConfig.getParameter("MaxEta")), @@ -88,17 +85,15 @@ void HLTmumutktkVtxProducer::produce(edm::Event& iEvent, const edm::EventSetup& Handle mucands; iEvent.getByToken(muCandToken_, mucands); - //get the transient track builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + // get the transient track builder + auto const& theB = iSetup.getHandle(transientTrackRecordToken_); - //get the beamspot position + // get the beamspot position edm::Handle recoBeamSpotHandle; iEvent.getByToken(beamSpotToken_, recoBeamSpotHandle); - //get the b field - ESHandle bFieldHandle; - iSetup.get().get(mfName_, bFieldHandle); + // get the b field + auto const& bFieldHandle = iSetup.getHandle(idealMagneticFieldRecordToken_); const MagneticField* magField = bFieldHandle.product(); TSCBLBuilderNoMaterial blsBuilder; diff --git a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h index 930f5d1968cb5..f0fe3a1dee872 100644 --- a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h @@ -7,9 +7,6 @@ /**\class HLTmumutktkVtxProducer */ -// system include files -#include - #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/Event.h" @@ -20,7 +17,12 @@ #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/Engine/interface/MagneticField.h" #include +#include namespace edm { class ConfigurationDescriptions; @@ -48,6 +50,8 @@ class HLTmumutktkVtxProducer : public edm::stream::EDProducer<> { static FreeTrajectoryState initialFreeState(const reco::Track&, const MagneticField*); bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector& ref2) const; + const edm::ESGetToken transientTrackRecordToken_; + const edm::InputTag muCandTag_; const edm::EDGetTokenT muCandToken_; const edm::InputTag trkCandTag_; @@ -56,6 +60,8 @@ class HLTmumutktkVtxProducer : public edm::stream::EDProducer<> { const edm::EDGetTokenT previousCandToken_; const std::string mfName_; + const edm::ESGetToken idealMagneticFieldRecordToken_; + const double thirdTrackMass_; const double fourthTrackMass_; const double maxEta_; diff --git a/HLTrigger/special/plugins/EcalMIPRecHitFilter.cc b/HLTrigger/special/plugins/EcalMIPRecHitFilter.cc index 3e2966bade2d3..87d37ed90b151 100644 --- a/HLTrigger/special/plugins/EcalMIPRecHitFilter.cc +++ b/HLTrigger/special/plugins/EcalMIPRecHitFilter.cc @@ -63,6 +63,11 @@ class EcalMIPRecHitFilter : public edm::EDFilter { bool filter(edm::Event&, edm::EventSetup const&) override; // ----------member data --------------------------- + const edm::ESGetToken caloTopologyRecordToken_; + const edm::ESGetToken ecalIntercalibConstantsRcdToken_; + const edm::ESGetToken ecalLaserDbRecordToken_; + const edm::ESGetToken ecalADCToGeVConstantRcdToken_; + const edm::EDGetTokenT EcalRecHitToken_; const double minAmp1_; const double minAmp2_; @@ -75,7 +80,11 @@ class EcalMIPRecHitFilter : public edm::EDFilter { // constructors and destructor // EcalMIPRecHitFilter::EcalMIPRecHitFilter(const edm::ParameterSet& iConfig) - : EcalRecHitToken_(consumes(iConfig.getParameter("EcalRecHitCollection"))), + : caloTopologyRecordToken_(esConsumes()), + ecalIntercalibConstantsRcdToken_(esConsumes()), + ecalLaserDbRecordToken_(esConsumes()), + ecalADCToGeVConstantRcdToken_(esConsumes()), + EcalRecHitToken_(consumes(iConfig.getParameter("EcalRecHitCollection"))), minAmp1_(iConfig.getUntrackedParameter("AmpMinSeed", 0.063)), minAmp2_(iConfig.getUntrackedParameter("AmpMin2", 0.045)), minSingleAmp_(iConfig.getUntrackedParameter("SingleAmpMin", 0.108)), @@ -109,23 +118,17 @@ bool EcalMIPRecHitFilter::filter(edm::Event& iEvent, edm::EventSetup const& iSet return false; } - edm::ESHandle caloTopo; - iSetup.get().get(caloTopo); + auto const& caloTopo = iSetup.getHandle(caloTopologyRecordToken_); // Intercalib constants - edm::ESHandle pIcal; - iSetup.get().get(pIcal); - const EcalIntercalibConstants* ical = pIcal.product(); - const EcalIntercalibConstantMap& icalMap = ical->getMap(); - - edm::ESHandle pLaser; - iSetup.get().get(pLaser); - - edm::ESHandle pAgc; - iSetup.get().get(pAgc); - const EcalADCToGeVConstant* agc = pAgc.product(); - //std::cout << "Global EB ADC->GeV scale: " << agc->getEBValue() << " GeV/ADC count" ; - float adcconst = agc->getEBValue(); + auto const& ical = iSetup.getData(ecalIntercalibConstantsRcdToken_); + const EcalIntercalibConstantMap& icalMap = ical.getMap(); + + auto const& pLaser = iSetup.getHandle(ecalLaserDbRecordToken_); + + auto const& agc = iSetup.getData(ecalADCToGeVConstantRcdToken_); + //std::cout << "Global EB ADC->GeV scale: " << agc.getEBValue() << " GeV/ADC count" ; + float adcconst = agc.getEBValue(); bool thereIsSignal = false; // loop on rechits diff --git a/HLTrigger/special/plugins/HLTCSCOverlapFilter.cc b/HLTrigger/special/plugins/HLTCSCOverlapFilter.cc index 5c8637cd9f935..bec19a6a5fb01 100644 --- a/HLTrigger/special/plugins/HLTCSCOverlapFilter.cc +++ b/HLTrigger/special/plugins/HLTCSCOverlapFilter.cc @@ -1,20 +1,19 @@ #include "HLTCSCOverlapFilter.h" -#include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DataFormats/MuonDetId/interface/CSCDetId.h" -#include "Geometry/CSCGeometry/interface/CSCGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/MuonDetId/interface/CSCDetId.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" HLTCSCOverlapFilter::HLTCSCOverlapFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + muonGeometryRecordToken_(esConsumes()), m_input(iConfig.getParameter("input")), m_minHits(iConfig.getParameter("minHits")), m_xWindow(iConfig.getParameter("xWindow")), @@ -101,7 +100,7 @@ bool HLTCSCOverlapFilter::hltFilter(edm::Event& iEvent, std::map >::const_iterator chamber_next = chamber_tohit.find(next_id); if (chamber_next != chamber_tohit.end() && chamber_next->second.size() >= m_minHits) { if (!got_cscGeometry) { - iSetup.get().get(cscGeometry); + cscGeometry = iSetup.getHandle(muonGeometryRecordToken_); got_cscGeometry = true; } diff --git a/HLTrigger/special/plugins/HLTCSCOverlapFilter.h b/HLTrigger/special/plugins/HLTCSCOverlapFilter.h index 05e4778f3bc0c..ddd46227c3bce 100644 --- a/HLTrigger/special/plugins/HLTCSCOverlapFilter.h +++ b/HLTrigger/special/plugins/HLTCSCOverlapFilter.h @@ -7,6 +7,9 @@ #include "HLTrigger/HLTcore/interface/HLTFilter.h" #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" + #include "TH1F.h" namespace edm { @@ -23,6 +26,7 @@ class HLTCSCOverlapFilter : public HLTFilter { static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); private: + edm::ESGetToken const muonGeometryRecordToken_; edm::InputTag m_input; edm::EDGetTokenT cscrechitsToken; unsigned int m_minHits; diff --git a/HLTrigger/special/plugins/HLTCSCRing2or3Filter.cc b/HLTrigger/special/plugins/HLTCSCRing2or3Filter.cc index 537a83662d54c..d594d8a0cbbc2 100644 --- a/HLTrigger/special/plugins/HLTCSCRing2or3Filter.cc +++ b/HLTrigger/special/plugins/HLTCSCRing2or3Filter.cc @@ -3,18 +3,14 @@ #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DataFormats/MuonDetId/interface/CSCDetId.h" -#include "Geometry/CSCGeometry/interface/CSCGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" #include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "DataFormats/MuonDetId/interface/CSCDetId.h" HLTCSCRing2or3Filter::HLTCSCRing2or3Filter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), + muonGeometryRecordToken_(esConsumes()), m_input(iConfig.getParameter("input")), m_minHits(iConfig.getParameter("minHits")), m_xWindow(iConfig.getParameter("xWindow")), @@ -65,7 +61,7 @@ bool HLTCSCRing2or3Filter::hltFilter(edm::Event& iEvent, ++chamber_iter) { if (chamber_iter->second.size() >= m_minHits) { if (!got_cscGeometry) { - iSetup.get().get(cscGeometry); + cscGeometry = iSetup.getHandle(muonGeometryRecordToken_); got_cscGeometry = true; } diff --git a/HLTrigger/special/plugins/HLTCSCRing2or3Filter.h b/HLTrigger/special/plugins/HLTCSCRing2or3Filter.h index bfc7fefb3562f..9e091c36a480b 100644 --- a/HLTrigger/special/plugins/HLTCSCRing2or3Filter.h +++ b/HLTrigger/special/plugins/HLTCSCRing2or3Filter.h @@ -5,9 +5,10 @@ #include #include "HLTrigger/HLTcore/interface/HLTFilter.h" -#include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" #include "FWCore/Utilities/interface/InputTag.h" -#include "TH1F.h" +#include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h" +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" namespace edm { class ConfigurationDescriptions; @@ -23,6 +24,7 @@ class HLTCSCRing2or3Filter : public HLTFilter { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: + edm::ESGetToken const muonGeometryRecordToken_; edm::EDGetTokenT cscrechitsToken; edm::InputTag m_input; unsigned int m_minHits; diff --git a/HLTrigger/special/plugins/HLTDTActivityFilter.cc b/HLTrigger/special/plugins/HLTDTActivityFilter.cc index 6c11559aa4c9b..66a0d279ee936 100644 --- a/HLTrigger/special/plugins/HLTDTActivityFilter.cc +++ b/HLTrigger/special/plugins/HLTDTActivityFilter.cc @@ -28,10 +28,7 @@ Description: Filter to select events with activity in the muon barrel system // Fwk header files #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" - #include "DataFormats/GeometryVector/interface/GlobalPoint.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" -#include "Geometry/DTGeometry/interface/DTGeometry.h" #include "DataFormats/GeometryVector/interface/Pi.h" // Typedefs @@ -40,7 +37,8 @@ typedef std::map > activityMap; // bitset map accordin // // constructors and destructor // -HLTDTActivityFilter::HLTDTActivityFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) { +HLTDTActivityFilter::HLTDTActivityFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), muonGeometryRecordToken_(esConsumes()) { using namespace std; inputTag_[DCC] = iConfig.getParameter("inputDCC"); @@ -206,8 +204,7 @@ bool HLTDTActivityFilter::hltFilter(edm::Event& iEvent, } if (process_[RPC]) { - edm::ESHandle dtGeom; - iSetup.get().get(dtGeom); + auto const& dtGeom = iSetup.getHandle(muonGeometryRecordToken_); edm::Handle gmtrc; iEvent.getByToken(inputRPCToken_, gmtrc); diff --git a/HLTrigger/special/plugins/HLTDTActivityFilter.h b/HLTrigger/special/plugins/HLTDTActivityFilter.h index 2b9576a8afd98..cf68a0d669563 100644 --- a/HLTrigger/special/plugins/HLTDTActivityFilter.h +++ b/HLTrigger/special/plugins/HLTDTActivityFilter.h @@ -22,15 +22,15 @@ Description: Filter to select events with activity in the muon barrel system #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 "HLTrigger/HLTcore/interface/HLTFilter.h" - #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h" #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h" #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambPhContainer.h" #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambThContainer.h" #include "DataFormats/DTDigi/interface/DTLocalTriggerCollection.h" #include "DataFormats/DTDigi/interface/DTDigiCollection.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "Geometry/DTGeometry/interface/DTGeometry.h" // c++ header files #include @@ -65,6 +65,8 @@ class HLTDTActivityFilter : public HLTFilter { // ----------member data --------------------------- + edm::ESGetToken const muonGeometryRecordToken_; + edm::InputTag inputTag_[4]; bool process_[4]; std::bitset<15> activeSecs_; diff --git a/HLTrigger/special/plugins/HLTEcalPhiSymFilter.cc b/HLTrigger/special/plugins/HLTEcalPhiSymFilter.cc index 727f5424ce988..638533524c238 100644 --- a/HLTrigger/special/plugins/HLTEcalPhiSymFilter.cc +++ b/HLTrigger/special/plugins/HLTEcalPhiSymFilter.cc @@ -1,19 +1,17 @@ #include "HLTEcalPhiSymFilter.h" -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Calibration/Tools/interface/EcalRingCalibrationTools.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" HLTEcalPhiSymFilter::HLTEcalPhiSymFilter(const edm::ParameterSet& config) - : barrelDigisToken_(consumes(config.getParameter("barrelDigiCollection"))), + : ecalChannelStatusRcdToken_(esConsumes()), + caloGeometryRecordToken_(esConsumes()), + barrelDigisToken_(consumes(config.getParameter("barrelDigiCollection"))), endcapDigisToken_(consumes(config.getParameter("endcapDigiCollection"))), barrelUncalibHitsToken_( consumes(config.getParameter("barrelUncalibHitCollection"))), @@ -72,15 +70,14 @@ bool HLTEcalPhiSymFilter::filter(edm::StreamID, edm::Event& event, const edm::Ev using namespace edm; using namespace std; - //Get ChannelStatus from DB + // Get ChannelStatus from DB edm::ESHandle csHandle; if (!useRecoFlag_) - setup.get().get(csHandle); + csHandle = setup.getHandle(ecalChannelStatusRcdToken_); const EcalChannelStatus& channelStatus = *csHandle; - //Get iRing-geometry - edm::ESHandle geoHandle; - setup.get().get(geoHandle); + // Get iRing-geometry + auto const& geoHandle = setup.getHandle(caloGeometryRecordToken_); EcalRingCalibrationTools::setCaloGeometry(geoHandle.product()); EcalRingCalibrationTools CalibRing; diff --git a/HLTrigger/special/plugins/HLTEcalPhiSymFilter.h b/HLTrigger/special/plugins/HLTEcalPhiSymFilter.h index 5f53c0c305200..1afdefb1813f9 100644 --- a/HLTrigger/special/plugins/HLTEcalPhiSymFilter.h +++ b/HLTrigger/special/plugins/HLTEcalPhiSymFilter.h @@ -34,11 +34,14 @@ #include "FWCore/Framework/interface/global/EDFilter.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" - +#include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" +#include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" #include "DataFormats/EcalDetId/interface/EBDetId.h" #include "DataFormats/EcalDetId/interface/EEDetId.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" namespace edm { class ConfigurationDescriptions; @@ -57,6 +60,9 @@ class HLTEcalPhiSymFilter : public edm::global::EDFilter<> { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: + edm::ESGetToken const ecalChannelStatusRcdToken_; + edm::ESGetToken const caloGeometryRecordToken_; + const edm::EDGetTokenT barrelDigisToken_; const edm::EDGetTokenT endcapDigisToken_; const edm::EDGetTokenT barrelUncalibHitsToken_; diff --git a/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc b/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc index ac99b2250517a..9f25b7a627de1 100644 --- a/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc +++ b/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc @@ -1,11 +1,15 @@ #include "HLTEcalResonanceFilter.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "TLorentzVector.h" using namespace std; using namespace edm; -HLTEcalResonanceFilter::HLTEcalResonanceFilter(const edm::ParameterSet &iConfig) { +HLTEcalResonanceFilter::HLTEcalResonanceFilter(const edm::ParameterSet &iConfig) + : caloTopologyRecordToken_(esConsumes()), + ecalChannelStatusRcdToken_(esConsumes()), + caloGeometryRecordToken_(esConsumes()) { barrelHits_ = iConfig.getParameter("barrelHits"); barrelClusters_ = iConfig.getParameter("barrelClusters"); barrelHitsToken_ = consumes(barrelHits_); @@ -202,13 +206,11 @@ bool HLTEcalResonanceFilter::filter(edm::Event &iEvent, const edm::EventSetup &i vector selectedEBDetIds; vector selectedEEDetIds; - edm::ESHandle pTopology; - iSetup.get().get(pTopology); + auto const &pTopology = iSetup.getHandle(caloTopologyRecordToken_); const CaloSubdetectorTopology *topology_eb = pTopology->getSubdetectorTopology(DetId::Ecal, EcalBarrel); const CaloSubdetectorTopology *topology_ee = pTopology->getSubdetectorTopology(DetId::Ecal, EcalEndcap); - edm::ESHandle geoHandle; - iSetup.get().get(geoHandle); + auto const &geoHandle = iSetup.getHandle(caloGeometryRecordToken_); const CaloSubdetectorGeometry *geometry_es = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower); std::unique_ptr topology_es; if (geometry_es) { @@ -220,7 +222,7 @@ bool HLTEcalResonanceFilter::filter(edm::Event &iEvent, const edm::EventSetup &i ///get status from DB edm::ESHandle csHandle; if (useDBStatus_) - iSetup.get().get(csHandle); + csHandle = iSetup.getHandle(ecalChannelStatusRcdToken_); const EcalChannelStatus &channelStatus = *csHandle; ///==============Start to process barrel part==================/// diff --git a/HLTrigger/special/plugins/HLTEcalResonanceFilter.h b/HLTrigger/special/plugins/HLTEcalResonanceFilter.h index f770021317a06..c200ba4bea755 100644 --- a/HLTrigger/special/plugins/HLTEcalResonanceFilter.h +++ b/HLTrigger/special/plugins/HLTEcalResonanceFilter.h @@ -11,6 +11,9 @@ Description: Producer for EcalRecHits to be used for pi0/eta ECAL calibration. // system include files #include +#include +#include +#include // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -53,19 +56,10 @@ Description: Producer for EcalRecHits to be used for pi0/eta ECAL calibration. #include "Geometry/CaloTopology/interface/EcalPreshowerTopology.h" #include "DataFormats/EgammaReco/interface/PreshowerClusterFwd.h" -// -//Ecal status +// Ecal status #include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -// class declaration -// -#include -#include - -#include "TLorentzVector.h" -#include - namespace edm { class ConfigurationDescriptions; } @@ -118,6 +112,10 @@ class HLTEcalResonanceFilter : public edm::EDFilter { static float DeltaPhi(float phi1, float phi2); static float GetDeltaR(float eta1, float eta2, float phi1, float phi2); + edm::ESGetToken const caloTopologyRecordToken_; + edm::ESGetToken const ecalChannelStatusRcdToken_; + edm::ESGetToken const caloGeometryRecordToken_; + // Input hits & clusters edm::InputTag barrelHits_; edm::InputTag endcapHits_; diff --git a/HLTrigger/special/plugins/HLTPPSJetComparisonFilter.cc b/HLTrigger/special/plugins/HLTPPSJetComparisonFilter.cc index 6d6a4bb9fce28..4d56ee86ab30d 100644 --- a/HLTrigger/special/plugins/HLTPPSJetComparisonFilter.cc +++ b/HLTrigger/special/plugins/HLTPPSJetComparisonFilter.cc @@ -37,6 +37,8 @@ class HLTPPSJetComparisonFilter : public edm::global::EDFilter<> { private: // ----------member data --------------------------- + edm::ESGetToken const lhcInfoRcdToken_; + edm::ParameterSet param_; edm::InputTag jetInputTag_; // Input tag identifying the jet track @@ -90,7 +92,8 @@ void HLTPPSJetComparisonFilter::fillDescriptions(edm::ConfigurationDescriptions HLTPPSJetComparisonFilter::~HLTPPSJetComparisonFilter() = default; HLTPPSJetComparisonFilter::HLTPPSJetComparisonFilter(const edm::ParameterSet &iConfig) - : jetInputTag_(iConfig.getParameter("jetInputTag")), + : lhcInfoRcdToken_(esConsumes()), + jetInputTag_(iConfig.getParameter("jetInputTag")), jet_token_(consumes(jetInputTag_)), forwardProtonInputTag_(iConfig.getParameter("forwardProtonInputTag")), @@ -110,8 +113,7 @@ HLTPPSJetComparisonFilter::HLTPPSJetComparisonFilter(const edm::ParameterSet &iC // member functions // bool HLTPPSJetComparisonFilter::filter(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const { - edm::ESHandle hLHCInfo; - iSetup.get().get(lhcInfoLabel_, hLHCInfo); + auto const &hLHCInfo = iSetup.getHandle(lhcInfoRcdToken_); float sqs = 2. * hLHCInfo->energy(); // get sqrt(s) edm::Handle jets; diff --git a/HLTrigger/special/plugins/HLTPixelActivityFilter.cc b/HLTrigger/special/plugins/HLTPixelActivityFilter.cc index d43c20ff684f7..bfd7185a0b0e0 100644 --- a/HLTrigger/special/plugins/HLTPixelActivityFilter.cc +++ b/HLTrigger/special/plugins/HLTPixelActivityFilter.cc @@ -1,9 +1,14 @@ #include "HLTrigger/HLTcore/interface/HLTFilter.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/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" - +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "Geometry/Records/interface/TrackerTopologyRcd.h" @@ -23,7 +28,7 @@ class HLTPixelActivityFilter : public HLTFilter { const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override; // int countLayersWithClusters(edm::Handle > & clusterCol,const TrackerTopology& tTopo); - + edm::ESGetToken const trackerTopologyRcdToken_; edm::InputTag inputTag_; // input tag identifying product containing pixel clusters unsigned int min_clusters_; // minimum number of clusters unsigned int max_clusters_; // maximum number of clusters @@ -38,18 +43,13 @@ class HLTPixelActivityFilter : public HLTFilter { edm::EDGetTokenT > inputToken_; }; -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" // // constructors and destructor // HLTPixelActivityFilter::HLTPixelActivityFilter(const edm::ParameterSet& config) : HLTFilter(config), + trackerTopologyRcdToken_(esConsumes()), inputTag_(config.getParameter("inputTag")), min_clusters_(config.getParameter("minClusters")), max_clusters_(config.getParameter("maxClusters")), @@ -121,8 +121,8 @@ bool HLTPixelActivityFilter::hltFilter(edm::Event& event, accept &= (clusterSize <= max_clusters_); if (min_layersBPix_ > 0 || max_layersBPix_ > 0 || min_layersFPix_ > 0 || max_layersFPix_ > 0 || min_clustersBPix_ > 0 || max_clustersBPix_ > 0 || min_clustersFPix_ > 0 || max_clustersFPix_ > 0) { - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); + auto const& tTopoHandle = iSetup.getHandle(trackerTopologyRcdToken_); + const TrackerTopology& tTopo = *tTopoHandle; unsigned int layerCountBPix = 0; unsigned int layerCountFPix = 0; diff --git a/HLTrigger/special/plugins/HLTPixelClusterShapeFilter.cc b/HLTrigger/special/plugins/HLTPixelClusterShapeFilter.cc index 64275d8953319..7e8c62506319f 100644 --- a/HLTrigger/special/plugins/HLTPixelClusterShapeFilter.cc +++ b/HLTrigger/special/plugins/HLTPixelClusterShapeFilter.cc @@ -1,10 +1,22 @@ #include "HLTrigger/HLTcore/interface/HLTFilter.h" - #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" - +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" +#include "DataFormats/GeometryVector/interface/LocalPoint.h" +#include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" +#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" // // class declaration @@ -17,6 +29,7 @@ class HLTPixelClusterShapeFilter : public HLTFilter { static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); private: + edm::ESGetToken const trackerDigiGeometryRecordToken_; edm::EDGetTokenT inputToken_; edm::InputTag inputTag_; // input tag identifying product containing pixel clusters double minZ_; // beginning z-vertex position @@ -39,29 +52,13 @@ class HLTPixelClusterShapeFilter : public HLTFilter { int getContainedHits(const std::vector &hits, double z0, double &chi) const; }; -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" - -#include "FWCore/Framework/interface/ESHandle.h" -#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/SiPixelDetId/interface/PixelSubdetector.h" - // // constructors and destructor // HLTPixelClusterShapeFilter::HLTPixelClusterShapeFilter(const edm::ParameterSet &config) : HLTFilter(config), + trackerDigiGeometryRecordToken_(esConsumes()), inputTag_(config.getParameter("inputTag")), minZ_(config.getParameter("minZ")), maxZ_(config.getParameter("maxZ")), @@ -114,8 +111,8 @@ bool HLTPixelClusterShapeFilter::hltFilter(edm::Event &event, // get tracker geometry if (hRecHits.isValid()) { - edm::ESHandle trackerHandle; - iSetup.get().get(trackerHandle); + auto const &trackerHandle = iSetup.getHandle(trackerDigiGeometryRecordToken_); + const TrackerGeometry *tgeo = trackerHandle.product(); const SiPixelRecHitCollection *hits = hRecHits.product(); diff --git a/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.cc b/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.cc index 4d35fea98930f..6c02cc0d6557d 100644 --- a/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.cc +++ b/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.cc @@ -45,7 +45,8 @@ bool bigmag(const RPC4DHit& Point1, const RPC4DHit& Point2) { return false; } -HLTRPCTrigNoSyncFilter::HLTRPCTrigNoSyncFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) { +HLTRPCTrigNoSyncFilter::HLTRPCTrigNoSyncFilter(const edm::ParameterSet& iConfig) + : HLTFilter(iConfig), muonGeometryRecordToken_(esConsumes()) { //now do what ever initialization is needed m_GMTInputTag = iConfig.getParameter("GMTInputTag"); rpcRecHitsLabel = iConfig.getParameter("rpcRecHits"); @@ -96,8 +97,7 @@ bool HLTRPCTrigNoSyncFilter::hltFilter(edm::Event& iEvent, RPCRecHitCollection::const_iterator recHit; - edm::ESHandle rpcGeo; - iSetup.get().get(rpcGeo); + auto const& rpcGeo = iSetup.getHandle(muonGeometryRecordToken_); int k = 0; diff --git a/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.h b/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.h index 5d897ab6ef282..2288ccb33626d 100644 --- a/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.h +++ b/HLTrigger/special/plugins/HLTRPCTrigNoSyncFilter.h @@ -1,49 +1,35 @@ - #ifndef HLTRPCTrigNoSyncFilter_h #define HLTRPCTrigNoSyncFilter_h -// user include files - #include "HLTrigger/HLTcore/interface/HLTFilter.h" #include "FWCore/Utilities/interface/InputTag.h" - #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" - #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" - #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" #include "DataFormats/MuonDetId/interface/RPCDetId.h" - #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "Geometry/RPCGeometry/interface/RPCGeometry.h" -#include -#include -#include -#include -#include "RecoMuon/TransientTrackingRecHit/interface/MuonTransientTrackingRecHit.h" - +#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h" #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTExtendedCand.h" - #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h" - #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h" - #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetup.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapRecord.h" #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMap.h" - #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h" #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h" #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTExtendedCand.h" #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h" +#include "Geometry/RPCGeometry/interface/RPCGeometry.h" +#include "Geometry/RPCGeometry/interface/RPCRoll.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "Geometry/CommonDetUnit/interface/GeomDet.h" +#include "RecoMuon/TransientTrackingRecHit/interface/MuonTransientTrackingRecHit.h" // // class declaration @@ -61,6 +47,7 @@ class HLTRPCTrigNoSyncFilter : public HLTFilter { const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override; void endJob() override; + edm::ESGetToken const muonGeometryRecordToken_; edm::InputTag m_GMTInputTag; edm::InputTag rpcRecHitsLabel; edm::EDGetTokenT m_GMTInputToken; diff --git a/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.cc b/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.cc index 0c13cf4b1a393..72dc5b0e82eba 100644 --- a/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.cc +++ b/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.cc @@ -8,7 +8,10 @@ using namespace std; using namespace edm; -HLTRegionalEcalResonanceFilter::HLTRegionalEcalResonanceFilter(const edm::ParameterSet &iConfig) { +HLTRegionalEcalResonanceFilter::HLTRegionalEcalResonanceFilter(const edm::ParameterSet &iConfig) + : caloTopologyRecordToken_(esConsumes()), + ecalChannelStatusRcdToken_(esConsumes()), + caloGeometryRecordToken_(esConsumes()) { barrelHits_ = iConfig.getParameter("barrelHits"); barrelClusters_ = iConfig.getParameter("barrelClusters"); barrelHitsToken_ = consumes(barrelHits_); @@ -298,14 +301,13 @@ bool HLTRegionalEcalResonanceFilter::filter(edm::Event &iEvent, const edm::Event vector selectedEBDetIds; vector selectedEEDetIds; - edm::ESHandle pTopology; - iSetup.get().get(pTopology); + auto const &pTopology = iSetup.getHandle(caloTopologyRecordToken_); const CaloSubdetectorTopology *topology_eb = pTopology->getSubdetectorTopology(DetId::Ecal, EcalBarrel); const CaloSubdetectorTopology *topology_ee = pTopology->getSubdetectorTopology(DetId::Ecal, EcalEndcap); - edm::ESHandle geoHandle; - iSetup.get().get(geoHandle); + auto const &geoHandle = iSetup.getHandle(caloGeometryRecordToken_); const CaloSubdetectorGeometry *geometry_es = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower); + std::unique_ptr topology_es; if (geometry_es) { topology_es = std::make_unique(); @@ -316,7 +318,7 @@ bool HLTRegionalEcalResonanceFilter::filter(edm::Event &iEvent, const edm::Event ///get status from DB edm::ESHandle csHandle; if (useDBStatus_) - iSetup.get().get(csHandle); + csHandle = iSetup.getHandle(ecalChannelStatusRcdToken_); const EcalChannelStatus &channelStatus = *csHandle; ///==============Start to process barrel part==================/// diff --git a/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.h b/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.h index 16413212a407f..9491f6e462720 100644 --- a/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.h +++ b/HLTrigger/special/plugins/HLTRegionalEcalResonanceFilter.h @@ -54,17 +54,12 @@ Description: Producer for EcalRecHits to be used for pi0/eta ECAL calibration. #include "Geometry/CaloTopology/interface/EcalPreshowerTopology.h" #include "DataFormats/EgammaReco/interface/PreshowerClusterFwd.h" -// -//Ecal status +// Ecal status #include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h" #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" -// class declaration -// #include #include - -#include "TLorentzVector.h" #include namespace edm { @@ -116,6 +111,10 @@ class HLTRegionalEcalResonanceFilter : public edm::stream::EDFilter<> { int diff_neta_s(int, int); int diff_nphi_s(int, int); + edm::ESGetToken const caloTopologyRecordToken_; + edm::ESGetToken const ecalChannelStatusRcdToken_; + edm::ESGetToken const caloGeometryRecordToken_; + // Input hits & clusters edm::InputTag barrelHits_; edm::InputTag endcapHits_; diff --git a/HLTriggerOffline/Btag/interface/HLTBTagPerformanceAnalyzer.h b/HLTriggerOffline/Btag/interface/HLTBTagPerformanceAnalyzer.h index c9847a31e1bb1..866ddf2d55c58 100644 --- a/HLTriggerOffline/Btag/interface/HLTBTagPerformanceAnalyzer.h +++ b/HLTriggerOffline/Btag/interface/HLTBTagPerformanceAnalyzer.h @@ -27,7 +27,7 @@ #include // for gen matching -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" #include #include "FWCore/Utilities/interface/transform.h" diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaCaloHT_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaCaloHT_cff.py index 5e5b236e48641..261e52a6f2f69 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaCaloHT_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaCaloHT_cff.py @@ -2,17 +2,17 @@ CaloHTPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_HT900_v", # Run2 - "HLT_HT300_v", # Run2 +# "HLT_HT900_v", # Run2 +# "HLT_HT300_v", # Run2 "HLT_ECALHT800_v", # Run2 7e33 - "HLT_Photon90_CaloIdL_PFHT600_v" # 50ns backup menu - "HLT_HT650_v", - "HLT_HT410to430_v", # 2016 menu - "HLT_HT430to450_v", # 2016 menu - "HLT_HT450to470_v", # HT Parking - "HLT_HT470to500_v", # HT Parking - "HLT_HT500to550_v", # HT Parking - "HLT_HT550to650_v", # HT Parking +# "HLT_Photon90_CaloIdL_PFHT600_v" # 50ns backup menu +# "HLT_HT650_v", +# "HLT_HT410to430_v", # 2016 menu +# "HLT_HT430to450_v", # 2016 menu +# "HLT_HT450to470_v", # HT Parking +# "HLT_HT470to500_v", # HT Parking +# "HLT_HT500to550_v", # HT Parking +# "HLT_HT550to650_v", # HT Parking #"DST_HT250_CaloScouting_v", # scouting # moved to DSTJets category #"DST_CaloJet40_CaloScouting_v", # moved to DSTJets category #"DST_L1HTT125ORHTT150ORHTT175_CaloScouting_v" # moved to DSTJets category diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTJets_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTJets_cff.py index 97c8af51b59a3..5972046c669d3 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTJets_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTJets_cff.py @@ -2,26 +2,26 @@ DSTJetsPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "DST_CaloJet40_CaloScouting_PFScouting_v", - "DST_CaloJet40_BTagScouting_v", - "DST_L1HTT_CaloScouting_PFScouting_v", - "DST_L1HTT_BTagScouting_v", - "DST_HT250_CaloScouting_v", - "DST_HT410_PFScouting_v", - "DST_HT410_BTagScouting_v", - "DST_HT450_PFScouting_v", - "DST_HT450_BTagScouting_v", +# "DST_CaloJet40_CaloScouting_PFScouting_v", +# "DST_CaloJet40_BTagScouting_v", +# "DST_L1HTT_CaloScouting_PFScouting_v", +# "DST_L1HTT_BTagScouting_v", +# "DST_HT250_CaloScouting_v", +# "DST_HT410_PFScouting_v", +# "DST_HT410_BTagScouting_v", +# "DST_HT450_PFScouting_v", +# "DST_HT450_BTagScouting_v", # 2016 menu - "DST_HT250_CaloBTagScouting_v", - "DST_L1HTT_CaloBTagScouting_v", - "DST_CaloJet40_CaloBTagScouting_v", +# "DST_HT250_CaloBTagScouting_v", +# "DST_L1HTT_CaloBTagScouting_v", +# "DST_CaloJet40_CaloBTagScouting_v", # For backward compatibility "DST_HT250_CaloScouting_v", - "DST_CaloJet40_CaloScouting_v", - "DST_L1HTT125ORHTT150ORHTT175_CaloScouting_v", - "DST_HT450_PFReco_PFBTagCSVReco_PFScouting_v", - "DST_L1HTT125ORHTT150ORHTT175_PFReco_PFBTagCSVReco_PFScouting_v", - "DST_CaloJet40_PFReco_PFBTagCSVReco_PFScouting_v" +# "DST_CaloJet40_CaloScouting_v", +# "DST_L1HTT125ORHTT150ORHTT175_CaloScouting_v", +# "DST_HT450_PFReco_PFBTagCSVReco_PFScouting_v", +# "DST_L1HTT125ORHTT150ORHTT175_PFReco_PFBTagCSVReco_PFScouting_v", +# "DST_CaloJet40_PFReco_PFBTagCSVReco_PFScouting_v" ), recPFMHTLabel = cms.InputTag("recoExoticaValidationHT"), recPFJetLabel = cms.InputTag("ak4PFJets"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTMuons_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTMuons_cff.py index ab603c8a6d083..f7e5742864c07 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTMuons_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaDSTMuons_cff.py @@ -2,14 +2,14 @@ DSTMuonsPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "DST_ZeroBias_CaloScouting_PFScouting_v", - "DST_ZeroBias_BTagScouting_v", - "DST_L1DoubleMu_CaloScouting_PFScouting_v", - "DST_L1DoubleMu_BTagScouting_v", - "DST_DoubleMu3_Mass10_CaloScouting_PFScouting_v", - "DST_DoubleMu3_Mass10_BTagScouting_v", - "HLT_DoubleMu3_Mass10_v", - "DST_DoubleMu3_noVtx_CaloScouting_v" +# "DST_ZeroBias_CaloScouting_PFScouting_v", +# "DST_ZeroBias_BTagScouting_v", +# "DST_L1DoubleMu_CaloScouting_PFScouting_v", +# "DST_L1DoubleMu_BTagScouting_v", +# "DST_DoubleMu3_Mass10_CaloScouting_PFScouting_v", +# "DST_DoubleMu3_Mass10_BTagScouting_v", +# "HLT_DoubleMu3_Mass10_v", +# "DST_DoubleMu3_noVtx_CaloScouting_v" ), recMuonLabel = cms.InputTag("muons"), # -- Analysis specific cuts diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaDiPhoton_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaDiPhoton_cff.py index e747a78944140..d79aa0f04f4bb 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaDiPhoton_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaDiPhoton_cff.py @@ -3,12 +3,12 @@ DiPhotonPSet = cms.PSet( hltPathsToCheck = cms.vstring( "HLT_DoublePhoton85_v", # Run2 proposal - "HLT_Photon36_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon22_AND_HE10_R9Id65_Eta2_Mass15_v", - "HLT_Photon26_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon16_AND_HE10_R9Id65_Eta2_Mass60_v", - "HLT_Photon42_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon25_AND_HE10_R9Id65_Eta2_Mass15_v", #50ns backup menu - "HLT_DoublePhoton60_v", - "HLT_DoublePhoton40_v", # 0T - "HLT_DoublePhoton50_v", # 0T +# "HLT_Photon36_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon22_AND_HE10_R9Id65_Eta2_Mass15_v", +# "HLT_Photon26_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon16_AND_HE10_R9Id65_Eta2_Mass60_v", +# "HLT_Photon42_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon25_AND_HE10_R9Id65_Eta2_Mass15_v", #50ns backup menu +# "HLT_DoublePhoton60_v", +# "HLT_DoublePhoton40_v", # 0T +# "HLT_DoublePhoton50_v", # 0T "HLT_DoublePhoton70_v", "HLT_DoublePhoton33_CaloIdL" ), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaEleMu_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaEleMu_cff.py index cecb46221b53d..8d9a6ed3678d8 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaEleMu_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaEleMu_cff.py @@ -2,7 +2,7 @@ EleMuPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_Mu30_Ele30_CaloIdL_GsfTrkIdVL_v" +# "HLT_Mu30_Ele30_CaloIdL_GsfTrkIdVL_v" ), recElecLabel = cms.InputTag("gedGsfElectrons"), recMuonLabel = cms.InputTag("muons"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHTDisplacedJets_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHTDisplacedJets_cff.py index e718fc5148d33..8f9597b6ee6c3 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHTDisplacedJets_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHTDisplacedJets_cff.py @@ -2,43 +2,43 @@ HTDisplacedJetsPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_HT200_v", - "HLT_HT275_v", - "HLT_HT325_v", +# "HLT_HT200_v", +# "HLT_HT275_v", +# "HLT_HT325_v", "HLT_HT425_v", - "HLT_HT575_v", +# "HLT_HT575_v", - "HLT_HT650_DisplacedDijet80_Inclusive_v", - "HLT_HT750_DisplacedDijet80_Inclusive_v", - "HLT_HT350_DisplacedDijet80_DisplacedTrack_v", - "HLT_HT350_DisplacedDijet80_Tight_DisplacedTrack_v", +# "HLT_HT650_DisplacedDijet80_Inclusive_v", +# "HLT_HT750_DisplacedDijet80_Inclusive_v", +# "HLT_HT350_DisplacedDijet80_DisplacedTrack_v", +# "HLT_HT350_DisplacedDijet80_Tight_DisplacedTrack_v", # 2016 menu - "HLT_HT550_DisplacedDijet80_Inclusive_v", - "HLT_HT350_DisplacedDijet40_Inclusive_v", - "HLT_HT200_DisplacedDijet40_DisplacedTrack_v", +# "HLT_HT550_DisplacedDijet80_Inclusive_v", +# "HLT_HT350_DisplacedDijet40_Inclusive_v", +# "HLT_HT200_DisplacedDijet40_DisplacedTrack_v", # 5e33, 7e33 menus - "HLT_HT500_DisplacedDijet40_Inclusive_v", - "HLT_HT550_DisplacedDijet40_Inclusive_v", - "HLT_HT350_DisplacedDijet40_DisplacedTrack_v", +# "HLT_HT500_DisplacedDijet40_Inclusive_v", +# "HLT_HT550_DisplacedDijet40_Inclusive_v", +# "HLT_HT350_DisplacedDijet40_DisplacedTrack_v", #"HLT_HT350_DisplacedDijet80_DisplacedTrack_v", - "HLT_VBF_DisplacedJet40_DisplacedTrack_v", - "HLT_VBF_DisplacedJet40_Hadronic_v", - "HLT_VBF_DisplacedJet40_TightID_DisplacedTrack_v", - "HLT_VBF_DisplacedJet40_TightID_Hadronic_v", +# "HLT_VBF_DisplacedJet40_DisplacedTrack_v", +# "HLT_VBF_DisplacedJet40_Hadronic_v", +# "HLT_VBF_DisplacedJet40_TightID_DisplacedTrack_v", +# "HLT_VBF_DisplacedJet40_TightID_Hadronic_v", # 1.4e34 menus - "HLT_VBF_DisplacedJet40_VTightID_Hadronic_v", - "HLT_VBF_DisplacedJet40_VVTightID_DisplacedTrack_v", - "HLT_VBF_DisplacedJet40_VVTightID_Hadronic_v", - "HLT_VBF_DisplacedJet40_VTightID_DisplacedTrack_v", +# "HLT_VBF_DisplacedJet40_VTightID_Hadronic_v", +# "HLT_VBF_DisplacedJet40_VVTightID_DisplacedTrack_v", +# "HLT_VBF_DisplacedJet40_VVTightID_Hadronic_v", +# "HLT_VBF_DisplacedJet40_VTightID_DisplacedTrack_v", # Loose Threshold paths. - "HLT_VBF_DisplacedJet40_DisplacedTrack_2TrackIP2DSig5_v", - "HLT_HT400_DisplacedDijet40_Inclusive_v", - "HLT_HT250_DisplacedDijet40_DisplacedTrack_v", - "HLT_VBF_DisplacedJet40_Hadronic_2PromptTrack_v", +# "HLT_VBF_DisplacedJet40_DisplacedTrack_2TrackIP2DSig5_v", +# "HLT_HT400_DisplacedDijet40_Inclusive_v", +# "HLT_HT250_DisplacedDijet40_DisplacedTrack_v", +# "HLT_VBF_DisplacedJet40_Hadronic_2PromptTrack_v", #2017 "HLT_HT430_DisplacedDijet40_DisplacedTrack_v", "HLT_HT430_DisplacedDijet60_DisplacedTrack_v", - "HLT_HT430_DisplacedDijet80_DisplacedTrack_v", +# "HLT_HT430_DisplacedDijet80_DisplacedTrack_v", "HLT_HT650_DisplacedDijet60_Inclusive_v" ), recPFMHTLabel = cms.InputTag("recoExoticaValidationHT"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDielectron_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDielectron_cff.py index e4484a3e48ad5..df66f8613e8b2 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDielectron_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDielectron_cff.py @@ -2,11 +2,11 @@ HighPtDielectronPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_DoubleEle25_CaloIdL_GsfTrkIdVL_v", # 0T only - "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_MW_v", # Run2 - "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_v", # Run1 & Run2 +# "HLT_DoubleEle25_CaloIdL_GsfTrkIdVL_v", # 0T only +# "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_MW_v", # Run2 +# "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_v", # Run1 & Run2 "HLT_DoubleEle33_CaloIdL_MW_v", # 2016 menu - "HLT_DoubleEle33_CaloIdL_v" # 2016 menu +# "HLT_DoubleEle33_CaloIdL_v" # 2016 menu ), recElecLabel = cms.InputTag("gedGsfElectrons"), # -- Analysis specific cuts diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDimuon_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDimuon_cff.py index 5bcd49f66d458..7c9171b54d812 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDimuon_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtDimuon_cff.py @@ -2,10 +2,10 @@ HighPtDimuonPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_Mu30_TkMu11_v", # Run2 - "HLT_Mu40_TkMu11_v", # Run2, backup - "HLT_Mu27_TkMu8_v", # Run2, control - "HLT_Mu17_Mu8_v" # Run2 & Run1 +# "HLT_Mu30_TkMu11_v", # Run2 +# "HLT_Mu40_TkMu11_v", # Run2, backup +# "HLT_Mu27_TkMu8_v", # Run2, control +# "HLT_Mu17_Mu8_v" # Run2 & Run1 #"HLT_Mu17_TkMu8_v", # Run1 #"HLT_Mu22_TkMu8_v" # Run1 ), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtElectron_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtElectron_cff.py index 0e003e63482e7..9ee5ceeafdfad 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtElectron_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtElectron_cff.py @@ -4,7 +4,7 @@ hltPathsToCheck = cms.vstring( "HLT_Ele145_CaloIdVT_GsfTrkIdT_v", "HLT_Ele200_CaloIdVT_GsfTrkIdT_v", - "HLT_Ele105_CaloIdVT_GsfTrkIdT_v", # Run2 proposal +# "HLT_Ele105_CaloIdVT_GsfTrkIdT_v", # Run2 proposal "HLT_Ele115_CaloIdVT_GsfTrkIdT_v" # 50ns backup menu ), recElecLabel = cms.InputTag("gedGsfElectrons"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtPhoton_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtPhoton_cff.py index 796602fce4ec2..1aa3693ccc58a 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtPhoton_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaHighPtPhoton_cff.py @@ -3,10 +3,10 @@ HighPtPhotonPSet = cms.PSet( hltPathsToCheck = cms.vstring( "HLT_Photon175_v", # Run2 proposal - "HLT_Photon165_HE10_v", # Run2 proposal - "HLT_Photon36_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon31_AND_HE10_R9Id65_Mass10_v", # Run2 proposal - "HLT_Photon26_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon16_AND_HE10_R9Id65_Mass60_v", # Run2 proposal - "HLT_Photon90_CaloIdL_PFHT500_v", #50ns backup menu +# "HLT_Photon165_HE10_v", # Run2 proposal +# "HLT_Photon36_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon31_AND_HE10_R9Id65_Mass10_v", # Run2 proposal +# "HLT_Photon26_R9Id85_OR_CaloId24b40e_Iso50T80L_Photon16_AND_HE10_R9Id65_Mass60_v", # Run2 proposal +# "HLT_Photon90_CaloIdL_PFHT500_v", #50ns backup menu "HLT_Photon150_v", # 0T #"HLT_Photon135_v" # Run1 (frozenHLT) "HLT_Photon60_R9Id90_CaloIdL_IsoL_DisplacedIdL_PFHT350MinPFJet15_v", # 2017 diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDielectron_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDielectron_cff.py index 6a65020be8c98..111965f533229 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDielectron_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDielectron_cff.py @@ -2,10 +2,10 @@ LowPtDielectronPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_MW_v", # Run2 - "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_v", # Run1 & Run2 +# "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_MW_v", # Run2 +# "HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_v", # Run1 & Run2 "HLT_DoubleEle33_CaloIdL_MW_v", # 2016 menu - "HLT_DoubleEle33_CaloIdL_v" # 2016 menu +# "HLT_DoubleEle33_CaloIdL_v" # 2016 menu ), recElecLabel = cms.InputTag("gedGsfElectrons"), # -- Analysis specific cuts diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDimuon_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDimuon_cff.py index f3a686c1f57cc..c3296ab86fa88 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDimuon_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtDimuon_cff.py @@ -2,9 +2,9 @@ LowPtDimuonPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_Mu30_TkMu11_v", # Run2 - "HLT_Mu17_TkMu8_DZ_v",# Run2 - "HLT_Mu17_Mu8_DZ_v" # Run2 +# "HLT_Mu30_TkMu11_v", # Run2 +# "HLT_Mu17_TkMu8_DZ_v",# Run2 +# "HLT_Mu17_Mu8_DZ_v" # Run2 #"HLT_Mu17_Mu8_v", # Run1 #"HLT_Mu17_TkMu8_v", # Run1 #"HLT_Mu22_TkMu8_v" # Run1 diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtElectron_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtElectron_cff.py index cd7a1382a7f51..cf0bfc420ad1c 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtElectron_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtElectron_cff.py @@ -2,7 +2,7 @@ LowPtElectronPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_Ele27_WP85_Gsf_v" # Run2 proposal +# "HLT_Ele27_WP85_Gsf_v" # Run2 proposal #"HLT_Ele27_WP80_v" # Run1 ), recElecLabel = cms.InputTag("gedGsfElectrons"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtTrimuon_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtTrimuon_cff.py index 3c697d7ee2950..c68e3c921a41f 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtTrimuon_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaLowPtTrimuon_cff.py @@ -2,12 +2,12 @@ LowPtTrimuonPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_TrkMu15_DoubleTrkMu5NoFiltersNoVtx_v", #signal +# "HLT_TrkMu15_DoubleTrkMu5NoFiltersNoVtx_v", #signal "HLT_TrkMu16_DoubleTrkMu6NoFiltersNoVtx_v", "HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v", #signal - "HLT_Dimuon0_Jpsi_Muon_v", # control - "HLT_Mu17_TkMu8_DZ", # backup - "HLT_Mu17_Mu8_DZ" # backup +# "HLT_Dimuon0_Jpsi_Muon_v", # control +# "HLT_Mu17_TkMu8_DZ", # backup +# "HLT_Mu17_Mu8_DZ" # backup ), recMuonLabel = cms.InputTag("muons"), # -- Analysis specific cuts diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaMonojet_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaMonojet_cff.py index 7e4066725e81c..454804b12e29c 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaMonojet_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaMonojet_cff.py @@ -2,15 +2,15 @@ MonojetPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_PFMETNoMu90_PFMHTNoMu90_IDTight_v", +# "HLT_PFMETNoMu90_PFMHTNoMu90_IDTight_v", "HLT_PFMETNoMu120_PFMHTNoMu120_IDTight_v", - "HLT_MET200_v", +# "HLT_MET200_v", "HLT_MonoCentralPFJet80_PFMETNoMu120_PFMHTNoMu120_IDTight_v", - "HLT_MonoCentralPFJet80_PFMETNoMu90_PFMHTNoMu90_IDTight_v", +# "HLT_MonoCentralPFJet80_PFMETNoMu90_PFMHTNoMu90_IDTight_v", #2016 menu - "HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_v", +# "HLT_PFMETNoMu100_PFMHTNoMu100_IDTight_v", "HLT_PFMETNoMu110_PFMHTNoMu110_IDTight_v", - "HLT_MonoCentralPFJet80_PFMETNoMu100_PFMHTNoMu100_IDTight_v", +# "HLT_MonoCentralPFJet80_PFMETNoMu100_PFMHTNoMu100_IDTight_v", "HLT_MonoCentralPFJet80_PFMETNoMu110_PFMHTNoMu110_IDTight_v", #2017 menu "HLT_PFMET110_PFMHT110_IDTight_v", @@ -32,11 +32,11 @@ "HLT_PFHT800_PFMET75_PFMHT75_IDTight_v", "HLT_PFHT800_PFMET85_PFMHT85_IDTight_v", # For backward compatibility - "HLT_PFMETNoMu90_JetIdCleaned_PFMHTNoMu90_IDTight_v", - "HLT_PFMETNoMu120_JetIdCleaned_PFMHTNoMu120_IDTight_v", - "HLT_MET200_JetIdCleaned_v", - "HLT_MonoCentralPFJet80_PFMETNoMu120_JetIdCleaned_PFMHTNoMu120_IDTight_v", - "HLT_MonoCentralPFJet80_PFMETNoMu90_JetIdCleaned_PFMHTNoMu90_IDTight_v" +# "HLT_PFMETNoMu90_JetIdCleaned_PFMHTNoMu90_IDTight_v", +# "HLT_PFMETNoMu120_JetIdCleaned_PFMHTNoMu120_IDTight_v", +# "HLT_MET200_JetIdCleaned_v", +# "HLT_MonoCentralPFJet80_PFMETNoMu120_JetIdCleaned_PFMHTNoMu120_IDTight_v", +# "HLT_MonoCentralPFJet80_PFMETNoMu90_JetIdCleaned_PFMHTNoMu90_IDTight_v" ), recCaloJetLabel = cms.InputTag("ak4CaloJets"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaPFHT_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaPFHT_cff.py index 35a241b82a3a3..b88b284ade012 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaPFHT_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaPFHT_cff.py @@ -2,20 +2,20 @@ PFHTPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_PFHT650_WideJetMJJ900DEtaJJ1p5_v", - "HLT_PFHT650_WideJetMJJ950DEtaJJ1p5_v", - "HLT_PFHT750_4Jet_v", - "HLT_PFHT550_4JetPt50_v", - "HLT_PFHT650_4JetPt50_v", - "HLT_PFHT750_4JetPt50_v", - "HLT_PFHT650_4Jet_v", # Run2 - "HLT_PFHT550_4Jet_v", # Run2 - "HLT_PFHT800_v", - "HLT_PFHT650_v", - "HLT_PFHT800_4JetPt50_v", - "HLT_PFHT750_4JetPt70_v", - "HLT_PFHT850_4JetPt50_v", - "HLT_PFHT750_4JetPt80_v", +# "HLT_PFHT650_WideJetMJJ900DEtaJJ1p5_v", +# "HLT_PFHT650_WideJetMJJ950DEtaJJ1p5_v", +# "HLT_PFHT750_4Jet_v", +# "HLT_PFHT550_4JetPt50_v", +# "HLT_PFHT650_4JetPt50_v", +# "HLT_PFHT750_4JetPt50_v", +# "HLT_PFHT650_4Jet_v", # Run2 +# "HLT_PFHT550_4Jet_v", # Run2 +# "HLT_PFHT800_v", +# "HLT_PFHT650_v", +# "HLT_PFHT800_4JetPt50_v", +# "HLT_PFHT750_4JetPt70_v", +# "HLT_PFHT850_4JetPt50_v", +# "HLT_PFHT750_4JetPt80_v", #"DST_HT450_PFReco_PFBTagCSVReco_PFScouting_v", # Moved to DSTJets category #"DST_L1HTT125ORHTT150ORHTT175_PFReco_PFBTagCSVReco_PFScouting_v", # Moved to DSTJets category #"DST_CaloJet40_PFReco_PFBTagCSVReco_PFScouting_v" # Moved to DSTJets category diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaPhotonMET_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaPhotonMET_cff.py index 92f9e3948dbe7..962db33d0bb94 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaPhotonMET_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaPhotonMET_cff.py @@ -2,9 +2,9 @@ PhotonMETPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_Photon135_PFMET100_v", - "HLT_Photon135_PFMET100_JetIdCleaned_v", # For backward compatibility - "HLT_Photon125_v" # 0T +# "HLT_Photon135_PFMET100_v", +# "HLT_Photon135_PFMET100_JetIdCleaned_v", # For backward compatibility +# "HLT_Photon125_v" # 0T ), recPFMETLabel = cms.InputTag("pfMet"), recPhotonLabel = cms.InputTag("gedPhotons"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaPureMET_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaPureMET_cff.py index 457db03dce9a7..b8f1ebf1ec6be 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaPureMET_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaPureMET_cff.py @@ -2,20 +2,19 @@ PureMETPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_PFMET170_NotCleaned_v", - "HLT_PFMET170_v", - "HLT_PFMET170_HBHECleaned_v", - "HLT_PFMET170_v", - "HLT_PFMET170_NoiseCleaned_v", # Run2 - "HLT_MET200_v", - "HLT_MET100_v", # 0T - "HLT_MET150_v", # 0T +# "HLT_PFMET170_NotCleaned_v", +# "HLT_PFMET170_v", +# "HLT_PFMET170_HBHECleaned_v", +# "HLT_PFMET170_NoiseCleaned_v", # Run2 +# "HLT_MET200_v", +# "HLT_MET100_v", # 0T +# "HLT_MET150_v", # 0T # For backward compatibility - "HLT_PFMET170_JetIdCleaned_v", - "HLT_MET200_JetIdCleaned_v", - "HLT_MET100_JetIdCleaned_v", # 0T - "HLT_MET150_JetIdCleaned_v" # 0T +# "HLT_PFMET170_JetIdCleaned_v", +# "HLT_MET200_JetIdCleaned_v", +# "HLT_MET100_JetIdCleaned_v", # 0T +# "HLT_MET150_JetIdCleaned_v" # 0T ), recPFMETLabel = cms.InputTag("pfMet"), recCaloMETLabel = cms.InputTag("caloMet"), diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaSingleMuon_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaSingleMuon_cff.py index fa837371cabcf..7288f43b2d50a 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaSingleMuon_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaSingleMuon_cff.py @@ -2,12 +2,12 @@ SingleMuonPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_Mu45_eta2p1_v", # Run 2 +# "HLT_Mu45_eta2p1_v", # Run 2 "HLT_Mu50_v", # Run 2 - "HLT_TkMu50_v", # 2016 menu +# "HLT_TkMu50_v", # 2016 menu #50ns backup menu "HLT_Mu55_v", - "HLT_Mu50_eta2p1_v" +# "HLT_Mu50_eta2p1_v" ), recMuonLabel = cms.InputTag("muons"), # -- Analysis specific cuts diff --git a/HLTriggerOffline/Exotica/python/analyses/hltExoticaTracklessJets_cff.py b/HLTriggerOffline/Exotica/python/analyses/hltExoticaTracklessJets_cff.py index e06289b16b47c..396c168b4e6ca 100644 --- a/HLTriggerOffline/Exotica/python/analyses/hltExoticaTracklessJets_cff.py +++ b/HLTriggerOffline/Exotica/python/analyses/hltExoticaTracklessJets_cff.py @@ -2,12 +2,12 @@ TracklessJetsPSet = cms.PSet( hltPathsToCheck = cms.vstring( - "HLT_SingleCentralPFJet170_CFMax0p1_v", - "HLT_DiCentralPFJet170_CFMax0p1_v", - "HLT_DiCentralPFJet220_CFMax0p3_v", - "HLT_DiCentralPFJet330_CFMax0p5_v", - "HLT_DiCentralPFJet170_v", - "HLT_DiCentralPFJet430_v" +# "HLT_SingleCentralPFJet170_CFMax0p1_v", +# "HLT_DiCentralPFJet170_CFMax0p1_v", +# "HLT_DiCentralPFJet220_CFMax0p3_v", +# "HLT_DiCentralPFJet330_CFMax0p5_v", +# "HLT_DiCentralPFJet170_v", +# "HLT_DiCentralPFJet430_v" ), recPFJetLabel = cms.InputTag("ak4PFJets"), recCaloJetLabel = cms.InputTag("ak4CaloJets"), diff --git a/HLTriggerOffline/Exotica/python/hltExoticaPostProcessors_cff.py b/HLTriggerOffline/Exotica/python/hltExoticaPostProcessors_cff.py index 8882e48097254..9eb48dc7d03ab 100644 --- a/HLTriggerOffline/Exotica/python/hltExoticaPostProcessors_cff.py +++ b/HLTriggerOffline/Exotica/python/hltExoticaPostProcessors_cff.py @@ -141,6 +141,7 @@ def make_exo_postprocessor(analysis_name, plot_types=["TurnOn1", "TurnOn2", "Tur hltExoticaPostMonojetBackup + hltExoticaPostPureMET + hltExoticaPostMETplusTrack + + hltExoticaPostSingleMuon + hltExoticaEleMu + hltExoticaPhotonMET + hltExoticaHTDisplacedJets + 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/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 a62395dc96d0c..42f7db8fc72d6 100644 --- a/HeterogeneousCore/CUDACore/BuildFile.xml +++ b/HeterogeneousCore/CUDACore/BuildFile.xml @@ -1,10 +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/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 3c4c6a843fba8..5fcaf5e5527b0 100644 --- a/HeterogeneousCore/CUDAServices/BuildFile.xml +++ b/HeterogeneousCore/CUDAServices/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/HeterogeneousCore/CUDATest/BuildFile.xml b/HeterogeneousCore/CUDATest/BuildFile.xml index e50f088dd19fc..3d370b4248fa4 100644 --- a/HeterogeneousCore/CUDATest/BuildFile.xml +++ b/HeterogeneousCore/CUDATest/BuildFile.xml @@ -1,5 +1,6 @@ + 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/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/IOPool/Input/src/RootFile.cc b/IOPool/Input/src/RootFile.cc index 75c6a84fb19e6..4a6b93ed2fd83 100644 --- a/IOPool/Input/src/RootFile.cc +++ b/IOPool/Input/src/RootFile.cc @@ -546,6 +546,10 @@ namespace edm { setIsMergeable(product.second); } } + //inform system we want to use DelayedReader + for (auto& product : newReg->productListUpdator()) { + product.second.setOnDemand(true); + } // freeze the product registry newReg->setFrozen(inputType != InputType::Primary); @@ -1930,42 +1934,44 @@ 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); - } - prov = std::make_unique>(iThis->readProvenance(transitionIndex)); - if (post) { - post->emit(*(iContext->getStreamContext()), *iContext); - } - - } catch (...) { - if (post) { - post->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(); + } } - - 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 diff --git a/IOPool/Output/interface/PoolOutputModule.h b/IOPool/Output/interface/PoolOutputModule.h index 392550c0e90f1..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; @@ -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 09c8e94770c0e..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; @@ -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/JetMETCorrections/FFTJetModules/plugins/FFTJetSealModule.cc b/JetMETCorrections/FFTJetModules/plugins/FFTJetSealModule.cc index 54267cad81bf3..761a48e69abd9 100644 --- a/JetMETCorrections/FFTJetModules/plugins/FFTJetSealModule.cc +++ b/JetMETCorrections/FFTJetModules/plugins/FFTJetSealModule.cc @@ -4,8 +4,7 @@ #include "JetMETCorrections/FFTJetObjects/interface/FFTJetCorrectorSequenceRcdTypes.h" #include "JetMETCorrections/FFTJetObjects/interface/FFTJetLookupTableRcdTypes.h" #include "JetMETCorrections/FFTJetObjects/interface/FFTJetLookupTableSequence.h" - -#include "CondFormats/JetMETObjects/interface/FFTJet.h" +#include "JetMETCorrections/FFTJetObjects/interface/FFTJet.h" REGISTER_PLUGIN(FFTBasicJetCorrectorSequenceRcd, FFTBasicJetCorrectorSequence); REGISTER_PLUGIN(FFTGenJetCorrectorSequenceRcd, FFTGenJetCorrectorSequence); diff --git a/CondFormats/JetMETObjects/interface/FFTJet.h b/JetMETCorrections/FFTJetObjects/interface/FFTJet.h similarity index 94% rename from CondFormats/JetMETObjects/interface/FFTJet.h rename to JetMETCorrections/FFTJetObjects/interface/FFTJet.h index 75f86c038a69e..53d97c0959d81 100644 --- a/CondFormats/JetMETObjects/interface/FFTJet.h +++ b/JetMETCorrections/FFTJetObjects/interface/FFTJet.h @@ -1,5 +1,5 @@ -#ifndef CondFormats_JetMETObjects_FFTJET_H -#define CondFormats_JetMETObjects_FFTJET_H +#ifndef JetMETCorrections_FFTJetObjects_FFTJET_H +#define JetMETCorrections_FFTJetObjects_FFTJET_H #include #include diff --git a/L1Trigger/CSCTriggerPrimitives/interface/CSCCathodeLCTProcessor.h b/L1Trigger/CSCTriggerPrimitives/interface/CSCCathodeLCTProcessor.h index 7fd3317965ddd..4479bfd8bec4a 100644 --- a/L1Trigger/CSCTriggerPrimitives/interface/CSCCathodeLCTProcessor.h +++ b/L1Trigger/CSCTriggerPrimitives/interface/CSCCathodeLCTProcessor.h @@ -121,7 +121,6 @@ class CSCCathodeLCTProcessor : public CSCBaseboard { // Multiple hits on the same strip are allowed. void readComparatorDigis(std::vector halfstrip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS]); void pulseExtension(const std::vector time[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], - const int nStrips, PulseArray pulse); //--------------- Functions for post-2007 version of the firmware ----------- @@ -133,7 +132,6 @@ class CSCCathodeLCTProcessor : public CSCBaseboard { /* For a given clock cycle, check each half-strip if a pattern matches */ bool patternFinding(const PulseArray pulse, - const int nStrips, const unsigned int bx_time, std::map >& hits_in_patterns); @@ -150,15 +148,14 @@ class CSCCathodeLCTProcessor : public CSCBaseboard { void dumpConfigParams() const; /** Dump half-strip digis */ - void dumpDigis(const std::vector strip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], - const int nStrips) const; + void dumpDigis(const std::vector strip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS]) const; // --------Functions for the comparator code algorith for Run-3 ---------// //calculates the id based on location of hits int calculateComparatorCode(const std::array, 6>& halfStripPattern) const; // sets the 1/4 and 1/8 strip bits given a floating point position offset - void assignPositionCC(const unsigned offset, std::tuple& returnValue) const; + void assignPositionCC(const unsigned offset, std::tuple& returnValue) const; // runs the CCLUT procedure void runCCLUT(CSCCLCTDigi& digi) const; @@ -194,7 +191,9 @@ class CSCCathodeLCTProcessor : public CSCBaseboard { }; /* number of strips used in this processor */ - int numStrips; + int numStrips_; + int numCFEBs_; + int numHalfStrips_; /* Is the layer in the chamber staggered? */ int stagger[CSCConstants::NUM_LAYERS]; diff --git a/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc index 0e76750479ffe..63e48a87abeec 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCCathodeLCTProcessor.cc @@ -70,7 +70,7 @@ CSCCathodeLCTProcessor::CSCCathodeLCTProcessor(unsigned endcap, config_dumped = true; } - numStrips = 0; // Will be set later. + numStrips_ = 0; // Will be set later. // Provisional, but should be OK for all stations except ME1. for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) { if ((i_layer + 1) % 2 == 0) @@ -123,7 +123,7 @@ CSCCathodeLCTProcessor::CSCCathodeLCTProcessor() : CSCBaseboard() { config_dumped = true; } - numStrips = CSCConstants::MAX_NUM_STRIPS; + numStrips_ = CSCConstants::MAX_NUM_STRIPS; // Should be OK for all stations except ME1. for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) { if ((i_layer + 1) % 2 == 0) @@ -221,9 +221,10 @@ std::vector CSCCathodeLCTProcessor::run(const CSCComparatorDigiColl // Get the number of strips and stagger of layers for the given chamber. // Do it only once per chamber. - if (numStrips <= 0 or numStrips > CSCConstants::MAX_NUM_STRIPS_7CFEBS) { + if (numStrips_ <= 0 or numStrips_ > CSCConstants::MAX_NUM_STRIPS_7CFEBS) { if (cscChamber_) { - numStrips = cscChamber_->layer(1)->geometry()->numberOfStrips(); + numStrips_ = cscChamber_->layer(1)->geometry()->numberOfStrips(); + // ME1/a is known to the readout hardware as strips 65-80 of ME1/1. // Still need to decide whether we do any special adjustments to // reconstruct LCTs in this region (3:1 ganged strips); for now, we @@ -238,20 +239,25 @@ std::vector CSCCathodeLCTProcessor::run(const CSCComparatorDigiColl << "+++ CSC geometry looks garbled; no emulation possible +++\n"; } if (!disableME1a_ && theRing == 1 && !gangedME1a_) - numStrips = CSCConstants::MAX_NUM_STRIPS_7CFEBS; + numStrips_ = CSCConstants::MAX_NUM_STRIPS_7CFEBS; if (!disableME1a_ && theRing == 1 && gangedME1a_) - numStrips = CSCConstants::MAX_NUM_STRIPS; + numStrips_ = CSCConstants::MAX_NUM_STRIPS; if (disableME1a_ && theRing == 1) - numStrips = CSCConstants::MAX_NUM_STRIPS_ME1B; + numStrips_ = CSCConstants::MAX_NUM_STRIPS_ME1B; } - if (numStrips > CSCConstants::MAX_NUM_STRIPS_7CFEBS) { + numHalfStrips_ = 2 * numStrips_ + 1; + numCFEBs_ = numStrips_ / CSCConstants::NUM_STRIPS_PER_CFEB; + + if (numStrips_ > CSCConstants::MAX_NUM_STRIPS_7CFEBS) { edm::LogError("CSCCathodeLCTProcessor|SetupError") - << "+++ Number of strips, " << numStrips << " found in " << theCSCName_ << " (sector " << theSector + << "+++ Number of strips, " << numStrips_ << " found in " << theCSCName_ << " (sector " << theSector << " subsector " << theSubsector << " trig id. " << theTrigChamber << ")" << " exceeds max expected, " << CSCConstants::MAX_NUM_STRIPS_7CFEBS << " +++\n" << "+++ CSC geometry looks garbled; no emulation possible +++\n"; - numStrips = -1; + numStrips_ = -1; + numHalfStrips_ = -1; + numCFEBs_ = -1; } // The strips for a given layer may be offset from the adjacent layers. // This was done in order to improve resolution. We need to find the @@ -275,23 +281,25 @@ std::vector CSCCathodeLCTProcessor::run(const CSCComparatorDigiColl << theTrigChamber << ")" << " is not defined in current geometry! +++\n" << "+++ CSC geometry looks garbled; no emulation possible +++\n"; - numStrips = -1; + numStrips_ = -1; + numHalfStrips_ = -1; + numCFEBs_ = -1; } } - if (numStrips <= 0 or 2 * (unsigned)numStrips > qualityControl_->get_csc_max_halfstrip(theStation, theRing)) { + if (numStrips_ <= 0 or 2 * (unsigned)numStrips_ > qualityControl_->get_csc_max_halfstrip(theStation, theRing)) { edm::LogError("CSCCathodeLCTProcessor|ConfigError") << " " << theCSCName_ << " (sector " << theSector << " subsector " << theSubsector << " trig id. " << theTrigChamber << "):" - << " numStrips = " << numStrips << "; CLCT emulation skipped! +++"; + << " numStrips_ = " << numStrips_ << "; CLCT emulation skipped! +++"; std::vector emptyV; return emptyV; } // Get comparator digis in this chamber. - bool noDigis = getDigis(compdc); + bool hasDigis = getDigis(compdc); - if (!noDigis) { + if (hasDigis) { // Get halfstrip times from comparator digis. std::vector halfstrip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS]; readComparatorDigis(halfstrip); @@ -396,7 +404,7 @@ void CSCCathodeLCTProcessor::run( } bool CSCCathodeLCTProcessor::getDigis(const CSCComparatorDigiCollection* compdc) { - bool noDigis = true; + bool hasDigis = false; // Loop over layers and save comparator digis on each one into digiV[layer]. for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) { @@ -411,7 +419,7 @@ bool CSCCathodeLCTProcessor::getDigis(const CSCComparatorDigiCollection* compdc) } if (!digiV[i_layer].empty()) { - noDigis = false; + hasDigis = true; if (infoV > 1) { LogTrace("CSCCathodeLCTProcessor") << "found " << digiV[i_layer].size() << " comparator digi(s) in layer " << i_layer << " of " << detid.chamberName() << " (trig. sector " << theSector @@ -420,7 +428,7 @@ bool CSCCathodeLCTProcessor::getDigis(const CSCComparatorDigiCollection* compdc) } } - return noDigis; + return hasDigis; } void CSCCathodeLCTProcessor::getDigis(const CSCComparatorDigiCollection* compdc, const CSCDetId& id) { @@ -474,11 +482,11 @@ void CSCCathodeLCTProcessor::readComparatorDigis( // Get strip number. int thisStrip = pld->getStrip() - 1; // count from 0 - if (thisStrip < 0 || thisStrip >= numStrips) { + if (thisStrip < 0 || thisStrip >= numStrips_) { if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongInput") << "+++ station " << theStation << " ring " << theRing << " chamber " << theChamber - << " Found comparator digi with wrong strip number = " << thisStrip << " (max strips = " << numStrips + << " Found comparator digi with wrong strip number = " << thisStrip << " (max strips = " << numStrips_ << "); skipping it... +++\n"; continue; } @@ -486,7 +494,7 @@ void CSCCathodeLCTProcessor::readComparatorDigis( // comp : comparator output // stagger: stagger for this layer int thisHalfstrip = 2 * thisStrip + thisComparator + stagger[i_layer]; - if (thisHalfstrip >= 2 * numStrips + 1) { + if (thisHalfstrip >= numHalfStrips_) { if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongInput") << "+++ station " << theStation << " ring " << theRing << " chamber " << theChamber @@ -540,18 +548,15 @@ std::vector CSCCathodeLCTProcessor::findLCTs( const std::vector halfstrip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS]) { std::vector lctList; - // Max. number of half-strips for this chamber. - const int maxHalfStrips = 2 * numStrips + 1; - if (infoV > 1) - dumpDigis(halfstrip, maxHalfStrips); + dumpDigis(halfstrip); // 2 possible LCTs per CSC x 7 LCT quantities int keystrip_data[CSCConstants::MAX_CLCTS_PER_PROCESSOR][CLCT_NUM_QUANTITIES] = {{0}}; PulseArray pulse; // Fire half-strip one-shots for hit_persist bx's (4 bx's by default). - pulseExtension(halfstrip, maxHalfStrips, pulse); + pulseExtension(halfstrip, pulse); unsigned int start_bx = start_bx_shift; // Stop drift_delay bx's short of fifo_tbins since at later bx's we will @@ -585,10 +590,10 @@ std::vector CSCCathodeLCTProcessor::findLCTs( // We check if there is at least one key half strip for which at least // one pattern id has at least the minimum number of hits - bool hits_in_time = patternFinding(pulse, maxHalfStrips, latch_bx, hits_in_patterns); + bool hits_in_time = patternFinding(pulse, latch_bx, hits_in_patterns); if (infoV > 1) { if (hits_in_time) { - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (nhits[hstrip] > 0) { LogTrace("CSCCathodeLCTProcessor") << " bx = " << std::setw(2) << latch_bx << " --->" @@ -618,7 +623,7 @@ std::vector CSCCathodeLCTProcessor::findLCTs( // Calculate quality from pattern id and number of hits, and // simultaneously select best-quality LCT. if (hits_in_time) { - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { // The bend-direction bit pid[0] is ignored (left and right // bends have equal quality). quality[hstrip] = (best_pid[hstrip] & 14) | (nhits[hstrip] << 5); @@ -642,7 +647,7 @@ std::vector CSCCathodeLCTProcessor::findLCTs( // zero, and repeat the search. markBusyKeys(best_halfstrip[0], best_pid[best_halfstrip[0]], quality); - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (quality[hstrip] > best_quality[1]) { best_halfstrip[1] = hstrip; best_quality[1] = quality[hstrip]; @@ -730,9 +735,9 @@ std::vector CSCCathodeLCTProcessor::findLCTs( unsigned int stop_time = fifo_tbins - drift_delay; for (unsigned int bx = latch_bx + 1; bx < stop_time; bx++) { bool return_to_idle = true; - bool hits_in_time = patternFinding(pulse, maxHalfStrips, bx, hits_in_patterns); + bool hits_in_time = patternFinding(pulse, bx, hits_in_patterns); if (hits_in_time) { - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { // the dead-time is done at the pre-trigger, not at the trigger if (nhits[hstrip] >= nplanes_hit_pretrig) { if (infoV > 1) @@ -760,9 +765,7 @@ std::vector CSCCathodeLCTProcessor::findLCTs( // Common to all versions. void CSCCathodeLCTProcessor::pulseExtension( - const std::vector time[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], - const int nStrips, - PulseArray pulse) { + const std::vector time[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], PulseArray pulse) { static const unsigned int bits_in_pulse = 8 * sizeof(pulse[0][0]); // Clear pulse array. This array will be used as a bit representation of @@ -774,12 +777,12 @@ void CSCCathodeLCTProcessor::pulseExtension( // of 3 would look like 0000000000111000. This is similating the digital // one-shot in the TMB. for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) - for (int i_strip = 0; i_strip < nStrips; i_strip++) + for (int i_strip = 0; i_strip < numHalfStrips_; i_strip++) pulse[i_layer][i_strip] = 0; // Loop over all layers and halfstrips. for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) { - for (int i_strip = 0; i_strip < nStrips; i_strip++) { + for (int i_strip = 0; i_strip < numHalfStrips_; i_strip++) { // If there is a hit, simulate digital one-shot persistence starting // in the bx of the initial hit. Fill this into pulse[][]. if (!time[i_layer][i_strip].empty()) { @@ -809,9 +812,6 @@ bool CSCCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int start_ if (infoV > 1) LogTrace("CSCCathodeLCTProcessor") << "....................PreTrigger..........................."; - // Max. number of half-strips for this chamber. - const int nStrips = 2 * numStrips + 1; - int nPreTriggers = 0; bool pre_trig = false; @@ -826,9 +826,9 @@ bool CSCCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int start_ std::map> hits_in_patterns; hits_in_patterns.clear(); - bool hits_in_time = patternFinding(pulse, nStrips, bx_time, hits_in_patterns); + bool hits_in_time = patternFinding(pulse, bx_time, hits_in_patterns); if (hits_in_time) { - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < nStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (infoV > 1) { if (nhits[hstrip] > 0) { LogTrace("CSCCathodeLCTProcessor") @@ -869,7 +869,6 @@ bool CSCCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int start_ // TMB-07 version. bool CSCCathodeLCTProcessor::patternFinding( const PulseArray pulse, - const int nStrips, const unsigned int bx_time, std::map>& hits_in_patterns) { if (bx_time >= fifo_tbins) @@ -880,7 +879,7 @@ bool CSCCathodeLCTProcessor::patternFinding( // substantially. unsigned int layers_hit = 0; for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) { - for (int i_hstrip = 0; i_hstrip < nStrips; i_hstrip++) { + for (int i_hstrip = 0; i_hstrip < numHalfStrips_; i_hstrip++) { if (((pulse[i_layer][i_hstrip] >> bx_time) & 1) == 1) { layers_hit++; break; @@ -890,7 +889,7 @@ bool CSCCathodeLCTProcessor::patternFinding( if (layers_hit < nplanes_hit_pretrig) return false; - for (int key_hstrip = 0; key_hstrip < nStrips; key_hstrip++) { + for (int key_hstrip = 0; key_hstrip < numHalfStrips_; key_hstrip++) { best_pid[key_hstrip] = 0; nhits[key_hstrip] = 0; first_bx_corrected[key_hstrip] = -999; @@ -899,7 +898,7 @@ bool CSCCathodeLCTProcessor::patternFinding( bool hit_layer[CSCConstants::NUM_LAYERS]; // Loop over candidate key strips. - for (int key_hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; key_hstrip < nStrips; key_hstrip++) { + for (int key_hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; key_hstrip < numHalfStrips_; key_hstrip++) { // Loop over patterns and look for hits matching each pattern. for (unsigned int pid = clct_pattern_.size() - 1; pid >= pid_thresh_pretrig and pid < clct_pattern_.size(); pid--) { layers_hit = 0; @@ -932,7 +931,7 @@ bool CSCCathodeLCTProcessor::patternFinding( int this_strip = CSCPatternBank::clct_pattern_offset_[strip_num] + key_hstrip; // current strip should be valid of course - if (this_strip >= 0 && this_strip < nStrips) { + if (this_strip >= 0 && this_strip < numHalfStrips_) { if (infoV > 3) { LogTrace("CSCCathodeLCTProcessor") << " In patternFinding: key_strip = " << key_hstrip << " pid = " << pid << " layer = " << this_layer << " strip = " << this_strip << std::endl; @@ -1061,12 +1060,11 @@ void CSCCathodeLCTProcessor::dumpConfigParams() const { // Reasonably nice dump of digis on half-strips. void CSCCathodeLCTProcessor::dumpDigis( - const std::vector strip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], - const int nStrips) const { - LogDebug("CSCCathodeLCTProcessor") << theCSCName_ << " strip type: half-strip, nStrips " << nStrips; + const std::vector strip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS]) const { + LogDebug("CSCCathodeLCTProcessor") << theCSCName_ << " strip type: half-strip, numHalfStrips " << numHalfStrips_; std::ostringstream strstrm; - for (int i_strip = 0; i_strip < nStrips; i_strip++) { + for (int i_strip = 0; i_strip < numHalfStrips_; i_strip++) { if (i_strip % 10 == 0) { if (i_strip < 100) strstrm << i_strip / 10; @@ -1078,14 +1076,14 @@ void CSCCathodeLCTProcessor::dumpDigis( strstrm << " "; } strstrm << "\n"; - for (int i_strip = 0; i_strip < nStrips; i_strip++) { + for (int i_strip = 0; i_strip < numHalfStrips_; i_strip++) { strstrm << i_strip % 10; if ((i_strip + 1) % CSCConstants::NUM_HALF_STRIPS_PER_CFEB == 0) strstrm << " "; } for (int i_layer = 0; i_layer < CSCConstants::NUM_LAYERS; i_layer++) { strstrm << "\n"; - for (int i_strip = 0; i_strip < nStrips; i_strip++) { + for (int i_strip = 0; i_strip < numHalfStrips_; i_strip++) { if (!strip[i_layer][i_strip].empty()) { std::vector bx_times = strip[i_layer][i_strip]; // Dump only the first in time. @@ -1304,7 +1302,7 @@ int CSCCathodeLCTProcessor::calculateComparatorCode(const std::array& returnValue) const { + std::tuple& returnValue) const { /* | Value | Half-Strip Offset | Delta Half-Strip | Quarter-Strip Bit | Eighth-Strip Bit | |-------|--------------------|-------------------|--------------------|------------------| @@ -1325,7 +1323,7 @@ void CSCCathodeLCTProcessor::assignPositionCC(const unsigned offset, | 14 | 7/4 | 1 | 1 | 1 | | 15 | 2 | 2 | 0 | 0 | */ - std::vector> my_tuple = { + std::vector> my_tuple = { {-2, false, true}, {-2, true, false}, {-2, true, true}, @@ -1400,7 +1398,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); @@ -1409,22 +1407,35 @@ void CSCCathodeLCTProcessor::runCCLUT(CSCCLCTDigi& digi) const { // calculate the new position uint16_t halfstrip = digi.getKeyStrip(); - std::tuple halfstripoffset; - assignPositionCC(positionCC, halfstripoffset); - halfstrip += std::get<0>(halfstripoffset); + std::tuple stripoffset; + assignPositionCC(positionCC, stripoffset); + const int halfstripoffset = std::get<0>(stripoffset); + halfstrip += halfstripoffset; + + // calculate the new CFEB number + int newCFEB = digi.getCFEB(); + + // case where key half-strip is on the lower edge of the CFEB + if (digi.getStrip() == 0 and halfstripoffset <= -1 and digi.getCFEB() > 0) { + newCFEB = digi.getCFEB() - 1; + } + // case where key half-strip is on the upper edge of the CFEB + if (digi.getStrip() == CSCConstants::NUM_HALF_STRIPS_PER_CFEB - 1 and halfstripoffset >= 1 and + digi.getCFEB() < numCFEBs_) { + newCFEB = digi.getCFEB() + 1; + } + + digi.setCFEB(newCFEB); // store the new 1/2, 1/4 and 1/8 strip positions - digi.setStrip(halfstrip - digi.getCFEB() * 32); - digi.setQuartStrip(std::get<1>(halfstripoffset)); - digi.setEightStrip(std::get<2>(halfstripoffset)); + digi.setStrip(halfstrip - digi.getCFEB() * CSCConstants::NUM_HALF_STRIPS_PER_CFEB); + digi.setQuartStrip(std::get<1>(stripoffset)); + digi.setEightStrip(std::get<2>(stripoffset)); // store the bending angle value in the pattern data member 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 +1454,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/CSCUpgradeCathodeLCTProcessor.cc b/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeCathodeLCTProcessor.cc index 0af46aabe7355..c8eb90711f0ab 100644 --- a/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeCathodeLCTProcessor.cc +++ b/L1Trigger/CSCTriggerPrimitives/src/CSCUpgradeCathodeLCTProcessor.cc @@ -45,9 +45,6 @@ bool CSCUpgradeCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int LogTrace("CSCUpgradeCathodeLCTProcessor") << "....................PreTrigger, Phase2 version with localized dead time zone..........................."; - // Max. number of half-strips for this chamber. - const int nStrips = 2 * numStrips + 1; - int nPreTriggers = 0; bool pre_trig = false; @@ -63,9 +60,9 @@ bool CSCUpgradeCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int std::map > hits_in_patterns; hits_in_patterns.clear(); - bool hits_in_time = patternFinding(pulse, nStrips, bx_time, hits_in_patterns); + bool hits_in_time = patternFinding(pulse, bx_time, hits_in_patterns); if (hits_in_time) { - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < nStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (infoV > 1) { if (nhits[hstrip] > 0) { LogTrace("CSCUpgradeCathodeLCTProcessor") @@ -102,14 +99,14 @@ bool CSCUpgradeCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int } // find all pretriggers //update dead zone - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < nStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (ispretrig[hstrip]) { int min_hstrip = hstrip - delta_hs; //only fixed localized dead time zone is implemented int max_hstrip = hstrip + delta_hs; if (min_hstrip < stagger[CSCConstants::KEY_CLCT_LAYER - 1]) min_hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; - if (max_hstrip >= nStrips) - max_hstrip = nStrips - 1; + if (max_hstrip >= numHalfStrips_) + max_hstrip = numHalfStrips_ - 1; for (int hs = min_hstrip; hs <= max_hstrip; hs++) busyMap[hs][bx_time + 1] = true; if (infoV > 1) @@ -123,7 +120,7 @@ bool CSCUpgradeCathodeLCTProcessor::preTrigger(const PulseArray pulse, const int return true; } } else //no pattern found, remove all dead time zone - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < nStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (ispretrig[hstrip]) ispretrig[hstrip] = false; //dead zone is gone by default } @@ -146,16 +143,13 @@ std::vector CSCUpgradeCathodeLCTProcessor::findLCTs( std::vector lctList; - // Max. number of half-strips for this chamber. - const int maxHalfStrips = 2 * numStrips + 1; - // initialize the ispretrig before doing pretriggering - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { ispretrig[hstrip] = false; } if (infoV > 1) - dumpDigis(halfstrip, maxHalfStrips); + dumpDigis(halfstrip); // keeps dead-time zones around key halfstrips of triggered CLCTs for (int i = 0; i < CSCConstants::NUM_HALF_STRIPS_7CFEBS; i++) { @@ -169,7 +163,7 @@ std::vector CSCUpgradeCathodeLCTProcessor::findLCTs( unsigned int pulse[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS]; // Fire half-strip one-shots for hit_persist bx's (4 bx's by default). - pulseExtension(halfstrip, maxHalfStrips, pulse); + pulseExtension(halfstrip, pulse); unsigned int start_bx = start_bx_shift; // Stop drift_delay bx's short of fifo_tbins since at later bx's we will @@ -198,10 +192,10 @@ std::vector CSCUpgradeCathodeLCTProcessor::findLCTs( std::map > hits_in_patterns; hits_in_patterns.clear(); - bool hits_in_time = patternFinding(pulse, maxHalfStrips, latch_bx, hits_in_patterns); + bool hits_in_time = patternFinding(pulse, latch_bx, hits_in_patterns); if (infoV > 1) { if (hits_in_time) { - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (nhits[hstrip] > 0) { LogTrace("CSCUpgradeCathodeLCTProcessor") << " bx = " << std::setw(2) << latch_bx << " --->" @@ -248,7 +242,7 @@ std::vector CSCUpgradeCathodeLCTProcessor::findLCTs( } } - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { // The bend-direction bit pid[0] is ignored (left and right bends have equal quality). quality[hstrip] = (best_pid[hstrip] & 14) | (nhits[hstrip] << 5); // do not consider halfstrips: @@ -274,7 +268,7 @@ std::vector CSCUpgradeCathodeLCTProcessor::findLCTs( // Mark keys near best CLCT as busy by setting their quality to zero, and repeat the search. markBusyKeys(best_halfstrip[0], best_pid[best_halfstrip[0]], quality); - for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < maxHalfStrips; hstrip++) { + for (int hstrip = stagger[CSCConstants::KEY_CLCT_LAYER - 1]; hstrip < numHalfStrips_; hstrip++) { if (quality[hstrip] > best_quality[1] && pretrig_zone[hstrip] && !busyMap[hstrip][first_bx]) //!busyMap[hstrip][latch_bx] ) { diff --git a/L1Trigger/Configuration/python/customiseReEmul.py b/L1Trigger/Configuration/python/customiseReEmul.py index 082ee58efd537..c26b3579249b6 100644 --- a/L1Trigger/Configuration/python/customiseReEmul.py +++ b/L1Trigger/Configuration/python/customiseReEmul.py @@ -3,6 +3,7 @@ import FWCore.ParameterSet.Config as cms from Configuration.Eras.Modifier_stage2L1Trigger_cff import stage2L1Trigger from Configuration.Eras.Modifier_stage2L1Trigger_2017_cff import stage2L1Trigger_2017 +from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM def L1TCaloStage2ParamsForHW(process): process.load("L1Trigger.L1TCalorimeter.caloStage2Params_HWConfig_cfi") @@ -134,12 +135,13 @@ def L1TReEmulFromRAW2016(process): process.simCscTriggerPrimitiveDigis.CSCWireDigiProducer = cms.InputTag( 'muonCSCDigis', 'MuonCSCWireDigi' ) process.L1TReEmul = cms.Sequence(process.simEcalTriggerPrimitiveDigis * process.simHcalTriggerPrimitiveDigis * process.SimL1Emulator) + #cutlist=['simDtTriggerPrimitiveDigis','simCscTriggerPrimitiveDigis'] #for b in cutlist: # process.SimL1Emulator.remove(getattr(process,b)) # TwinMux stage2L1Trigger.toModify(process.simTwinMuxDigis, - RPC_Source = 'RPCTwinMuxRawToDigi', + RPC_Source = 'rpcTwinMuxRawToDigi', DTDigi_Source = 'twinMuxStage2Digis:PhIn', DTThetaDigi_Source = 'twinMuxStage2Digis:ThIn' ) @@ -179,10 +181,11 @@ def L1TReEmulFromRAW2016(process): process.L1TReEmulPath = cms.Path(process.L1TReEmul) process.schedule.append(process.L1TReEmulPath) - return process + return process def L1TReEmulFromRAW(process): L1TReEmulFromRAW2016(process) + stage2L1Trigger_2017.toModify(process.simOmtfDigis, srcRPC = 'omtfStage2Digis', @@ -191,6 +194,25 @@ def L1TReEmulFromRAW(process): srcDTTh = 'omtfStage2Digis' ) + stage2L1Trigger.toModify(process.simEmtfDigis, + CSCInput = cms.InputTag('emtfStage2Digis'), + RPCInput = cms.InputTag('muonRPCDigis'), + CPPFInput = cms.InputTag('emtfStage2Digis'), + GEMEnable = cms.bool(False), + GEMInput = cms.InputTag('muonGEMPadDigis'), + CPPFEnable = cms.bool(True), # Use CPPF-emulated clustered RPC hits from CPPF as the RPC hits + ) + + run3_GEM.toModify(process.simMuonGEMPadDigis, + InputCollection = 'muonGEMDigis', + ) + + run3_GEM.toModify(process.simTwinMuxDigis, + RPC_Source = 'rpcTwinMuxRawToDigi', + DTDigi_Source = 'simDtTriggerPrimitiveDigis', + DTThetaDigi_Source = 'simDtTriggerPrimitiveDigis' + ) + print("# L1TReEmul sequence: ") print("# {0}".format(process.L1TReEmul)) print("# {0}".format(process.schedule)) diff --git a/L1Trigger/Configuration/python/customiseSettings.py b/L1Trigger/Configuration/python/customiseSettings.py index 170822bd6cc65..12a240d5bb1b9 100644 --- a/L1Trigger/Configuration/python/customiseSettings.py +++ b/L1Trigger/Configuration/python/customiseSettings.py @@ -10,6 +10,10 @@ def L1TSettingsToCaloParams_2018_v1_4(process): process.load("L1Trigger.L1TCalorimeter.caloParams_2018_v1_4_cfi") return process +def L1TSettingsToCaloParams_2018_v1_3(process): + process.load("L1Trigger.L1TCalorimeter.caloParams_2018_v1_3_cfi") + return process + def L1TSettingsToCaloParams_2018_v1_2(process): process.load("L1Trigger.L1TCalorimeter.caloParams_2018_v1_2_cfi") return process diff --git a/L1Trigger/Configuration/test/GEMeMapDummy.db b/L1Trigger/Configuration/test/GEMeMapDummy.db new file mode 100644 index 0000000000000..07e7f6e139ec2 Binary files /dev/null and b/L1Trigger/Configuration/test/GEMeMapDummy.db differ diff --git a/L1Trigger/Configuration/test/mc_L1TReEmulMCFromRAW_L1NtupleEMU_fixConfigGEM.py b/L1Trigger/Configuration/test/mc_L1TReEmulMCFromRAW_L1NtupleEMU_fixConfigGEM.py new file mode 100644 index 0000000000000..4f4bff091859a --- /dev/null +++ b/L1Trigger/Configuration/test/mc_L1TReEmulMCFromRAW_L1NtupleEMU_fixConfigGEM.py @@ -0,0 +1,122 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: l1Ntuple -s RAW2DIGI --python_filename=mc_L1TReEmulMCFromRAW_L1NtupleEMU.py -n 2 --no_output --era=Run3 --mc --conditions=112X_mcRun3_2021_realistic_v13 --customise=L1Trigger/Configuration/customiseReEmul.L1TReEmulMCFromRAW --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMU --customise=L1Trigger/Configuration/customiseSettings.L1TSettingsToCaloParams_2018_v1_4 --filein=/store/mc/Run3Winter20DRPremixMiniAOD/TT_TuneCP5_14TeV-powheg-pythia8/GEN-SIM-RAW/110X_mcRun3_2021_realistic_v6-v2/20000/CFCAE998-5A17-FB48-A36F-A31EA28D2A72.root +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 + +process = cms.Process('RAW2DIGI',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('Configuration.StandardSequences.RawToDigi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +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("PoolSource", + fileNames = cms.untracked.vstring('/store/mc/Run3Winter20DRPremixMiniAOD/TT_TuneCP5_14TeV-powheg-pythia8/GEN-SIM-RAW/110X_mcRun3_2021_realistic_v6-v2/20000/CFCAE998-5A17-FB48-A36F-A31EA28D2A72.root'), + secondaryFileNames = cms.untracked.vstring() +) + +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('l1Ntuple nevts:2'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +# Additional output definition + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '112X_mcRun3_2021_realistic_v13', '') + +process.GlobalTag.toGet = cms.VPSet( + cms.PSet(record = cms.string("GEMeMapRcd"), + tag = cms.string("GEMeMapDummy"), + connect = cms.string("sqlite_file:L1Trigger/Configuration/test/GEMeMapDummy.db") + ) +) +process.muonGEMDigis.useDBEMap = True + +# Path and EndPath definitions +process.raw2digi_step = cms.Path(process.RawToDigi) +process.endjob_step = cms.EndPath(process.endOfProcess) + +# Schedule definition +process.schedule = cms.Schedule(process.raw2digi_step,process.endjob_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) + +# customisation of the process. + +# Automatic addition of the customisation function from L1Trigger.Configuration.customiseReEmul +from L1Trigger.Configuration.customiseReEmul import L1TReEmulMCFromRAW + +#call to customisation function L1TReEmulMCFromRAW imported from L1Trigger.Configuration.customiseReEmul +process = L1TReEmulMCFromRAW(process) + +# Automatic addition of the customisation function from L1Trigger.L1TNtuples.customiseL1Ntuple +from L1Trigger.L1TNtuples.customiseL1Ntuple import L1NtupleEMU + +#call to customisation function L1NtupleEMU imported from L1Trigger.L1TNtuples.customiseL1Ntuple +process = L1NtupleEMU(process) + +# Automatic addition of the customisation function from L1Trigger.Configuration.customiseSettings +from L1Trigger.Configuration.customiseSettings import L1TSettingsToCaloParams_2018_v1_4 + +#call to customisation function L1TSettingsToCaloParams_2018_v1_4 imported from L1Trigger.Configuration.customiseSettings +process = L1TSettingsToCaloParams_2018_v1_4(process) + +# End of customisation functions + + +# 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/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/L1CaloTrigger/BuildFile.xml b/L1Trigger/L1CaloTrigger/BuildFile.xml index dbd471630a98a..b95505a2ac92a 100644 --- a/L1Trigger/L1CaloTrigger/BuildFile.xml +++ b/L1Trigger/L1CaloTrigger/BuildFile.xml @@ -1,5 +1,4 @@ - 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/L1TCalorimeter/python/caloParams_2018_v1_3_cfi.py b/L1Trigger/L1TCalorimeter/python/caloParams_2018_v1_3_cfi.py new file mode 100644 index 0000000000000..df894ebd37207 --- /dev/null +++ b/L1Trigger/L1TCalorimeter/python/caloParams_2018_v1_3_cfi.py @@ -0,0 +1,172 @@ +import FWCore.ParameterSet.Config as cms + +from L1Trigger.L1TCalorimeter.caloParams_cfi import caloParamsSource +import L1Trigger.L1TCalorimeter.caloParams_cfi +caloStage2Params = L1Trigger.L1TCalorimeter.caloParams_cfi.caloParams.clone() + +# towers +caloStage2Params.towerLsbH = cms.double(0.5) +caloStage2Params.towerLsbE = cms.double(0.5) +caloStage2Params.towerLsbSum = cms.double(0.5) +caloStage2Params.towerNBitsH = cms.int32(8) +caloStage2Params.towerNBitsE = cms.int32(8) +caloStage2Params.towerNBitsSum = cms.int32(9) +caloStage2Params.towerNBitsRatio = cms.int32(3) +caloStage2Params.towerEncoding = cms.bool(True) + +# regions +caloStage2Params.regionLsb = cms.double(0.5) +caloStage2Params.regionPUSType = cms.string("None") +caloStage2Params.regionPUSParams = cms.vdouble() + +# EG +caloStage2Params.egLsb = cms.double(0.5) +caloStage2Params.egEtaCut = cms.int32(28) +caloStage2Params.egSeedThreshold = cms.double(2.) +caloStage2Params.egNeighbourThreshold = cms.double(1.) +caloStage2Params.egHcalThreshold = cms.double(0.) +caloStage2Params.egTrimmingLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/egTrimmingLUT_10_v16.01.19.txt") +caloStage2Params.egMaxHcalEt = cms.double(0.) +caloStage2Params.egMaxPtHOverE = cms.double(128.) +caloStage2Params.egMaxHOverELUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/HoverEIdentification_0.995_v15.12.23.txt") +caloStage2Params.egHOverEcutBarrel = cms.int32(3) +caloStage2Params.egHOverEcutEndcap = cms.int32(4) +caloStage2Params.egBypassExtHOverE = cms.uint32(0) +caloStage2Params.egCompressShapesLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/egCompressLUT_v4.txt") +caloStage2Params.egShapeIdType = cms.string("compressed") +caloStage2Params.egShapeIdVersion = cms.uint32(0) +caloStage2Params.egShapeIdLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/shapeIdentification_adapt0.99_compressedieta_compressedE_compressedshape_v15.12.08.txt")#Not used any more in the current emulator version, merged with calibration LUT + +caloStage2Params.egPUSType = cms.string("None") +caloStage2Params.egIsolationType = cms.string("compressed") +caloStage2Params.egIsoLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/EG_Iso_LUT_04_04_2017.2.txt") +caloStage2Params.egIsoLUTFile2 = cms.FileInPath("L1Trigger/L1TCalorimeter/data/EG_LoosestIso_2018.2.txt") +caloStage2Params.egIsoAreaNrTowersEta = cms.uint32(2) +caloStage2Params.egIsoAreaNrTowersPhi = cms.uint32(4) +caloStage2Params.egIsoVetoNrTowersPhi = cms.uint32(2) +#caloStage2Params.egIsoPUEstTowerGranularity = cms.uint32(1) +#caloStage2Params.egIsoMaxEtaAbsForTowerSum = cms.uint32(4) +#caloStage2Params.egIsoMaxEtaAbsForIsoSum = cms.uint32(27) +caloStage2Params.egPUSParams = cms.vdouble(1,4,32) #Isolation window in firmware goes up to abs(ieta)=32 for now +caloStage2Params.egCalibrationType = cms.string("compressed") +caloStage2Params.egCalibrationVersion = cms.uint32(0) +#caloStage2Params.egCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/EG_Calibration_LUT_FW_v17.04.04_shapeIdentification_adapt0.99_compressedieta_compressedE_compressedshape_v15.12.08_correct.txt") +caloStage2Params.egCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/corrections_Trimming10_compressedieta_compressedE_compressedshape_PANTELIS_v2_NEW_CALIBRATIONS_withShape_v17.04.04.txt") + +# Tau +caloStage2Params.tauLsb = cms.double(0.5) +caloStage2Params.isoTauEtaMax = cms.int32(25) +caloStage2Params.tauSeedThreshold = cms.double(0.) +caloStage2Params.tauNeighbourThreshold = cms.double(0.) +caloStage2Params.tauIsoAreaNrTowersEta = cms.uint32(2) +caloStage2Params.tauIsoAreaNrTowersPhi = cms.uint32(4) +caloStage2Params.tauIsoVetoNrTowersPhi = cms.uint32(2) +caloStage2Params.tauPUSType = cms.string("None") +caloStage2Params.tauIsoLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_Option_31_extrap_2018_FW_v10.0.0.txt") +caloStage2Params.tauIsoLUTFile2 = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_Option_31_extrap_2018_FW_v10.0.0.txt") +#caloStage2Params.tauCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Calibration_LUT_2017_Layer1Calibration_FW_v12.0.0.txt") +caloStage2Params.tauCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Calibration_LUT_2018_Layer1CalibrationNewHCAL_FW_v13.0.0.txt") +caloStage2Params.tauCompressLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/tauCompressAllLUT_12bit_v3.txt") +caloStage2Params.tauPUSParams = cms.vdouble(1,4,32) + +# jets +caloStage2Params.jetLsb = cms.double(0.5) +caloStage2Params.jetSeedThreshold = cms.double(4.0) +caloStage2Params.jetNeighbourThreshold = cms.double(0.) +caloStage2Params.jetPUSType = cms.string("ChunkyDonut") +caloStage2Params.jetBypassPUS = cms.uint32(0) + +# Calibration options +caloStage2Params.jetCalibrationType = cms.string("LUT") + +caloStage2Params.jetCompressPtLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_pt_compress_2017v1.txt") +caloStage2Params.jetCompressEtaLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_eta_compress_2017v1.txt") +caloStage2Params.jetCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_calib_2018v1_ECALZS_noHFJEC.txt") + + +# sums: 0=ET, 1=HT, 2=MET, 3=MHT +caloStage2Params.etSumLsb = cms.double(0.5) +caloStage2Params.etSumEtaMin = cms.vint32(1, 1, 1, 1, 1) +caloStage2Params.etSumEtaMax = cms.vint32(28, 26, 28, 26, 28) +caloStage2Params.etSumEtThreshold = cms.vdouble(0., 30., 0., 30., 0.) # only 2nd (HT) and 4th (MHT) values applied +caloStage2Params.etSumMetPUSType = cms.string("LUT") # et threshold from this LUT supercedes et threshold in line above +caloStage2Params.etSumEttPUSType = cms.string("None") +caloStage2Params.etSumEcalSumPUSType = cms.string("None") +caloStage2Params.etSumBypassMetPUS = cms.uint32(0) +caloStage2Params.etSumBypassEttPUS = cms.uint32(1) +caloStage2Params.etSumBypassEcalSumPUS = cms.uint32(1) +caloStage2Params.etSumXCalibrationType = cms.string("None") +caloStage2Params.etSumYCalibrationType = cms.string("None") +caloStage2Params.etSumEttCalibrationType = cms.string("None") +caloStage2Params.etSumEcalSumCalibrationType = cms.string("None") + +caloStage2Params.etSumMetPUSLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_towEtThresh_2017v7.txt") +caloStage2Params.etSumEttPUSLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_towEtThresh_dummy.txt") +caloStage2Params.etSumEcalSumPUSLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_towEtThresh_dummy.txt") +caloStage2Params.etSumXCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumPUS_dummy.txt") +caloStage2Params.etSumYCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumPUS_dummy.txt") +caloStage2Params.etSumEttCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumPUS_dummy.txt") +caloStage2Params.etSumEcalSumCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumPUS_dummy.txt") + + +# Layer 1 SF +caloStage2Params.layer1ECalScaleETBins = cms.vint32([3, 6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]) +caloStage2Params.layer1ECalScaleFactors = cms.vdouble([ + 1.128436, 1.102229, 1.128385, 1.127897, 1.142444, 1.115476, 1.104283, 1.124583, 1.115929, 1.115196, 1.130342, 1.127173, 1.130640, 1.125474, 1.126652, 1.143535, 1.148905, 1.309035, 1.156021, 1.292685, 1.314302, 1.327634, 1.341229, 1.364885, 1.411117, 0.000000, 0.000000, 0.000000, + 1.128436, 1.102229, 1.128385, 1.127897, 1.142444, 1.115476, 1.104283, 1.124583, 1.115929, 1.115196, 1.130342, 1.127173, 1.130640, 1.125474, 1.126652, 1.143535, 1.148905, 1.309035, 1.156021, 1.292685, 1.314302, 1.327634, 1.341229, 1.364885, 1.411117, 1.432419, 0.000000, 0.000000, + 1.078545, 1.072734, 1.075464, 1.081920, 1.078434, 1.072281, 1.079780, 1.082043, 1.094741, 1.074544, 1.082784, 1.084089, 1.086375, 1.099718, 1.092858, 1.092855, 1.105166, 1.256155, 1.126301, 1.215671, 1.226302, 1.268900, 1.281721, 1.310629, 1.356976, 1.386428, 1.220159, 0.000000, + 1.052366, 1.053986, 1.055250, 1.051033, 1.055017, 1.062249, 1.059624, 1.065355, 1.062623, 1.054089, 1.060477, 1.074504, 1.075570, 1.078549, 1.071588, 1.080279, 1.078463, 1.211087, 1.103915, 1.186517, 1.194161, 1.234868, 1.250080, 1.274639, 1.327394, 1.362218, 1.161404, 1.062366, + 1.044640, 1.043507, 1.046185, 1.042067, 1.042425, 1.044121, 1.050677, 1.051604, 1.046070, 1.040140, 1.052732, 1.055652, 1.057201, 1.062982, 1.059512, 1.054542, 1.063873, 1.189094, 1.091948, 1.165298, 1.177338, 1.213632, 1.223587, 1.259376, 1.312025, 1.330172, 1.160220, 1.059058, + 1.032947, 1.033877, 1.036016, 1.036056, 1.037819, 1.036489, 1.040341, 1.035373, 1.042736, 1.030510, 1.039291, 1.043943, 1.051946, 1.049653, 1.045154, 1.048874, 1.043392, 1.146608, 1.083743, 1.161479, 1.164940, 1.197187, 1.229915, 1.238886, 1.289410, 1.344620, 1.078591, 1.051894, + 1.025813, 1.028301, 1.026054, 1.032050, 1.029899, 1.032383, 1.033763, 1.034211, 1.033892, 1.023902, 1.034960, 1.039866, 1.039984, 1.042478, 1.041047, 1.044143, 1.038748, 1.146814, 1.069148, 1.134356, 1.147952, 1.175102, 1.202532, 1.234549, 1.285897, 1.280056, 1.055845, 1.050155, + 1.025370, 1.024465, 1.023378, 1.024989, 1.026322, 1.025140, 1.026122, 1.028451, 1.029161, 1.020083, 1.031555, 1.032971, 1.036222, 1.042410, 1.038053, 1.036796, 1.037195, 1.123576, 1.071556, 1.129229, 1.129561, 1.170449, 1.190240, 1.218357, 1.270482, 1.302586, 1.047321, 1.049100, + 1.018591, 1.019825, 1.020823, 1.019265, 1.021761, 1.021521, 1.024053, 1.024121, 1.024979, 1.015315, 1.026035, 1.028734, 1.030409, 1.031414, 1.030694, 1.033450, 1.035642, 1.103688, 1.066969, 1.117955, 1.135950, 1.163170, 1.180714, 1.228736, 1.254963, 1.307361, 1.047123, 1.047264, + 1.017483, 1.016714, 1.018925, 1.017087, 1.020438, 1.018852, 1.020796, 1.022534, 1.023495, 1.013378, 1.024097, 1.026067, 1.029037, 1.030731, 1.028759, 1.032480, 1.034680, 1.101491, 1.069770, 1.110644, 1.129222, 1.147881, 1.176695, 1.219110, 1.253033, 1.308691, 1.040706, 1.046607, + 1.015432, 1.014445, 1.016057, 1.014908, 1.019115, 1.016567, 1.020411, 1.019852, 1.020255, 1.010779, 1.023433, 1.023674, 1.027479, 1.027385, 1.027332, 1.027537, 1.029061, 1.091079, 1.063278, 1.108876, 1.122727, 1.171282, 1.172058, 1.211259, 1.245839, 1.303968, 1.033863, 1.047743, + 1.014370, 1.013304, 1.013397, 1.014261, 1.013673, 1.013183, 1.018534, 1.016581, 1.017015, 1.008220, 1.019515, 1.021560, 1.024502, 1.025611, 1.025905, 1.025863, 1.027252, 1.085230, 1.063040, 1.112256, 1.116617, 1.140393, 1.159214, 1.191434, 1.240601, 1.268525, 1.033247, 1.042853, + 1.010174, 1.009843, 1.011520, 1.011041, 1.012957, 1.009075, 1.013178, 1.013301, 1.015033, 1.005133, 1.017533, 1.018564, 1.020319, 1.022634, 1.022429, 1.022338, 1.025613, 1.077639, 1.057895, 1.107098, 1.111157, 1.136106, 1.161737, 1.179259, 1.232736, 1.290141, 1.018941, 1.014733, + 1.000302, 1.007651, 1.000751, 1.007791, 1.008949, 1.005394, 1.009599, 1.010180, 1.010865, 1.001827, 1.012447, 1.015231, 1.019545, 1.020611, 1.022404, 1.019032, 1.023113, 1.065127, 1.054688, 1.102754, 1.106151, 1.125574, 1.134480, 1.180965, 1.231939, 1.277289, 1.018941, 1.014733 + ]) + +caloStage2Params.layer1HCalScaleETBins = cms.vint32([6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]) +caloStage2Params.layer1HCalScaleFactors = cms.vdouble([ + 1.691347, 1.704095, 1.729441, 1.735242, 1.726367, 1.780424, 1.794996, 1.815904, 1.817388, 1.894632, 1.932656, 1.957527, 1.970890, 2.005818, 2.041546, 2.042775, 1.989288, 1.594904, + 1.659821, 1.676038, 1.495936, 1.505035, 1.512590, 1.511470, 1.494893, 1.378435, 1.430994, 1.500227, 1.531796, 1.547539, 1.559295, 1.561478, 1.568922, 1.601485, 1.616591, 1.620739, + 1.642884, 1.678420, 1.692987, 1.728681, 1.728957, 1.766650, 1.782739, 1.782875, 1.751371, 1.431918, 1.487225, 1.483881, 1.336485, 1.349895, 1.363924, 1.375728, 1.377818, 1.310078, + 1.334588, 1.399686, 1.465418, 1.462800, 1.475840, 1.474735, 1.474407, 1.506928, 1.526279, 1.524000, 1.532718, 1.583398, 1.608380, 1.623528, 1.619634, 1.646501, 1.667856, 1.674628, + 1.635381, 1.350235, 1.394938, 1.383940, 1.244552, 1.256971, 1.261180, 1.282746, 1.279512, 1.221092, 1.241831, 1.351526, 1.390201, 1.404198, 1.416259, 1.404045, 1.418265, 1.437914, + 1.450857, 1.463511, 1.462653, 1.501891, 1.518896, 1.548252, 1.545831, 1.565901, 1.574314, 1.575115, 1.557629, 1.301893, 1.326949, 1.312526, 1.197573, 1.210304, 1.222283, 1.239081, + 1.240673, 1.185591, 1.207651, 1.275166, 1.314260, 1.335228, 1.340603, 1.323027, 1.324793, 1.347954, 1.349916, 1.363145, 1.359628, 1.402624, 1.416518, 1.457202, 1.461053, 1.484090, + 1.500787, 1.498450, 1.471731, 1.215732, 1.253565, 1.243598, 1.157168, 1.164428, 1.175435, 1.189310, 1.192682, 1.142038, 1.162810, 1.230426, 1.262901, 1.265380, 1.274364, 1.276111, + 1.282349, 1.291748, 1.305521, 1.301818, 1.305124, 1.336506, 1.345742, 1.357458, 1.370139, 1.381995, 1.394554, 1.388952, 1.363805, 1.166810, 1.204780, 1.193913, 1.118331, 1.124657, + 1.136138, 1.148564, 1.147392, 1.085564, 1.109949, 1.184837, 1.221607, 1.219692, 1.235950, 1.230444, 1.234908, 1.245100, 1.256813, 1.252608, 1.263569, 1.284188, 1.300083, 1.309901, + 1.312849, 1.335500, 1.339967, 1.328269, 1.309282, 1.128239, 1.173002, 1.163030, 1.077388, 1.087037, 1.085620, 1.099773, 1.097418, 1.047416, 1.080447, 1.135984, 1.186335, 1.189457, + 1.186903, 1.191054, 1.192951, 1.218812, 1.222226, 1.220196, 1.221331, 1.264243, 1.284869, 1.277098, 1.263366, 1.276293, 1.291829, 1.275918, 1.248086, 1.095700, 1.143874, 1.132783, + 1.054939, 1.055922, 1.055405, 1.058330, 1.062463, 1.012972, 1.028538, 1.089975, 1.155949, 1.153120, 1.157186, 1.163320, 1.157607, 1.174722, 1.181157, 1.179473, 1.186948, 1.192614, + 1.207973, 1.215075, 1.252322, 1.231549, 1.241483, 1.224214, 1.207592, 1.069829, 1.112551, 1.107158, 1.025349, 1.026181, 1.028466, 1.035129, 1.030918, 0.977843, 1.004295, 1.075236, + 1.122942, 1.124839, 1.130900, 1.139241, 1.134602, 1.141732, 1.154381, 1.154366, 1.162207, 1.167863, 1.182334, 1.189497, 1.179567, 1.185553, 1.205978, 1.188532, 1.154839, 1.058371, + 1.096597, 1.086545, 0.997724, 1.000690, 1.005683, 1.009107, 1.006028, 0.962736, 0.974019, 1.035748, 1.094997, 1.098600, 1.101567, 1.102895, 1.106445, 1.113255, 1.114956, 1.118930, + 1.128154, 1.135288, 1.145308, 1.151612, 1.142554, 1.153640, 1.154025, 1.138100, 1.127446, 1.034945, 1.069153, 1.062188, 0.977909, 0.972598, 0.972539, 0.978454, 0.975065, 0.941113, + 0.948722, 1.004971, 1.055020, 1.054883, 1.059317, 1.061911, 1.062005, 1.066707, 1.074156, 1.064278, 1.072810, 1.076579, 1.084072, 1.091055, 1.090640, 1.086634, 1.095179, 1.075771, + 1.051884, 1.005930, 1.033331, 1.024734, 0.943637, 0.941986, 0.937779, 0.943865, 0.928477, 0.902234, 0.908232, 0.960607, 1.005841, 1.011405, 1.012527, 1.015557, 1.014508, 1.020877, + 1.019076, 1.015173, 1.015651, 1.019594, 1.026845, 1.024959, 1.025915, 1.029455, 1.017985, 1.016933, 0.989723, 0.977768, 0.993744, 0.985200, 0.907247, 0.903328, 0.912164, 0.898908, + 0.886431, 0.851162, 0.863541, 0.890523 + ]) + +caloStage2Params.layer1HFScaleETBins = cms.vint32([6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]) + +caloStage2Params.layer1HFScaleFactors = cms.vdouble([ + 1.401648, 1.138462, 1.188641, 1.173580, 1.218745, 1.238716, 1.279351, 1.306353, 1.352201, 1.425513, 1.766435, 1.913788, + 1.284459, 1.081785, 1.142576, 1.136715, 1.118770, 1.156336, 1.173606, 1.201886, 1.276473, 1.291960, 1.663819, 1.755983, + 1.204911, 1.055869, 1.092000, 1.100584, 1.049183, 1.082497, 1.082629, 1.113835, 1.167107, 1.195128, 1.573579, 1.696511, + 1.148313, 1.036986, 1.094283, 1.054889, 1.001794, 1.023684, 1.032747, 1.048416, 1.096110, 1.146655, 1.541076, 1.641335, + 1.100579, 1.014459, 1.045712, 1.024446, 0.964075, 0.978100, 0.990507, 1.007612, 1.048333, 1.095952, 1.501771, 1.598874, + 1.062801, 0.988340, 1.024694, 0.983528, 0.925067, 0.939920, 0.957879, 0.972375, 1.007824, 1.060773, 1.440472, 1.545380, + 1.022108, 0.970880, 1.008919, 0.956236, 0.907449, 0.922011, 0.938728, 0.950612, 0.987919, 1.036760, 1.395258, 1.500256, + 0.997997, 0.952793, 0.987330, 0.928038, 0.891417, 0.906300, 0.921343, 0.936786, 0.970373, 1.014640, 1.342585, 1.464742, + 0.980560, 0.939970, 0.976677, 0.911275, 0.883970, 0.896411, 0.909605, 0.928250, 0.960889, 1.000147, 1.299124, 1.444636, + 0.960950, 0.924990, 0.949128, 0.902849, 0.880957, 0.892083, 0.904219, 0.920509, 0.950512, 0.989206, 1.253466, 1.428955, + 0.947099, 0.903350, 0.941550, 0.892063, 0.873377, 0.886352, 0.900072, 0.915840, 0.944985, 0.981827, 1.199814, 1.410339, + 0.915085, 0.901126, 0.930501, 0.883655, 0.869623, 0.883995, 0.896408, 0.913637, 0.946368, 0.979263, 1.145768, 1.360238, + 0.886918, 0.895145, 0.914478, 0.882066, 0.871161, 0.886831, 0.900315, 0.917568, 0.952193, 0.984897, 1.097738, 1.285041 + ]) diff --git a/L1Trigger/L1TCalorimeter/python/caloParams_2019_v1_0_cfi.py b/L1Trigger/L1TCalorimeter/python/caloParams_2019_v1_0_cfi.py new file mode 100644 index 0000000000000..35ea9b2e6187c --- /dev/null +++ b/L1Trigger/L1TCalorimeter/python/caloParams_2019_v1_0_cfi.py @@ -0,0 +1,180 @@ +import FWCore.ParameterSet.Config as cms + +from L1Trigger.L1TCalorimeter.caloParams_cfi import caloParamsSource +import L1Trigger.L1TCalorimeter.caloParams_cfi +caloStage2Params = L1Trigger.L1TCalorimeter.caloParams_cfi.caloParams.clone() + +# towers +caloStage2Params.towerLsbH = cms.double(0.5) +caloStage2Params.towerLsbE = cms.double(0.5) +caloStage2Params.towerLsbSum = cms.double(0.5) +caloStage2Params.towerNBitsH = cms.int32(8) +caloStage2Params.towerNBitsE = cms.int32(8) +caloStage2Params.towerNBitsSum = cms.int32(9) +caloStage2Params.towerNBitsRatio = cms.int32(3) +caloStage2Params.towerEncoding = cms.bool(True) + +# regions +caloStage2Params.regionLsb = cms.double(0.5) +caloStage2Params.regionPUSType = cms.string("None") +caloStage2Params.regionPUSParams = cms.vdouble() + +# EG +caloStage2Params.egLsb = cms.double(0.5) +caloStage2Params.egEtaCut = cms.int32(28) +caloStage2Params.egSeedThreshold = cms.double(2.) +caloStage2Params.egNeighbourThreshold = cms.double(1.) +caloStage2Params.egHcalThreshold = cms.double(0.) +caloStage2Params.egTrimmingLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/egTrimmingLUT_10_v16.01.19.txt") +caloStage2Params.egMaxHcalEt = cms.double(0.) +caloStage2Params.egMaxPtHOverE = cms.double(128.) +caloStage2Params.egMaxHOverELUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/HoverEIdentification_0.995_v15.12.23.txt") +caloStage2Params.egHOverEcutBarrel = cms.int32(3) +caloStage2Params.egHOverEcutEndcap = cms.int32(4) +caloStage2Params.egBypassExtHOverE = cms.uint32(0) +caloStage2Params.egBypassShape = cms.uint32(0) +caloStage2Params.egBypassECALFG = cms.uint32(0) +caloStage2Params.egCompressShapesLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/egCompressLUT_v4.txt") +caloStage2Params.egShapeIdType = cms.string("compressed") +caloStage2Params.egShapeIdVersion = cms.uint32(0) +caloStage2Params.egShapeIdLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/shapeIdentification_adapt0.99_compressedieta_compressedE_compressedshape_v15.12.08.txt")#Not used any more in the current emulator version, merged with calibration LUT + +caloStage2Params.egPUSType = cms.string("None") +caloStage2Params.egIsolationType = cms.string("compressed") +caloStage2Params.egIsoLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/EG_Iso_LUT_04_04_2017.2.txt") +caloStage2Params.egIsoLUTFile2 = cms.FileInPath("L1Trigger/L1TCalorimeter/data/EG_LoosestIso_2018.2.txt") +caloStage2Params.egIsoAreaNrTowersEta = cms.uint32(2) +caloStage2Params.egIsoAreaNrTowersPhi = cms.uint32(4) +caloStage2Params.egIsoVetoNrTowersPhi = cms.uint32(2) +#caloStage2Params.egIsoPUEstTowerGranularity = cms.uint32(1) +#caloStage2Params.egIsoMaxEtaAbsForTowerSum = cms.uint32(4) +#caloStage2Params.egIsoMaxEtaAbsForIsoSum = cms.uint32(27) +caloStage2Params.egPUSParams = cms.vdouble(1,4,32) #Isolation window in firmware goes up to abs(ieta)=32 for now +caloStage2Params.egCalibrationType = cms.string("compressed") +caloStage2Params.egCalibrationVersion = cms.uint32(0) +#caloStage2Params.egCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/EG_Calibration_LUT_FW_v17.04.04_shapeIdentification_adapt0.99_compressedieta_compressedE_compressedshape_v15.12.08_correct.txt") +caloStage2Params.egCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/corrections_Trimming10_compressedieta_compressedE_compressedshape_PANTELIS_v2_NEW_CALIBRATIONS_withShape_v17.04.04.txt") + +# Tau +caloStage2Params.tauLsb = cms.double(0.5) +caloStage2Params.isoTauEtaMax = cms.int32(25) +caloStage2Params.tauSeedThreshold = cms.double(0.) +caloStage2Params.tauNeighbourThreshold = cms.double(0.) +caloStage2Params.tauIsoAreaNrTowersEta = cms.uint32(2) +caloStage2Params.tauIsoAreaNrTowersPhi = cms.uint32(4) +caloStage2Params.tauIsoVetoNrTowersPhi = cms.uint32(2) +caloStage2Params.tauPUSType = cms.string("None") +caloStage2Params.tauIsoLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_Option_31_extrap_2018_FW_v10.0.0.txt") +caloStage2Params.tauIsoLUTFile2 = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_Option_31_extrap_2018_FW_v10.0.0.txt") +#caloStage2Params.tauCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Calibration_LUT_2017_Layer1Calibration_FW_v12.0.0.txt") +caloStage2Params.tauCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/Tau_Calibration_LUT_2018_Layer1CalibrationNewHCAL_FW_v13.0.0.txt") +caloStage2Params.tauCompressLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/tauCompressAllLUT_12bit_v3.txt") +caloStage2Params.tauPUSParams = cms.vdouble(1,4,32) + +# jets +caloStage2Params.jetLsb = cms.double(0.5) +caloStage2Params.jetSeedThreshold = cms.double(4.0) +caloStage2Params.jetNeighbourThreshold = cms.double(0.) +caloStage2Params.jetPUSType = cms.string("ChunkyDonut") +caloStage2Params.jetPUSUsePhiRing = cms.uint32(False) +caloStage2Params.jetBypassPUS = cms.uint32(0) + +# Calibration options +caloStage2Params.jetCalibrationType = cms.string("LUT") + +caloStage2Params.jetCompressPtLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_pt_compress_2017v1.txt") +caloStage2Params.jetCompressEtaLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_eta_compress_2017v1.txt") +caloStage2Params.jetCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_calib_2018v1_ECALZS_noHFJEC.txt") + + +# sums: 0=ET, 1=HT, 2=MET, 3=MHT +caloStage2Params.etSumLsb = cms.double(0.5) +caloStage2Params.etSumEtaMin = cms.vint32(1, 1, 1, 1, 1) +caloStage2Params.etSumEtaMax = cms.vint32(28, 26, 28, 26, 28) +caloStage2Params.etSumEtThreshold = cms.vdouble(0., 30., 0., 30., 0.) # only 2nd (HT) and 4th (MHT) values applied +caloStage2Params.etSumMetPUSType = cms.string("LUT") # et threshold from this LUT supercedes et threshold in line above +caloStage2Params.etSumEttPUSType = cms.string("None") +caloStage2Params.etSumEcalSumPUSType = cms.string("None") +caloStage2Params.etSumBypassMetPUS = cms.uint32(0) +caloStage2Params.etSumBypassEttPUS = cms.uint32(1) +caloStage2Params.etSumBypassEcalSumPUS = cms.uint32(1) +caloStage2Params.etSumXCalibrationType = cms.string("None") +caloStage2Params.etSumYCalibrationType = cms.string("None") +caloStage2Params.etSumEttCalibrationType = cms.string("None") +caloStage2Params.etSumEcalSumCalibrationType = cms.string("None") + +caloStage2Params.etSumCentralityLower = cms.vdouble(0.0, 1.5, 7.5, 80.5, 268.0, 699.0, 1514.0, 65535.0) +caloStage2Params.etSumCentralityUpper = cms.vdouble(4.0, 10.5, 117.5, 342.0, 809.5, 1641.0, 2966.0, 65535.0) + +caloStage2Params.etSumMetPUSLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_towEtThresh_2017v7.txt") +caloStage2Params.etSumEttPUSLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_towEtThresh_dummy.txt") +caloStage2Params.etSumEcalSumPUSLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_towEtThresh_dummy.txt") +caloStage2Params.metCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumCalib_dummy.txt") +caloStage2Params.metHFCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumCalib_dummy.txt") +caloStage2Params.etSumEttCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumCalib_dummy.txt") +caloStage2Params.etSumEcalSumCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumCalib_dummy.txt") +caloStage2Params.metPhiCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumCalib_dummy.txt") +caloStage2Params.metHFPhiCalibrationLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/lut_etSumCalib_dummy.txt") + + +# Layer 1 SF +caloStage2Params.layer1ECalScaleETBins = cms.vint32([3, 6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]) +caloStage2Params.layer1ECalScaleFactors = cms.vdouble([ + 1.128436, 1.102229, 1.128385, 1.127897, 1.142444, 1.115476, 1.104283, 1.124583, 1.115929, 1.115196, 1.130342, 1.127173, 1.130640, 1.125474, 1.126652, 1.143535, 1.148905, 1.309035, 1.156021, 1.292685, 1.314302, 1.327634, 1.341229, 1.364885, 1.411117, 0.000000, 0.000000, 0.000000, + 1.128436, 1.102229, 1.128385, 1.127897, 1.142444, 1.115476, 1.104283, 1.124583, 1.115929, 1.115196, 1.130342, 1.127173, 1.130640, 1.125474, 1.126652, 1.143535, 1.148905, 1.309035, 1.156021, 1.292685, 1.314302, 1.327634, 1.341229, 1.364885, 1.411117, 1.432419, 0.000000, 0.000000, + 1.078545, 1.072734, 1.075464, 1.081920, 1.078434, 1.072281, 1.079780, 1.082043, 1.094741, 1.074544, 1.082784, 1.084089, 1.086375, 1.099718, 1.092858, 1.092855, 1.105166, 1.256155, 1.126301, 1.215671, 1.226302, 1.268900, 1.281721, 1.310629, 1.356976, 1.386428, 1.220159, 0.000000, + 1.052366, 1.053986, 1.055250, 1.051033, 1.055017, 1.062249, 1.059624, 1.065355, 1.062623, 1.054089, 1.060477, 1.074504, 1.075570, 1.078549, 1.071588, 1.080279, 1.078463, 1.211087, 1.103915, 1.186517, 1.194161, 1.234868, 1.250080, 1.274639, 1.327394, 1.362218, 1.161404, 1.062366, + 1.044640, 1.043507, 1.046185, 1.042067, 1.042425, 1.044121, 1.050677, 1.051604, 1.046070, 1.040140, 1.052732, 1.055652, 1.057201, 1.062982, 1.059512, 1.054542, 1.063873, 1.189094, 1.091948, 1.165298, 1.177338, 1.213632, 1.223587, 1.259376, 1.312025, 1.330172, 1.160220, 1.059058, + 1.032947, 1.033877, 1.036016, 1.036056, 1.037819, 1.036489, 1.040341, 1.035373, 1.042736, 1.030510, 1.039291, 1.043943, 1.051946, 1.049653, 1.045154, 1.048874, 1.043392, 1.146608, 1.083743, 1.161479, 1.164940, 1.197187, 1.229915, 1.238886, 1.289410, 1.344620, 1.078591, 1.051894, + 1.025813, 1.028301, 1.026054, 1.032050, 1.029899, 1.032383, 1.033763, 1.034211, 1.033892, 1.023902, 1.034960, 1.039866, 1.039984, 1.042478, 1.041047, 1.044143, 1.038748, 1.146814, 1.069148, 1.134356, 1.147952, 1.175102, 1.202532, 1.234549, 1.285897, 1.280056, 1.055845, 1.050155, + 1.025370, 1.024465, 1.023378, 1.024989, 1.026322, 1.025140, 1.026122, 1.028451, 1.029161, 1.020083, 1.031555, 1.032971, 1.036222, 1.042410, 1.038053, 1.036796, 1.037195, 1.123576, 1.071556, 1.129229, 1.129561, 1.170449, 1.190240, 1.218357, 1.270482, 1.302586, 1.047321, 1.049100, + 1.018591, 1.019825, 1.020823, 1.019265, 1.021761, 1.021521, 1.024053, 1.024121, 1.024979, 1.015315, 1.026035, 1.028734, 1.030409, 1.031414, 1.030694, 1.033450, 1.035642, 1.103688, 1.066969, 1.117955, 1.135950, 1.163170, 1.180714, 1.228736, 1.254963, 1.307361, 1.047123, 1.047264, + 1.017483, 1.016714, 1.018925, 1.017087, 1.020438, 1.018852, 1.020796, 1.022534, 1.023495, 1.013378, 1.024097, 1.026067, 1.029037, 1.030731, 1.028759, 1.032480, 1.034680, 1.101491, 1.069770, 1.110644, 1.129222, 1.147881, 1.176695, 1.219110, 1.253033, 1.308691, 1.040706, 1.046607, + 1.015432, 1.014445, 1.016057, 1.014908, 1.019115, 1.016567, 1.020411, 1.019852, 1.020255, 1.010779, 1.023433, 1.023674, 1.027479, 1.027385, 1.027332, 1.027537, 1.029061, 1.091079, 1.063278, 1.108876, 1.122727, 1.171282, 1.172058, 1.211259, 1.245839, 1.303968, 1.033863, 1.047743, + 1.014370, 1.013304, 1.013397, 1.014261, 1.013673, 1.013183, 1.018534, 1.016581, 1.017015, 1.008220, 1.019515, 1.021560, 1.024502, 1.025611, 1.025905, 1.025863, 1.027252, 1.085230, 1.063040, 1.112256, 1.116617, 1.140393, 1.159214, 1.191434, 1.240601, 1.268525, 1.033247, 1.042853, + 1.010174, 1.009843, 1.011520, 1.011041, 1.012957, 1.009075, 1.013178, 1.013301, 1.015033, 1.005133, 1.017533, 1.018564, 1.020319, 1.022634, 1.022429, 1.022338, 1.025613, 1.077639, 1.057895, 1.107098, 1.111157, 1.136106, 1.161737, 1.179259, 1.232736, 1.290141, 1.018941, 1.014733, + 1.000302, 1.007651, 1.000751, 1.007791, 1.008949, 1.005394, 1.009599, 1.010180, 1.010865, 1.001827, 1.012447, 1.015231, 1.019545, 1.020611, 1.022404, 1.019032, 1.023113, 1.065127, 1.054688, 1.102754, 1.106151, 1.125574, 1.134480, 1.180965, 1.231939, 1.277289, 1.018941, 1.014733 + ]) + +caloStage2Params.layer1HCalScaleETBins = cms.vint32([6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]) +caloStage2Params.layer1HCalScaleFactors = cms.vdouble([ + 1.691347, 1.704095, 1.729441, 1.735242, 1.726367, 1.780424, 1.794996, 1.815904, 1.817388, 1.894632, 1.932656, 1.957527, 1.970890, 2.005818, 2.041546, 2.042775, 1.989288, 1.594904, + 1.659821, 1.676038, 1.495936, 1.505035, 1.512590, 1.511470, 1.494893, 1.378435, 1.430994, 1.500227, 1.531796, 1.547539, 1.559295, 1.561478, 1.568922, 1.601485, 1.616591, 1.620739, + 1.642884, 1.678420, 1.692987, 1.728681, 1.728957, 1.766650, 1.782739, 1.782875, 1.751371, 1.431918, 1.487225, 1.483881, 1.336485, 1.349895, 1.363924, 1.375728, 1.377818, 1.310078, + 1.334588, 1.399686, 1.465418, 1.462800, 1.475840, 1.474735, 1.474407, 1.506928, 1.526279, 1.524000, 1.532718, 1.583398, 1.608380, 1.623528, 1.619634, 1.646501, 1.667856, 1.674628, + 1.635381, 1.350235, 1.394938, 1.383940, 1.244552, 1.256971, 1.261180, 1.282746, 1.279512, 1.221092, 1.241831, 1.351526, 1.390201, 1.404198, 1.416259, 1.404045, 1.418265, 1.437914, + 1.450857, 1.463511, 1.462653, 1.501891, 1.518896, 1.548252, 1.545831, 1.565901, 1.574314, 1.575115, 1.557629, 1.301893, 1.326949, 1.312526, 1.197573, 1.210304, 1.222283, 1.239081, + 1.240673, 1.185591, 1.207651, 1.275166, 1.314260, 1.335228, 1.340603, 1.323027, 1.324793, 1.347954, 1.349916, 1.363145, 1.359628, 1.402624, 1.416518, 1.457202, 1.461053, 1.484090, + 1.500787, 1.498450, 1.471731, 1.215732, 1.253565, 1.243598, 1.157168, 1.164428, 1.175435, 1.189310, 1.192682, 1.142038, 1.162810, 1.230426, 1.262901, 1.265380, 1.274364, 1.276111, + 1.282349, 1.291748, 1.305521, 1.301818, 1.305124, 1.336506, 1.345742, 1.357458, 1.370139, 1.381995, 1.394554, 1.388952, 1.363805, 1.166810, 1.204780, 1.193913, 1.118331, 1.124657, + 1.136138, 1.148564, 1.147392, 1.085564, 1.109949, 1.184837, 1.221607, 1.219692, 1.235950, 1.230444, 1.234908, 1.245100, 1.256813, 1.252608, 1.263569, 1.284188, 1.300083, 1.309901, + 1.312849, 1.335500, 1.339967, 1.328269, 1.309282, 1.128239, 1.173002, 1.163030, 1.077388, 1.087037, 1.085620, 1.099773, 1.097418, 1.047416, 1.080447, 1.135984, 1.186335, 1.189457, + 1.186903, 1.191054, 1.192951, 1.218812, 1.222226, 1.220196, 1.221331, 1.264243, 1.284869, 1.277098, 1.263366, 1.276293, 1.291829, 1.275918, 1.248086, 1.095700, 1.143874, 1.132783, + 1.054939, 1.055922, 1.055405, 1.058330, 1.062463, 1.012972, 1.028538, 1.089975, 1.155949, 1.153120, 1.157186, 1.163320, 1.157607, 1.174722, 1.181157, 1.179473, 1.186948, 1.192614, + 1.207973, 1.215075, 1.252322, 1.231549, 1.241483, 1.224214, 1.207592, 1.069829, 1.112551, 1.107158, 1.025349, 1.026181, 1.028466, 1.035129, 1.030918, 0.977843, 1.004295, 1.075236, + 1.122942, 1.124839, 1.130900, 1.139241, 1.134602, 1.141732, 1.154381, 1.154366, 1.162207, 1.167863, 1.182334, 1.189497, 1.179567, 1.185553, 1.205978, 1.188532, 1.154839, 1.058371, + 1.096597, 1.086545, 0.997724, 1.000690, 1.005683, 1.009107, 1.006028, 0.962736, 0.974019, 1.035748, 1.094997, 1.098600, 1.101567, 1.102895, 1.106445, 1.113255, 1.114956, 1.118930, + 1.128154, 1.135288, 1.145308, 1.151612, 1.142554, 1.153640, 1.154025, 1.138100, 1.127446, 1.034945, 1.069153, 1.062188, 0.977909, 0.972598, 0.972539, 0.978454, 0.975065, 0.941113, + 0.948722, 1.004971, 1.055020, 1.054883, 1.059317, 1.061911, 1.062005, 1.066707, 1.074156, 1.064278, 1.072810, 1.076579, 1.084072, 1.091055, 1.090640, 1.086634, 1.095179, 1.075771, + 1.051884, 1.005930, 1.033331, 1.024734, 0.943637, 0.941986, 0.937779, 0.943865, 0.928477, 0.902234, 0.908232, 0.960607, 1.005841, 1.011405, 1.012527, 1.015557, 1.014508, 1.020877, + 1.019076, 1.015173, 1.015651, 1.019594, 1.026845, 1.024959, 1.025915, 1.029455, 1.017985, 1.016933, 0.989723, 0.977768, 0.993744, 0.985200, 0.907247, 0.903328, 0.912164, 0.898908, + 0.886431, 0.851162, 0.863541, 0.890523 + ]) + +caloStage2Params.layer1HFScaleETBins = cms.vint32([6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]) + +caloStage2Params.layer1HFScaleFactors = cms.vdouble([ + 1.401648, 1.138462, 1.188641, 1.173580, 1.218745, 1.238716, 1.279351, 1.306353, 1.352201, 1.425513, 1.766435, 1.913788, + 1.284459, 1.081785, 1.142576, 1.136715, 1.118770, 1.156336, 1.173606, 1.201886, 1.276473, 1.291960, 1.663819, 1.755983, + 1.204911, 1.055869, 1.092000, 1.100584, 1.049183, 1.082497, 1.082629, 1.113835, 1.167107, 1.195128, 1.573579, 1.696511, + 1.148313, 1.036986, 1.094283, 1.054889, 1.001794, 1.023684, 1.032747, 1.048416, 1.096110, 1.146655, 1.541076, 1.641335, + 1.100579, 1.014459, 1.045712, 1.024446, 0.964075, 0.978100, 0.990507, 1.007612, 1.048333, 1.095952, 1.501771, 1.598874, + 1.062801, 0.988340, 1.024694, 0.983528, 0.925067, 0.939920, 0.957879, 0.972375, 1.007824, 1.060773, 1.440472, 1.545380, + 1.022108, 0.970880, 1.008919, 0.956236, 0.907449, 0.922011, 0.938728, 0.950612, 0.987919, 1.036760, 1.395258, 1.500256, + 0.997997, 0.952793, 0.987330, 0.928038, 0.891417, 0.906300, 0.921343, 0.936786, 0.970373, 1.014640, 1.342585, 1.464742, + 0.980560, 0.939970, 0.976677, 0.911275, 0.883970, 0.896411, 0.909605, 0.928250, 0.960889, 1.000147, 1.299124, 1.444636, + 0.960950, 0.924990, 0.949128, 0.902849, 0.880957, 0.892083, 0.904219, 0.920509, 0.950512, 0.989206, 1.253466, 1.428955, + 0.947099, 0.903350, 0.941550, 0.892063, 0.873377, 0.886352, 0.900072, 0.915840, 0.944985, 0.981827, 1.199814, 1.410339, + 0.915085, 0.901126, 0.930501, 0.883655, 0.869623, 0.883995, 0.896408, 0.913637, 0.946368, 0.979263, 1.145768, 1.360238, + 0.886918, 0.895145, 0.914478, 0.882066, 0.871161, 0.886831, 0.900315, 0.917568, 0.952193, 0.984897, 1.097738, 1.285041 + ]) diff --git a/L1Trigger/L1TCalorimeter/test/runCaloLayer2MPFWValidation.py b/L1Trigger/L1TCalorimeter/test/runCaloLayer2MPFWValidation.py index 9c82e8e33e046..d20859891eb01 100644 --- a/L1Trigger/L1TCalorimeter/test/runCaloLayer2MPFWValidation.py +++ b/L1Trigger/L1TCalorimeter/test/runCaloLayer2MPFWValidation.py @@ -115,7 +115,7 @@ process.simCaloStage2Digis.towerToken = cms.InputTag("caloStage2Digis","CaloTower") # emulator ES -process.load('L1Trigger.L1TCalorimeter.caloParams_2018_v1_4_cfi') +process.load('L1Trigger.L1TCalorimeter.caloParams_2019_v1_0_cfi') # histograms process.load('L1Trigger.L1TCalorimeter.l1tStage2CaloAnalyzer_cfi') diff --git a/L1Trigger/L1TCalorimeter/test/runEmulator-CaloStage2.py b/L1Trigger/L1TCalorimeter/test/runEmulator-CaloStage2.py index 001e4ce4a6679..8c4800a0df78d 100644 --- a/L1Trigger/L1TCalorimeter/test/runEmulator-CaloStage2.py +++ b/L1Trigger/L1TCalorimeter/test/runEmulator-CaloStage2.py @@ -122,7 +122,7 @@ process.simCaloStage2Layer1Digis.hcalToken = cms.InputTag("hcalDigis") # emulator ES -process.load('L1Trigger.L1TCalorimeter.caloParams_2018_v1_4_cfi') +process.load('L1Trigger.L1TCalorimeter.caloParams_2019_v1_0_cfi') # histograms process.load('L1Trigger.L1TCalorimeter.l1tStage2CaloAnalyzer_cfi') diff --git a/L1Trigger/L1TCommon/macros/NtupleDiff.C b/L1Trigger/L1TCommon/macros/NtupleDiff.C index eaf63510e7ab0..11605c9b6a8e0 100644 --- a/L1Trigger/L1TCommon/macros/NtupleDiff.C +++ b/L1Trigger/L1TCommon/macros/NtupleDiff.C @@ -1,66 +1,93 @@ #include "L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeDataFormat.h" -void bitwise_compare(const char * tag, TTree * tree1, TTree * tree2, const char * var, const char * var2, const char * cut, int nbins, double max, double min){ +void bitwise_compare(const char* tag, + TTree* tree1, + TTree* tree2, + const char* var, + const char* var2, + const char* cut, + int nbins, + double max, + double min) { char command[1000]; - static int count = 0; + static int countDiscrep = 0; + static int countAgree = 0; - TH1F h1("h1","",nbins,max,min); - TH1F h2("h2","",nbins,max,min); + TH1F h1("h1", "", nbins, max, min); + TH1F h2("h2", "", nbins, max, min); sprintf(command, "%s>>h1", var); tree1->Draw(command, cut); sprintf(command, "%s>>h2", var2); tree2->Draw(command, cut); //cout << "count 1: " << h1.GetEntries() << "\n"; //cout << "count 2: " << h2.GetEntries() << "\n"; - - if(!TString(var).CompareTo("sumEt[0]")) { var = "ETT";} - else if(!TString(var).CompareTo("sumEt[2]")) {var = "HTT";} - else if(!TString(var).CompareTo("sumEt[4]")) {var = "ETM";} - else if(!TString(var).CompareTo("sumEt[6]")) {var = "HTM";} + + if (!TString(var).CompareTo("sumEt[0]")) { + var = "ETT"; + } else if (!TString(var).CompareTo("sumEt[2]")) { + var = "HTT"; + } else if (!TString(var).CompareTo("sumEt[4]")) { + var = "ETM"; + } else if (!TString(var).CompareTo("sumEt[6]")) { + var = "HTM"; + } int fail = 0; - for (int i=0; iSetTitle(var); h1.Draw("L"); h2.Draw("epSAME"); c1.SaveAs(name); - count++; + countDiscrep++; } else { cout << "SUCCESS: bitwise equality for variable " << var << "\n"; + char name[1000]; + sprintf(name, "agree_%s_%s_%d.pdf", tag, var, countAgree); + TCanvas c1; + h1.GetXaxis()->SetTitle(var); + h1.Draw("L"); + h2.Draw("epSAME"); + c1.SaveAs(name); + countAgree++; } - } -void bitwise_compare(const char * tag, TTree * tree1, TTree * tree2, const char * var, const char * cut, int nbins, double max, double min){ +void bitwise_compare( + const char* tag, TTree* tree1, TTree* tree2, const char* var, const char* cut, int nbins, double max, double min) { bitwise_compare(tag, tree1, tree2, var, var, cut, nbins, max, min); } -void NtupleDiff(const char * tag, const char * file1, const char * file2, const char * treepath1="l1UpgradeEmuTree/L1UpgradeTree", const char * treepath2="l1UpgradeEmuTree/L1UpgradeTree"){ +void NtupleDiff(const char* tag, + const char* file1, + const char* file2, + const char* treepath1 = "l1UpgradeEmuTree/L1UpgradeTree", + const char* treepath2 = "l1UpgradeEmuTree/L1UpgradeTree") { cout << "INFO: comparing contents of tree " << treepath1 << " in file " << file1 << "\n"; cout << "INFO: comparing contents of tree " << treepath2 << " in file " << file2 << "\n"; TFile input1(file1); - TTree * tree1 = (TTree*) input1.Get(treepath1); - if (! tree1) { + TTree* tree1 = (TTree*)input1.Get(treepath1); + if (!tree1) { cout << "ERROR: could not open tree 1.\n"; input1.ls(); return; } TFile input2(file2); - TTree * tree2 = (TTree*) input2.Get(treepath2); - if (! tree2) { + TTree* tree2 = (TTree*)input2.Get(treepath2); + if (!tree2) { cout << "ERROR: could not open tree 2.\n"; input2.ls(); return; @@ -87,9 +114,9 @@ void NtupleDiff(const char * tag, const char * file1, const char * file2, const bitwise_compare(tag, tree1, tree2, "egEta", "egEt > 10.0", 20.0, -5.0, 5.0); bitwise_compare(tag, tree1, tree2, "egPhi", "egEt > 10.0", 20.0, -6.2, 6.2); - bitwise_compare(tag, tree1, tree2, "muonEt", "muonEt > 10.0", 20.0, 0.0, 200.0); - bitwise_compare(tag, tree1, tree2, "muonEta", "muonEt > 10.0", 20.0, -5.0, 5.0); - bitwise_compare(tag, tree1, tree2, "muonPhi", "muonEt > 10.0", 20.0, -6.2, 6.2); + bitwise_compare(tag, tree1, tree2, "muonEt", "muonEt > 3.0", 20.0, 0.0, 200.0); + bitwise_compare(tag, tree1, tree2, "muonEta", "muonEt > 3.0", 20.0, -5.0, 5.0); + bitwise_compare(tag, tree1, tree2, "muonPhi", "muonEt > 3.0", 20.0, -6.2, 6.2); bitwise_compare(tag, tree1, tree2, "sumEt[0]", "", 20.0, 0.0, 500.0); bitwise_compare(tag, tree1, tree2, "sumEt[2]", "", 20.0, 0.0, 500.0); @@ -101,7 +128,6 @@ void NtupleDiff(const char * tag, const char * file1, const char * file2, const //bitwise_compare(tag, tree1, tree2, "sumEt[2]", "sumEt[1]", "", 20.0, 0.0, 500.0); //bitwise_compare(tag, tree1, tree2, "sumEt[4]", "sumEt[2]", "", 20.0, 0.0, 500.0); //bitwise_compare(tag, tree1, tree2, "sumEt[6]", "sumEt[3]", "", 20.0, 0.0, 500.0); - //TH1F * jetEt = new TH1F("jetEt","", 20, 0.0, 200.0); //tree->Draw("jetEt>>jetEt","jetEt > 10.0"); @@ -117,5 +143,5 @@ void NtupleDiff(const char * tag, const char * file1, const char * file2, const //TH1F * muonEt = new TH1F("muonEt","", 20, 0.0, 200.0); //tree->Draw("muonEt>>muonEt","muonEt > 1.0"); - //cout << "muon count: " << muonEt->GetEntries() << "\n"; + //cout << "muon count: " << muonEt->GetEntries() << "\n"; } diff --git a/L1Trigger/L1TCommon/scripts/makeHtml.sh b/L1Trigger/L1TCommon/scripts/makeHtml.sh index fcec2a24431ae..d31b640a1f52a 100755 --- a/L1Trigger/L1TCommon/scripts/makeHtml.sh +++ b/L1Trigger/L1TCommon/scripts/makeHtml.sh @@ -25,6 +25,8 @@ compDir2=$2 #compStr2=sed -e 's/.*.\///' $compDir2 directory=`pwd` +agreeDirectory=`pwd`/inAgrement +mkdir $agreeDirectory ## convert all the .pdf files to .png find . -type f -name '*.pdf' -print0 | @@ -32,9 +34,43 @@ find . -type f -name '*.pdf' -print0 | do convert -verbose "${file}" "${file%.*}.png" done +# move all the plots in agreement in separate directory +mv agree* $agreeDirectory + sleep 1 tempDate=`date "+%Y-%m-%d"`; + +# Make webpage for plots in agreement +outputFileAgreement=inAgrement/inAgreement_$tempDate.htm +>$outputFileAgreement +cat <>$outputFileAgreement + + + + Result WebPages for $tempDate + + + +

Results Web Pages for $tempDate

+

Result Agreeing Histograms:

+

comparing $compDir1 (line) and $compDir2 (points)

+ +EOF + +for file in `ls $agreeDirectory | grep png` ; +#for file in "$( find $directory -name "*.png" )" # -type l = symbolic links +do + echo "$file" +cat <>$outputFileAgreement + +

Plot: $file

+

----------------------

+ +EOF +done | sort + +# Make main webpage for plots with discrepancies outputFile=plots_$tempDate.htm >$outputFile @@ -47,10 +83,18 @@ cat <>$outputFile

Results Web Pages for $tempDate

-

Result Histograms comparing $compDir1 (line) and $compDir2 (points)

+

Compare $compDir1 and $compDir2

diff_menu_a_vs_menu_b.txt

----------------------

+ + Plots In Agreement +

----------------------

+ + Plots In Disagrement +

----------------------

+

Result Discrepancy Histograms:

+

comparing $compDir1 (line) and $compDir2 (points)

EOF for file in `ls $directory | grep png` ; diff --git a/L1Trigger/L1TCommon/scripts/testL1T.pl b/L1Trigger/L1TCommon/scripts/testL1T.pl index 00e1d82849722..bd1e95b618fa9 100755 --- a/L1Trigger/L1TCommon/scripts/testL1T.pl +++ b/L1Trigger/L1TCommon/scripts/testL1T.pl @@ -11,11 +11,32 @@ $MAIN_LOG = "MAIN.log"; $JOB_LOG = "JOB.log"; $DIE_FILE = "DIE"; -$NUM_JOBS = 6; +$NUM_JOBS = 8; $TIMEOUT = 10*60; #$GEN_SIM_FILE = "/store/relval/CMSSW_7_6_0/RelValProdTTbar/GEN-SIM/76X_mcRun1_realistic_v10-v1/00000/08F44119-9C7F-E511-85C3-0025905B85A2.root"; #$GEN_SIM_FILE = "file:/afs/cern.ch/work/m/mulhearn/data/gen-sim/GEN-SIM-08F44119-9C7F-E511-85C3-0025905B85A2.root"; -$GEN_SIM_FILE = "root://cms-xrd-global.cern.ch///store/relval/CMSSW_7_6_0/RelValProdTTbar/GEN-SIM/76X_mcRun1_realistic_v10-v1/00000/08F44119-9C7F-E511-85C3-0025905B85A2.root"; +#$GEN_SIM_FILE = "root://cms-xrd-global.cern.ch///store/relval/CMSSW_7_6_0/RelValProdTTbar/GEN-SIM/76X_mcRun1_realistic_v10-v1/00000/08F44119-9C7F-E511-85C3-0025905B85A2.root"; +$GEN_SIM_FILE = "root://eoscms//eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/rekovic/unit-test/input//store/relval/CMSSW_7_6_0/RelValProdTTbar/GEN-SIM/76X_mcRun1_realistic_v10-v1/00000/08F44119-9C7F-E511-85C3-0025905B85A2.root"; +#$DATA_2016_FILE = "root://eoscms//eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/rekovic/unit-test/input//store/data/Run2016A/ZeroBias1/RAW/v1/000/271/336/00000/00963A5A-BF0A-E611-A657-02163E0141FB.root"; +$DATA_2016_FILE = "/store/data/Run2016H/HLTPhysics3/RAW/v1/000/281/602/00000/0E71643D-BF82-E611-8593-02163E011B19.root"; +#$DATA_2017_FILE = "/store/express/Run2017C/ExpressPhysics/FEVT/Express-v3/000/301/142/00000/0008C605-0881-E711-84A2-02163E019C07.root"; +#$DATA_2017_FILE = "/store/data/Run2017C/HLTPhysics/RAW/v1/000/301/142/00000/00682207-3181-E711-8706-02163E01445A.root"; +#$DATA_2017_FILE = "/store/data/Run2017G/HLTPhysics/RAW/v1/000/306/826/00000/3EFDFCB7-A2CE-E711-80E1-02163E019BEA.root"; +#$DATA_2017_FILE = "root://cms-xrd-global.cern.ch///store/data/Run2017H/SingleMuon/RAW/v1/000/307/082/00000/FE78107C-90D2-E711-84AB-02163E01A586.root"; +#$DATA_2018_FILE = "/store/data/Run2018A/HLTPhysics/RAW/v1/000/316/994/00000/CEFB7B46-3B62-E811-BA1F-FA163E4C0F07.root"; +#$DATA_2017_FILE = "root://cms-xrd-global.cern.ch///store/data/Run2017C/JetHT/RAW/v1/000/301/914/00000/C4B8EA5E-988A-E711-B38B-02163E01399E.root"; +$DATA_2017_FILE = "root://eoscms.cern.ch//eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/rekovic/unit-test/input//store/data/Run2017C/JetHT/RAW/v1/000/301/914/00000/C4B8EA5E-988A-E711-B38B-02163E01399E.root"; +#$DATA_2017_FILE = "root://cms-xrd-global.cern.ch///store/express/Run2017C/ExpressPhysics/FEVT/Express-v2/000/300/226/00000/0218D0FB-2376-E711-B5B1-02163E014257.root"; +#$DATA_2017_FILE = "root://cms-xrd-global.cern.ch///store/data/Run2017D/HLTPhysics9/RAW/v1/000/302/676/00000/7A9DB54D-6D98-E711-B9AE-02163E013478.root"; +#$DATA_2018_FILE = "root://cms-xrd-global.cern.ch///store/data/Run2018A/SingleMuon/RAW/v1/000/316/218/00000/3CA8127E-4E57-E811-887E-FA163EEA1DC3.root"; +#$DATA_2018_FILE = "root://cms-xrd-global.cern.ch///store/express/Run2017F/ExpressPhysics/FEVT/Express-v1/000/305/636/00002/581DD5E7-10BA-E711-8E38-02163E011B94.root"; +#$DATA_2018_FILE = "/store/express/Run2018C/ExpressPhysics/FEVT/Express-v1/000/319/992/00000/041AB4A0-708C-E811-921F-02163E0153F7.root"; +#$DATA_2018_FILE = "/store/express/Run2018C/ExpressPhysics/FEVT/Express-v1/000/319/992/00000/041AB4A0-708C-E811-921F-02163E0153F7.root"; +#$DATA_2018_FILE = "root://cms-xrd-global.cern.ch///store/data/Run2018A/JetHT/RAW/v1/000/316/995/00000/FEEAE7BF-CA64-E811-8959-FA163E35C0CD.root"; +#$DATA_2018_FILE = "root://eoscms//eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/rekovic/unit-test/input//data/Run2018A/JetHT/RAW/v1/000/316/995/00000/FEEAE7BF-CA64-E811-8959-FA163E35C0CD.root"; +$DATA_2018_FILE = "root://eoscms.cern.ch//eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/rekovic/unit-test/input/store/data/Run2018B/JetHT/RAW/v1/000/316/995/00000/FEEAE7BF-CA64-E811-8959-FA163E35C0CD.root"; +#cmsDriver.py $PYTHON_OPT -s RAW2DIGI --era=Run2_2018 --data --conditions=101X_dataRun2_Prompt_v9 --customise=L1Trigger/Configuration/customiseReEmul.L1TReEmulFromRAW --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleAODRAWEMU --customise=L1Trigger/Configuration/customiseSettings.L1TSettingsToCaloParams_2018_v1_2 --filein=/store/express/Run2017F/ExpressPhysics/FEVT/Express-v1/000/305/636/00002/581DD5E7-10BA-E711-8E38-02163E011B94.root + $VERBOSE = 0; $KILL = 0; $DRYRUN = 0; @@ -34,8 +55,20 @@ $SINGLE_JOB = 0; $COND_MC = "--conditions=auto:run2_mc"; -$COND_DATA_2015 = "--conditions=auto:run2_data"; -$COND_DATA_2016 = "--conditions=80X_dataRun2_Prompt_v8"; +#$COND_MC = "--conditions=90X_mcRun2_asymptotic_v0"; +#$COND_MC = "--conditions=90X_upgrade2017_realistic_v6_C1"; +#$COND_DATA_2015 = "--conditions=auto:run2_data"; +#$COND_DATA_2016 = "--conditions=auto:run2_data"; +#$COND_DATA_2017 = "--conditions=auto:run2_data"; +#$COND_DATA_2018 = "--conditions=auto:run2_data"; +$COND_DATA_2015 = "--conditions=101X_dataRun2_Prompt_v9"; +$COND_DATA_2016 = "--conditions=101X_dataRun2_Prompt_v9"; +$COND_DATA_2017 = "--conditions=101X_dataRun2_Prompt_v9"; +$COND_DATA_2018 = "--conditions=101X_dataRun2_Prompt_v9"; +#$COND_DATA_2017 = "--conditions=92X_dataRun2_Prompt_v8"; +#$COND_MC = "--conditions=80X_mcRun2_asymptotic_v17"; # = run2_mc in CMSSW_8_0_19 +#$COND_DATA_2015 = "--conditions=80X_dataRun2_v18"; # = run2_data in CMSSW_8_0_19 +#$COND_DATA_2016 = "--conditions=80X_dataRun2_Prompt_v8"; sub main; main @ARGV; @@ -134,12 +167,12 @@ sub test_dummy { # sub test_unpackers_dont_crash { #$file = "/store/data/Commissioning2016/Cosmics/RAW/v1/000/264/573/00000/5A9E5261-BDD1-E511-9102-02163E014378.root"; - $file = "/store/data/Run2016A/ZeroBias1/RAW/v1/000/271/336/00000/00963A5A-BF0A-E611-A657-02163E0141FB.root"; + #$file = "/store/data/Run2016A/ZeroBias1/RAW/v1/000/271/336/00000/00963A5A-BF0A-E611-A657-02163E0141FB.root"; $nevt = 200; if ($FAST) {$nevt = 10; } if ($SLOW) {$nevt = -1; } if (! $RECYCLE){ - $status = long_command("cmsDriver.py L1TEST $PYTHON_OPT -s RAW2DIGI --era=Run2_2016 $COND_DATA_2015 -n $nevt --data --filein=$file --no_output --no_exec >& CMSDRIVER.log"); + $status = long_command("cmsDriver.py L1TEST $PYTHON_OPT -s RAW2DIGI --era=Run2_2016 $COND_DATA_2015 -n $nevt --data --filein=$DATA_2016_FILE --no_output --no_exec >& CMSDRIVER.log"); print "INFO: status of cmsDriver call is $status\n"; if ($status){ print "ERROR: abnormal status returned: $status\n"; @@ -166,7 +199,7 @@ sub test_unpack_2016_data { if ($SLOW) {$nevt = 500; } if (! $RECYCLE){ - $status = long_command("cmsDriver.py L1TEST $PYTHON_OPT $COND_DATA_2015 -s RAW2DIGI -n $nevt --era=Run2_2016 --data --filein=/store/data/Run2016A/ZeroBias1/RAW/v1/000/271/336/00000/00963A5A-BF0A-E611-A657-02163E0141FB.root --no_output --no_exec --customise=L1Trigger/Configuration/customiseUtils.L1TStage2DigisSummary --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleRAW >& CMSDRIVER.log"); + $status = long_command("cmsDriver.py L1TEST $PYTHON_OPT $COND_DATA_2016 -s RAW2DIGI -n $nevt --era=Run2_2016 --data --filein=$DATA_2016_FILE --no_output --no_exec --customise=L1Trigger/Configuration/customiseUtils.L1TStage2DigisSummary --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleRAW >& CMSDRIVER.log"); print "INFO: status of cmsDriver call is $status\n"; if ($status){ @@ -293,15 +326,71 @@ sub test_reemul { sub test_reemul_2016 { # $file = "/store/data/Run2015D/DoubleEG/RAW-RECO/ZElectron-PromptReco-v4/000/260/627/00000/12455212-1E85-E511-8913-02163E014472.root"; - $file = "/store/data/Run2016A/ZeroBias1/RAW/v1/000/271/336/00000/00963A5A-BF0A-E611-A657-02163E0141FB.root"; + #$file = "/store/data/Run2016A/ZeroBias1/RAW/v1/000/271/336/00000/00963A5A-BF0A-E611-A657-02163E0141FB.root"; #$file = "/store/data/Run2016B/MuonEG/RAW-RECO/TopMuEG-PromptReco-v2/000/273/450/00000/8EF765B2-531C-E611-86D5-02163E012060.root"; #$file = "/store/data/Run2016B/ZeroBias8/RAW/v1/000/272/021/00000/D821E02F-BA0D-E611-9DE0-02163E013885.root"; + $nevt = 100; + if ($FAST) {$nevt = 200; } + if ($SLOW) {$nevt = 1000; } + + if (! $RECYCLE){ + $status = long_command("cmsDriver.py $PYTHON_OPT -s RAW2DIGI --era=Run2_2016 --customise=L1Trigger/Configuration/customiseReEmul.L1TReEmulFromRAW --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMU --customise=L1Trigger/Configuration/customiseUtils.L1TTurnOffUnpackStage2GtGmtAndCalo $COND_DATA_2015 -n $nevt --data --no_exec --no_output --filein=$DATA_2016_FILE --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalSimDigisSummary --customise=L1Trigger/Configuration/customiseUtils.L1TAddInfoOutput --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalMenuXML >& CMSDRIVER.log"); + + print "INFO: status of cmsDriver call is $status\n"; + if ($status){ + print "ERROR: abnormal status returned: $status\n"; + return; + } + $status = long_command("$CMSRUN >& CMSRUN.log"); + print "INFO: status of cmsRun call is $status\n"; + if ($status){ + print "ERROR: abnormal status returned: $status\n"; + return; + } + } + + $SUCCESS = 0; + open INPUT,"root -b -q -x ../../L1Trigger/L1TCommon/macros/CheckL1Ntuple.C |"; + while (){ + print $_; + if (/SUCCESS/){ $SUCCESS = 1; } + } + close INPUT; + + if (! $SUCCESS){ + print "ERROR: L1Ntuple did not contain sufficient Calo and Muon candidates for success.\n"; + return; + } + + #print "INFO: parsing the following menu summary:\n"; + #system "grep 'L1T menu Name' -A 250 CMSRUN.log"; + + @TRIGGERS = ("L1_SingleMu3","L1_SingleEG5","L1_SingleJet16"); + foreach $trig (@TRIGGERS) { + open INPUT,"grep 'L1T menu Name' -A 250 CMSRUN.log | grep $trig |"; + $FIRED = 0; + while (){ + #chomp; print "LINE: $_\n"; + /$trig\W+(\w+)/; + print "INFO: $trig fired $1 times\n"; + if ($1 > 0){ $FIRED = 1; } + } + if (! $FIRED){ + print "ERROR: $trig did not fire.\n"; + return; + } + } + system "touch SUCCESS"; + +} + +sub test_reemul_2017 { $nevt = 100; if ($FAST) {$nevt = 100; } if ($SLOW) {$nevt = 1000; } if (! $RECYCLE){ - $status = long_command("cmsDriver.py $PYTHON_OPT -s RAW2DIGI --era=Run2_2016 --customise=L1Trigger/Configuration/customiseReEmul.L1TReEmulFromRAW --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMU --customise=L1Trigger/Configuration/customiseUtils.L1TTurnOffUnpackStage2GtGmtAndCalo $COND_DATA_2015 -n $nevt --data --no_exec --no_output --filein=$file --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalSimDigisSummary --customise=L1Trigger/Configuration/customiseUtils.L1TAddInfoOutput --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalMenuXML >& CMSDRIVER.log"); + $status = long_command("cmsDriver.py L1TEST $PYTHON_OPT -s RAW2DIGI --era=Run2_2017 --customise=L1Trigger/Configuration/customiseReEmul.L1TReEmulFromRAW --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMU --customise=L1Trigger/Configuration/customiseUtils.L1TTurnOffUnpackStage2GtGmtAndCalo $COND_DATA_2017 -n $nevt --data --no_exec --no_output --filein=$DATA_2017_FILE --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalSimDigisSummary --customise=L1Trigger/Configuration/customiseUtils.L1TAddInfoOutput >& CMSDRIVER.log"); print "INFO: status of cmsDriver call is $status\n"; if ($status){ @@ -351,13 +440,70 @@ sub test_reemul_2016 { } +sub test_reemul_2018 { + #$file = "/store/express/Run2017C/ExpressPhysics/FEVT/Express-v3/000/301/142/00000/0008C605-0881-E711-84A2-02163E019C07.root" + $nevt = 100; + if ($FAST) {$nevt = 100; } + if ($SLOW) {$nevt = 1000; } + + if (! $RECYCLE){ + $status = long_command("cmsDriver.py L1TEST $PYTHON_OPT -s RAW2DIGI --era=Run2_2018 --customise=L1Trigger/Configuration/customiseReEmul.L1TReEmulFromRAW --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMU --customise=L1Trigger/Configuration/customiseUtils.L1TTurnOffUnpackStage2GtGmtAndCalo $COND_DATA_2018 -n $nevt --data --no_exec --no_output --filein=$DATA_2018_FILE --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalSimDigisSummary --customise=L1Trigger/Configuration/customiseUtils.L1TAddInfoOutput >& CMSDRIVER.log"); + + print "INFO: status of cmsDriver call is $status\n"; + if ($status){ + print "ERROR: abnormal status returned: $status\n"; + return; + } + $status = long_command("$CMSRUN >& CMSRUN.log"); + print "INFO: status of cmsRun call is $status\n"; + if ($status){ + print "ERROR: abnormal status returned: $status\n"; + return; + } + } + + $SUCCESS = 0; + open INPUT,"root -b -q -x ../../L1Trigger/L1TCommon/macros/CheckL1Ntuple.C |"; + while (){ + print $_; + if (/SUCCESS/){ $SUCCESS = 1; } + } + close INPUT; + + if (! $SUCCESS){ + print "ERROR: L1Ntuple did not contain sufficient Calo and Muon candidates for success.\n"; + return; + } + + #print "INFO: parsing the following menu summary:\n"; + #system "grep 'L1T menu Name' -A 250 CMSRUN.log"; + + @TRIGGERS = ("L1_SingleMu3","L1_SingleEG50","L1_SingleJet35"); + foreach $trig (@TRIGGERS) { + open INPUT,"grep 'L1T menu Name' -A 250 CMSRUN.log | grep $trig |"; + $FIRED = 0; + while (){ + #chomp; print "LINE: $_\n"; + /$trig\W+(\w+)/; + print "INFO: $trig fired $1 times\n"; + if ($1 > 0){ $FIRED = 1; } + } + if (! $FIRED){ + print "ERROR: $trig did not fire.\n"; + return; + } + } + system "touch SUCCESS"; + +} + sub test_mc_prod { $nevt = 50; if ($FAST) {$nevt = 5; } if ($SLOW) {$nevt = 500; } if (! $RECYCLE){ - $status = long_command("cmsDriver.py L1TEST $COND_MC -s DIGI,L1 --datatier GEN-SIM-RAW -n $nevt --era Run2_2016 --mc --no_output --no_exec --filein=$GEN_SIM_FILE --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMUNoEventTree >& CMSDRIVER.log"); + $status = long_command("cmsDriver.py L1TEST $COND_MC -s DIGI,L1 --datatier GEN-SIM-RAW -n $nevt --era Run2_2016 --mc --no_output --no_exec --filein=$GEN_SIM_FILE --customise=L1Trigger/L1TNtuples/customiseL1Ntuple.L1NtupleEMUNoEventTree --customise=L1Trigger/Configuration/customiseUtils.L1TGlobalSimDigisSummary --customise=L1Trigger/Configuration/customiseUtils.L1TAddInfoOutput >& CMSDRIVER.log"); # --geometry=Extended2016,Extended2016Reco --customise=L1Trigger/Configuration/customiseReEmul.L1TEventSetupForHF1x1TPs print "INFO: status of cmsDriver call is $status\n"; @@ -415,6 +561,8 @@ sub run_job { case 3 {test_pack_unpack_is_unity; } case 4 {test_unpackers_dont_crash; } case 5 {test_reemul_2016;} + case 6 {test_reemul_2017;} + case 7 {test_reemul_2018;} else {test_dummy; } } my $job_time = time() - $start_time; @@ -566,6 +714,14 @@ sub main { print "$theirs\n";; $status = long_command("root -b -q -x '$ENV{CMSSW_BASE}/src/L1Trigger/L1TCommon/macros/NtupleDiff.C(\"reemul2016\",\"$ours\",\"$theirs\")'"); + $ours = "../$DIR1/$WORK_DIR/test_6/L1Ntuple.root"; + $theirs = "../$DIR2/$WORK_DIR/test_6/L1Ntuple.root"; + if (! -e $ours) { print "ERROR: could not find file $ours\n"; exit(1); } + if (! -e $theirs) { print "ERROR: could not find file $theirs\n"; exit(1); } + print "$ours\n"; + print "$theirs\n";; + $status = long_command("root -b -q -x '$ENV{CMSSW_BASE}/src/L1Trigger/L1TCommon/macros/NtupleDiff.C(\"reemul2017\",\"$ours\",\"$theirs\")'"); + # this is a hack until L1T uGT output goes into L1TNtuple: system "sed -n \'/L1T menu Name/,/Final OR Count/p\' ../$DIR1/$WORK_DIR/test_0/CMSRUN.log > menu_a.txt"; 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/src/MuCondition.cc b/L1Trigger/L1TGlobal/src/MuCondition.cc index 566d19b29ba4d..a5769789017d4 100644 --- a/L1Trigger/L1TGlobal/src/MuCondition.cc +++ b/L1Trigger/L1TGlobal/src/MuCondition.cc @@ -382,16 +382,20 @@ 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 (objPar.unconstrainedPtHigh > 0) // Rick Cavanaugh: Check if unconstrained pT cut-window is valid { - if (!checkThreshold(objPar.unconstrainedPtLow, - objPar.unconstrainedPtHigh, - cand.hwPtUnconstrained(), - m_gtMuonTemplate->condGEq())) { + 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) // Rick Cavanaugh: 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) { @@ -399,8 +403,7 @@ const bool l1t::MuCondition::checkObjectParameter(const int iCondition, return false; } bool passImpactParameterLUT = ((objPar.impactParameterLUT >> cand.hwDXY()) & 1); - if (!passImpactParameterLUT) // POTENITAL PROBLEM RICK - { + if (!passImpactParameterLUT) { LogDebug("L1TGlobal") << "\t\t l1t::Candidate failed impact parameter requirement" << std::endl; return false; } @@ -471,7 +474,7 @@ const bool l1t::MuCondition::checkObjectParameter(const int iCondition, } // A number of values is required to trigger (at least one). - // "Don’t care" means that all values are allowed. + // "Don't care" means that all values are allowed. // Qual = 000 means then NO MUON (GTL module) // if (cand.hwQual() == 0) { diff --git a/L1Trigger/L1TMuon/data/bmtf_luts/kalmanLUTs.root b/L1Trigger/L1TMuon/data/bmtf_luts/kalmanLUTs.root new file mode 100644 index 0000000000000..67c5a47b8f8eb Binary files /dev/null and b/L1Trigger/L1TMuon/data/bmtf_luts/kalmanLUTs.root differ 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/python/fakeGmtParams_cff.py b/L1Trigger/L1TMuon/python/fakeGmtParams_cff.py index a74a4195f4cf5..1892ff1c07655 100644 --- a/L1Trigger/L1TMuon/python/fakeGmtParams_cff.py +++ b/L1Trigger/L1TMuon/python/fakeGmtParams_cff.py @@ -2,6 +2,7 @@ import os +# directory paths to code and external LUTs l1tgmt_basedir = "L1Trigger/L1TMuon/" lut_dir = os.path.join(l1tgmt_basedir, "data/microgmt_luts/") @@ -15,29 +16,38 @@ gmtParams = cms.ESProducer('L1TMuonGlobalParamsESProducer', # id for uGMT settings uGmtProcessorId = cms.string('ugmt_processor'), + # paths to external xml online config files + # for testing purposes or manual generation of conditions from a trigger key hwXmlFile = cms.string('L1Trigger/L1TMuon/data/o2o/ugmt/UGMT_HW.xml'), topCfgXmlFile = cms.string('L1Trigger/L1TMuon/data/o2o/ugmt/ugmt_top_config_p5.xml'), xmlCfgKey = cms.string('TestKey1'), - # get configuration from DB and ignore values below this one + + # get configuration from OMDS xml files defined above + # if "True" parameters below this one are ignored configFromXml = cms.bool(False), - #fwVersion = cms.uint32(1), + # uGMT FW version to be set + # Format: 0xMMmmvvpp for major.minor.very_minor.patch + # E.g.: 2.1.0.patch1 translates to 0x02010001 fwVersion = cms.uint32(0x4010000), # uGMT inputs to disable # disabled inputs are not used in the algo but are still in the readout - caloInputsDisable = cms.bool(False), + caloInputsDisable = cms.bool(False), # disables all 28 calo inputs bmtfInputsToDisable = cms.vuint32(0,0,0,0,0,0,0,0,0,0,0,0), # BMTF 0-11 omtfInputsToDisable = cms.vuint32(0,0,0,0,0,0,0,0,0,0,0,0), # OMTF+0-5, OMTF-0-5 emtfInputsToDisable = cms.vuint32(0,0,0,0,0,0,0,0,0,0,0,0), # EMTF+0-5, EMTF-0-5 # masked inputs # masked inputs are not used in the algo and are not in the readout - caloInputsMasked = cms.bool(False), + caloInputsMasked = cms.bool(False), # masks all 28 calo inputs maskedBmtfInputs = cms.vuint32(0,0,0,0,0,0,0,0,0,0,0,0), # BMTF 0-11 maskedOmtfInputs = cms.vuint32(0,0,0,0,0,0,0,0,0,0,0,0), # OMTF+0-5, OMTF-0-5 maskedEmtfInputs = cms.vuint32(0,0,0,0,0,0,0,0,0,0,0,0), # EMTF+0-5, EMTF-0-5 + # paths to external lookup tables + # The paths can be empty for MatchQual and SortRAnk LUTs, in which case + # the LUTs are generated on the fly by the parameters defined below. AbsIsoCheckMemLUTPath = cms.string(os.path.join(lut_dir, 'AbsIsoCheckMem.txt')), RelIsoCheckMemLUTPath = cms.string(os.path.join(lut_dir, 'RelIsoCheckMem.txt')), IdxSelMemPhiLUTPath = cms.string(os.path.join(lut_dir, 'IdxSelMemPhi.txt')), @@ -58,6 +68,8 @@ FEtaExtrapolationLUTPath = cms.string(os.path.join(lut_dir, 'EEtaExtrapolation_5eta_7pt_4out_0outshift_20170505.txt')), SortRankLUTPath = cms.string(os.path.join(lut_dir, 'SortRank.txt')), + # parameters for MatchQual LUTs if no external LUT is defined + # If a path to an external LUT is defined these parameters have no effect FwdPosSingleMatchQualLUTMaxDR = cms.double(0.05), FwdPosSingleMatchQualLUTfEta = cms.double(1), FwdPosSingleMatchQualLUTfPhi = cms.double(1), @@ -96,6 +108,8 @@ FONegMatchQualLUTfEtaCoarse = cms.double(1), FONegMatchQualLUTfPhi = cms.double(3), + # parameters for SortRank LUT if no path to an external LUT is defined + # If a path to an external LUT is defined these parameters have no effect SortRankLUTPtFactor = cms.uint32(1), # can be 0 or 1 SortRankLUTQualFactor = cms.uint32(4), # can be 0 to 34 ) diff --git a/L1Trigger/L1TMuon/python/simDigis_cff.py b/L1Trigger/L1TMuon/python/simDigis_cff.py index 23a260212041e..d52e32d4d41ea 100644 --- a/L1Trigger/L1TMuon/python/simDigis_cff.py +++ b/L1Trigger/L1TMuon/python/simDigis_cff.py @@ -96,10 +96,11 @@ ## GEM TPs from L1Trigger.L1TGEM.simGEMDigis_cff import * _run3_SimL1TMuonTask = SimL1TMuonTask.copy() -_run3_SimL1TMuonTask.add(simMuonGEMPadTask) +#_run3_SimL1TMuonTask.add(simMuonGEMPadTask) from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM -(stage2L1Trigger & run3_GEM).toReplaceWith( SimL1TMuonTask, _run3_SimL1TMuonTask ) +#(stage2L1Trigger & run3_GEM).toReplaceWith( SimL1TMuonTask, _run3_SimL1TMuonTask ) +(stage2L1Trigger & run3_GEM).toReplaceWith( SimL1TMuonTask, cms.Task(simMuonGEMPadTask,_run3_SimL1TMuonTask) ) ## ME0 TPs from L1Trigger.L1TGEM.me0TriggerDigis_cff import * 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/L1TMuon/test/dump_ugmt_luts.py b/L1Trigger/L1TMuon/test/dump_ugmt_luts.py index d170c582df3f9..d1e3108de581a 100644 --- a/L1Trigger/L1TMuon/test/dump_ugmt_luts.py +++ b/L1Trigger/L1TMuon/test/dump_ugmt_luts.py @@ -1,3 +1,7 @@ +# This can be used to generate uGMT LUTs from parameters in the fakeGmtParams_cff.py file +# or dump LUTs from the conditions DB when given a record+tag+(optional)snapshotTime combination +# The LUTs are dumped as .txt files in the lut_dump directory, which needs to be created before running. + import FWCore.ParameterSet.Config as cms process = cms.Process("L1MicroGMTEmulator") @@ -8,8 +12,26 @@ process.source = cms.Source("EmptySource") process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1)) +## use this to produce LUTs from the config parameters in fakeGmtParams_cff process.load('L1Trigger.L1TMuon.fakeGmtParams_cff') +## use this to extract LUTs from the CondDB record + tag + snapshotTime(optional) +#from CondCore.CondDB.CondDB_cfi import CondDB +#CondDB.connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS") +#process.l1ugmtdb = cms.ESSource("PoolDBESSource", +# CondDB, +# toGet = cms.VPSet( +# cms.PSet( +# record = cms.string('L1TMuonGlobalParamsRcd'), +# tag = cms.string("L1TMuonGlobalParams_Stage2v0_hlt"), +# #tag = cms.string("L1TMuonGlobalParams_static_v91.12"), +# #tag = cms.string("L1TMuonGlobalParams_static_v94.6.1"), +# #tag = cms.string("L1TMuonGlobalParams_Stage2v0_2018_mc"), +# #snapshotTime = cms.string("2017-09-20 23:59:59.000") +# ) +# ) +#) + process.dumper = cms.EDAnalyzer("L1TMicroGMTLUTDumper", out_directory = cms.string("lut_dump"), ) diff --git a/L1Trigger/L1TMuonBarrel/BuildFile.xml b/L1Trigger/L1TMuonBarrel/BuildFile.xml index 0479f012f00cd..18a9659ad941f 100644 --- a/L1Trigger/L1TMuonBarrel/BuildFile.xml +++ b/L1Trigger/L1TMuonBarrel/BuildFile.xml @@ -4,6 +4,7 @@ + diff --git a/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanAlgo.h b/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanAlgo.h index 2bb6c447aec8d..31b03f79d5166 100644 --- a/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanAlgo.h +++ b/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanAlgo.h @@ -38,10 +38,10 @@ class L1TMuonBarrelKalmanAlgo { int correctedPhiB(const L1MuKBMTCombinedStubRef&); void propagate(L1MuKBMTrack&); void updateEta(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&); - bool update(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&, int); + bool update(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&, int, int); bool updateOffline(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&); bool updateOffline1D(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&); - bool updateLUT(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&, int); + bool updateLUT(L1MuKBMTrack&, const L1MuKBMTCombinedStubRef&, int, int); void vertexConstraint(L1MuKBMTrack&); void vertexConstraintOffline(L1MuKBMTrack&); void vertexConstraintLUT(L1MuKBMTrack&); @@ -106,6 +106,26 @@ class L1TMuonBarrelKalmanAlgo { std::vector combos2_; std::vector combos1_; + //bits for fixed point precision + static const int BITSCURV = 14; + static const int BITSPHI = 12; + static const int BITSPHIB = 13; + static const int BITSPARAM = 14; + static const int GAIN_0 = 9; + static const int GAIN_0INT = 6; + static const int GAIN_4 = 9; + static const int GAIN_4INT = 4; + static const int GAIN_V0 = 9; + static const int GAIN_V0INT = 3; + + static const int GAIN2_0 = 12; + static const int GAIN2_0INT = 8; + static const int GAIN2_1 = 12; + static const int GAIN2_1INT = 4; + static const int GAIN2_4 = 12; + static const int GAIN2_4INT = 4; + static const int GAIN2_5 = 12; + static const int GAIN2_5INT = 0; //STUFF NOT USED IN THE FIRMWARE BUT ONLY FOR DEBUGGING /////////////////////////////////////////////////////// @@ -116,6 +136,9 @@ class L1TMuonBarrelKalmanAlgo { double pointResolutionPhi_; //point resolution for phiB double pointResolutionPhiB_; + std::vector pointResolutionPhiBH_; + std::vector pointResolutionPhiBL_; + //double pointResolutionPhiB_; //point resolution for vertex double pointResolutionVertex_; diff --git a/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanLUTs.h b/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanLUTs.h index d27d955929d08..ad722f49ab53a 100644 --- a/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanLUTs.h +++ b/L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanLUTs.h @@ -12,14 +12,17 @@ class L1TMuonBarrelKalmanLUTs { ~L1TMuonBarrelKalmanLUTs(); std::vector trackGain(uint, uint, uint); - std::vector trackGain2(uint, uint, uint); + std::vector trackGain2(uint, uint, uint, uint, uint); std::pair vertexGain(uint, uint); uint coarseEta(uint, uint); private: TFile *lutFile_; std::map lut_; - std::map lut2_; + std::map lut2HH_; + std::map lut2LH_; + std::map lut2HL_; + std::map lut2LL_; std::map coarseEta_; }; diff --git a/L1Trigger/L1TMuonBarrel/python/simKBmtfDigis_cfi.py b/L1Trigger/L1TMuonBarrel/python/simKBmtfDigis_cfi.py index 6259b736a1da1..ead53e44bc03d 100644 --- a/L1Trigger/L1TMuonBarrel/python/simKBmtfDigis_cfi.py +++ b/L1Trigger/L1TMuonBarrel/python/simKBmtfDigis_cfi.py @@ -8,12 +8,12 @@ # eLoss = cms.vdouble(-2.85e-4,-6.21e-5,-1.26e-4,-1.23e-4), eLoss = cms.vdouble(+0.000765,0,0,0), - aPhi = cms.vdouble(1.942,0.03125,0.0273438,0.015625), - aPhiB = cms.vdouble(-1.508,-0.123047,-0.174805,-0.144531), + aPhi = cms.vdouble(1.942, .01511, .01476, .009799), + aPhiB = cms.vdouble(-1.508,-0.1237,-0.1496,-0.1333), aPhiBNLO = cms.vdouble(0.000331,0,0,0), - bPhi = cms.vdouble(-1,0.154297,0.173828,0.147461), - bPhiB = cms.vdouble(-1,1.15332,1.17285,1.14648), + bPhi = cms.vdouble(-1,.18245,.20898,.17286), + bPhiB = cms.vdouble(-1,1.18245,1.20898,1.17286), phiAt2 = cms.double(0.15918), etaLUT0 = cms.vdouble(8.946,7.508,6.279,6.399), etaLUT1 = cms.vdouble(0.159,0.116,0.088,0.128), @@ -23,6 +23,7 @@ chiSquareCutCurvMax = cms.vint32(2500,2500,2500,2500,2500), chiSquareCut = cms.vint32(126,126,126,126,126), + #vertex cuts trackComp = cms.vdouble(1.75,1.25,0.625,0.250), trackCompErr1 = cms.vdouble(2.0,2.0,2.0,2.0), @@ -43,6 +44,8 @@ mScatteringPhiB = cms.vdouble(7.22e-3,3.461e-3,4.447e-3,4.12e-3), pointResolutionPhi = cms.double(1.), pointResolutionPhiB = cms.double(500.), + pointResolutionPhiBH = cms.vdouble(151., 173., 155., 153.), + pointResolutionPhiBL = cms.vdouble(17866., 19306., 23984., 23746.), pointResolutionVertex = cms.double(1.) ) diff --git a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanAlgo.cc b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanAlgo.cc index 0909710653d4d..9df5d8f415998 100644 --- a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanAlgo.cc +++ b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanAlgo.cc @@ -1,5 +1,7 @@ #include #include "L1Trigger/L1TMuonBarrel/interface/L1TMuonBarrelKalmanAlgo.h" +#include "ap_int.h" +#include "ap_fixed.h" L1TMuonBarrelKalmanAlgo::L1TMuonBarrelKalmanAlgo(const edm::ParameterSet& settings) : verbose_(settings.getParameter("verbose")), @@ -29,11 +31,14 @@ L1TMuonBarrelKalmanAlgo::L1TMuonBarrelKalmanAlgo(const edm::ParameterSet& settin combos3_(settings.getParameter >("combos3")), combos2_(settings.getParameter >("combos2")), combos1_(settings.getParameter >("combos1")), + useOfflineAlgo_(settings.getParameter("useOfflineAlgo")), mScatteringPhi_(settings.getParameter >("mScatteringPhi")), mScatteringPhiB_(settings.getParameter >("mScatteringPhiB")), pointResolutionPhi_(settings.getParameter("pointResolutionPhi")), pointResolutionPhiB_(settings.getParameter("pointResolutionPhiB")), + pointResolutionPhiBH_(settings.getParameter >("pointResolutionPhiBH")), + pointResolutionPhiBL_(settings.getParameter >("pointResolutionPhiBL")), pointResolutionVertex_(settings.getParameter("pointResolutionVertex")) {} @@ -96,7 +101,7 @@ l1t::RegionalMuonCand L1TMuonBarrelKalmanAlgo::convertToBMTF(const L1MuKBMTrack& int quality = 12 | (rank(track) >> 6); - int dxy = abs(track.dxy()) >> 9; + int dxy = abs(track.dxy()) >> 8; if (dxy > 3) dxy = 3; @@ -324,12 +329,12 @@ void L1TMuonBarrelKalmanAlgo::propagate(L1MuKBMTrack& track) { //int offset=int(charge*eLoss_[step-1]*K*K); // if (fabs(offset)>4096) // offset=4096*offset/fabs(offset); - int charge = 1; if (K != 0) charge = K / fabs(K); int KBound = K; + if (KBound > 4095) KBound = 4095; if (KBound < -4095) @@ -353,25 +358,50 @@ void L1TMuonBarrelKalmanAlgo::propagate(L1MuKBMTrack& track) { KNew = K + deltaK; //phi propagation - int phi11 = fp_product(aPhi_[step - 1], K, 10); - int phi12 = fp_product(-bPhi_[step - 1], phiB, 10); + ap_fixed phi11 = ap_fixed(aPhi_[step - 1]) * ap_fixed(K); + ap_fixed phi12 = + ap_fixed(-bPhi_[step - 1]) * ap_fixed(phiB); + if (verbose_) { - printf("phi prop = %d* %f = %d, %d* %f =%d\n", K, aPhi_[step - 1], phi11, phiB, -bPhi_[step - 1], phi12); + printf("phi prop = %d * %f = %d, %d * %f = %d\n", + K, + ap_fixed(aPhi_[step - 1]).to_float(), + phi11.to_int(), + phiB, + ap_fixed(-bPhi_[step - 1]).to_float(), + phi12.to_int()); } - int phiNew = wrapAround(phi + phi11 + phi12, 2048); + int phiNew = ap_fixed(phi + phi11 + phi12); + //phiB propagation - int phiB11 = fp_product(aPhiB_[step - 1], K, 10); - int phiB12 = fp_product(bPhiB_[step - 1], phiB, 11); - int phiBNew = wrapAround(phiB11 + phiB12, 4096); + ap_fixed phiB11 = ap_fixed(aPhiB_[step - 1]) * ap_fixed(K); + ap_fixed phiB12 = + ap_ufixed(bPhiB_[step - 1]) * ap_fixed(phiB); + int phiBNew = ap_fixed<13, 13>(phiB11 + phiB12); if (verbose_) { - printf("phiB prop = %d* %f = %d, %d* %f =%d\n", K, aPhiB_[step - 1], phiB11, phiB, bPhiB_[step - 1], phiB12); + printf("phiB prop = %d * %f = %d, %d * %f = %d\n", + K, + ap_fixed(aPhiB_[step - 1]).to_float(), + phiB11.to_int(), + phiB, + ap_ufixed(bPhiB_[step - 1]).to_float(), + phiB12.to_int()); } //Only for the propagation to vertex we use the LUT for better precision and the full function if (step == 1) { int addr = KBound / 2; - phiBNew = wrapAround( - int(aPhiB_[step - 1] * addr / (1 + charge * aPhiBNLO_[step - 1] * addr)) + int(bPhiB_[step - 1] * phiB), 4096); + // Extra steps to mimic firmware for vertex prop + ap_ufixed<11, 11> dxyOffset = (int)fabs(aPhiB_[step - 1] * addr / (1 + charge * aPhiBNLO_[step - 1] * addr)); + ap_fixed<12, 12> DXY; + if (addr > 0) + DXY = -dxyOffset; + else + DXY = dxyOffset; + phiBNew = ap_fixed(DXY - ap_fixed(phiB)); + if (verbose_) { + printf("Vertex phiB prop = %d - %d = %d\n", DXY.to_int(), ap_fixed(phiB).to_int(), phiBNew); + } } /////////////////////////////////////////////////////// //Rest of the stuff is for the offline version only @@ -425,7 +455,7 @@ void L1TMuonBarrelKalmanAlgo::propagate(L1MuKBMTrack& track) { track.setCoordinates(step - 1, KNew, phiNew, phiBNew); } -bool L1TMuonBarrelKalmanAlgo::update(L1MuKBMTrack& track, const L1MuKBMTCombinedStubRef& stub, int mask) { +bool L1TMuonBarrelKalmanAlgo::update(L1MuKBMTrack& track, const L1MuKBMTCombinedStubRef& stub, int mask, int seedQual) { updateEta(track, stub); if (useOfflineAlgo_) { if (mask == 3 || mask == 5 || mask == 9 || mask == 6 || mask == 10 || mask == 12) @@ -434,7 +464,7 @@ bool L1TMuonBarrelKalmanAlgo::update(L1MuKBMTrack& track, const L1MuKBMTCombined return updateOffline1D(track, stub); } else - return updateLUT(track, stub, mask); + return updateLUT(track, stub, mask, seedQual); } bool L1TMuonBarrelKalmanAlgo::updateOffline(L1MuKBMTrack& track, const L1MuKBMTCombinedStubRef& stub) { @@ -461,7 +491,10 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline(L1MuKBMTrack& track, const L1MuKBMTC R(0, 0) = pointResolutionPhi_; R(0, 1) = 0.0; R(1, 0) = 0.0; - R(1, 1) = pointResolutionPhiB_; + if (stub->quality() < 4) + R(1, 1) = pointResolutionPhiBL_[track.step() - 1]; + else + R(1, 1) = pointResolutionPhiBH_[track.step() - 1]; const std::vector& covLine = track.covariance(); L1MuKBMTrack::CovarianceMatrix cov(covLine.begin(), covLine.end()); @@ -484,6 +517,8 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline(L1MuKBMTrack& track, const L1MuKBMTC track.setResidual(stub->stNum() - 1, fabs(phi - phiNew) + fabs(phiB - phiBNew) / 8); if (verbose_) { + printf("residual %d - %d = %d %d - %d = %d\n", phi, trackPhi, int(residual[0]), phiB, trackPhiB, int(residual[1])); + printf("Gains offline: %f %f %f %f\n", Gain(0, 0), Gain(0, 1), Gain(2, 0), Gain(2, 1)); printf(" K = %d + %f * %f + %f * %f\n", trackK, Gain(0, 0), residual(0), Gain(0, 1), residual(1)); printf(" phiB = %d + %f * %f + %f * %f\n", trackPhiB, Gain(2, 0), residual(0), Gain(2, 1), residual(1)); } @@ -502,7 +537,7 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline(L1MuKBMTrack& track, const L1MuKBMTC c(2, 1) = covNew(2, 1); c(2, 2) = covNew(2, 2); if (verbose_) { - printf("Post Fit Covariance Matrix %f %f %f \n", cov(0, 0), cov(1, 1), cov(2, 2)); + printf("Post Fit Covariance Matrix %f %f %f\n", cov(0, 0), cov(1, 1), cov(2, 2)); } track.setCovariance(c); @@ -521,6 +556,9 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline1D(L1MuKBMTrack& track, const L1MuKBM double residual = phi - trackPhi; + if (verbose_) + printf("residuals %d - %d = %d\n", phi, trackPhi, int(residual)); + Matrix13 H; H(0, 0) = 0.0; H(0, 1) = 1.0; @@ -536,6 +574,8 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline1D(L1MuKBMTrack& track, const L1MuKBM Matrix31 Gain = cov * ROOT::Math::Transpose(H) / S; track.setKalmanGain(track.step(), fabs(trackK), Gain(0, 0), 0.0, Gain(1, 0), 0.0, Gain(2, 0), 0.0); + if (verbose_) + printf("Gains: %f %f\n", Gain(0, 0), Gain(2, 0)); int KNew = wrapAround(trackK + int(Gain(0, 0) * residual), 8192); int phiNew = wrapAround(trackPhi + residual, 8192); @@ -544,6 +584,10 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline1D(L1MuKBMTrack& track, const L1MuKBM Matrix33 covNew = cov - Gain * (H * cov); L1MuKBMTrack::CovarianceMatrix c; + if (verbose_) { + printf("phiUpdate: %d %d\n", int(Gain(0, 0) * residual), int(Gain(2, 0) * residual)); + } + c(0, 0) = covNew(0, 0); c(0, 1) = covNew(0, 1); c(0, 2) = covNew(0, 2); @@ -560,7 +604,10 @@ bool L1TMuonBarrelKalmanAlgo::updateOffline1D(L1MuKBMTrack& track, const L1MuKBM return true; } -bool L1TMuonBarrelKalmanAlgo::updateLUT(L1MuKBMTrack& track, const L1MuKBMTCombinedStubRef& stub, int mask) { +bool L1TMuonBarrelKalmanAlgo::updateLUT(L1MuKBMTrack& track, + const L1MuKBMTCombinedStubRef& stub, + int mask, + int seedQual) { int trackK = track.curvature(); int trackPhi = track.positionAngle(); int trackPhiB = track.bendingAngle(); @@ -568,15 +615,18 @@ bool L1TMuonBarrelKalmanAlgo::updateLUT(L1MuKBMTrack& track, const L1MuKBMTCombi int phi = correctedPhi(stub, track.sector()); int phiB = correctedPhiB(stub); - if (stub->quality() < 4) - phiB = trackPhiB; - Vector2 residual; - int residualPhi = wrapAround(phi - trackPhi, 4096); - int residualPhiB = wrapAround(phiB - trackPhiB, 8192); + ap_fixed residualPhi = phi - trackPhi; + ap_fixed residualPhiB = phiB - trackPhiB; if (verbose_) - printf("residuals %d-%d=%d %d-%d=%d\n", phi, trackPhi, int(residualPhi), phiB, trackPhiB, int(residualPhiB)); + printf("residual %d - %d = %d %d - %d = %d\n", + phi, + trackPhi, + residualPhi.to_int(), + phiB, + trackPhiB, + residualPhiB.to_int()); uint absK = fabs(trackK); if (absK > 4095) @@ -590,36 +640,59 @@ bool L1TMuonBarrelKalmanAlgo::updateLUT(L1MuKBMTrack& track, const L1MuKBMTCombi GAIN[3] = 0.0; } else { - GAIN = lutService_->trackGain2(track.step(), track.hitPattern(), absK / 8); + GAIN = lutService_->trackGain2(track.step(), track.hitPattern(), absK / 8, seedQual, stub->quality()); } - if (verbose_) - printf("Gains:%d %f %f %f %f\n", absK / 4, GAIN[0], GAIN[1], GAIN[2], GAIN[3]); + if (verbose_) { + printf("Gains (fp): %f %f %f %f\n", GAIN[0], GAIN[1], GAIN[2], GAIN[3]); + if (!(mask == 3 || mask == 5 || mask == 9 || mask == 6 || mask == 10 || mask == 12)) + printf("Addr=%d gain0=%f gain4=-%f\n", + absK / 4, + ap_ufixed(GAIN[0]).to_float(), + ap_ufixed(GAIN[2]).to_float()); + else + printf("Addr=%d %f -%f %f %f\n", + absK / 4, + ap_fixed(GAIN[0]).to_float(), + ap_ufixed(GAIN[1]).to_float(), + ap_ufixed(GAIN[2]).to_float(), + ap_ufixed(GAIN[3]).to_float()); + } + track.setKalmanGain(track.step(), fabs(trackK), GAIN[0], GAIN[1], 1, 0, GAIN[2], GAIN[3]); - int k_0 = fp_product(GAIN[0], residualPhi, 3); - int k_1 = fp_product(GAIN[1], residualPhiB, 5); - int KNew = trackK + k_0 + k_1; + int KNew; + if (!(mask == 3 || mask == 5 || mask == 9 || mask == 6 || mask == 10 || mask == 12)) { + KNew = ap_fixed(ap_fixed(trackK) + + ap_ufixed(GAIN[0]) * residualPhi); + } else { + ap_fixed k11 = ap_fixed(GAIN[0]) * residualPhi; + ap_fixed k12 = ap_ufixed(GAIN[1]) * residualPhiB; + KNew = ap_fixed(ap_fixed(trackK) + k11 - k12); + } if (fabs(KNew) >= 8191) return false; KNew = wrapAround(KNew, 8192); int phiNew = phi; //different products for different firmware logic - int pbdouble_0 = fp_product(fabs(GAIN[2]), residualPhi, 9); - int pb_0 = fp_product(GAIN[2], residualPhi, 9); - int pb_1 = fp_product(GAIN[3], residualPhiB, 9); + ap_fixed pbdouble_0 = ap_ufixed(GAIN[2]) * residualPhi; + ap_fixed pb_1 = ap_ufixed(GAIN[3]) * residualPhiB; + ap_fixed pb_0 = ap_ufixed(GAIN[2]) * residualPhi; - if (verbose_) - printf("phiupdate: %d %d\n", pb_0, pb_1); + if (verbose_) { + printf("phiupdate %f %f %f\n", pb_0.to_float(), pb_1.to_float(), pbdouble_0.to_float()); + } int phiBNew; if (!(mask == 3 || mask == 5 || mask == 9 || mask == 6 || mask == 10 || mask == 12)) { - phiBNew = wrapAround(trackPhiB + pb_0, 4096); - if (fabs(trackPhiB + pb_0) >= 4095) + phiBNew = ap_fixed(ap_fixed(trackPhiB) - + ap_ufixed(GAIN[2]) * residualPhi); + + if (fabs(phiBNew) >= 4095) return false; } else { - phiBNew = wrapAround(trackPhiB + pb_1 - pbdouble_0, 4096); - if (fabs(trackPhiB + pb_1 - pbdouble_0) >= 4095) + phiBNew = ap_fixed(ap_fixed(trackPhiB) + pb_1 - pbdouble_0); + if (fabs(phiBNew) >= 4095) return false; } track.setCoordinates(track.step(), KNew, phiNew, phiBNew); @@ -687,11 +760,16 @@ void L1TMuonBarrelKalmanAlgo::vertexConstraintLUT(L1MuKBMTrack& track) { std::pair GAIN = lutService_->vertexGain(track.hitPattern(), absK / 2); track.setKalmanGain(track.step(), fabs(track.curvature()), GAIN.first, GAIN.second, -1); - int k_0 = fp_product(GAIN.first, int(residual), 7); - int KNew = wrapAround(track.curvature() + k_0, 8192); + ap_fixed k_0 = + -(ap_ufixed(fabs(GAIN.first))) * ap_fixed(residual); + int KNew = ap_fixed(k_0 + ap_fixed(track.curvature())); if (verbose_) { - printf("VERTEX GAIN(%d)= %f * %d = %d\n", absK / 2, GAIN.first, int(residual), k_0); + printf("VERTEX GAIN(%d)= -%f * %d = %d\n", + absK / 2, + ap_ufixed(fabs(GAIN.first)).to_float(), + ap_fixed(residual).to_int(), + k_0.to_int()); } int p_0 = fp_product(GAIN.second, int(residual), 7); @@ -739,6 +817,7 @@ std::pair L1TMuonBarrelKalmanAlgo::chain(const L1MuKBMTCombi const L1MuKBMTCombinedStubRefVector& stubs) { L1MuKBMTrackCollection pretracks; std::vector combinatorics; + int seedQual; switch (seed->stNum()) { case 1: combinatorics = combos1_; @@ -760,7 +839,7 @@ std::pair L1TMuonBarrelKalmanAlgo::chain(const L1MuKBMTCombi } L1MuKBMTrack nullTrack(seed, correctedPhi(seed, seed->scNum()), correctedPhiB(seed)); - + seedQual = seed->quality(); for (const auto& mask : combinatorics) { L1MuKBMTrack track(seed, correctedPhi(seed, seed->scNum()), correctedPhiB(seed)); int phiB = correctedPhiB(seed); @@ -802,8 +881,16 @@ std::pair L1TMuonBarrelKalmanAlgo::chain(const L1MuKBMTCombi covariance(1, 2) = 0; covariance(2, 0) = 0; covariance(2, 1) = 0; - covariance(2, 2) = float(pointResolutionPhiB_); + if (!(mask == 3 || mask == 5 || mask == 9 || mask == 6 || mask == 10 || mask == 12)) + covariance(2, 2) = float(pointResolutionPhiB_); + else { + if (seed->quality() < 4) + covariance(2, 2) = float(pointResolutionPhiBL_[seed->stNum() - 1]); + else + covariance(2, 2) = float(pointResolutionPhiBH_[seed->stNum() - 1]); + } track.setCovariance(covariance); + // if (verbose_) { printf("New Kalman fit staring at step=%d, phi=%d,phiB=%d with curvature=%d\n", @@ -864,7 +951,7 @@ std::pair L1TMuonBarrelKalmanAlgo::chain(const L1MuKBMTCombi if (track.step() > 0) if (getBit(mask, track.step() - 1)) { std::pair bestStub = match(seed, stubs, track.step()); - if ((!bestStub.first) || (!update(track, stubs[bestStub.second], mask))) + if ((!bestStub.first) || (!update(track, stubs[bestStub.second], mask, seedQual))) break; if (verbose_) { printf("updated Coordinates step:%d,phi=%d,phiB=%d,K=%d\n", @@ -899,7 +986,7 @@ std::pair L1TMuonBarrelKalmanAlgo::chain(const L1MuKBMTCombi printf("------------------------------------------------------\n"); } setFloatingPointValues(track, true); - //rset the coordinates at muon to include phi at station 2 + //set the coordinates at muon to include phi at station 2 track.setCoordinatesAtMuon(track.curvatureAtMuon(), phiAtStation2, track.phiBAtMuon()); track.setRank(rank(track)); if (verbose_) @@ -908,6 +995,7 @@ std::pair L1TMuonBarrelKalmanAlgo::chain(const L1MuKBMTCombi } } } + //Now for all the pretracks we need only one L1MuKBMTrackCollection cleaned = clean(pretracks, seed->stNum()); @@ -935,7 +1023,8 @@ bool L1TMuonBarrelKalmanAlgo::estimateChiSquare(L1MuKBMTrack& track) { uint delta = wrapAround(abs(diff1 + AK), 2048); chi = chi + delta; if (verbose_) - printf("Chi Square stub for track with coords=%d -> AK=%d stubCoords=%d diff=%d delta=%d\n", + printf("Chi Square stub for track with pattern=%d coords=%d -> AK=%d stubCoords=%d diff=%d delta=%d\n", + track.hitPattern(), coords, AK, stubCoords, @@ -954,7 +1043,6 @@ bool L1TMuonBarrelKalmanAlgo::estimateChiSquare(L1MuKBMTrack& track) { // // } track.setApproxChi2(chi); - for (uint i = 0; i < chiSquareCutPattern_.size(); ++i) { if (track.hitPattern() == chiSquareCutPattern_[i] && fabs(K) < chiSquareCutCurv_[i] && track.approxChi2() > chiSquareCut_[i]) @@ -974,18 +1062,43 @@ void L1TMuonBarrelKalmanAlgo::estimateCompatibility(L1MuKBMTrack& track) { uint stubSel = 1; if (track.stubs()[0]->quality() > track.stubs()[1]->quality()) stubSel = 0; - const L1MuKBMTCombinedStubRef& stub = track.stubs()[stubSel]; - int absK = fabs(K); - int diff = wrapAround(stub->phiB() - fp_product(trackComp_[stub->stNum() - 1], K, 9), 2048); - int delta = fabs(diff); - uint err = - wrapAround(trackCompErr1_[stub->stNum() - 1] + fp_product(trackCompErr2_[stub->stNum() - 1], absK, 9), 256); - track.setTrackCompatibility(delta / err); + if (verbose_) { + printf("stubsel %d phi=%d phiB=%d\n", stubSel, stub->phi(), stub->phiB()); + } + + ap_ufixed absK; + if (K < 0) + absK = -K; + else + absK = K; + + ap_fixed<12, 12> diff = ap_int<10>(stub->phiB()) - + ap_ufixed<5, 1>(trackComp_[stub->stNum() - 1]) * ap_fixed(K); + ap_ufixed<11, 11> delta; + if (diff.is_neg()) + delta = -diff; + else + delta = diff; + + ap_ufixed err = + ap_uint<3>(trackCompErr1_[stub->stNum() - 1]) + ap_ufixed<5, 0>(trackCompErr2_[stub->stNum() - 1]) * absK; + track.setTrackCompatibility(((int)delta) / ((int)err)); for (uint i = 0; i < trackCompPattern_.size(); ++i) { - int deltaMax = err * trackCompCut_[i]; - if ((track.hitPattern() == trackCompPattern_[i]) && (absK < trackCompCutCurv_[i]) && + int deltaMax = ap_ufixed(err * trackCompCut_[i]); + if (verbose_) { + if (track.hitPattern() == trackCompPattern_[i]) { + printf("delta = %d = abs(%d - %f*%d\n", delta.to_int(), stub->phiB(), trackComp_[stub->stNum() - 1], K); + printf("err = %d = %f + %f*%d\n", + err.to_int(), + trackCompErr1_[stub->stNum() - 1], + trackCompErr2_[stub->stNum() - 1], + absK.to_int()); + printf("deltaMax = %d = %d*%d\n", deltaMax, err.to_int(), trackCompCut_[i]); + } + } + if ((track.hitPattern() == trackCompPattern_[i]) && ((int)absK < trackCompCutCurv_[i]) && ((track.approxChi2() > chiSquareCutTight_[i]) || (delta > deltaMax))) { track.setCoordinatesAtVertex(8191, track.phiAtVertex(), track.dxy()); break; @@ -996,8 +1109,9 @@ void L1TMuonBarrelKalmanAlgo::estimateCompatibility(L1MuKBMTrack& track) { int L1TMuonBarrelKalmanAlgo::rank(const L1MuKBMTrack& track) { // int offset=0; uint chi = track.approxChi2() > 127 ? 127 : track.approxChi2(); - if (hitPattern(track) == customBitmask(0, 0, 1, 1)) + if (hitPattern(track) == customBitmask(0, 0, 1, 1)) { return 60; + } // return offset+(track.stubs().size()*2+track.quality())*80-track.approxChi2(); return 160 + (track.stubs().size()) * 20 - chi; } @@ -1139,12 +1253,10 @@ int L1TMuonBarrelKalmanAlgo::ptLUT(int K) { FK = FK * lsb; //step 1 -material and B-field - FK = 0.898 * FK / (1.0 - 0.6 * FK); - //step 2 -low Pt - FK = FK - 26.382 * FK * FK * FK * FK * FK; - //step 3 - misalignment - FK = FK - charge * 1.408e-3; - //Get to BMTF + FK = .8569 * FK / (1.0 + 0.1144 * FK); + //step 2 - misalignment + FK = FK - charge * 1.23e-03; + //Get to BMTF scale FK = FK / 1.17; int pt = 0; @@ -1154,8 +1266,8 @@ int L1TMuonBarrelKalmanAlgo::ptLUT(int K) { if (pt > 511) pt = 511; - if (pt < 6) - pt = 6; + if (pt < 8) + pt = 8; return pt; } @@ -1191,7 +1303,7 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanAlgo::clean(const L1MuKBMTrackCollecti int sel2 = infoRank[5] >= infoRank[6] ? 5 : 6; selected = infoRank[7] >= infoRank[sel2] ? 7 : sel2; } - if (seed == 2) //station 3 seeded + if (seed == 2) //station 2 seeded selected = 3; auto search = infoTrack.find(selected); @@ -1227,7 +1339,6 @@ void L1TMuonBarrelKalmanAlgo::calculateEta(L1MuKBMTrack& track) { } mask = (awheel << nstubs) | mask; track.setCoarseEta(sign * lutService_->coarseEta(pattern, mask)); - int sumweights = 0; int sums = 0; @@ -1239,7 +1350,6 @@ void L1TMuonBarrelKalmanAlgo::calculateEta(L1MuKBMTrack& track) { sumweights += rank; sums += rank * stub->eta1(); } - //0.5 0.332031 0.25 0.199219 0.164063 float factor; if (sumweights == 1) @@ -1276,15 +1386,12 @@ int L1TMuonBarrelKalmanAlgo::phiAt2(const L1MuKBMTrack& track) { if (stub->stNum() == 2) return correctedPhi(stub, track.sector()); - int phi = track.phiAtMuon(); - int phiB = track.phiBAtMuon(); + ap_fixed phi = track.phiAtMuon(); + ap_fixed phiB = track.phiBAtMuon(); + ap_fixed phiAt2 = phiAt2_; + int phiNew = ap_fixed(phi + phiAt2 * phiB); - int phiNew = phi + fp_product(phiAt2_, phiB, 10); if (verbose_) printf("Phi at second station=%d\n", phiNew); - if (phiNew > 4095) - phiNew = 4095; - if (phiNew < -4096) - phiNew = -4096; return phiNew; } diff --git a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanLUTs.cc b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanLUTs.cc index 1dbaf3f353c3c..7dbed4fb1f88d 100644 --- a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanLUTs.cc +++ b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanLUTs.cc @@ -25,12 +25,33 @@ L1TMuonBarrelKalmanLUTs::L1TMuonBarrelKalmanLUTs(const std::string& filename) { lut_[14] = (TH1*)lutFile_->Get("gain_14_0"); lut_[15] = (TH1*)lutFile_->Get("gain_15_0"); - lut2_[3 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_3"); - lut2_[2 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_2"); - lut2_[2 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_2"); - lut2_[1 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_1"); - lut2_[1 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_1"); - lut2_[1 * 64 + 2] = (TH1*)lutFile_->Get("gain2_2_1"); + lut2HH_[3 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_3_HH"); + lut2HH_[2 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_2_HH"); + lut2HH_[2 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_2_HH"); + lut2HH_[1 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_1_HH"); + lut2HH_[1 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_1_HH"); + lut2HH_[1 * 64 + 2] = (TH1*)lutFile_->Get("gain2_2_1_HH"); + + lut2LH_[3 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_3_LH"); + lut2LH_[2 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_2_LH"); + lut2LH_[2 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_2_LH"); + lut2LH_[1 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_1_LH"); + lut2LH_[1 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_1_LH"); + lut2LH_[1 * 64 + 2] = (TH1*)lutFile_->Get("gain2_2_1_LH"); + + lut2HL_[3 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_3_HL"); + lut2HL_[2 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_2_HL"); + lut2HL_[2 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_2_HL"); + lut2HL_[1 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_1_HL"); + lut2HL_[1 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_1_HL"); + lut2HL_[1 * 64 + 2] = (TH1*)lutFile_->Get("gain2_2_1_HL"); + + lut2LL_[3 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_3_LL"); + lut2LL_[2 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_2_LL"); + lut2LL_[2 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_2_LL"); + lut2LL_[1 * 64 + 8] = (TH1*)lutFile_->Get("gain2_8_1_LL"); + lut2LL_[1 * 64 + 4] = (TH1*)lutFile_->Get("gain2_4_1_LL"); + lut2LL_[1 * 64 + 2] = (TH1*)lutFile_->Get("gain2_2_1_LL"); coarseEta_[3] = (TH1*)lutFile_->Get("coarseEta_3"); coarseEta_[5] = (TH1*)lutFile_->Get("coarseEta_5"); @@ -56,18 +77,29 @@ std::vector L1TMuonBarrelKalmanLUTs::trackGain(uint step, uint bitmask, u std::vector gain(4, 0.0); const TH1* h = lut_[64 * step + bitmask]; gain[0] = h->GetBinContent(K + 1); - gain[2] = -h->GetBinContent(1024 + K + 1); + gain[2] = h->GetBinContent(1024 + K + 1); return gain; } -std::vector L1TMuonBarrelKalmanLUTs::trackGain2(uint step, uint bitmask, uint K) { +std::vector L1TMuonBarrelKalmanLUTs::trackGain2(uint step, uint bitmask, uint K, uint qual1, uint qual2) { std::vector gain(4, 0.0); // printf("Track gain %d %d %d\n",step,bitmask,K); - const TH1* h = lut2_[64 * step + bitmask]; + const TH1* h; + if (qual1 < 4) { + if (qual2 < 4) + h = lut2LL_[64 * step + bitmask]; + else + h = lut2LH_[64 * step + bitmask]; + } else { + if (qual2 < 4) + h = lut2HL_[64 * step + bitmask]; + else + h = lut2HH_[64 * step + bitmask]; + } gain[0] = h->GetBinContent(K + 1); gain[1] = h->GetBinContent(512 + K + 1); - gain[2] = -h->GetBinContent(2 * 512 + K + 1); + gain[2] = h->GetBinContent(2 * 512 + K + 1); gain[3] = h->GetBinContent(3 * 512 + K + 1); return gain; } diff --git a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanRegionModule.cc b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanRegionModule.cc index 5b9095269f061..d2e25fe102a5a 100644 --- a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanRegionModule.cc +++ b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanRegionModule.cc @@ -80,6 +80,11 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::process(L1TMuonBarrelKal for (const auto& seed : seeds) { std::pair trackInfo = trackMaker->chain(seed, stubs); + //printf("Kalman Track %d valid=%d tag=%d rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",seed->stNum(),trackInfo.first, trackInfo.second.stubs()[0]->tag(),trackInfo.second.rank(),trackInfo.second.charge(),trackInfo.second.pt(),trackInfo.second.eta(),trackInfo.second.phi(),trackInfo.second.curvatureAtVertex(),trackInfo.second.curvatureAtMuon(),int(trackInfo.second.stubs().size()),trackInfo.second.approxChi2(),trackInfo.second.pt(),trackInfo.second.ptUnconstrained(),trackInfo.second.hitPattern()); + + L1MuKBMTrack nullTrack(seed, seed->phi(), 8 * seed->phiB()); + nullTrack.setPtEtaPhi(0, 0, 0); + nullTrack.setRank(0); if (trackInfo.first) { if (seed->stNum() == 2) pretracks2.push_back(trackInfo.second); @@ -87,18 +92,73 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::process(L1TMuonBarrelKal pretracks3.push_back(trackInfo.second); if (seed->stNum() == 4) pretracks4.push_back(trackInfo.second); + } else { + if (seed->stNum() == 2) + pretracks2.push_back(nullTrack); + if (seed->stNum() == 3) + pretracks3.push_back(nullTrack); + if (seed->stNum() == 4) + pretracks4.push_back(nullTrack); + } + } + L1MuKBMTrack nullTrack; + nullTrack.setPtEtaPhi(0, 0, 0); + nullTrack.setRank(0); + // All pretracks must have trackL and trackH like firmware + // Swap trackH and trackL for seeds 2/3 to mimic firmware + if (pretracks2.size() < 2) { + if (pretracks2.empty()) { // if no tracks, set trackH and trackL to null + pretracks2.push_back(nullTrack); + pretracks2.push_back(nullTrack); + } else { // otherwise add nulltrack for trackH or trackL + if (pretracks2[0].stubs()[0]->tag() == 0) + pretracks2.push_back(nullTrack); + else + pretracks2.insert(pretracks2.begin(), nullTrack); } } - //for (const auto& track1 :pretracks2) - // printf("SEED=2 Kalman Track charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + std::swap(pretracks2[0], pretracks2[1]); - //for (const auto& track1 :pretracks3) - // printf("SEED=3 Kalman Track charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + if (pretracks3.size() < 2) { + if (pretracks3.empty()) { + pretracks3.push_back(nullTrack); + pretracks3.push_back(nullTrack); + } else { + if (pretracks3[0].stubs()[0]->tag() == 0) + pretracks3.push_back(nullTrack); + else + pretracks3.insert(pretracks3.begin(), nullTrack); + } + } + std::swap(pretracks3[0], pretracks3[1]); - //for (const auto& track1 :pretracks4) - // printf("SEED=4 Kalman Track charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + if (pretracks4.size() < 2) { + if (pretracks4.empty()) { + pretracks4.push_back(nullTrack); + pretracks4.push_back(nullTrack); + } else { + if (pretracks4[0].stubs()[0]->tag() == 0) + pretracks4.push_back(nullTrack); + else + pretracks4.insert(pretracks4.begin(), nullTrack); + } + } + + /* + printf("SEED 2\n"); + for (const auto& track1 :pretracks2){ + printf(" Kalman Track rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + } + printf("SEED 3\n"); + for (const auto& track1 :pretracks3){ + printf(" Kalman Track rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + } + printf("SEED 4\n"); + for (const auto& track1 :pretracks4){ + printf(" Kalman Track rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + } + */ - // trackMaker->resolveEtaUnit(pretracks); L1MuKBMTrackCollection out = cleanRegion(pretracks2, pretracks3, pretracks4); if (verbose_) { printf(" -----Sector Processor Kalman Tracks-----\n"); @@ -123,24 +183,29 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::selfClean(const L1MuKBMT L1MuKBMTrackCollection out; for (uint i = 0; i < tracks.size(); ++i) { - bool keep = true; - + //bool keep = true; + L1MuKBMTrack temp = tracks[i]; for (uint j = 0; j < tracks.size(); ++j) { if (i == j) continue; if (tracks[i].overlapTrack(tracks[j])) { if (tracks[i].rank() < tracks[j].rank()) { - keep = false; + //keep = false; + temp.setPtEtaPhi(0, 0, 0); + temp.setRank(0); } else if (tracks[i].rank() == tracks[j].rank()) { //if same rank prefer seed that is high - if (!tracks[j].stubs()[0]->tag()) - keep = false; + if (!tracks[j].stubs()[0]->tag()) { + //keep = false; + temp.setPtEtaPhi(0, 0, 0); + temp.setRank(0); + } } } } - - if (keep) - out.push_back(tracks[i]); + out.push_back(temp); + //if (keep) + //out.push_back(tracks[i]); } return out; @@ -151,17 +216,20 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::cleanHigher(const L1MuKB L1MuKBMTrackCollection out; for (uint i = 0; i < tracks1.size(); ++i) { - bool keep = true; - + //bool keep = true; + L1MuKBMTrack temp = tracks1[i]; for (uint j = 0; j < tracks2.size(); ++j) { if (tracks1[i].overlapTrack(tracks2[j])) { if (tracks1[i].rank() <= tracks2[j].rank()) { - keep = false; + //keep = false; + temp.setPtEtaPhi(0, 0, 0); + temp.setRank(0); } } } - if (keep) - out.push_back(tracks1[i]); + out.push_back(temp); + //if (keep) + // out.push_back(tracks1[i]); } return out; @@ -172,17 +240,20 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::cleanLower(const L1MuKBM L1MuKBMTrackCollection out; for (uint i = 0; i < tracks1.size(); ++i) { - bool keep = true; - + //bool keep = true; + L1MuKBMTrack temp = tracks1[i]; for (uint j = 0; j < tracks2.size(); ++j) { if (tracks1[i].overlapTrack(tracks2[j])) { if (tracks1[i].rank() < tracks2[j].rank()) { - keep = false; + //keep = false; + temp.setPtEtaPhi(0, 0, 0); + temp.setRank(0); } } } - if (keep) - out.push_back(tracks1[i]); + out.push_back(temp); + //if (keep) + // out.push_back(tracks1[i]); } return out; @@ -191,6 +262,7 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::cleanLower(const L1MuKBM L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::sort4(const L1MuKBMTrackCollection& in) { L1MuKBMTrackCollection out; //partial sort like in firmwarE (bitonic) + if (in.size() <= 2) return in; else if (in.size() == 3) { @@ -268,7 +340,6 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::sort4(const L1MuKBMTrack out.push_back(s3_1); out.push_back(s3_2); } - return out; } @@ -281,32 +352,24 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::cleanRegion(const L1MuKB L1MuKBMTrackCollection cleaned23 = cleanHigher(cleaned2, tracks3); L1MuKBMTrackCollection cleaned32 = cleanLower(cleaned3, tracks2); - //printf("Cleaned sizes = 2=%d 3=%d 23=%d 32=%d \n",int(cleaned2.size()),int(cleaned3.size()),int(cleaned23.size()),int(cleaned32.size())); - //merge 2,3 L1MuKBMTrackCollection step1; - - if (!cleaned32.empty()) - step1.insert(step1.end(), cleaned32.begin(), cleaned32.end()); if (!cleaned23.empty()) step1.insert(step1.end(), cleaned23.begin(), cleaned23.end()); + if (!cleaned32.empty()) + step1.insert(step1.end(), cleaned32.begin(), cleaned32.end()); //take the best 2 L1MuKBMTrackCollection sorted23 = sort4(step1); - // printf("Sorted 23 =%d\n",int(sorted23.size())); //Now clean the tracks 4 between them L1MuKBMTrackCollection cleaned4 = selfClean(tracks4); - // printf("Cleaned4 =%d\n",int(cleaned4.size())); //Now clean the 23 tracks from tracks4 L1MuKBMTrackCollection cleanedSorted23 = cleanHigher(sorted23, tracks4); - // printf("Cleaned23 from 4 =%d\n",int(cleanedSorted23.size())); - //Now clean the tracks4 from sorted 23 L1MuKBMTrackCollection cleanedSorted4 = cleanLower(cleaned4, sorted23); - // printf("Cleaned4 from 23 =%d\n",int(cleanedSorted4.size())); //Now merge all of those L1MuKBMTrackCollection step2; @@ -317,5 +380,23 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanRegionModule::cleanRegion(const L1MuKB step2.insert(step2.end(), cleanedSorted23.begin(), cleanedSorted23.end()); L1MuKBMTrackCollection out = sort4(step2); + // Verbose statements: + /* + printf("tracks 1-4\n"); + for (const auto& track1 :step1) + printf(" rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + + printf("sorted1\n"); + for (const auto& track1 :sorted23) + printf(" rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + + printf("track 5-8\n"); + for (const auto& track1 :step2) + printf(" rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + + printf("OUTPUT\n"); + for (const auto& track1 :out) + printf(" rank=%d charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d chi2=%d pts=%f %f pattern=%d\n",track1.rank(),track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.approxChi2(),track1.pt(),track1.ptUnconstrained(),track1.hitPattern()); + */ return out; } diff --git a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanSectorProcessor.cc b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanSectorProcessor.cc index 9c28428153de5..66878bca1c5d7 100644 --- a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanSectorProcessor.cc +++ b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanSectorProcessor.cc @@ -223,6 +223,7 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::cleanNeighbor(const L L1MuKBMTrackCollection out; for (const auto& track1 : coll1) { + /* if (verbose_) printf( "Pre Track charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d bitmask=%d rank=%d chi=%d " @@ -239,7 +240,7 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::cleanNeighbor(const L track1.approxChi2(), track1.pt(), track1.ptUnconstrained()); - + */ bool keep = true; for (const auto& track2 : coll2) { if (!track1.overlapTrack(track2)) @@ -253,6 +254,12 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::cleanNeighbor(const L } if (keep) out.push_back(track1); + else { + L1MuKBMTrack temp = track1; + temp.setPtEtaPhi(0, 0, 0); + temp.setRank(0); + out.push_back(temp); + } } return out; @@ -292,6 +299,12 @@ L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::cleanNeighbors(const if (keep) out.push_back(track1); + else { + L1MuKBMTrack temp = track1; + temp.setPtEtaPhi(0, 0, 0); + temp.setRank(0); + out.push_back(temp); + } } return out; diff --git a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanStubProcessor.cc b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanStubProcessor.cc index 394c0ff6d6890..bc2c52d5dffd7 100644 --- a/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanStubProcessor.cc +++ b/L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanStubProcessor.cc @@ -301,7 +301,8 @@ void L1TMuonBarrelKalmanStubProcessor::makeInputPattern(const L1MuDTChambPhConta } else { os << "-2048 0 0 0 15 "; } - const L1MuDTChambPhDigi* seg8 = phiContainer->chPhiSegm2(wheel, 4, previousSector, 1); + //const L1MuDTChambPhDigi* seg8 = phiContainer->chPhiSegm2(wheel, 4, previousSector, 1); + const L1MuDTChambPhDigi* seg8 = phiContainer->chPhiSegm2(wheel, 4, previousSector, -1); if (seg8 && seg8->phi() > 111) { os << seg8->phi() - 2144 << " " << seg8->phiB() << " " << seg8->code() << " 1 5 "; } else { diff --git a/L1Trigger/L1TMuonBarrel/test/kalmanTools/createGains.py b/L1Trigger/L1TMuonBarrel/test/kalmanTools/createGains.py index 9290cccd48103..494d26ca700ab 100644 --- a/L1Trigger/L1TMuonBarrel/test/kalmanTools/createGains.py +++ b/L1Trigger/L1TMuonBarrel/test/kalmanTools/createGains.py @@ -20,8 +20,9 @@ def fetchKMTF(event,etaMax=0.83,chi2=800000,dxyCut=100000): ####Save the Kalman Gains for LUTs kalmanGain={} +kalmanGain2H={} +kalmanGain2L={} kalmanGain2={} - for track in [3,5,6,7,9,10,11,12,13,14,15]: for station in [3,2,1]: if getBit(track,station-1)==0: @@ -33,18 +34,27 @@ def fetchKMTF(event,etaMax=0.83,chi2=800000,dxyCut=100000): if track in [3,5,6,9,10,12]: if not (partialMask in kalmanGain2.keys()): kalmanGain2[partialMask] = {} - kalmanGain2[partialMask][station] = {} + if not (partialMask in kalmanGain2H.keys()): + kalmanGain2H[partialMask] = {} + if not (partialMask in kalmanGain2L.keys()): + kalmanGain2L[partialMask] = {} + kalmanGain2[partialMask][station]={} + for q1 in ['H', 'L']: + kalmanGain2[partialMask][station][q1]={} + for q2 in ['H', 'L']: + kalmanGain2[partialMask][station][q1][q2]={} + + kalmanGain2[partialMask][station][q1][q2][0]=ROOT.TH2D("gain2_{track}_{station}_0_{q1}{q2}".format(track=partialMask,station=station,q1=q1,q2=q2),"h",64,0,512,256*2,-100*2,100*2) + kalmanGain2[partialMask][station][q1][q2][1]=ROOT.TH2D("gain2_{track}_{station}_1_{q1}{q2}".format(track=partialMask,station=station,q1=q1,q2=q2),"h",64,0,512,256*4,-8*4,8*4) + kalmanGain2[partialMask][station][q1][q2][4]=ROOT.TH2D("gain2_{track}_{station}_4_{q1}{q2}".format(track=partialMask,station=station,q1=q1,q2=q2),"h",64,0,512,256*2,-15*2,0) + kalmanGain2[partialMask][station][q1][q2][5]=ROOT.TH2D("gain2_{track}_{station}_5_{q1}{q2}".format(track=partialMask,station=station,q1=q1,q2=q2),"h",64,0,512,256*2,0,1*2) - kalmanGain2[partialMask][station][0]=ROOT.TH2D("gain2_{track}_{station}_0".format(track=partialMask,station=station),"h",64,0,512,128,-100,100) - kalmanGain2[partialMask][station][1]=ROOT.TH2D("gain2_{track}_{station}_1".format(track=partialMask,station=station),"h",64,0,512,128,-8,8) - kalmanGain2[partialMask][station][4]=ROOT.TH2D("gain2_{track}_{station}_4".format(track=partialMask,station=station),"h",64,0,512,128,-15,0) - kalmanGain2[partialMask][station][5]=ROOT.TH2D("gain2_{track}_{station}_5".format(track=partialMask,station=station),"h",64,0,512,128,0,1) else: if not (partialMask in kalmanGain.keys()): kalmanGain[partialMask] = {} kalmanGain[partialMask][station] = {} - kalmanGain[partialMask][station][0]=ROOT.TH2D("gain_{track}_{station}_0".format(track=partialMask,station=station),"h",64,0,1024,128,-100,100) - kalmanGain[partialMask][station][4]=ROOT.TH2D("gain_{track}_{station}_4".format(track=partialMask,station=station),"h",64,0,1024,128,-15,0) + kalmanGain[partialMask][station][0]=ROOT.TH2D("gain_{track}_{station}_0".format(track=partialMask,station=station),"h",64,0,1024,256,-100,100) + kalmanGain[partialMask][station][4]=ROOT.TH2D("gain_{track}_{station}_4".format(track=partialMask,station=station),"h",64,0,1024,256,-15,0) for station in [0]: @@ -60,37 +70,44 @@ def fetchKMTF(event,etaMax=0.83,chi2=800000,dxyCut=100000): - -events=Events(['lutEvents.root']) -counter=-1 -for event in events: - counter=counter+1 - #fetch stubs - kmtf=[] - kmtf = fetchKMTF(event,1.5,1000000,1000000) - ##Fill histograms and rates - for track in kmtf: - mask = track.hitPattern() - for station in [3,2,1]: - if not getBit(mask,station-1): - continue - gain = track.kalmanGain(station) - partialMask = mask & (15<= 4: + q1='H' + for station in [3,2,1]: + if not getBit(mask,station-1): + continue + gain = track.kalmanGain(station) + partialMask = mask & (15<= 4: + q2 = 'H' + if mask in [3,5,6,9,10,12]: + for element in [0,1,4,5]: + kalmanGain2[partialMask][station][q1][q2][element].Fill(gain[0]/8,gain[element+1]) + else: + for element in [0,4]: + kalmanGain[partialMask][station][element].Fill(gain[0]/4,gain[element+1]) + + for station in [0]: + gain = track.kalmanGain(station) + kalmanGain[mask][station][0].Fill(gain[0]/2,gain[1]) + kalmanGain[mask][station][1].Fill(gain[0]/2,gain[2]) f=ROOT.TFile("gains.root","RECREATE") @@ -103,10 +120,10 @@ def fetchKMTF(event,etaMax=0.83,chi2=800000,dxyCut=100000): for k in kalmanGain2.keys(): for s in kalmanGain2[k].keys(): - for e in kalmanGain2[k][s].keys(): - kalmanGain2[k][s][e].Write() - - + for q1 in kalmanGain2[k][s].keys(): + for q2 in kalmanGain2[k][s][q1].keys(): + for e in kalmanGain2[k][s][q1][q2].keys(): + kalmanGain2[k][s][q1][q2][e].Write() f.Close() diff --git a/L1Trigger/L1TMuonBarrel/test/kalmanTools/packGainsLUT.py b/L1Trigger/L1TMuonBarrel/test/kalmanTools/packGainsLUT.py index 89bb3f9fe4e47..56bf7991cdca3 100644 --- a/L1Trigger/L1TMuonBarrel/test/kalmanTools/packGainsLUT.py +++ b/L1Trigger/L1TMuonBarrel/test/kalmanTools/packGainsLUT.py @@ -16,12 +16,14 @@ def pack(f,fout,station,code): def pack2(f,fout,station,code): fout.cd() - newH=ROOT.TH1D("gain2_{code}_{station}".format(station=station,code=code),"h",4*512,0,4*512) - for N,i in enumerate([0,1,4,5]): - h=f.Get("G2_{code}_{station}_{i}".format(station=station,code=code,i=i)) - for j in range(1,h.GetNbinsX()+1): - newH.SetBinContent(N*512+j,h.GetBinContent(j)) - newH.Write() + for q1 in ['H', 'L']: + for q2 in ['H', 'L']: + newH=ROOT.TH1D("gain2_{code}_{station}_{q1}{q2}".format(station=station,code=code,q1=q1,q2=q2),"h",4*512,0,4*512) + for N,i in enumerate([0,1,4,5]): + h=f.Get("G2_{code}_{station}_{i}_{q1}{q2}".format(station=station,code=code,i=i,q1=q1,q2=q2)) + for j in range(1,h.GetNbinsX()+1): + newH.SetBinContent(N*512+j,h.GetBinContent(j)) + newH.Write() def packV(f,fout,code): diff --git a/L1Trigger/L1TMuonBarrel/test/kalmanTools/parseGainsLUT.py b/L1Trigger/L1TMuonBarrel/test/kalmanTools/parseGainsLUT.py index 3e0f1bf66327c..3cef39ee57b0b 100644 --- a/L1Trigger/L1TMuonBarrel/test/kalmanTools/parseGainsLUT.py +++ b/L1Trigger/L1TMuonBarrel/test/kalmanTools/parseGainsLUT.py @@ -1,18 +1,20 @@ import ROOT +ROOT.gROOT.SetBatch(True) - -def generate(tfile,name,outname,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=1): +def generate(tfile,name,outname,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=1,rebin=False): xaxis=ROOT.TAxis(512*factor,0,512*factor) axis=ROOT.TAxis(bins,mini,maxi) h=tfile.Get(name) + if rebin: + h.Rebin() histo = h.ProfileX().ProjectionX() for i in range(1,h.GetNbinsX()+1): proj = h.ProjectionY("q",i,i) mean=proj.GetMean() rms = proj.GetRMS() - if proj.Integral()>100: + if proj.Integral()>15: histo.SetBinContent(i,mean) histo.SetBinError(i,rms) else: @@ -34,11 +36,10 @@ def generate(tfile,name,outname,bins,mini,maxi,zeroSup=False,constant=-1,absol=F N=N+1 else: g = ROOT.TGraphErrors(histo) - x1=ROOT.Double_t(0.0) - y1=ROOT.Double_t(0.0) + x1=ROOT.Double(0.0) + y1=ROOT.Double(0.0) g.GetPoint(g.GetN()-1,x1,y1) lastx=x1 - newH = ROOT.TH1D(outname,outname,512*factor,0,512*factor) for i in range(1,xaxis.GetNbins()+1): x = xaxis.GetBinLowEdge(i) @@ -51,37 +52,47 @@ def generate(tfile,name,outname,bins,mini,maxi,zeroSup=False,constant=-1,absol=F if absol: content=abs(content) intCont = axis.GetBinLowEdge(axis.FindBin(content)) - newH.SetBinContent(i,intCont) - + newH.SetBinContent(i,round(content,5)) + c1 = ROOT.TCanvas("temp", "", 600, 600) + newH.Draw("p") + histo.Draw("same") + newH.GetYaxis().SetRangeUser(min(newH.GetMinimum(), histo.GetMinimum())-.1, max(newH.GetMaximum(), histo.GetMaximum())+.1) + c1.SaveAs(outname+".png") return newH,h.ProfileX().ProjectionX(outname+'_orig') - + def printLUT(h,f,name,N): typ = 'updateLUT'+name[-1]+'_t' arr=[] for i in range(1,h.GetNbinsX()+1): - arr.append(str(h.GetBinContent(i))) + arr.append("{}".format(h.GetBinContent(i))) st = "const "+typ+" "+name+"["+str(N)+"]={"+','.join(arr)+"};\n" f.write(st) + +def printLUT2(h,f,name,N): + typ = 'update2LUT'+name[-4]+"_t" + arr=[] + if name[-2]=="L": + st = "const "+typ+" "+name+"={}".format(h.GetBinContent(1))+";\n" + f.write(st) + else: + for i in range(1,h.GetNbinsX()+1): + arr.append("{}".format(h.GetBinContent(i))) + st = "const "+typ+" "+name+"["+str(N)+"]={"+','.join(arr)+"};\n" + f.write(st) + def printLUTV(h,f,name,N): typ = 'updateLUTV'+name[-1]+'_t' arr=[] for i in range(1,h.GetNbinsX()+1): - arr.append(str(h.GetBinContent(i))) + arr.append("{}".format(h.GetBinContent(i))) st = "const "+typ+" "+name+"["+str(N)+"]={"+','.join(arr)+"};\n" f.write(st) fileio=open("gainLUTs.h","w") -fileio.write('#include "ap_fixed.h"\n') -fileio.write('typedef ap_ufixed<9,6> updateLUT0_t;\n') -fileio.write('typedef ap_ufixed<9,4> updateLUT4_t;\n') -fileio.write('typedef ap_fixed<9,4> updateLUT1_t;\n') -fileio.write('typedef ap_ufixed<9,8> updateLUT5_t;\n') -fileio.write('typedef ap_ufixed<9,2> updateLUTV0_t;\n') -fileio.write('typedef ap_ufixed<9,2> updateLUTV1_t;\n'); - +fileio.write('#include common.h\n') f=ROOT.TFile("gains.root") @@ -89,46 +100,46 @@ def printLUTV(h,f,name,N): fout.cd() -def parse(fileio,f,fout,ele,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=1): +def parse(fileio,f,fout,ele,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=1,rebin=False): fout.cd() stele=str(ele) - h,hO=generate(f,"gain_8_3_"+stele,"G_8_3_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_8_3_"+stele,"G_8_3_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_1000_3_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_8_2_"+stele,"G_8_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_8_2_"+stele,"G_8_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_1000_2_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_12_2_"+stele,"G_12_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_12_2_"+stele,"G_12_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_1100_2_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_12_1_"+stele,"G_12_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_12_1_"+stele,"G_12_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_1100_1_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_4_2_"+stele,"G_4_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_4_2_"+stele,"G_4_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_0100_2_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_10_1_"+stele,"G_10_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_10_1_"+stele,"G_10_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_1010_1_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_6_1_"+stele,"G_6_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_6_1_"+stele,"G_6_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_0110_1_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_14_1_"+stele,"G_14_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_14_1_"+stele,"G_14_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUT(h,fileio,"gain_1110_1_"+stele,1024) h.Write() hO.Write() @@ -138,100 +149,104 @@ def parse(fileio,f,fout,ele,bins,mini,maxi,zeroSup=False,constant=-1,absol=False def parse2(fileio,f,fout,ele,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=1): fout.cd() stele=str(ele) - h,hO=generate(f,"gain2_8_3_"+stele,"G2_8_3_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) - printLUT(h,fileio,"gain2_1000_3_"+stele,512) - h.Write() - hO.Write() + for q1 in ['H', 'L']: + for q2 in ['H', 'L']: + stele = str(ele) + stele = stele+"_"+q1+q2 + h,hO=generate(f,"gain2_8_3_"+stele,"G2_8_3_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + printLUT2(h,fileio,"gain2_1000_3_"+stele,512) + h.Write() + hO.Write() - h,hO=generate(f,"gain2_8_2_"+stele,"G2_8_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) - printLUT(h,fileio,"gain2_1000_2_"+stele,512) - h.Write() - hO.Write() + h,hO=generate(f,"gain2_8_2_"+stele,"G2_8_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + printLUT2(h,fileio,"gain2_1000_2_"+stele,512) + h.Write() + hO.Write() - h,hO=generate(f,"gain2_8_1_"+stele,"G2_8_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) - printLUT(h,fileio,"gain2_1000_1_"+stele,512) - h.Write() - hO.Write() + h,hO=generate(f,"gain2_8_1_"+stele,"G2_8_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + printLUT2(h,fileio,"gain2_1000_1_"+stele,512) + h.Write() + hO.Write() - h,hO=generate(f,"gain2_4_2_"+stele,"G2_4_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) - printLUT(h,fileio,"gain2_0100_2_"+stele,512) - h.Write() - hO.Write() + h,hO=generate(f,"gain2_4_2_"+stele,"G2_4_2_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + printLUT2(h,fileio,"gain2_0100_2_"+stele,512) + h.Write() + hO.Write() - h,hO=generate(f,"gain2_4_1_"+stele,"G2_4_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) - printLUT(h,fileio,"gain2_0100_1_"+stele,512) - h.Write() - hO.Write() + h,hO=generate(f,"gain2_4_1_"+stele,"G2_4_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + printLUT2(h,fileio,"gain2_0100_1_"+stele,512) + h.Write() + hO.Write() - h,hO=generate(f,"gain2_2_1_"+stele,"G2_2_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) - printLUT(h,fileio,"gain2_0010_1_"+stele,512) - h.Write() - hO.Write() + h,hO=generate(f,"gain2_2_1_"+stele,"G2_2_1_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + printLUT2(h,fileio,"gain2_0010_1_"+stele,512) + h.Write() + hO.Write() -def parseV(fileio,f,fout,ele,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=2): +def parseV(fileio,f,fout,ele,bins,mini,maxi,zeroSup=False,constant=-1,absol=False,factor=2,rebin=False): fout.cd() stele=str(ele) - h,hO=generate(f,"gain_15_0_"+stele,"G_15_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_15_0_"+stele,"G_15_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1111_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_14_0_"+stele,"G_14_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_14_0_"+stele,"G_14_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1110_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_13_0_"+stele,"G_13_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_13_0_"+stele,"G_13_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1101_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_12_0_"+stele,"G_12_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_12_0_"+stele,"G_12_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1100_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_11_0_"+stele,"G_11_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_11_0_"+stele,"G_11_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1011_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_10_0_"+stele,"G_10_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_10_0_"+stele,"G_10_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1010_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_9_0_"+stele,"G_9_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_9_0_"+stele,"G_9_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_1001_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_7_0_"+stele,"G_7_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_7_0_"+stele,"G_7_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_0111_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_6_0_"+stele,"G_6_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_6_0_"+stele,"G_6_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_0110_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_5_0_"+stele,"G_5_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_5_0_"+stele,"G_5_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_0101_0_"+stele,1024) h.Write() hO.Write() - h,hO=generate(f,"gain_3_0_"+stele,"G_3_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor) + h,hO=generate(f,"gain_3_0_"+stele,"G_3_0_"+stele,bins,mini,maxi,zeroSup,constant,absol,factor,rebin) printLUTV(h,fileio,"gain_0011_0_"+stele,1024) h.Write() hO.Write() -parse(fileio,f,fout,0,512,0,64,True,-1,False,2) -parse(fileio,f,fout,4,512,0,16,True,-1,True,2) +parse(fileio,f,fout,0,512*2,0,64*2,True,-1,False,2,False) +parse(fileio,f,fout,4,512,0,16,True,-1,True,2,False) parse2(fileio,f,fout,0,512,0,64,True,-1,False,1) -parse2(fileio,f,fout,1,512,-8,8,True,-1,False,1) +parse2(fileio,f,fout,1,512,-8,8,True,-1,True,1) parse2(fileio,f,fout,4,512,0,16,True,-1,True,1) parse2(fileio,f,fout,5,512,0,1,True,-1,False,1) -parseV(fileio,f,fout,0,512,0,4,True,700,True,2) -parseV(fileio,f,fout,1,512,0,4,True,700,True,2) +parseV(fileio,f,fout,0,512,0,4,True,-1,True,2,True) +parseV(fileio,f,fout,1,512,0,4,True,-1,True,2,True) fout.Close() f.Close() diff --git a/L1Trigger/L1TNtuples/BuildFile.xml b/L1Trigger/L1TNtuples/BuildFile.xml index 0cb4edde586d8..b835d4e19b0fa 100644 --- a/L1Trigger/L1TNtuples/BuildFile.xml +++ b/L1Trigger/L1TNtuples/BuildFile.xml @@ -17,6 +17,7 @@ + diff --git a/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuon.h b/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuon.h index c4478755446b2..9a2329caf3034 100644 --- a/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuon.h +++ b/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuon.h @@ -11,12 +11,17 @@ namespace L1Analysis { enum { TEST = 0 }; L1AnalysisL1UpgradeTfMuon(); ~L1AnalysisL1UpgradeTfMuon(); - void Reset() { l1upgradetfmuon_.Reset(); } + void Reset() { + l1upgradetfmuon_.Reset(); + isKalman_ = false; + } + void SetKalmanMuon() { isKalman_ = true; } void SetTfMuon(const l1t::RegionalMuonCandBxCollection& muon, unsigned maxL1UpgradeTfMuon); L1AnalysisL1UpgradeTfMuonDataFormat* getData() { return &l1upgradetfmuon_; } private: L1AnalysisL1UpgradeTfMuonDataFormat l1upgradetfmuon_; + bool isKalman_{false}; }; } // namespace L1Analysis #endif diff --git a/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuonDataFormat.h b/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuonDataFormat.h index eb1105d2ff8b3..c2281c626c7c3 100644 --- a/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuonDataFormat.h +++ b/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeTfMuonDataFormat.h @@ -13,6 +13,8 @@ namespace L1Analysis { void Reset() { nTfMuons = 0; tfMuonHwPt.clear(); + tfMuonHwPtUnconstrained.clear(); + tfMuonHwDxy.clear(); tfMuonHwEta.clear(); tfMuonHwPhi.clear(); tfMuonGlobalPhi.clear(); @@ -32,6 +34,8 @@ namespace L1Analysis { unsigned short int nTfMuons; std::vector tfMuonHwPt; + std::vector tfMuonHwPtUnconstrained; + std::vector tfMuonHwDxy; std::vector tfMuonHwEta; std::vector tfMuonHwPhi; std::vector tfMuonGlobalPhi; diff --git a/L1Trigger/L1TNtuples/plugins/L1UpgradeTfMuonTreeProducer.cc b/L1Trigger/L1TNtuples/plugins/L1UpgradeTfMuonTreeProducer.cc index f410ea0a7f50b..05a8685e7a60d 100644 --- a/L1Trigger/L1TNtuples/plugins/L1UpgradeTfMuonTreeProducer.cc +++ b/L1Trigger/L1TNtuples/plugins/L1UpgradeTfMuonTreeProducer.cc @@ -27,8 +27,14 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" // data formats +#include "DataFormats/FEDRawData/interface/FEDHeader.h" #include "DataFormats/L1TMuon/interface/RegionalMuonCand.h" +// Needed to get BMTF firmware version +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "EventFilter/L1TRawToDigi/interface/AMC13Spec.h" +#include "EventFilter/L1TRawToDigi/interface/Block.h" + // ROOT output stuff #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" @@ -52,17 +58,20 @@ class L1UpgradeTfMuonTreeProducer : public edm::EDAnalyzer { void endJob() override; public: + L1Analysis::L1AnalysisL1UpgradeTfMuon l1UpgradeKBmtf; L1Analysis::L1AnalysisL1UpgradeTfMuon l1UpgradeBmtf; L1Analysis::L1AnalysisL1UpgradeTfMuon l1UpgradeOmtf; L1Analysis::L1AnalysisL1UpgradeTfMuon l1UpgradeEmtf; L1Analysis::L1AnalysisBMTFInputs l1UpgradeBmtfInputs; L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat* l1UpgradeBmtfData; + L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat* l1UpgradeKBmtfData; L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat* l1UpgradeOmtfData; L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat* l1UpgradeEmtfData; L1Analysis::L1AnalysisBMTFInputsDataFormat* l1UpgradeBmtfInputsData; private: unsigned maxL1UpgradeTfMuon_; + bool isEMU_; // output file edm::Service fs_; @@ -71,22 +80,32 @@ class L1UpgradeTfMuonTreeProducer : public edm::EDAnalyzer { TTree* tree_; // EDM input tags + edm::EDGetTokenT fedToken_; edm::EDGetTokenT bmtfMuonToken_; + edm::EDGetTokenT bmtf2MuonToken_; edm::EDGetTokenT omtfMuonToken_; edm::EDGetTokenT emtfMuonToken_; edm::EDGetTokenT bmtfPhInputToken_; edm::EDGetTokenT bmtfThInputToken_; + + // EDM handles + edm::Handle feds_; + + unsigned getAlgoFwVersion(); }; L1UpgradeTfMuonTreeProducer::L1UpgradeTfMuonTreeProducer(const edm::ParameterSet& iConfig) { + isEMU_ = iConfig.getParameter("isEMU"); + fedToken_ = consumes(iConfig.getParameter("feds")); bmtfMuonToken_ = consumes(iConfig.getUntrackedParameter("bmtfMuonToken")); + bmtf2MuonToken_ = + consumes(iConfig.getUntrackedParameter("bmtf2MuonToken")); omtfMuonToken_ = consumes(iConfig.getUntrackedParameter("omtfMuonToken")); emtfMuonToken_ = consumes(iConfig.getUntrackedParameter("emtfMuonToken")); - bmtfPhInputToken_ = consumes(iConfig.getUntrackedParameter("bmtfInputPhMuonToken")); bmtfThInputToken_ = @@ -95,6 +114,7 @@ L1UpgradeTfMuonTreeProducer::L1UpgradeTfMuonTreeProducer(const edm::ParameterSet maxL1UpgradeTfMuon_ = iConfig.getParameter("maxL1UpgradeTfMuon"); l1UpgradeBmtfData = l1UpgradeBmtf.getData(); + l1UpgradeKBmtfData = l1UpgradeKBmtf.getData(); l1UpgradeOmtfData = l1UpgradeOmtf.getData(); l1UpgradeEmtfData = l1UpgradeEmtf.getData(); l1UpgradeBmtfInputsData = l1UpgradeBmtfInputs.getData(); @@ -102,6 +122,7 @@ L1UpgradeTfMuonTreeProducer::L1UpgradeTfMuonTreeProducer(const edm::ParameterSet // set up output tree_ = fs_->make("L1UpgradeTfMuonTree", "L1UpgradeTfMuonTree"); tree_->Branch("L1UpgradeBmtfMuon", "L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat", &l1UpgradeBmtfData, 32000, 3); + tree_->Branch("L1UpgradeKBmtfMuon", "L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat", &l1UpgradeKBmtfData, 32000, 3); tree_->Branch("L1UpgradeOmtfMuon", "L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat", &l1UpgradeOmtfData, 32000, 3); tree_->Branch("L1UpgradeEmtfMuon", "L1Analysis::L1AnalysisL1UpgradeTfMuonDataFormat", &l1UpgradeEmtfData, 32000, 3); @@ -117,18 +138,42 @@ L1UpgradeTfMuonTreeProducer::~L1UpgradeTfMuonTreeProducer() {} // ------------ method called to for each event ------------ void L1UpgradeTfMuonTreeProducer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + edm::EDGetTokenT legacybmtfMuonToken; + edm::EDGetTokenT kbmtfMuonToken; + if (isEMU_) { + legacybmtfMuonToken = bmtfMuonToken_; + kbmtfMuonToken = bmtf2MuonToken_; + } else { + iEvent.getByToken(fedToken_, feds_); + // Get fw version + unsigned algoFwVersion{getAlgoFwVersion()}; + if (algoFwVersion < 2499805536) { //95000160(hex) + // Legacy was triggering (and therefore in the main collection) + legacybmtfMuonToken = bmtfMuonToken_; + kbmtfMuonToken = bmtf2MuonToken_; + } else { + // kBMTF was triggering + legacybmtfMuonToken = bmtf2MuonToken_; + kbmtfMuonToken = bmtfMuonToken_; + } + } + l1UpgradeBmtf.Reset(); + l1UpgradeKBmtf.Reset(); + l1UpgradeKBmtf.SetKalmanMuon(); l1UpgradeOmtf.Reset(); l1UpgradeEmtf.Reset(); l1UpgradeBmtfInputs.Reset(); edm::Handle bmtfMuon; + edm::Handle kbmtfMuon; edm::Handle omtfMuon; edm::Handle emtfMuon; edm::Handle bmtfPhInputs; edm::Handle bmtfThInputs; - iEvent.getByToken(bmtfMuonToken_, bmtfMuon); + iEvent.getByToken(legacybmtfMuonToken, bmtfMuon); + iEvent.getByToken(kbmtfMuonToken, kbmtfMuon); iEvent.getByToken(omtfMuonToken_, omtfMuon); iEvent.getByToken(emtfMuonToken_, emtfMuon); iEvent.getByToken(bmtfPhInputToken_, bmtfPhInputs); @@ -140,6 +185,12 @@ void L1UpgradeTfMuonTreeProducer::analyze(const edm::Event& iEvent, const edm::E edm::LogWarning("MissingProduct") << "L1Upgrade BMTF muons not found. Branch will not be filled" << std::endl; } + if (kbmtfMuon.isValid()) { + l1UpgradeKBmtf.SetTfMuon(*kbmtfMuon, maxL1UpgradeTfMuon_); + } else { + edm::LogWarning("MissingProduct") << "L1Upgrade kBMTF muons not found. Branch will not be filled" << std::endl; + } + if (omtfMuon.isValid()) { l1UpgradeOmtf.SetTfMuon(*omtfMuon, maxL1UpgradeTfMuon_); } else { @@ -173,5 +224,50 @@ void L1UpgradeTfMuonTreeProducer::beginJob(void) {} // ------------ method called once each job just after ending the event loop ------------ void L1UpgradeTfMuonTreeProducer::endJob() {} +unsigned L1UpgradeTfMuonTreeProducer::getAlgoFwVersion() { + int nonEmptyFed = 0; + if (feds_->FEDData(1376).size() > 0) + nonEmptyFed = 1376; + else if (feds_->FEDData(1377).size() > 0) + nonEmptyFed = 1377; + else { + edm::LogError("L1UpgradeTfMuonTreeProducer") + << "Both BMTF feds (1376, 1377) seem empty, will lead to unexpected results in tree from data."; + return 0; + } + + const FEDRawData& l1tRcd = feds_->FEDData(nonEmptyFed); + edm::LogInfo("L1UpgradeTfMuonTreeProducer") << "L1T Rcd taken from the FEDData."; + edm::LogInfo("L1UpgradeTfMuonTreeProducer") << "l1tRcd.size=" << l1tRcd.size() << " for fed:" << nonEmptyFed; + + const unsigned char* data = l1tRcd.data(); + FEDHeader header(data); + + amc13::Packet packet; + if (!packet.parse((const uint64_t*)data, + (const uint64_t*)(data + 8), + (l1tRcd.size()) / 8, + header.lvl1ID(), + header.bxID(), + false, + false)) { + edm::LogError("L1UpgradeTfMuonTreeProducer") << "Could not extract AMC13 Packet."; + return 0; + } + + if (!packet.payload().empty()) { + auto payload64 = (packet.payload().at(0)).data(); + const uint32_t* start = (const uint32_t*)payload64.get(); + const uint32_t* end = start + (packet.payload().at(0).size() * 2); + + l1t::MP7Payload payload(start, end, false); + return payload.getAlgorithmFWVersion(); + + } else { + edm::LogError("L1UpgradeTfMuonTreeProducer") << "AMC13 payload is empty, cannot extract AMC13 Packet."; + return 0; + } +} + //define this as a plug-in DEFINE_FWK_MODULE(L1UpgradeTfMuonTreeProducer); diff --git a/L1Trigger/L1TNtuples/python/L1NtupleEMU_cff.py b/L1Trigger/L1TNtuples/python/L1NtupleEMU_cff.py index 19183e9d5b011..91adaa1b0b6ab 100644 --- a/L1Trigger/L1TNtuples/python/L1NtupleEMU_cff.py +++ b/L1Trigger/L1TNtuples/python/L1NtupleEMU_cff.py @@ -8,9 +8,11 @@ from L1Trigger.L1TNtuples.l1uGTTree_cfi import * l1UpgradeTfMuonEmuTree = l1UpgradeTfMuonTree.clone() -l1UpgradeTfMuonEmuTree.bmtfMuonToken = cms.untracked.InputTag("simBmtfDigis","BMTF") -l1UpgradeTfMuonEmuTree.omtfMuonToken = cms.untracked.InputTag("simOmtfDigis","OMTF") -l1UpgradeTfMuonEmuTree.emtfMuonToken = cms.untracked.InputTag("simEmtfDigis","EMTF") +l1UpgradeTfMuonEmuTree.bmtfMuonToken = cms.untracked.InputTag("simBmtfDigis","BMTF") +l1UpgradeTfMuonEmuTree.bmtf2MuonToken = cms.untracked.InputTag("simKBmtfDigis","BMTF") +l1UpgradeTfMuonEmuTree.omtfMuonToken = cms.untracked.InputTag("simOmtfDigis","OMTF") +l1UpgradeTfMuonEmuTree.emtfMuonToken = cms.untracked.InputTag("simEmtfDigis","EMTF") +l1UpgradeTfMuonEmuTree.isEMU = cms.bool(True) l1CaloTowerEmuTree = l1CaloTowerTree.clone() l1CaloTowerEmuTree.ecalToken = cms.untracked.InputTag("simEcalTriggerPrimitiveDigis") diff --git a/L1Trigger/L1TNtuples/python/l1UpgradeTfMuonTree_cfi.py b/L1Trigger/L1TNtuples/python/l1UpgradeTfMuonTree_cfi.py index 836f5823e78e4..3b1cd2cd4a63b 100644 --- a/L1Trigger/L1TNtuples/python/l1UpgradeTfMuonTree_cfi.py +++ b/L1Trigger/L1TNtuples/python/l1UpgradeTfMuonTree_cfi.py @@ -2,12 +2,15 @@ l1UpgradeTfMuonTree = cms.EDAnalyzer( "L1UpgradeTfMuonTreeProducer", + feds = cms.InputTag("rawDataCollector"), bmtfMuonToken = cms.untracked.InputTag("bmtfDigis","BMTF"), + bmtf2MuonToken = cms.untracked.InputTag("bmtfDigis","BMTF2"), bmtfInputPhMuonToken = cms.untracked.InputTag("bmtfDigis",""), bmtfInputThMuonToken = cms.untracked.InputTag("bmtfDigis",""), omtfMuonToken = cms.untracked.InputTag("omtfDigis","OMTF"), emtfMuonToken = cms.untracked.InputTag("emtfDigis","EMTF"), - maxL1UpgradeTfMuon = cms.uint32(60) + maxL1UpgradeTfMuon = cms.uint32(60), + isEMU = cms.bool(False) ) from Configuration.Eras.Modifier_stage1L1Trigger_cff import stage1L1Trigger diff --git a/L1Trigger/L1TNtuples/src/L1AnalysisL1UpgradeTfMuon.cc b/L1Trigger/L1TNtuples/src/L1AnalysisL1UpgradeTfMuon.cc index 622b4ad3e42f0..dcf4bf9959f79 100644 --- a/L1Trigger/L1TNtuples/src/L1AnalysisL1UpgradeTfMuon.cc +++ b/L1Trigger/L1TNtuples/src/L1AnalysisL1UpgradeTfMuon.cc @@ -12,6 +12,10 @@ void L1Analysis::L1AnalysisL1UpgradeTfMuon::SetTfMuon(const l1t::RegionalMuonCan ++it) { if (it->hwPt() > 0) { l1upgradetfmuon_.tfMuonHwPt.push_back(it->hwPt()); + if (isKalman_) { + l1upgradetfmuon_.tfMuonHwPtUnconstrained.push_back(it->hwPtUnconstrained()); + l1upgradetfmuon_.tfMuonHwDxy.push_back(it->hwDXY()); + } l1upgradetfmuon_.tfMuonHwEta.push_back(it->hwEta()); l1upgradetfmuon_.tfMuonHwPhi.push_back(it->hwPhi()); l1upgradetfmuon_.tfMuonGlobalPhi.push_back( @@ -60,8 +64,8 @@ void L1Analysis::L1AnalysisL1UpgradeTfMuon::SetTfMuon(const l1t::RegionalMuonCan decoded_track_address["kBX"] = it->trackSubAddress(l1t::RegionalMuonCand::kBX); } l1upgradetfmuon_.tfMuonDecodedTrAdd.push_back(decoded_track_address); - l1upgradetfmuon_.tfMuonHwTrAdd.push_back(l1t::RegionalMuonRawDigiTranslator::generateRawTrkAddress( - *it, true)); // TODO: We're assuming that we're dealing with Kalman muons here. + l1upgradetfmuon_.tfMuonHwTrAdd.push_back( + l1t::RegionalMuonRawDigiTranslator::generateRawTrkAddress(*it, isKalman_)); l1upgradetfmuon_.nTfMuons++; } } 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/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/TrackTrigger/src/TrackQuality.cc b/L1Trigger/TrackTrigger/src/TrackQuality.cc index 814cbc688fa47..2f2615ce1608b 100644 --- a/L1Trigger/TrackTrigger/src/TrackQuality.cc +++ b/L1Trigger/TrackTrigger/src/TrackQuality.cc @@ -90,13 +90,14 @@ std::vector TrackQuality::featureTransform(TTTrack(eta_bins.size()); // First iterate through eta bins - for (int j = 0; j < eta_size; j++) { - if (eta >= eta_bins[j] && eta < eta_bins[j + 1]) // if track in eta bin + 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][k]] = hitpattern_binary[k]; + hitpattern_expanded_binary[hitmap[j - 1][k]] = hitpattern_binary[k]; + break; } } 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/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc index 871fafcc38c08..d920c2a5e4c0d 100644 --- a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc +++ b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc @@ -7,6 +7,7 @@ #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" #include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Concurrency/interface/SharedResourceNames.h" #include "CondFormats/RunInfo/interface/RunInfo.h" #include "CondFormats/DataRecord/interface/RunSummaryRcd.h" @@ -80,6 +81,7 @@ DD4hep_VolumeBasedMagneticFieldESProducerFromDB::DD4hep_VolumeBasedMagneticField const edm::ParameterSet& iConfig) : debug_(iConfig.getUntrackedParameter("debugBuilder")) { std::string const myConfigLabel = "VBMFESChoice"; + usesResources({edm::ESSharedResourceNames::kDD4Hep}); //Based on configuration, pick algorithm to produce the proper MagFieldConfig with a specific label const int current = iConfig.getParameter("valueOverride"); @@ -150,7 +152,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 +185,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/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/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/MCTruthMatchers.cc b/PhysicsTools/HepMCCandAlgos/plugins/MCTruthMatchers.cc index 55d0b4488562b..7d92063c8873b 100644 --- a/PhysicsTools/HepMCCandAlgos/plugins/MCTruthMatchers.cc +++ b/PhysicsTools/HepMCCandAlgos/plugins/MCTruthMatchers.cc @@ -33,7 +33,16 @@ typedef reco::PhysObjectMatcher< reco::MatchByDR > GenJetMatcher; +// JET Match by deltaR and dPt, ranking by deltaR +typedef reco::PhysObjectMatcher< + reco::CandidateView, + reco::GenJetCollection, + reco::MCMatchSelector, + reco::MatchByDRDPt > + GenJetMatcherDRPtByDR; + #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(MCMatcher); DEFINE_FWK_MODULE(MCMatcherByPt); DEFINE_FWK_MODULE(GenJetMatcher); +DEFINE_FWK_MODULE(GenJetMatcherDRPtByDR); diff --git a/PhysicsTools/JetCharge/test/JetChargeAnalyzer.cc b/PhysicsTools/JetCharge/test/JetChargeAnalyzer.cc index f16deadc7f2f4..df7f8e4259089 100644 --- a/PhysicsTools/JetCharge/test/JetChargeAnalyzer.cc +++ b/PhysicsTools/JetCharge/test/JetChargeAnalyzer.cc @@ -9,8 +9,8 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/JetFloatAssociation.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" //#include "RecoBTag/MCTools/interface/JetFlavourIdentifier.h" diff --git a/PhysicsTools/JetExamples/test/printGenJetRatio.cc b/PhysicsTools/JetExamples/test/printGenJetRatio.cc index 2c6456ffadf72..0ced2796b96e4 100644 --- a/PhysicsTools/JetExamples/test/printGenJetRatio.cc +++ b/PhysicsTools/JetExamples/test/printGenJetRatio.cc @@ -15,8 +15,8 @@ #include "DataFormats/JetReco/interface/JetFloatAssociation.h" #include "DataFormats/Common/interface/Ref.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" class printGenJetRatio : public edm::EDAnalyzer { public: diff --git a/PhysicsTools/JetExamples/test/printJetFlavour.cc b/PhysicsTools/JetExamples/test/printJetFlavour.cc index b6fc9978eb840..7917045433c1f 100644 --- a/PhysicsTools/JetExamples/test/printJetFlavour.cc +++ b/PhysicsTools/JetExamples/test/printJetFlavour.cc @@ -18,10 +18,10 @@ #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Common/interface/getRef.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" -#include "SimDataFormats/JetMatching/interface/MatchedPartons.h" -#include "SimDataFormats/JetMatching/interface/JetMatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/MatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetMatchedPartons.h" // system include files #include diff --git a/PhysicsTools/JetExamples/test/printJetFlavourInfo.cc b/PhysicsTools/JetExamples/test/printJetFlavourInfo.cc index 23ee2a4eee7c2..6baf80028b6b6 100644 --- a/PhysicsTools/JetExamples/test/printJetFlavourInfo.cc +++ b/PhysicsTools/JetExamples/test/printJetFlavourInfo.cc @@ -8,8 +8,8 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/JetReco/interface/Jet.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" #include "DataFormats/Math/interface/deltaR.h" diff --git a/PhysicsTools/JetMCAlgos/BuildFile.xml b/PhysicsTools/JetMCAlgos/BuildFile.xml index 87d7186a6349e..30fd1636bd76a 100644 --- a/PhysicsTools/JetMCAlgos/BuildFile.xml +++ b/PhysicsTools/JetMCAlgos/BuildFile.xml @@ -1,4 +1,6 @@ + + diff --git a/PhysicsTools/JetMCAlgos/plugins/BuildFile.xml b/PhysicsTools/JetMCAlgos/plugins/BuildFile.xml index 2a290c3f4925c..a2df3abbd8783 100644 --- a/PhysicsTools/JetMCAlgos/plugins/BuildFile.xml +++ b/PhysicsTools/JetMCAlgos/plugins/BuildFile.xml @@ -7,6 +7,16 @@ + + + + + + + + + + diff --git a/PhysicsTools/JetMCAlgos/plugins/GenHFHadronMatcher.cc b/PhysicsTools/JetMCAlgos/plugins/GenHFHadronMatcher.cc index b403a259d4f4c..bb33a8ef6a96e 100644 --- a/PhysicsTools/JetMCAlgos/plugins/GenHFHadronMatcher.cc +++ b/PhysicsTools/JetMCAlgos/plugins/GenHFHadronMatcher.cc @@ -44,7 +44,7 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/Math/interface/deltaR.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" // // class declaration @@ -320,8 +320,9 @@ std::vector GenHFHadronMatcher::findHadronJets(const reco::GenParticleColle reco::JetFlavourInfo jetInfo = i_info->second; const int jetIndex = i_info - jetFlavourInfos->begin(); // Looping over each hadron associated with the jet and finding its origin - const reco::GenParticleRefVector &hadronsInJet = - flavour_ == 5 ? jetInfo.getbHadrons() : flavour_ == 4 ? jetInfo.getcHadrons() : reco::GenParticleRefVector(); + const reco::GenParticleRefVector &hadronsInJet = flavour_ == 5 ? jetInfo.getbHadrons() + : flavour_ == 4 ? jetInfo.getcHadrons() + : reco::GenParticleRefVector(); for (reco::GenParticleRefVector::const_iterator hadron = hadronsInJet.begin(); hadron != hadronsInJet.end(); ++hadron) { // Check that the hadron satisfies criteria configured in the module diff --git a/PhysicsTools/JetMCAlgos/plugins/GenJetBCEnergyRatio.cc b/PhysicsTools/JetMCAlgos/plugins/GenJetBCEnergyRatio.cc index ee3853f4676a4..338cadcbb2668 100644 --- a/PhysicsTools/JetMCAlgos/plugins/GenJetBCEnergyRatio.cc +++ b/PhysicsTools/JetMCAlgos/plugins/GenJetBCEnergyRatio.cc @@ -21,7 +21,7 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/GenJetCollection.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Candidate/interface/Candidate.h" diff --git a/PhysicsTools/JetMCAlgos/plugins/JetFlavourClustering.cc b/PhysicsTools/JetMCAlgos/plugins/JetFlavourClustering.cc index cb25ebd0414a9..b5da866b36cee 100644 --- a/PhysicsTools/JetMCAlgos/plugins/JetFlavourClustering.cc +++ b/PhysicsTools/JetMCAlgos/plugins/JetFlavourClustering.cc @@ -89,8 +89,8 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/JetCollection.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" #include "DataFormats/Math/interface/deltaR.h" diff --git a/PhysicsTools/JetMCAlgos/plugins/JetFlavourIdentifier.cc b/PhysicsTools/JetMCAlgos/plugins/JetFlavourIdentifier.cc index 274b7bb4ceb00..58e600b7cae93 100644 --- a/PhysicsTools/JetMCAlgos/plugins/JetFlavourIdentifier.cc +++ b/PhysicsTools/JetMCAlgos/plugins/JetFlavourIdentifier.cc @@ -53,10 +53,10 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/JetCollection.h" #include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" -#include "SimDataFormats/JetMatching/interface/MatchedPartons.h" -#include "SimDataFormats/JetMatching/interface/JetMatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/MatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetMatchedPartons.h" #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Candidate/interface/Candidate.h" diff --git a/PhysicsTools/JetMCAlgos/plugins/JetPartonMatcher.cc b/PhysicsTools/JetMCAlgos/plugins/JetPartonMatcher.cc index 2e1b130aca3c5..1b1771f7e1d6b 100644 --- a/PhysicsTools/JetMCAlgos/plugins/JetPartonMatcher.cc +++ b/PhysicsTools/JetMCAlgos/plugins/JetPartonMatcher.cc @@ -66,10 +66,10 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/JetCollection.h" #include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" -#include "SimDataFormats/JetMatching/interface/MatchedPartons.h" -#include "SimDataFormats/JetMatching/interface/JetMatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/MatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetMatchedPartons.h" #include "DataFormats/Common/interface/View.h" #include "DataFormats/Common/interface/Ref.h" 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/plugins/CandMCMatchTableProducer.cc b/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc index 6a947bed593d6..d892eb751ba52 100644 --- a/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc @@ -7,6 +7,8 @@ #include "DataFormats/Common/interface/View.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include +#include "DataFormats/JetReco/interface/GenJetCollection.h" #include #include @@ -63,6 +65,13 @@ class CandMCMatchTableProducer : public edm::global::EDProducer<> { candMapVisTau_ = consumes>(params.getParameter("mcMapVisTau")); } + + if (type_ == MElectron) { + candMapDressedLep_ = + consumes>(params.getParameter("mcMapDressedLep")); + mapTauAnc_ = consumes>(params.getParameter("mapTauAnc")); + genPartsToken_ = consumes(params.getParameter("genparticles")); + } } ~CandMCMatchTableProducer() override {} @@ -82,20 +91,38 @@ class CandMCMatchTableProducer : public edm::global::EDProducer<> { iEvent.getByToken(candMapVisTau_, mapVisTau); } + edm::Handle> mapDressedLep; + edm::Handle> mapTauAnc; + edm::Handle genParts; + if (type_ == MElectron) { + iEvent.getByToken(candMapDressedLep_, mapDressedLep); + iEvent.getByToken(mapTauAnc_, mapTauAnc); + iEvent.getByToken(genPartsToken_, genParts); + } + std::vector key(ncand, -1), flav(ncand, 0); for (unsigned int i = 0; i < ncand; ++i) { //std::cout << "cand #" << i << ": pT = " << cands->ptrAt(i)->pt() << ", eta = " << cands->ptrAt(i)->eta() << ", phi = " << cands->ptrAt(i)->phi() << std::endl; reco::GenParticleRef match = (*map)[cands->ptrAt(i)]; reco::GenParticleRef matchVisTau; + reco::GenJetRef matchDressedLep; + bool hasTauAnc = false; if (type_ == MTau) { matchVisTau = (*mapVisTau)[cands->ptrAt(i)]; } + if (type_ == MElectron) { + matchDressedLep = (*mapDressedLep)[cands->ptrAt(i)]; + if (matchDressedLep.isNonnull()) { + hasTauAnc = (*mapTauAnc)[matchDressedLep]; + } + } if (match.isNonnull()) key[i] = match.key(); else if (matchVisTau.isNonnull()) key[i] = matchVisTau.key(); - else - continue; + else if (type_ != MElectron) + continue; // go ahead with electrons, as those may be matched to a dressed lepton + switch (type_) { case MMuon: if (match->isPromptFinalState()) @@ -106,7 +133,35 @@ class CandMCMatchTableProducer : public edm::global::EDProducer<> { flav[i] = getParentHadronFlag(match); // 3 = light, 4 = charm, 5 = b break; case MElectron: - if (match->isPromptFinalState()) + if (matchDressedLep.isNonnull()) { + if (matchDressedLep->pdgId() == 22) + flav[i] = 22; + else + flav[i] = (hasTauAnc) ? 15 : 1; + + float minpt = 0; + const reco::GenParticle* highestPtConstituent = nullptr; + for (auto& consti : matchDressedLep->getGenConstituents()) { + if (abs(consti->pdgId()) != 11) + continue; + if (consti->pt() < minpt) + continue; + minpt = consti->pt(); + highestPtConstituent = consti; + } + if (highestPtConstituent) { + auto iter = + std::find_if(genParts->begin(), genParts->end(), [highestPtConstituent](reco::GenParticle genp) { + return (abs(genp.pdgId()) == 11) && (deltaR(genp, *highestPtConstituent) < 0.01) && + (abs(genp.pt() - highestPtConstituent->pt()) / highestPtConstituent->pt() < 0.01); + }); + if (iter != genParts->end()) { + key[i] = iter - genParts->begin(); + } + } + } else if (!match.isNonnull()) + flav[i] = 0; + else if (match->isPromptFinalState()) flav[i] = (match->pdgId() == 22 ? 22 : 1); // prompt electron or photon else if (match->isDirectPromptTauDecayProductFinalState()) flav[i] = 15; // tau @@ -139,7 +194,9 @@ class CandMCMatchTableProducer : public edm::global::EDProducer<> { } tab->addColumn(branchName_ + "Idx", key, "Index into genParticle list for " + doc_); - tab->addColumn(branchName_ + "Flav", flav, "Flavour of genParticle for " + doc_ + ": " + flavDoc_); + tab->addColumn(branchName_ + "Flav", + flav, + "Flavour of genParticle (DressedLeptons for electrons) for " + doc_ + ": " + flavDoc_); iEvent.put(std::move(tab)); } @@ -183,6 +240,11 @@ class CandMCMatchTableProducer : public edm::global::EDProducer<> { "type of object to match (Muon, Electron, Tau, Photon, Other), taylors what's in t Flav branch"); desc.addOptional("mcMapVisTau") ->setComment("as mcMap, but pointing to the visible gen taus (only if objType == Tau)"); + desc.addOptional("mcMapDressedLep") + ->setComment("as mcMap, but pointing to gen dressed leptons (only if objType == Electrons)"); + desc.addOptional("mapTauAnc") + ->setComment("Value map of matched gen electrons containing info on the tau ancestry"); + desc.addOptional("genparticles")->setComment("Collection of genParticles to be stored."); descriptions.add("candMcMatchTable", desc); } @@ -191,6 +253,9 @@ class CandMCMatchTableProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT src_; const edm::EDGetTokenT> candMap_; edm::EDGetTokenT> candMapVisTau_; + edm::EDGetTokenT> candMapDressedLep_; + edm::EDGetTokenT> mapTauAnc_; + edm::EDGetTokenT genPartsToken_; enum MatchType { MMuon, MElectron, MTau, MPhoton, MOther } type_; std::string flavDoc_; }; diff --git a/PhysicsTools/NanoAOD/plugins/GenJetFlavourTableProducer.cc b/PhysicsTools/NanoAOD/plugins/GenJetFlavourTableProducer.cc index 9ebe624ea258f..f84fb1554f0f6 100644 --- a/PhysicsTools/NanoAOD/plugins/GenJetFlavourTableProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/GenJetFlavourTableProducer.cc @@ -12,8 +12,8 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "DataFormats/JetReco/interface/GenJet.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" #include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/NanoAOD/interface/FlatTable.h" diff --git a/PhysicsTools/NanoAOD/plugins/GenJetGenPartMerger.cc b/PhysicsTools/NanoAOD/plugins/GenJetGenPartMerger.cc new file mode 100644 index 0000000000000..4107afbdf66ea --- /dev/null +++ b/PhysicsTools/NanoAOD/plugins/GenJetGenPartMerger.cc @@ -0,0 +1,113 @@ + +// 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 "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/JetReco/interface/GenJetCollection.h" +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" + +#include "DataFormats/Common/interface/ValueMap.h" + +// +// class declaration +// + +class GenJetGenPartMerger : public edm::stream::EDProducer<> { +public: + explicit GenJetGenPartMerger(const edm::ParameterSet&); + ~GenJetGenPartMerger() override; + +private: + void beginStream(edm::StreamID) override; + void produce(edm::Event&, const edm::EventSetup&) override; + void endStream() override; + + const edm::EDGetTokenT jetToken_; + const edm::EDGetTokenT partToken_; + const edm::EDGetTokenT> tauAncToken_; +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +GenJetGenPartMerger::GenJetGenPartMerger(const edm::ParameterSet& iConfig) + : jetToken_(consumes(iConfig.getParameter("srcJet"))), + partToken_(consumes(iConfig.getParameter("srcPart"))), + tauAncToken_(consumes>(iConfig.getParameter("hasTauAnc"))) { + produces("merged"); + produces>("hasTauAnc"); +} + +GenJetGenPartMerger::~GenJetGenPartMerger() {} + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void GenJetGenPartMerger::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + std::unique_ptr merged(new reco::GenJetCollection); + + std::vector hasTauAncValues; + + edm::Handle jetHandle; + iEvent.getByToken(jetToken_, jetHandle); + + edm::Handle partHandle; + iEvent.getByToken(partToken_, partHandle); + + edm::Handle> tauAncHandle; + iEvent.getByToken(tauAncToken_, tauAncHandle); + + for (unsigned int ijet = 0; ijet < jetHandle->size(); ++ijet) { + auto jet = jetHandle->at(ijet); + merged->push_back(reco::GenJet(jet)); + reco::GenJetRef jetRef(jetHandle, ijet); + hasTauAncValues.push_back((*tauAncHandle)[jetRef]); + } + + for (auto& part : *partHandle) { + reco::GenJet jet; + jet.setP4(part.p4()); + jet.setPdgId(part.pdgId()); + jet.setCharge(part.charge()); + merged->push_back(jet); + hasTauAncValues.push_back(false); + } + + auto newmerged = iEvent.put(std::move(merged), "merged"); + + std::unique_ptr> out(new edm::ValueMap()); + edm::ValueMap::Filler filler(*out); + filler.insert(newmerged, hasTauAncValues.begin(), hasTauAncValues.end()); + filler.fill(); + + iEvent.put(std::move(out), "hasTauAnc"); +} + +// ------------ method called once each stream before processing any runs, lumis or events ------------ +void GenJetGenPartMerger::beginStream(edm::StreamID) {} + +// ------------ method called once each stream after processing all runs, lumis and events ------------ +void GenJetGenPartMerger::endStream() {} + +//define this as a plug-in +DEFINE_FWK_MODULE(GenJetGenPartMerger); 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/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py index 4ae862884e9fd..3f74c6b098d77 100644 --- a/PhysicsTools/NanoAOD/python/electrons_cff.py +++ b/PhysicsTools/NanoAOD/python/electrons_cff.py @@ -495,6 +495,38 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): ) + +from PhysicsTools.NanoAOD.particlelevel_cff import particleLevel + +particleLevelForMatching = particleLevel.clone( + lepMinPt = cms.double(3.), + phoMinPt = cms.double(3), +) + +tautaggerForMatching = cms.EDProducer("GenJetTauTaggerProducer", + src = cms.InputTag('particleLevelForMatching:leptons') +) + + +matchingElecPhoton = cms.EDProducer("GenJetGenPartMerger", + srcJet =cms.InputTag("particleLevelForMatching:leptons"), + srcPart=cms.InputTag("particleLevelForMatching:photons"), + hasTauAnc=cms.InputTag("tautaggerForMatching"), +) + + +electronsMCMatchForTableAlt = cms.EDProducer("GenJetMatcherDRPtByDR", # cut on deltaR, deltaPt/Pt; pick best by deltaR + src = electronTable.src, # final reco collection + matched = cms.InputTag("matchingElecPhoton:merged"), # final mc-truth particle collection + mcPdgId = cms.vint32(11,22), # one or more PDG ID (11 = el, 22 = pho); absolute values (see below) + checkCharge = cms.bool(False), # True = require RECO and MC objects to have the same charge + mcStatus = cms.vint32(), + maxDeltaR = cms.double(0.3), # 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(True), # False = just match input in order; True = pick lowest deltaR pair first +) + electronsMCMatchForTable = cms.EDProducer("MCMatcher", # cut on deltaR, deltaPt/Pt; pick best by deltaR src = electronTable.src, # final reco collection matched = cms.InputTag("finalGenParticles"), # final mc-truth particle collection @@ -509,16 +541,19 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): electronMCTable = cms.EDProducer("CandMCMatchTableProducer", src = electronTable.src, + mcMapDressedLep = cms.InputTag("electronsMCMatchForTableAlt"), mcMap = cms.InputTag("electronsMCMatchForTable"), + mapTauAnc = cms.InputTag("matchingElecPhoton:hasTauAnc"), objName = electronTable.name, objType = electronTable.name, #cms.string("Electron"), branchName = cms.string("genPart"), docString = cms.string("MC matching to status==1 electrons or photons"), + genparticles = cms.InputTag("finalGenParticles"), ) electronSequence = cms.Sequence(bitmapVIDForEle + bitmapVIDForEleHEEP + isoForEle + ptRatioRelForEle + seedGainEle + slimmedElectronsWithUserData + finalElectrons) electronTables = cms.Sequence (electronMVATTH + electronTable) -electronMC = cms.Sequence(electronsMCMatchForTable + electronMCTable) +electronMC = cms.Sequence(particleLevelForMatching + tautaggerForMatching + matchingElecPhoton + electronsMCMatchForTable + electronsMCMatchForTableAlt + electronMCTable) from RecoEgamma.ElectronIdentification.heepIdVarValueMapProducer_cfi import heepIDVarValueMaps _updateTo106X_sequence =cms.Sequence(heepIDVarValueMaps + slimmedElectronsTo106X) heepIDVarValueMaps.dataFormat = 2 diff --git a/PhysicsTools/NanoAOD/python/isotracks_cff.py b/PhysicsTools/NanoAOD/python/isotracks_cff.py index 76daacf2f0b1a..c6083ae5663e1 100644 --- a/PhysicsTools/NanoAOD/python/isotracks_cff.py +++ b/PhysicsTools/NanoAOD/python/isotracks_cff.py @@ -3,7 +3,7 @@ finalIsolatedTracks = cms.EDProducer("IsolatedTrackCleaner", tracks = cms.InputTag("isolatedTracks"), - cut = cms.string("((pt>5 && (abs(pdgId) == 11 || abs(pdgId) == 13)) || pt > 10) && (abs(pdgId) < 15 || abs(eta) < 2.5) && abs(dxy) < 0.2 && abs(dz) < 0.1 && ((pfIsolationDR03().chargedHadronIso < 5 && pt < 25) || pfIsolationDR03().chargedHadronIso/pt < 0.2)"), + cut = cms.string("((pt>5 && (abs(pdgId) == 11 || abs(pdgId) == 13)) || pt > 10) && (abs(pdgId) < 15 || abs(eta) < 2.5) && ((abs(dxy) < 0.2 && abs(dz) < 0.1) || pt>15) && ((pfIsolationDR03().chargedHadronIso < 5 && pt < 25) || pfIsolationDR03().chargedHadronIso/pt < 0.2)"), finalLeptons = cms.VInputTag( cms.InputTag("finalElectrons"), cms.InputTag("finalLooseMuons"), @@ -39,6 +39,7 @@ fromPV = Var("fromPV", int, doc="isolated track comes from PV"), pdgId = Var("pdgId",int,doc="PDG id of PF cand"), isHighPurityTrack = Var("isHighPurityTrack",bool,doc="track is high purity"), + charge = Var("charge", int, doc="electric charge"), ), externalVariables = cms.PSet( miniPFRelIso_chg = ExtVar("isoForIsoTk:miniIsoChg",float,doc="mini PF relative isolation, charged component",precision=10), diff --git a/PhysicsTools/NanoAOD/python/jets_cff.py b/PhysicsTools/NanoAOD/python/jets_cff.py index 88d4298350fad..fd5e00b2695b5 100644 --- a/PhysicsTools/NanoAOD/python/jets_cff.py +++ b/PhysicsTools/NanoAOD/python/jets_cff.py @@ -148,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"), @@ -159,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: @@ -230,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), @@ -265,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: @@ -471,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), @@ -698,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/muons_cff.py b/PhysicsTools/NanoAOD/python/muons_cff.py index 4ba4893755fb1..55bfe3cecd6ee 100644 --- a/PhysicsTools/NanoAOD/python/muons_cff.py +++ b/PhysicsTools/NanoAOD/python/muons_cff.py @@ -47,7 +47,7 @@ finalMuons = cms.EDFilter("PATMuonRefSelector", src = cms.InputTag("slimmedMuonsWithUserData"), - cut = cms.string("pt > 3 && (passed('CutBasedIdLoose') || passed('SoftCutBasedId') || passed('SoftMvaId') || passed('CutBasedIdGlobalHighPt') || passed('CutBasedIdTrkHighPt'))") + cut = cms.string("pt > 15 || (pt > 3 && (passed('CutBasedIdLoose') || passed('SoftCutBasedId') || passed('SoftMvaId') || passed('CutBasedIdGlobalHighPt') || passed('CutBasedIdTrkHighPt')))") ) finalLooseMuons = cms.EDFilter("PATMuonRefSelector", # for isotrack cleaning @@ -148,6 +148,7 @@ isPFcand = Var("isPFMuon",bool,doc="muon is PF candidate"), isGlobal = Var("isGlobalMuon",bool,doc="muon is global muon"), isTracker = Var("isTrackerMuon",bool,doc="muon is tracker muon"), + isStandalone = Var("isStandAloneMuon",bool,doc="muon is a standalone muon"), mediumId = Var("passed('CutBasedIdMedium')",bool,doc="cut-based ID, medium WP"), mediumPromptId = Var("passed('CutBasedIdMediumPrompt')",bool,doc="cut-based ID, medium prompt WP"), tightId = Var("passed('CutBasedIdTight')",bool,doc="cut-based ID, tight WP"), diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index 7ef08b85c3bc7..c1bff0f3f2fdf 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'), @@ -339,6 +340,7 @@ Plot1D('pfRelIso03_chg', 'pfRelIso03_chg', 20, 0, 2, 'PF relative isolation dR=0.3, charged component'), Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'), Plot1D('pt', 'pt', 20, 0, 200, 'pt'), + Plot1D('charge', 'charge', 3, -1.5, 1.5, 'electric charge') ) ), Jet = cms.PSet( @@ -466,6 +468,7 @@ Plot1D('isGlobal', 'isGlobal', 2, -0.5, 1.5, 'muon is global muon'), Plot1D('isPFcand', 'isPFcand', 2, -0.5, 1.5, 'muon is PF candidate'), Plot1D('isTracker', 'isTracker', 2, -0.5, 1.5, 'muon is tracker muon'), + Plot1D('isStandalone', 'isStandalone', 2, -0.5, 1.5, 'muon is a standalone muon'), NoPlot('jetIdx'), Plot1D('jetPtRelv2', 'jetPtRelv2', 20, 0, 30, 'Relative momentum of the lepton with respect to the closest jet after subtracting the lepton'), Plot1D('jetRelIso', 'jetRelIso', 20, -0.2, 1.8, 'Relative isolation in matched jet (1/ptRatio-1, pfRelIso04_all if no matched jet)'), @@ -669,6 +672,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 0ebe6d9e66061..4d918c2388cff 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -385,6 +385,18 @@ def nanoAOD_customizeMC(process): modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=False)) return process +###increasing the precision of selected GenParticles. +def nanoWmassGenCustomize(process): + pdgSelection="?(abs(pdgId) == 11|| abs(pdgId)==13 || abs(pdgId)==15 ||abs(pdgId)== 12 || abs(pdgId)== 14 || abs(pdgId)== 16|| abs(pdgId)== 24|| pdgId== 23)" + # Keep precision same as default RECO for selected particles + ptPrecision="{}?{}:{}".format(pdgSelection, CandVars.pt.precision.value(),genParticleTable.variables.pt.precision.value()) + process.genParticleTable.variables.pt.precision=cms.string(ptPrecision) + phiPrecision="{} ? {} : {}".format(pdgSelection, CandVars.phi.precision.value(), genParticleTable.variables.phi.precision.value()) + process.genParticleTable.variables.phi.precision=cms.string(phiPrecision) + etaPrecision="{} ? {} : {}".format(pdgSelection, CandVars.eta.precision.value(), genParticleTable.variables.eta.precision.value()) + process.genParticleTable.variables.eta.precision=cms.string(etaPrecision) + return process + ### Era dependent customization _80x_sequence = nanoSequenceCommon.copy() #remove stuff 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/GenJetFlavourInfoPreserver.cc b/PhysicsTools/PatAlgos/plugins/GenJetFlavourInfoPreserver.cc index def40febd16ef..98098929cb479 100644 --- a/PhysicsTools/PatAlgos/plugins/GenJetFlavourInfoPreserver.cc +++ b/PhysicsTools/PatAlgos/plugins/GenJetFlavourInfoPreserver.cc @@ -14,8 +14,8 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/JetCollection.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" #include "DataFormats/JetReco/interface/GenJet.h" #include "DataFormats/JetReco/interface/GenJetCollection.h" diff --git a/PhysicsTools/PatAlgos/plugins/PATJetProducer.h b/PhysicsTools/PatAlgos/plugins/PATJetProducer.h index 77037dcd38cee..b117c0c8c9451 100644 --- a/PhysicsTools/PatAlgos/plugins/PATJetProducer.h +++ b/PhysicsTools/PatAlgos/plugins/PATJetProducer.h @@ -21,8 +21,8 @@ #include "FWCore/Utilities/interface/InputTag.h" #include "DataFormats/Common/interface/View.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" #include "CommonTools/Utils/interface/PtComparator.h" diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index c074770bb506c..827ad0bd38813 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -375,6 +375,7 @@ def _add_deepFlavour(process): import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig tauIdEmbedder = tauIdConfig.TauIDEmbedder( process, debug = False, + originalTauName = _noUpdatedTauName, updatedTauName = _updatedTauName, toKeep = ['deepTau2017v2p1'] ) @@ -384,20 +385,9 @@ def _add_deepFlavour(process): tauIdEmbedder.runTauID() addToProcessAndTask(_noUpdatedTauName, process.slimmedTaus.clone(),process,task) delattr(process, 'slimmedTaus') - process.deepTau2017v2p1.taus = _noUpdatedTauName - process.slimmedTaus = getattr(process, _updatedTauName).clone( - src = _noUpdatedTauName - ) - process.deepTauIDTask = cms.Task(process.deepTau2017v2p1, process.slimmedTaus) - task.add(process.deepTauIDTask) - if 'newDMPhase2v1' in tauIdEmbedder.toKeep: - process.rerunDiscriminationByIsolationMVADBnewDMwLTPhase2raw.PATTauProducer=_noUpdatedTauName - process.rerunDiscriminationByIsolationMVADBnewDMwLTPhase2.PATTauProducer=_noUpdatedTauName - task.add(process.rerunIsolationMVADBnewDMwLTPhase2Task) - if 'againstElePhase2v1' in tauIdEmbedder.toKeep: - process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw.PATTauProducer=_noUpdatedTauName - process.patTauDiscriminationByElectronRejectionMVA6Phase2v1.PATTauProducer=_noUpdatedTauName - task.add(process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Task) + process.slimmedTaus = getattr(process, _updatedTauName).clone() + process.rerunMvaIsolationTask.add(process.slimmedTaus) + task.add(process.rerunMvaIsolationTask) #-- Rerun tauID against dead ECal towers to taus for the various re-MiniAOD eras # to enable default behoviour with leading track extrapolation to ECAL 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/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/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/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/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/RecoEcal/EgammaClusterAlgos/BuildFile.xml b/RecoEcal/EgammaClusterAlgos/BuildFile.xml index 2bb768ce8aab9..96c07a84ee312 100644 --- a/RecoEcal/EgammaClusterAlgos/BuildFile.xml +++ b/RecoEcal/EgammaClusterAlgos/BuildFile.xml @@ -3,12 +3,15 @@ + + + diff --git a/RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h b/RecoEcal/EgammaClusterAlgos/interface/SCEnergyCorrectorSemiParm.h index 84b9fb2627b15..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/GBRForest/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 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); - std::pair getCorrections(const reco::SuperCluster &sc) const; - void modifyObject(reco::SuperCluster &sc); + double mean(const std::vector& data) const; + double sigma(const std::vector& data) const; - void setEventSetup(const edm::EventSetup &es); - void setEvent(const edm::Event &e); + private: + std::string meanKey_; + std::string sigmaKey_; + EgammaBDTOutputTransformer meanOutTrans_; + EgammaBDTOutputTransformer sigmaOutTrans_; + const GBRForestD* meanForest_; + const GBRForestD* sigmaForest_; + edm::ESGetToken meanForestToken_; + edm::ESGetToken sigmaForestToken_; + }; -protected: - const GBRForestD *foresteb_; - const GBRForestD *forestee_; - const GBRForestD *forestsigmaeb_; - const GBRForestD *forestsigmaee_; + //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_; + } - edm::ESHandle calotopo_; - edm::ESHandle calogeom_; + 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::ESGetToken tokenCaloTopo_; - edm::ESGetToken tokenCaloGeom_; - edm::ESGetToken tokenRegressionKeyEB_; - edm::ESGetToken tokenUncertaintyKeyEB_; - edm::ESGetToken tokenRegressionKeyEE_; - edm::ESGetToken tokenUncertaintyKeyEE_; + //barrel = always ecal barrel, endcap may be ECAL or HGCAL + RegParam regParamBarrel_; + RegParam regParamEndcap_; + + 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/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/python/particleFlowSuperClusterECAL_cfi.py b/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py index 9fba5a4b0e64e..2c81cf48e0e4f 100644 --- a/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py +++ b/RecoEcal/EgammaClusterProducers/python/particleFlowSuperClusterECAL_cfi.py @@ -2,11 +2,6 @@ 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() 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/PFECALSuperClusterProducer.cc b/RecoEcal/EgammaClusterProducers/src/PFECALSuperClusterProducer.cc index b4cd777a7a9ff..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" @@ -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/interface/EcalClusterLazyTools.h b/RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h index 6340700f80fa2..0a8fd9885b4a0 100644 --- a/RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h +++ b/RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h @@ -33,7 +33,9 @@ #include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbRecord.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" #include "FWCore/Framework/interface/ConsumesCollector.h" - +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" +#include "RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h" #include class CaloTopology; @@ -279,8 +281,13 @@ class EcalClusterLazyToolsT : public EcalClusterLazyToolsBase { // egamma, but so far covIPhiIPhi hasnt been studied extensively so there // could be a bug in the covIPhiIEta or covIPhiIPhi calculations. I dont // think there is but as it hasnt been heavily used, there might be one - std::vector localCovariances(const reco::BasicCluster &cluster, float w0 = 4.7) const { - return ClusterTools::localCovariances(cluster, getEcalRecHitCollection(cluster), topology_, w0); + std::vector localCovariances(const reco::BasicCluster &cluster, + float w0 = EgammaLocalCovParamDefaults::kRelEnCut, + const EcalPFRecHitThresholds *rhthresholds = nullptr, + float multEB = 0.0, + float multEE = 0.0) const { + return ClusterTools::localCovariances( + cluster, getEcalRecHitCollection(cluster), topology_, w0, rhthresholds, multEB, multEE); } std::vector scLocalCovariances(const reco::SuperCluster &cluster, float w0 = 4.7) const { return ClusterTools::scLocalCovariances(cluster, getEcalRecHitCollection(cluster), topology_, w0); diff --git a/RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h b/RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h index aa857e9976552..2b53766c7b106 100644 --- a/RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h +++ b/RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h @@ -55,6 +55,9 @@ #include "Geometry/CaloTopology/interface/CaloTopology.h" #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" #include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h" +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" +#include "RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h" class DetId; class CaloTopology; @@ -199,7 +202,10 @@ class EcalClusterToolsT { static std::vector localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, - float w0 = 4.7); + float w0 = EgammaLocalCovParamDefaults::kRelEnCut, + const EcalPFRecHitThresholds *thresholds = nullptr, + float multEB = 0.0, + float multEE = 0.0); static std::vector scLocalCovariances(const reco::SuperCluster &cluster, const EcalRecHitCollection *recHits, @@ -1034,7 +1040,10 @@ template std::vector EcalClusterToolsT::localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, - float w0) { + float w0, + const EcalPFRecHitThresholds *thresholds, + float multEB, + float multEE) { float e_5x5 = e5x5(cluster, recHits, topology); float covEtaEta, covEtaPhi, covPhiPhi; @@ -1059,12 +1068,27 @@ std::vector EcalClusterToolsT::localCovariances(const reco::BasicCl bool isBarrel = seedId.subdetId() == EcalBarrel; const double crysSize = isBarrel ? barrelCrysSize : endcapCrysSize; + float mult = isBarrel ? multEB : multEE; // we will multiply PF RecHit threshold by mult. + // mult = 1 should work reasonably well for noise cleaning. + // dedicated studies showed mult=1.25 works best for Run3 in endcap, where noise is high. + // If no noise cleaning is intended then put mult=0. CaloRectangle rectangle{-2, 2, -2, 2}; for (auto const &detId : rectangle(seedId, *topology)) { float frac = getFraction(v_id, detId); float energy = recHitEnergy(detId, recHits) * frac; - if (energy <= 0) + + if ((thresholds == nullptr) && (mult != 0.0)) { + throw cms::Exception("EmptyPFRechHitThresColl") + << "In EcalClusterTools::localCovariances, if EcalPFRecHitThresholds==nulptr, then multEB and multEE " + "should be 0 as well."; + } + float rhThres = 0.0; + if (thresholds != nullptr) { + rhThres = (*thresholds)[detId]; // access PFRechit thresholds for noise cleaning + } + + if (energy <= (rhThres * mult)) continue; float dEta = getNrCrysDiffInEta(detId, seedId) - mean5x5PosInNrCrysFromSeed.first; diff --git a/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h b/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h index d1c7d16d9a4d4..a54ff1f8b5771 100644 --- a/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h +++ b/RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h @@ -46,6 +46,8 @@ #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" #include "RecoEgamma/EgammaElectronAlgos/interface/ConversionFinder.h" +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" class GsfElectronAlgo { public: @@ -144,6 +146,10 @@ class GsfElectronAlgo { // only make sense for ecal driven electrons bool seedFromTEC; + + // noise cleaning + double multThresEB; + double multThresEE; }; // Ecal rec hits @@ -218,7 +224,8 @@ class GsfElectronAlgo { double magneticFieldInTesla, const HeavyObjectCache*, egamma::conv::TrackTableView ctfTable, - egamma::conv::TrackTableView gsfTable); + egamma::conv::TrackTableView gsfTable, + EcalPFRecHitThresholds const& thresholds); void setCutBasedPreselectionFlag(reco::GsfElectron& ele, const reco::BeamSpot&) const; @@ -227,7 +234,8 @@ class GsfElectronAlgo { ElectronHcalHelper const& hcalHelper, EventData const& eventData, CaloTopology const& topology, - CaloGeometry const& geometry) const; + CaloGeometry const& geometry, + EcalPFRecHitThresholds const& thresholds) const; reco::GsfElectron::SaturationInfo calculateSaturationInfo(const reco::SuperClusterRef&, EventData const& eventData) const; @@ -247,6 +255,7 @@ class GsfElectronAlgo { const edm::ESGetToken caloTopologyToken_; const edm::ESGetToken trackerGeometryToken_; const edm::ESGetToken ecalSeveretyLevelAlgoToken_; + const edm::ESGetToken ecalPFRechitThresholdsToken_; // additional configuration and helpers ElectronHcalHelper hcalHelper_; diff --git a/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc b/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc index c2f6b5c4736ce..2d40cccc60821 100644 --- a/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc +++ b/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc @@ -25,6 +25,7 @@ #include "RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h" #include "RecoEgamma/EgammaElectronAlgos/interface/ecalClusterEnergyUncertaintyElectronSpecific.h" #include "CommonTools/Egamma/interface/ConversionTools.h" +#include "RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h" #include #include @@ -292,7 +293,8 @@ reco::GsfElectron::ShowerShape GsfElectronAlgo::calculateShowerShape(const reco: ElectronHcalHelper const& hcalHelper, EventData const& eventData, CaloTopology const& topology, - CaloGeometry const& geometry) const { + CaloGeometry const& geometry, + EcalPFRecHitThresholds const& thresholds) const { using ClusterTools = EcalClusterToolsT; reco::GsfElectron::ShowerShape showerShape; @@ -315,7 +317,18 @@ reco::GsfElectron::ShowerShape GsfElectronAlgo::calculateShowerShape(const reco: } std::vector covariances = ClusterTools::covariances(seedCluster, recHits, &topology, &geometry); - std::vector localCovariances = ClusterTools::localCovariances(seedCluster, recHits, &topology); + + // do noise-cleaning for full5x5, by passing per crystal PF recHit thresholds and mult values + // mult values for EB and EE were obtained by dedicated studies + std::vector localCovariances = full5x5 ? ClusterTools::localCovariances(seedCluster, + recHits, + &topology, + EgammaLocalCovParamDefaults::kRelEnCut, + &thresholds, + cfg_.cuts.multThresEB, + cfg_.cuts.multThresEE) + : ClusterTools::localCovariances(seedCluster, recHits, &topology); + showerShape.sigmaEtaEta = sqrt(covariances[0]); showerShape.sigmaIetaIeta = sqrt(localCovariances[0]); if (!edm::isNotFinite(localCovariances[2])) @@ -388,6 +401,7 @@ GsfElectronAlgo::GsfElectronAlgo(const Tokens& input, caloTopologyToken_{cc.esConsumes()}, trackerGeometryToken_{cc.esConsumes()}, ecalSeveretyLevelAlgoToken_{cc.esConsumes()}, + ecalPFRechitThresholdsToken_{cc.esConsumes()}, hcalHelper_{hcal, std::move(cc)}, crackCorrectionFunction_{std::forward>(crackCorrectionFunction)}, regHelper_{reg, cfg_.strategy.useEcalRegression, cfg_.strategy.useCombinationRegression, cc} @@ -528,6 +542,7 @@ reco::GsfElectronCollection GsfElectronAlgo::completeElectrons(edm::Event const& auto const& caloTopology = eventSetup.getData(caloTopologyToken_); auto const& trackerGeometry = eventSetup.getData(trackerGeometryToken_); auto const& ecalSeveretyLevelAlgo = eventSetup.getData(ecalSeveretyLevelAlgoToken_); + auto const& thresholds = eventSetup.getData(ecalPFRechitThresholdsToken_); // prepare access to hcal data hcalHelper_.beginEvent(event, eventSetup); @@ -580,7 +595,8 @@ reco::GsfElectronCollection GsfElectronAlgo::completeElectrons(edm::Event const& magneticFieldInTesla, hoc, ctfTrackTable.value(), - gsfTrackTable.value()); + gsfTrackTable.value(), + thresholds); } // loop over tracks return electrons; @@ -713,7 +729,8 @@ void GsfElectronAlgo::createElectron(reco::GsfElectronCollection& electrons, double magneticFieldInTesla, const GsfElectronAlgo::HeavyObjectCache* hoc, egamma::conv::TrackTableView ctfTable, - egamma::conv::TrackTableView gsfTable) { + egamma::conv::TrackTableView gsfTable, + EcalPFRecHitThresholds const& thresholds) { // charge ID int eleCharge; GsfElectron::ChargeInfo eleChargeInfo; @@ -842,9 +859,10 @@ void GsfElectronAlgo::createElectron(reco::GsfElectronCollection& electrons, reco::GsfElectron::ShowerShape showerShape; reco::GsfElectron::ShowerShape full5x5_showerShape; if (!EcalTools::isHGCalDet((DetId::Detector)region)) { - showerShape = calculateShowerShape(electronData.superClusterRef, hcalHelper_, eventData, topology, geometry); - full5x5_showerShape = - calculateShowerShape(electronData.superClusterRef, hcalHelper_, eventData, topology, geometry); + showerShape = calculateShowerShape( + electronData.superClusterRef, hcalHelper_, eventData, topology, geometry, thresholds); + full5x5_showerShape = calculateShowerShape( + electronData.superClusterRef, hcalHelper_, eventData, topology, geometry, thresholds); } //==================================================== diff --git a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc index 65028e4630ac6..baec0e950e422 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc @@ -21,6 +21,7 @@ #include "RecoEgamma/EgammaElectronAlgos/interface/EgAmbiguityTools.h" #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronUtilities.h" #include "RecoEgamma/EgammaElectronAlgos/interface/GsfElectronAlgo.h" +#include "RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h" using namespace reco; @@ -207,6 +208,8 @@ void GsfElectronProducer::fillDescriptions(edm::ConfigurationDescriptions& descr psd0.add("isFiducial", false); psd0.add("seedFromTEC", true); psd0.add("maxTIP", 999999999.0); + psd0.add("multThresEB", EgammaLocalCovParamDefaults::kMultThresEB); + psd0.add("multThresEE", EgammaLocalCovParamDefaults::kMultThresEE); // preselection parameters desc.add("preselection", psd0); } @@ -272,6 +275,8 @@ namespace { .isFiducial = pset.getParameter("isFiducial"), .maxTIP = pset.getParameter("maxTIP"), .seedFromTEC = pset.getParameter("seedFromTEC"), + .multThresEB = pset.getParameter("multThresEB"), + .multThresEE = pset.getParameter("multThresEE"), }; } }; // namespace diff --git a/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml b/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml index 62fe9ec9b516c..316e3225f8d14 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml +++ b/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml @@ -13,6 +13,10 @@ + + + + diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc index bdcbc7935fa7c..d7da5d6ec0a88 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTClusterShapeProducer.cc @@ -24,6 +24,7 @@ #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h" class EgammaHLTClusterShapeProducer : public edm::global::EDProducer<> { public: @@ -40,7 +41,10 @@ class EgammaHLTClusterShapeProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT ecalRechitEBToken_; const edm::EDGetTokenT ecalRechitEEToken_; const EcalClusterLazyTools::ESGetTokens ecalClusterLazyToolsESGetTokens_; + const edm::ESGetToken ecalPFRechitThresholdsToken_; const bool EtaOrIeta_; + const double multThresEB_; + const double multThresEE_; }; EgammaHLTClusterShapeProducer::EgammaHLTClusterShapeProducer(const edm::ParameterSet& config) @@ -48,10 +52,14 @@ EgammaHLTClusterShapeProducer::EgammaHLTClusterShapeProducer(const edm::Paramete ecalRechitEBToken_(consumes(config.getParameter("ecalRechitEB"))), ecalRechitEEToken_(consumes(config.getParameter("ecalRechitEE"))), ecalClusterLazyToolsESGetTokens_{consumesCollector()}, - EtaOrIeta_(config.getParameter("isIeta")) { + ecalPFRechitThresholdsToken_{esConsumes()}, + EtaOrIeta_(config.getParameter("isIeta")), + multThresEB_(config.getParameter("multThresEB")), + multThresEE_(config.getParameter("multThresEE")) { //register your products produces(); produces("sigmaIEtaIEta5x5"); + produces("sigmaIEtaIEta5x5NoiseCleaned"); } EgammaHLTClusterShapeProducer::~EgammaHLTClusterShapeProducer() {} @@ -62,6 +70,8 @@ void EgammaHLTClusterShapeProducer::fillDescriptions(edm::ConfigurationDescripti desc.add(("ecalRechitEB"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEB")); desc.add(("ecalRechitEE"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEE")); desc.add(("isIeta"), true); + desc.add(("multThresEB"), EgammaLocalCovParamDefaults::kMultThresEB); + desc.add(("multThresEE"), EgammaLocalCovParamDefaults::kMultThresEE); descriptions.add(("hltEgammaHLTClusterShapeProducer"), desc); } @@ -73,12 +83,14 @@ void EgammaHLTClusterShapeProducer::produce(edm::StreamID sid, iEvent.getByToken(recoEcalCandidateProducer_, recoecalcandHandle); auto const& ecalClusterLazyToolsESData = ecalClusterLazyToolsESGetTokens_.get(iSetup); + auto const& thresholds = iSetup.getData(ecalPFRechitThresholdsToken_); EcalClusterLazyTools lazyTools(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_); noZS::EcalClusterLazyTools lazyTools5x5(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_); reco::RecoEcalCandidateIsolationMap clshMap(recoecalcandHandle); reco::RecoEcalCandidateIsolationMap clsh5x5Map(recoecalcandHandle); + reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap(recoecalcandHandle); for (unsigned int iRecoEcalCand = 0; iRecoEcalCand < recoecalcandHandle->size(); iRecoEcalCand++) { reco::RecoEcalCandidateRef recoecalcandref(recoecalcandHandle, iRecoEcalCand); @@ -102,12 +114,20 @@ void EgammaHLTClusterShapeProducer::produce(edm::StreamID sid, } double sigmaee5x5 = sqrt(lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()))[0]); + double sigmaee5x5NoiseCleaned = sqrt(lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()), + EgammaLocalCovParamDefaults::kRelEnCut, + &thresholds, + multThresEB_, + multThresEE_)[0]); clshMap.insert(recoecalcandref, sigmaee); clsh5x5Map.insert(recoecalcandref, sigmaee5x5); + clsh5x5NoiseCleanedMap.insert(recoecalcandref, sigmaee5x5NoiseCleaned); } iEvent.put(std::make_unique(clshMap)); iEvent.put(std::make_unique(clsh5x5Map), "sigmaIEtaIEta5x5"); + iEvent.put(std::make_unique(clsh5x5NoiseCleanedMap), + "sigmaIEtaIEta5x5NoiseCleaned"); } #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc index 5a36af6d6ab47..15b60e8fddc15 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTExtraProducer.cc @@ -31,8 +31,50 @@ #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); @@ -138,6 +180,7 @@ class EgammaHLTExtraProducer : public edm::global::EDProducer<> { float minPtToSaveHits_; bool saveHitsPlusPi_; bool saveHitsPlusHalfPi_; + std::vector recHitCountThresholds_; }; EgammaHLTExtraProducer::Tokens::Tokens(const edm::ParameterSet& pset, edm::ConsumesCollector&& cc) { @@ -152,7 +195,8 @@ EgammaHLTExtraProducer::EgammaHLTExtraProducer(const edm::ParameterSet& pset) : tokens_(pset, consumesCollector()), minPtToSaveHits_(pset.getParameter("minPtToSaveHits")), saveHitsPlusPi_(pset.getParameter("saveHitsPlusPi")), - saveHitsPlusHalfPi_(pset.getParameter("saveHitsPlusHalfPi")) { + saveHitsPlusHalfPi_(pset.getParameter("saveHitsPlusHalfPi")), + recHitCountThresholds_(pset.getParameter>("recHitCountThresholds")) { consumesMany(); for (auto& tokenLabel : tokens_.egCands) { @@ -160,9 +204,15 @@ EgammaHLTExtraProducer::EgammaHLTExtraProducer(const edm::ParameterSet& pset) } 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); @@ -177,6 +227,7 @@ void EgammaHLTExtraProducer::fillDescriptions(edm::ConfigurationDescriptions& de 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("")); @@ -254,6 +305,19 @@ void EgammaHLTExtraProducer::produce(edm::StreamID streamID, 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); @@ -264,6 +328,8 @@ void EgammaHLTExtraProducer::produce(edm::StreamID streamID, 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); diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc index 0b68ea7cd4d14..dd3a679b4f8de 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc +++ b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTHGCalIDVarProducer.cc @@ -16,6 +16,7 @@ #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: @@ -54,7 +55,7 @@ class EgammaHLTHGCalIDVarProducer : public edm::stream::EDProducer<> { const edm::EDGetTokenT recoEcalCandidateToken_; const edm::EDGetTokenT hgcalRecHitToken_; const edm::EDGetTokenT layerClusterToken_; - HGCalShowerShapeHelper ssCalc_; + HGCalShowerShapeHelper ssHelper_; }; EgammaHLTHGCalIDVarProducer::EgammaHLTHGCalIDVarProducer(const edm::ParameterSet& config) @@ -64,7 +65,7 @@ EgammaHLTHGCalIDVarProducer::EgammaHLTHGCalIDVarProducer(const edm::ParameterSet consumes(config.getParameter("recoEcalCandidateProducer"))), hgcalRecHitToken_(consumes(config.getParameter("hgcalRecHits"))), layerClusterToken_(consumes(config.getParameter("layerClusters"))), - ssCalc_(consumesCollector()) { + 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")); @@ -89,7 +90,7 @@ void EgammaHLTHGCalIDVarProducer::fillDescriptions(edm::ConfigurationDescription desc.add("recoEcalCandidateProducer", edm::InputTag("hltL1SeededRecoEcalCandidate")); desc.add("hgcalRecHits", edm::InputTag("hgcalRecHits")); desc.add("layerClusters", edm::InputTag("layerClusters")); - desc.add("rCylinder", 2.8); + desc.add("rCylinder", EgammaHGCALIDParamDefaults::kRCylinder); desc.add("hOverECone", 0.15); descriptions.add(("hltEgammaHLTHGCalIDVarProducer"), desc); } @@ -99,7 +100,7 @@ void EgammaHLTHGCalIDVarProducer::produce(edm::Event& iEvent, const edm::EventSe const auto& hgcalRecHits = iEvent.get(hgcalRecHitToken_); const auto& layerClusters = iEvent.get(layerClusterToken_); - ssCalc_.initPerEvent(iSetup, hgcalRecHits); + ssHelper_.initPerEvent(iSetup, hgcalRecHits); auto rVarMap = std::make_unique(recoEcalCandHandle); auto hForHoverEMap = std::make_unique(recoEcalCandHandle); @@ -109,13 +110,13 @@ void EgammaHLTHGCalIDVarProducer::produce(edm::Event& iEvent, const edm::EventSe for (size_t candNr = 0; candNr < recoEcalCandHandle->size(); candNr++) { reco::RecoEcalCandidateRef candRef(recoEcalCandHandle, candNr); - ssCalc_.initPerObject(candRef->superCluster()->hitsAndFractions()); - rVarMap->insert(candRef, ssCalc_.getRvar(rCylinder_, candRef->superCluster()->energy())); + 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_); + auto pcaWidths = ssCalc.getPCAWidths(rCylinder_); for (auto& pcaMap : pcaAssocMaps_) { pcaMap.insert(candRef, pcaWidths); } diff --git a/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTPhase2ExtraProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/EgammaHLTPhase2ExtraProducer.cc new file mode 100644 index 0000000000000..3a6bd628b79a2 --- /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/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/Associations/interface/L1TrackTruthPair.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/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/EgammaPhotonAlgos/src/OutInConversionSeedFinder.cc b/RecoEgamma/EgammaPhotonAlgos/src/OutInConversionSeedFinder.cc index 6dcf7a3c8ee47..e09fd9963d43c 100644 --- a/RecoEgamma/EgammaPhotonAlgos/src/OutInConversionSeedFinder.cc +++ b/RecoEgamma/EgammaPhotonAlgos/src/OutInConversionSeedFinder.cc @@ -170,18 +170,17 @@ void OutInConversionSeedFinder::makeSeeds(const reco::CaloClusterPtr& aBC) { void OutInConversionSeedFinder::fillClusterSeeds(const reco::CaloClusterPtr& bc) { theFirstMeasurements_.clear(); - FreeTrajectoryState fts; /// negative charge state - if (makeTrackState(-1).second) { - fts = makeTrackState(-1).first; - startSeed(fts); + auto const stateNeg = makeTrackState(-1); + if (stateNeg.second) { + startSeed(stateNeg.first); } /// positive charge state - if (makeTrackState(1).second) { - fts = makeTrackState(1).first; - startSeed(fts); + auto const statePos = makeTrackState(1); + if (statePos.second) { + startSeed(statePos.first); } theFirstMeasurements_.clear(); } @@ -203,6 +202,8 @@ std::pair OutInConversionSeedFinder::makeTrackState(i // compute momentum direction at calo double curvature = theMF_->inTesla(theBCPosition_).z() * c_light * 1.e-3 / momentumWithoutCurvature.perp(); curvature /= 100.; // in cm-1 !! + if (curvature == 0) + return result; LogDebug("OutInConversionSeedFinder") << "OutInConversionSeedFinder::makeTrackState gpOrigine " << gpOrigine.x() << " " << gpOrigine.y() << " " << gpOrigine.z() << " momentumWithoutCurvature " @@ -220,6 +221,8 @@ std::pair OutInConversionSeedFinder::makeTrackState(i //float u = rho + rho/d/d*(R*R-rho*rho) ; if (u <= R) result.second = true; + else + return result; double sinAlpha = 0.5 * u / R; if (sinAlpha > (1. - 10 * DBL_EPSILON)) diff --git a/RecoEgamma/EgammaPhotonProducers/python/gedPhotons_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/gedPhotons_cfi.py index b9fcd06c97354..4c348242aedef 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/gedPhotons_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/gedPhotons_cfi.py @@ -50,6 +50,8 @@ highEt = cms.double(100.), minR9Barrel = cms.double(0.94), minR9Endcap = cms.double(0.95), + multThresEB = cms.double(1.00), + multThresEE = cms.double(1.25), hOverEConeSize = cms.double(0.15), posCalc_x0 = cms.double(0.89), posCalc_t0_barl = cms.double(7.7), diff --git a/RecoEgamma/EgammaPhotonProducers/python/photons_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/photons_cfi.py index 2eca73e0bdd52..b645058a20610 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/photons_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/photons_cfi.py @@ -41,6 +41,8 @@ highEt = cms.double(100.), minR9Barrel = cms.double(0.94), minR9Endcap = cms.double(0.95), + multThresEB = cms.double(1.00), + multThresEE = cms.double(1.25), hOverEConeSize = cms.double(0.15), posCalc_x0 = cms.double(0.89), posCalc_t0_barl = cms.double(7.7), diff --git a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc index 2c5c43c737a06..f26c39d9e9e5a 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc @@ -45,6 +45,9 @@ #include "RecoEgamma/PhotonIdentification/interface/PhotonMIPHaloTagger.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" +#include "RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h" class GEDPhotonProducer : public edm::stream::EDProducer<> { public: @@ -77,7 +80,8 @@ class GEDPhotonProducer : public edm::stream::EDProducer<> { CaloTowerCollection const* hcalTowers, const reco::VertexCollection& pvVertices, reco::PhotonCollection& outputCollection, - int& iSC); + int& iSC, + EcalPFRecHitThresholds const& thresholds); void fillPhotonCollection(edm::Event& evt, edm::EventSetup const& es, @@ -136,6 +140,8 @@ class GEDPhotonProducer : public edm::stream::EDProducer<> { std::vector severitiesexclEB_; std::vector severitiesexclEE_; + double multThresEB_; + double multThresEE_; double hOverEConeSize_; double maxHOverE_; double minSCEt_; @@ -163,6 +169,7 @@ class GEDPhotonProducer : public edm::stream::EDProducer<> { const edm::ESGetToken caloTopologyToken_; const edm::ESGetToken caloGeometryToken_; + const edm::ESGetToken ecalPFRechitThresholdsToken_; }; #include "FWCore/Framework/interface/MakerMacros.h" @@ -195,7 +202,8 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) ecalClusterESGetTokens_{consumesCollector()}, recoStep_(config.getParameter("reconstructionStep")), caloTopologyToken_{esConsumes()}, - caloGeometryToken_{esConsumes()} { + caloGeometryToken_{esConsumes()}, + ecalPFRechitThresholdsToken_{esConsumes()} { if (recoStep_.isFinal()) { photonProducerT_ = consumes(photonProducer_); pfCandidates_ = consumes(config.getParameter("pfCandidates")); @@ -238,6 +246,8 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) } // photonCollection_ = config.getParameter("outputPhotonCollection"); + multThresEB_ = config.getParameter("multThresEB"); + multThresEE_ = config.getParameter("multThresEE"); hOverEConeSize_ = config.getParameter("hOverEConeSize"); highEt_ = config.getParameter("highEt"); // R9 value to decide converted/unconverted @@ -410,6 +420,7 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& eve caloGeom_ = &eventSetup.getData(caloGeometryToken_); auto const& topology = eventSetup.getData(caloTopologyToken_); + auto const& thresholds = eventSetup.getData(ecalPFRechitThresholdsToken_); // Get the primary event vertex const reco::VertexCollection dummyVC; @@ -439,7 +450,8 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& eve //vtx, vertexCollection, *outputPhotonCollection_p, - iSC); + iSC, + thresholds); iSC = 0; if (validPhotonHandle && recoStep_.isFinal()) @@ -500,7 +512,8 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, CaloTowerCollection const* hcalTowers, const reco::VertexCollection& vertexCollection, reco::PhotonCollection& outputPhotonCollection, - int& iSC) { + int& iSC, + EcalPFRecHitThresholds const& thresholds) { const EcalRecHitCollection* hits = nullptr; std::vector preselCutValues; std::vector flags_, severitiesexcl_; @@ -586,6 +599,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, std::vector cov = (hits != nullptr ? EcalClusterTools::covariances(*(scRef->seed()), hits, topology, caloGeom_) : std::vector({0.f, 0.f, 0.f})); + // fractional local covariances std::vector locCov = (hits != nullptr ? EcalClusterTools::localCovariances(*(scRef->seed()), hits, topology) : std::vector({0.f, 0.f, 0.f})); @@ -602,8 +616,17 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, std::vector full5x5_cov = (hits != nullptr ? noZS::EcalClusterTools::covariances(*(scRef->seed()), hits, topology, caloGeom_) : std::vector({0.f, 0.f, 0.f})); + // for full5x5 local covariances, do noise-cleaning + // by passing per crystal PF recHit thresholds and mult values. + // mult values for EB and EE were obtained by dedicated studies. std::vector full5x5_locCov = - (hits != nullptr ? noZS::EcalClusterTools::localCovariances(*(scRef->seed()), hits, topology) + (hits != nullptr ? noZS::EcalClusterTools::localCovariances(*(scRef->seed()), + hits, + topology, + EgammaLocalCovParamDefaults::kRelEnCut, + &thresholds, + multThresEB_, + multThresEE_) : std::vector({0.f, 0.f, 0.f})); float full5x5_sigmaEtaEta = sqrt(full5x5_cov[0]); 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/EgammaLocalCovParamDefaults.h b/RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h new file mode 100644 index 0000000000000..d5b9d4cfad95a --- /dev/null +++ b/RecoEgamma/EgammaTools/interface/EgammaLocalCovParamDefaults.h @@ -0,0 +1,10 @@ +#ifndef RecoEgamma_EgammaTools_interface_EgammaLocalCovParamDefaults_h +#define RecoEgamma_EgammaTools_interface_EgammaLocalCovParamDefaults_h + +struct EgammaLocalCovParamDefaults { + static constexpr float kRelEnCut = 4.7; + static constexpr float kMultThresEB = 1.0; + static constexpr float kMultThresEE = 1.25; +}; + +#endif diff --git a/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h b/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h index 31547a05dbd1f..f74a291d001a6 100644 --- a/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h +++ b/RecoEgamma/EgammaTools/interface/HGCalShowerShapeHelper.h @@ -38,6 +38,7 @@ #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" @@ -47,7 +48,9 @@ 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. - // If a different set of preselections (E, ET, etc.) is required for a given object, then reinitialize using initPerObject(...). + // 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. @@ -57,8 +60,6 @@ class HGCalShowerShapeHelper { static const double kLDWaferCellSize_; static const double kHDWaferCellSize_; - void setLayerWiseInfo(); - struct ShowerWidths { double sigma2xx; double sigma2yy; @@ -84,48 +85,92 @@ class HGCalShowerShapeHelper { sigma2ww(0.0) {} }; - HGCalShowerShapeHelper(edm::ConsumesCollector &&sumes); + 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); - void initPerObject(const std::vector > &hitsAndFracs, - double minHitE = 0, - double minHitET = 0, - int minLayer = 1, - int maxLayer = -1, - DetId::Detector subDet = DetId::HGCalEE); - - const double getCellSize(DetId detId); - - // Compute Rvar in a cylinder around the layer centroids - const double getRvar(double cylinderR, double energyNorm, bool useFractions = true, bool useCellSize = true); - - // Compute PCA widths around the layer centroids - const ShowerWidths getPCAWidths(double cylinderR, bool useFractions = false); + 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); - void setFilteredHitsAndFractions(const std::vector > &hitsAndFracs); - - double minHitE_; - double minHitET_; - double minHitET2_; - int minLayer_; - int maxLayer_; - int nLayer_; - DetId::Detector subDet_; edm::ESGetToken caloGeometryToken_; - hgcal::RecHitTools recHitTools_; - - std::unordered_map pfRecHitPtrMap_; - std::vector > hitsAndFracs_; - std::vector hitEnergies_; - std::vector hitEnergiesWithFracs_; - - ROOT::Math::XYZVector centroid_; - std::vector layerEnergies_; - std::vector layerCentroids_; + std::shared_ptr recHitTools_; + std::shared_ptr > pfRecHitPtrMap_; }; #endif diff --git a/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc b/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc index 13cc015990d32..a070fa18bbe29 100644 --- a/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc +++ b/RecoEgamma/EgammaTools/src/HGCalShowerShapeHelper.cc @@ -3,145 +3,43 @@ const double HGCalShowerShapeHelper::kLDWaferCellSize_ = 0.698; const double HGCalShowerShapeHelper::kHDWaferCellSize_ = 0.465; -HGCalShowerShapeHelper::HGCalShowerShapeHelper(edm::ConsumesCollector &&sumes) - : caloGeometryToken_{sumes.esConsumes()} {} - -void HGCalShowerShapeHelper::initPerEvent(const edm::EventSetup &iSetup, const std::vector &pfRecHits) { - recHitTools_.setGeometry(iSetup.getData(caloGeometryToken_)); - setPFRecHitPtrMap(pfRecHits); -} - -void HGCalShowerShapeHelper::initPerObject(const std::vector > &hitsAndFracs, - double minHitE, - double minHitET, - int minLayer, - int maxLayer, - DetId::Detector subDet) { - maxLayer = maxLayer <= 0 ? recHitTools_.lastLayerEE() : maxLayer; - - // Safety checks - nLayer_ = maxLayer - minLayer + 1; +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); - - minHitE_ = minHitE; - minHitET_ = minHitET; - minHitET2_ = minHitET * minHitET; - minLayer_ = minLayer; - maxLayer_ = maxLayer; - subDet_ = subDet; - setFilteredHitsAndFractions(hitsAndFracs); - setLayerWiseInfo(); } -void HGCalShowerShapeHelper::setPFRecHitPtrMap(const std::vector &recHits) { - pfRecHitPtrMap_.clear(); - - for (const auto &recHit : recHits) { - pfRecHitPtrMap_[recHit.detId()] = &recHit; - } -} - -void HGCalShowerShapeHelper::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; - } - - if (pfRecHitPtrMap_.find(hitId.rawId()) == pfRecHitPtrMap_.end()) { - continue; - } - - const reco::PFRecHit &recHit = *pfRecHitPtrMap_[hitId.rawId()]; - - 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); - } +double HGCalShowerShapeHelper::ShowerShapeCalc::getCellSize(DetId detId) const { + return recHitTools_->getSiThickIndex(detId) == 0 ? kHDWaferCellSize_ : kLDWaferCellSize_; } -void HGCalShowerShapeHelper::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; - } -} - -const double HGCalShowerShapeHelper::getCellSize(DetId detId) { - return recHitTools_.getSiThickIndex(detId) == 0 ? kHDWaferCellSize_ : kLDWaferCellSize_; -} - -const double HGCalShowerShapeHelper::getRvar(double cylinderR, double energyNorm, bool useFractions, bool useCellSize) { +double HGCalShowerShapeHelper::ShowerShapeCalc::getRvar(double cylinderR, bool useFractions, bool useCellSize) const { if (hitsAndFracs_.empty()) { return 0.0; } - if (energyNorm <= 0.0) { + if (rawEnergy_ <= 0.0) { edm::LogWarning("HGCalShowerShapeHelper") - << "Encountered negative or zero energy for HGCal R-variable denominator: " << energyNorm << std::endl; + << "Encountered negative or zero energy for HGCal R-variable denominator: " << rawEnergy_ << std::endl; } double cylinderR2 = cylinderR * cylinderR; @@ -157,9 +55,9 @@ const double HGCalShowerShapeHelper::getRvar(double cylinderR, double energyNorm DetId hitId = hnf.first; - int hitLayer = recHitTools_.getLayer(hitId) - 1; + int hitLayer = recHitTools_->getLayer(hitId) - 1; - const auto &hitPos = recHitTools_.getPosition(hitId); + const auto &hitPos = recHitTools_->getPosition(hitId); ROOT::Math::XYZVector hitXYZ(hitPos.x(), hitPos.y(), hitPos.z()); auto distXYZ = hitXYZ - layerCentroids_[hitLayer]; @@ -180,12 +78,13 @@ const double HGCalShowerShapeHelper::getRvar(double cylinderR, double energyNorm rVar += *hitEnergyIter; } - rVar /= energyNorm; + rVar /= rawEnergy_; return rVar; } -const HGCalShowerShapeHelper::ShowerWidths HGCalShowerShapeHelper::getPCAWidths(double cylinderR, bool useFractions) { +HGCalShowerShapeHelper::ShowerWidths HGCalShowerShapeHelper::ShowerShapeCalc::getPCAWidths(double cylinderR, + bool useFractions) const { if (hitsAndFracs_.empty()) { return ShowerWidths(); } @@ -214,10 +113,10 @@ const HGCalShowerShapeHelper::ShowerWidths HGCalShowerShapeHelper::getPCAWidths( DetId hitId = hnf.first; - const auto &hitPos = recHitTools_.getPosition(hitId); + const auto &hitPos = recHitTools_->getPosition(hitId); ROOT::Math::XYZVector hitXYZ(hitPos.x(), hitPos.y(), hitPos.z()); - int hitLayer = recHitTools_.getLayer(hitId) - 1; + int hitLayer = recHitTools_->getLayer(hitId) - 1; ROOT::Math::XYZVector radXYZ = hitXYZ - layerCentroids_[hitLayer]; @@ -289,3 +188,143 @@ const HGCalShowerShapeHelper::ShowerWidths HGCalShowerShapeHelper::getPCAWidths( 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/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/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 "; - //< + + diff --git a/RecoHGCal/TICL/plugins/PatternRecognitionbyCA.cc b/RecoHGCal/TICL/plugins/PatternRecognitionbyCA.cc index d668ac8d05806..f0e53b379cc83 100644 --- a/RecoHGCal/TICL/plugins/PatternRecognitionbyCA.cc +++ b/RecoHGCal/TICL/plugins/PatternRecognitionbyCA.cc @@ -188,7 +188,7 @@ void PatternRecognitionbyCA::makeTracksters( ticl::assignPCAtoTracksters(tmpTracksters, input.layerClusters, input.layerClustersTime, - rhtools_.getPositionLayer(rhtools_.lastLayerEE(type)).z()); + rhtools_.getPositionLayer(rhtools_.lastLayerEE(type), type).z()); // run energy regression and ID energyRegressionAndID(input.layerClusters, tmpTracksters); @@ -246,8 +246,10 @@ void PatternRecognitionbyCA::makeTracksters( tmp.swap(result); } - ticl::assignPCAtoTracksters( - result, input.layerClusters, input.layerClustersTime, rhtools_.getPositionLayer(rhtools_.lastLayerEE(type)).z()); + ticl::assignPCAtoTracksters(result, + input.layerClusters, + input.layerClustersTime, + rhtools_.getPositionLayer(rhtools_.lastLayerEE(type), type).z()); // run energy regression and ID energyRegressionAndID(input.layerClusters, result); 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..2092262b79e8b --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionAlgoFactory.cc @@ -0,0 +1,14 @@ +#include "FWCore/ParameterSet/interface/ValidatedPluginFactoryMacros.h" +#include "FWCore/ParameterSet/interface/ValidatedPluginMacros.h" +#include "SeedingRegionAlgoFactory.h" +#include "SeedingRegionByTracks.h" +#include "SeedingRegionGlobal.h" +#include "SeedingRegionByL1.h" +#include "SeedingRegionByHF.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"); +DEFINE_EDM_VALIDATED_PLUGIN(SeedingRegionAlgoFactory, ticl::SeedingRegionByHF, "SeedingRegionByHF"); 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/SeedingRegionByHF.cc b/RecoHGCal/TICL/plugins/SeedingRegionByHF.cc new file mode 100644 index 0000000000000..f995a42777118 --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionByHF.cc @@ -0,0 +1,62 @@ +#include +#include +#include + +#include "SeedingRegionByHF.h" + +using namespace ticl; + +SeedingRegionByHF::SeedingRegionByHF(const edm::ParameterSet &conf, edm::ConsumesCollector &sumes) + : SeedingRegionAlgoBase(conf, sumes), + hfhits_token_(sumes.consumes(conf.getParameter("hits"))), + minAbsEta_(conf.getParameter("minAbsEta")), + maxAbsEta_(conf.getParameter("maxAbsEta")), + minEt_(conf.getParameter("minEt")) { + geo_token_ = sumes.esConsumes(); +} + +SeedingRegionByHF::~SeedingRegionByHF() {} + +void SeedingRegionByHF::initialize(const edm::EventSetup &es) { geometry_ = &es.getData(geo_token_); } + +void SeedingRegionByHF::makeRegions(const edm::Event &ev, + const edm::EventSetup &es, + std::vector &result) { + const auto &recHits = ev.get(hfhits_token_); + + for (const auto &erh : recHits) { + const HcalDetId &detid = (HcalDetId)erh.detid(); + if (erh.energy() < minEt_) + continue; + + const GlobalPoint &globalPosition = + geometry_->getSubdetectorGeometry(DetId::Hcal, HcalForward)->getGeometry(detid)->getPosition(detid); + auto eta = globalPosition.eta(); + + if (std::abs(eta) < minAbsEta_ || std::abs(eta) > maxAbsEta_) + continue; + + int iSide = int(eta > 0); + int idx = 0; + edm::ProductID hfSeedId = edm::ProductID(detid.rawId()); + + auto phi = globalPosition.phi(); + double theta = 2 * atan(exp(eta)); + result.emplace_back( + globalPosition, GlobalVector(GlobalVector::Polar(theta, phi, erh.energy())), iSide, idx, hfSeedId); + } + + // sorting seeding region by descending momentum + std::sort(result.begin(), result.end(), [](const TICLSeedingRegion &a, const TICLSeedingRegion &b) { + return a.directionAtOrigin.perp2() > b.directionAtOrigin.perp2(); + }); +} + +void SeedingRegionByHF::fillPSetDescription(edm::ParameterSetDescription &desc) { + desc.add("hits", edm::InputTag("hfreco")); + desc.add("algo_verbosity", 0); + desc.add("minAbsEta", 3.0); + desc.add("maxAbsEta", 4.0); + desc.add("minEt", 5); + SeedingRegionAlgoBase::fillPSetDescription(desc); +} diff --git a/RecoHGCal/TICL/plugins/SeedingRegionByHF.h b/RecoHGCal/TICL/plugins/SeedingRegionByHF.h new file mode 100644 index 0000000000000..795299c8b31a1 --- /dev/null +++ b/RecoHGCal/TICL/plugins/SeedingRegionByHF.h @@ -0,0 +1,54 @@ +// Author: dalfonso@cern.ch +// Date: 02/2021 + +#ifndef RecoHGCal_TICL_SeedingRegionByHF_h +#define RecoHGCal_TICL_SeedingRegionByHF_h +#include // unique_ptr +#include +#include "RecoHGCal/TICL/plugins/SeedingRegionAlgoBase.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/Framework/interface/ConsumesCollector.h" +#include "CommonTools/Utils/interface/StringCutObjectSelector.h" +#include "FWCore/Utilities/interface/ESGetToken.h" + +#include "DataFormats/HcalRecHit/interface/HFRecHit.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + +namespace ticl { + class SeedingRegionByHF final : public SeedingRegionAlgoBase { + public: + SeedingRegionByHF(const edm::ParameterSet& conf, edm::ConsumesCollector& sumes); + ~SeedingRegionByHF() override; + + 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); + static edm::ParameterSetDescription makePSetDescription(); + + private: + void buildFirstLayers(); + + edm::EDGetTokenT hfhits_token_; + + int algoVerbosity_ = 0; + + double minAbsEta_; + double maxAbsEta_; + double minEt_; + + edm::ESGetToken geo_token_; + const CaloGeometry* geometry_; + }; +} // namespace ticl +#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..0be82627ea2a5 100644 --- a/RecoHGCal/TICL/plugins/SeedingRegionByTracks.cc +++ b/RecoHGCal/TICL/plugins/SeedingRegionByTracks.cc @@ -17,12 +17,15 @@ SeedingRegionByTracks::SeedingRegionByTracks(const edm::ParameterSet &conf, edm: : SeedingRegionAlgoBase(conf, sumes), tracks_token_(sumes.consumes(conf.getParameter("tracks"))), cutTk_(conf.getParameter("cutTk")), + detector_(conf.getParameter("detector")), propName_(conf.getParameter("propagator")), - hdc_token_(sumes.esConsumes( - edm::ESInputTag("", detectorName_))), bfield_token_(sumes.esConsumes()), propagator_token_(sumes.esConsumes( - edm::ESInputTag("", propName_))) {} + edm::ESInputTag("", propName_))) { + std::string detectorName_ = (detector_ == "HFNose") ? "HGCalHFNoseSensitive" : "HGCalEESensitive"; + hdc_token_ = sumes.esConsumes( + edm::ESInputTag("", detectorName_)); +} SeedingRegionByTracks::~SeedingRegionByTracks() {} @@ -65,6 +68,16 @@ 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"); + desc.add("detector", "HGCAL"); + 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..328a351d482f7 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(); @@ -44,7 +46,7 @@ namespace ticl { std::once_flag initializeGeometry_; const HGCalDDDConstants* hgcons_; const StringCutObjectSelector cutTk_; - inline static const std::string detectorName_ = "HGCalEESensitive"; + const std::string detector_; edm::ESHandle propagator_; const std::string propName_; edm::ESHandle bfield_; 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..a25a61820c23e 100644 --- a/RecoHGCal/TICL/plugins/TICLSeedingRegionProducer.cc +++ b/RecoHGCal/TICL/plugins/TICLSeedingRegionProducer.cc @@ -12,10 +12,14 @@ #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 "SeedingRegionAlgoFactory.h" +#include "SeedingRegionByL1.h" #include "SeedingRegionByTracks.h" #include "SeedingRegionGlobal.h" +#include "SeedingRegionByHF.h" using namespace ticl; @@ -31,37 +35,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/python/EMStep_cff.py b/RecoHGCal/TICL/python/EMStep_cff.py index 0aa6f9ca50fd9..be4ee499fddc8 100644 --- a/RecoHGCal/TICL/python/EMStep_cff.py +++ b/RecoHGCal/TICL/python/EMStep_cff.py @@ -51,21 +51,25 @@ filteredLayerClustersHFNoseEM = filteredLayerClustersEM.clone( LayerClusters = 'hgcalLayerClustersHFNose', - LayerClustersInputMask = "hgcalLayerClustersHFNose:InitialLayerClustersMask", + LayerClustersInputMask = 'ticlTrackstersHFNoseTrkEM', iteration_label = "EMn", + min_cluster_size = 2, # inclusive algo_number = 9 -#no tracking mask for EM for now ) ticlTrackstersHFNoseEM = ticlTrackstersEM.clone( detector = "HFNose", layer_clusters = "hgcalLayerClustersHFNose", layer_clusters_hfnose_tiles = "ticlLayerTileHFNose", - original_mask = "hgcalLayerClustersHFNose:InitialLayerClustersMask", + original_mask = "ticlTrackstersHFNoseTrkEM", filtered_mask = "filteredLayerClustersHFNoseEM:EMn", seeding_regions = "ticlSeedingGlobalHFNose", time_layerclusters = "hgcalLayerClustersHFNose:timeLayerCluster", - min_layers_per_trackster = 6 + itername = "EMn", + filter_on_categories = [0, 1], + min_layers_per_trackster = 5, + pid_threshold = 0., + shower_start_max_layer = 5 ### inclusive ) ticlHFNoseEMStepTask = cms.Task(ticlSeedingGlobalHFNose diff --git a/RecoHGCal/TICL/python/HADStep_cff.py b/RecoHGCal/TICL/python/HADStep_cff.py index 72efaebc201ec..9af07d2e4faf4 100644 --- a/RecoHGCal/TICL/python/HADStep_cff.py +++ b/RecoHGCal/TICL/python/HADStep_cff.py @@ -1,6 +1,6 @@ import FWCore.ParameterSet.Config as cms -from RecoHGCal.TICL.TICLSeedingRegions_cff import ticlSeedingGlobal +from RecoHGCal.TICL.TICLSeedingRegions_cff import ticlSeedingGlobal, ticlSeedingGlobalHFNose from RecoHGCal.TICL.ticlLayerTileProducer_cfi import ticlLayerTileProducer as _ticlLayerTileProducer from RecoHGCal.TICL.trackstersProducer_cfi import trackstersProducer as _trackstersProducer from RecoHGCal.TICL.filteredLayerClustersProducer_cfi import filteredLayerClustersProducer as _filteredLayerClustersProducer @@ -44,3 +44,32 @@ ,ticlTrackstersHAD ,ticlMultiClustersFromTrackstersHAD) +filteredLayerClustersHFNoseHAD = _filteredLayerClustersProducer.clone( + min_cluster_size = 2, # inclusive + algo_number = 9, + iteration_label = "HADn", + LayerClusters = 'hgcalLayerClustersHFNose', + LayerClustersInputMask = "hgcalLayerClustersHFNose:InitialLayerClustersMask" +) + +ticlTrackstersHFNoseHAD = _trackstersProducer.clone( + detector = "HFNose", + layer_clusters = "hgcalLayerClustersHFNose", + layer_clusters_hfnose_tiles = "ticlLayerTileHFNose", + original_mask = "hgcalLayerClustersHFNose:InitialLayerClustersMask", + filtered_mask = "filteredLayerClustersHFNoseHAD:HADn", + seeding_regions = "ticlSeedingGlobalHFNose", + time_layerclusters = "hgcalLayerClustersHFNose:timeLayerCluster", + # For the moment we mask everything w/o requirements since we are last + pid_threshold = 0., + skip_layers = 1, + min_layers_per_trackster = 5, + min_cos_theta = 0.866, # ~30 degrees + min_cos_pointing = 0.819, # ~35 degrees + max_delta_time = -1, + itername = "HADRONIC" + ) + +ticlHFNoseHADStepTask = cms.Task(ticlSeedingGlobalHFNose + ,filteredLayerClustersHFNoseHAD + ,ticlTrackstersHFNoseHAD) diff --git a/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py b/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py index 4b76fd39d322c..0013688c98db3 100644 --- a/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py +++ b/RecoHGCal/TICL/python/TICLSeedingRegions_cff.py @@ -5,13 +5,26 @@ # 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") +) + +# fixme: empty seed, need to work on propagator +ticlSeedingTrkHFNose = _ticlSeedingRegionProducer.clone( + seedingPSet = _ticlSeedingRegionProducer.seedingPSet.clone( + type="SeedingRegionByTracks", + cutTk = cms.string('3. < abs(eta) < 4. && pt > 1. && quality("highPurity") && hitPattern().numberOfLostHits("MISSING_OUTER_HITS") < 5'), + detector = cms.string("HFNose") + ) +) + +ticlSeedingByHFHFNose = _ticlSeedingRegionProducer.clone( + seedingPSet = _ticlSeedingRegionProducer.seedingPSet.clone(type="SeedingRegionByHF") ) diff --git a/RecoHGCal/TICL/python/TrkEMStep_cff.py b/RecoHGCal/TICL/python/TrkEMStep_cff.py index 458f489f696ec..826e194f6f7ff 100644 --- a/RecoHGCal/TICL/python/TrkEMStep_cff.py +++ b/RecoHGCal/TICL/python/TrkEMStep_cff.py @@ -1,6 +1,6 @@ import FWCore.ParameterSet.Config as cms -from RecoHGCal.TICL.TICLSeedingRegions_cff import ticlSeedingTrk +from RecoHGCal.TICL.TICLSeedingRegions_cff import ticlSeedingTrk, ticlSeedingTrkHFNose from RecoHGCal.TICL.trackstersProducer_cfi import trackstersProducer as _trackstersProducer from RecoHGCal.TICL.filteredLayerClustersProducer_cfi import filteredLayerClustersProducer as _filteredLayerClustersProducer from RecoHGCal.TICL.multiClustersFromTrackstersProducer_cfi import multiClustersFromTrackstersProducer as _multiClustersFromTrackstersProducer @@ -18,7 +18,7 @@ # CA - PATTERN RECOGNITION ticlTrackstersTrkEM = _trackstersProducer.clone( - filtered_mask = cms.InputTag("filteredLayerClustersTrkEM", "TrkEM"), + filtered_mask = "filteredLayerClustersTrkEM:TrkEM", seeding_regions = "ticlSeedingTrk", filter_on_categories = [0, 1], pid_threshold = 0.5, @@ -49,3 +49,31 @@ ,ticlTrackstersTrkEM ,ticlMultiClustersFromTrackstersTrkEM) +filteredLayerClustersHFNoseTrkEM = filteredLayerClustersTrkEM.clone( + LayerClusters = 'hgcalLayerClustersHFNose', + LayerClustersInputMask = "hgcalLayerClustersHFNose:InitialLayerClustersMask", + min_cluster_size = 2, # inclusive + algo_number = 9, + iteration_label = "TrkEMn" +) + +ticlTrackstersHFNoseTrkEM = ticlTrackstersTrkEM.clone( + detector = "HFNose", + layer_clusters = "hgcalLayerClustersHFNose", + layer_clusters_hfnose_tiles = "ticlLayerTileHFNose", + original_mask = "hgcalLayerClustersHFNose:InitialLayerClustersMask", + filtered_mask = "filteredLayerClustersHFNoseTrkEM:TrkEMn", + seeding_regions = "ticlSeedingTrkHFNose", + time_layerclusters = "hgcalLayerClustersHFNose:timeLayerCluster", + itername = "TrkEMn", + filter_on_categories = [0, 1], + min_layers_per_trackster = 5, + pid_threshold = 0., + shower_start_max_layer = 5 #inclusive + +) + +ticlHFNoseTrkEMStepTask = cms.Task(ticlSeedingTrkHFNose + ,filteredLayerClustersHFNoseTrkEM + ,ticlTrackstersHFNoseTrkEM) + diff --git a/RecoHGCal/TICL/python/iterativeTICL_cff.py b/RecoHGCal/TICL/python/iterativeTICL_cff.py index a3e8851ab68d4..9c961d580d09e 100644 --- a/RecoHGCal/TICL/python/iterativeTICL_cff.py +++ b/RecoHGCal/TICL/python/iterativeTICL_cff.py @@ -37,8 +37,9 @@ ticlLayerTileHFNoseTask = cms.Task(ticlLayerTileHFNose) -iterHFNoseTICLTask = cms.Task( - ticlLayerTileHFNoseTask, - ticlHFNoseMIPStepTask, - ticlHFNoseEMStepTask +iterHFNoseTICLTask = cms.Task(ticlLayerTileHFNoseTask + ,ticlHFNoseTrkEMStepTask + ,ticlHFNoseEMStepTask + ,ticlHFNoseHADStepTask + ,ticlHFNoseMIPStepTask ) 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 1852a8c4d6fd3..0c1ce267f1b11 100644 --- a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py +++ b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py @@ -20,7 +20,8 @@ gedPhotons.isolationSumsCalculatorSet.trackProducer = "hiGeneralTracks" photonIDValueMaps.vertices = "hiSelectedVertex" from RecoHI.HiEgammaAlgos.photonIsolationHIProducer_cfi import photonIsolationHIProducer -photonIsolationHIProducerGED = photonIsolationHIProducer.clone(photonProducer="gedPhotonsTmp") + +photonIsolationHIProducerGED = photonIsolationHIProducer.clone(photonProducer = "gedPhotonsTmp") #These are set for consistency w/ HiElectronSequence, but these cuts need to be studied gedGsfElectronsTmp.preselection.maxHOverEBarrelCone = 0.25 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/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/python/HISelectedTracks_cfi.py b/RecoHI/HiTracking/python/HISelectedTracks_cfi.py index 834e65129c4e5..09257dd05175f 100644 --- a/RecoHI/HiTracking/python/HISelectedTracks_cfi.py +++ b/RecoHI/HiTracking/python/HISelectedTracks_cfi.py @@ -5,47 +5,49 @@ # Track selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiInitialStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( - src = 'hiGlobalPrimTracks', - useAnyMVA = True, + 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 = 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 - ), + GBRForestVars = ['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'nhits', 'nlayers', 'eta'], + 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 = 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 from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiInitialStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiInitialStepSelector, trackSelectors= cms.VPSet( - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiLooseMTS.clone( - name = 'hiInitialStepLoose', - useMVA = False +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.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 + RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( + name = 'hiInitialStep', + preFilterName = 'hiInitialStepTight', + useMVA = False, + minMVA = -0.77 + ), ) #end of vpset ) @@ -61,7 +63,7 @@ selectedTrackQuals = ["hiInitialStepSelector:hiInitialStep"], copyExtras = True, copyMVA = True, - makeReKeyedSeeds = cms.untracked.bool(False) + makeReKeyedSeeds = cms.untracked.bool(False) ) #complete sequence 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/hiDetachedQuadStep_cff.py b/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py index 8f5fa2c9add9c..f1aa1036b9626 100644 --- a/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py +++ b/RecoHI/HiTracking/python/hiDetachedQuadStep_cff.py @@ -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,7 +103,7 @@ import RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi hiDetachedQuadStepSeeds = RecoPixelVertexing.PixelLowPtUtilities.TrackSeeds_cfi.pixelTrackSeeds.clone( - InputCollection = 'hiDetachedQuadStepPixelTracks' + InputCollection = 'hiDetachedQuadStepPixelTracks' ) # QUALITY CUTS DURING TRACK BUILDING @@ -117,12 +117,11 @@ import TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi hiDetachedQuadStepChi2Est = TrackingTools.KalmanUpdators.Chi2MeasurementEstimator_cfi.Chi2MeasurementEstimator.clone( - ComponentName = 'hiDetachedQuadStepChi2Est', - nSigma = 3.0, - MaxChi2 = 9.0 + ComponentName = 'hiDetachedQuadStepChi2Est', + nSigma = 3.0, + MaxChi2 = 9.0 ) - # TRACK BUILDING import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi hiDetachedQuadStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone( @@ -160,7 +159,7 @@ hiDetachedQuadStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( src = 'hiDetachedQuadStepTrackCandidates', AlgorithmName = 'detachedQuadStep', - Fitter = 'FlexibleKFFittingSmoother' + Fitter='FlexibleKFFittingSmoother' ) # Final selection @@ -171,50 +170,51 @@ GBRForestLabel = 'HIMVASelectorIter10',#FIXME MVA for new iteration GBRForestVars = ['chi2perdofperlayer', 'nhits', 'nlayers', 'eta'], 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 = True, - useMVA = True, - minMVA = -0.2 - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiDetachedQuadStep', - preFilterName = 'hiDetachedQuadStepTight', - applyAdaptedPVCuts = True, - useMVA = True, - minMVA = -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 from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiDetachedQuadStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiDetachedQuadStepSelector, 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 +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 diff --git a/RecoHI/HiTracking/python/hiPixelPairStep_cff.py b/RecoHI/HiTracking/python/hiPixelPairStep_cff.py index b906464f29694..10f98f1781995 100644 --- a/RecoHI/HiTracking/python/hiPixelPairStep_cff.py +++ b/RecoHI/HiTracking/python/hiPixelPairStep_cff.py @@ -26,24 +26,24 @@ # SEEDING LAYERS import RecoTracker.TkSeedingLayers.PixelLayerPairs_cfi hiPixelPairSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerPairs_cfi.PixelLayerPairs.clone( - 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') - ) + 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 = ['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 @@ -61,7 +61,7 @@ ) ), OrderedHitsFactoryPSet = dict( - SeedingLayers = 'hiPixelPairSeedLayers', + SeedingLayers = 'hiPixelPairSeedLayers', maxElement = 5000000 ), ClusterCheckPSet = dict( @@ -159,7 +159,6 @@ src = 'hiPixelPairStepSeedsPhase1' ) - # TRACK FITTING import RecoTracker.TrackProducer.TrackProducer_cfi hiPixelPairGlobalPrimTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone( @@ -170,6 +169,7 @@ + # Final selection import RecoHI.HiTracking.hiMultiTrackSelector_cfi hiPixelPairStepSelector = RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiMultiTrackSelector.clone( @@ -178,48 +178,47 @@ GBRForestLabel = 'HIMVASelectorIter6', GBRForestVars = ['chi2perdofperlayer', 'dxyperdxyerror', 'dzperdzerror', 'nhits', 'nlayers', 'eta'], 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 = True, - minMVA = -0.58 - ), - RecoHI.HiTracking.hiMultiTrackSelector_cfi.hiHighpurityMTS.clone( - name = 'hiPixelPairStep', - preFilterName = 'hiPixelPairStepTight', - useMVA = True, - minMVA = 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 from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 -trackingPhase1.toModify(hiPixelPairStepSelector, useAnyMVA = False) -trackingPhase1.toModify(hiPixelPairStepSelector, 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 +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/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/RecoJets/JetAnalyzers/src/CalcTopMassExample.cc b/RecoJets/JetAnalyzers/src/CalcTopMassExample.cc index 1b9257563a206..380d673e84894 100644 --- a/RecoJets/JetAnalyzers/src/CalcTopMassExample.cc +++ b/RecoJets/JetAnalyzers/src/CalcTopMassExample.cc @@ -32,10 +32,10 @@ #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/Common/interface/getRef.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" -#include "SimDataFormats/JetMatching/interface/MatchedPartons.h" -#include "SimDataFormats/JetMatching/interface/JetMatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/MatchedPartons.h" +#include "DataFormats/JetMatching/interface/JetMatchedPartons.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" diff --git a/RecoLocalCalo/EcalRecAlgos/BuildFile.xml b/RecoLocalCalo/EcalRecAlgos/BuildFile.xml index b14fd8e0787f2..723cb21a33908 100644 --- a/RecoLocalCalo/EcalRecAlgos/BuildFile.xml +++ b/RecoLocalCalo/EcalRecAlgos/BuildFile.xml @@ -1,12 +1,9 @@ - - - diff --git a/RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h deleted file mode 100644 index a3f65d0b509fc..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalGainRatiosGPU.h +++ /dev/null @@ -1,43 +0,0 @@ -#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 deleted file mode 100644 index 4b5401ff0316f..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalIntercalibConstantsGPU.h +++ /dev/null @@ -1,43 +0,0 @@ -#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 deleted file mode 100644 index 4a6cd34fcd171..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosGPU.h +++ /dev/null @@ -1,53 +0,0 @@ -#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 deleted file mode 100644 index 985bfd9579f7c..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h +++ /dev/null @@ -1,43 +0,0 @@ -#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 deleted file mode 100644 index 9dd05e9ee3c4d..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h +++ /dev/null @@ -1,43 +0,0 @@ -#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 deleted file mode 100644 index 343bdf1dd1afc..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h +++ /dev/null @@ -1,53 +0,0 @@ -#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 deleted file mode 100644 index 56aa0579ff77f..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalMultifitParametersGPU.h +++ /dev/null @@ -1,39 +0,0 @@ -#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 deleted file mode 100644 index 5387c422ddd9e..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalPedestalsGPU.h +++ /dev/null @@ -1,47 +0,0 @@ -#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/EcalRecHitParametersGPU.h b/RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h deleted file mode 100644 index c5d3dd0388d15..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h +++ /dev/null @@ -1,47 +0,0 @@ -#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 deleted file mode 100644 index 7d4d3cc60fd5c..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h +++ /dev/null @@ -1,42 +0,0 @@ -#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 deleted file mode 100644 index bab99ab656c2d..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h +++ /dev/null @@ -1,42 +0,0 @@ -#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 deleted file mode 100644 index e1dee2d505e6c..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalSamplesCorrelationGPU.h +++ /dev/null @@ -1,44 +0,0 @@ -#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 deleted file mode 100644 index 9e2bf0aa18909..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeBiasCorrectionsGPU.h +++ /dev/null @@ -1,49 +0,0 @@ -#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 deleted file mode 100644 index 823334d433cc2..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/interface/EcalTimeCalibConstantsGPU.h +++ /dev/null @@ -1,43 +0,0 @@ -#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 deleted file mode 100644 index d5980d8a757aa..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalGainRatiosGPU.cc +++ /dev/null @@ -1,52 +0,0 @@ -#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 deleted file mode 100644 index dec10cff57dd0..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalIntercalibConstantsGPU.cc +++ /dev/null @@ -1,40 +0,0 @@ -#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 deleted file mode 100644 index 4aa92ea6750fe..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosGPU.cc +++ /dev/null @@ -1,86 +0,0 @@ -#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 deleted file mode 100644 index 8f77cf48fe1d1..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAPDPNRatiosRefGPU.cc +++ /dev/null @@ -1,40 +0,0 @@ -#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 deleted file mode 100644 index 91de441bff683..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalLaserAlphasGPU.cc +++ /dev/null @@ -1,40 +0,0 @@ -#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 deleted file mode 100644 index 0af2a9044ab65..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalLinearCorrectionsGPU.cc +++ /dev/null @@ -1,84 +0,0 @@ -#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 deleted file mode 100644 index 010da6444b614..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalMultifitParametersGPU.cc +++ /dev/null @@ -1,66 +0,0 @@ -#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 deleted file mode 100644 index 9e3284cd9c7c8..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalPedestalsGPU.cc +++ /dev/null @@ -1,94 +0,0 @@ -#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/EcalRecHitParametersGPU.cc b/RecoLocalCalo/EcalRecAlgos/src/EcalRecHitParametersGPU.cc deleted file mode 100644 index 0f6812d6d6ffe..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalRecHitParametersGPU.cc +++ /dev/null @@ -1,82 +0,0 @@ -#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 deleted file mode 100644 index 5f01068f95186..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalRechitADCToGeVConstantGPU.cc +++ /dev/null @@ -1,34 +0,0 @@ -#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 deleted file mode 100644 index 1e6801fbd326a..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalRechitChannelStatusGPU.cc +++ /dev/null @@ -1,42 +0,0 @@ -#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 deleted file mode 100644 index 2a98067f51d9e..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalSamplesCorrelationGPU.cc +++ /dev/null @@ -1,76 +0,0 @@ -#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 deleted file mode 100644 index 9ab0a6302a9c4..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalTimeBiasCorrectionsGPU.cc +++ /dev/null @@ -1,61 +0,0 @@ -#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 deleted file mode 100644 index d724a33f1d4e1..0000000000000 --- a/RecoLocalCalo/EcalRecAlgos/src/EcalTimeCalibConstantsGPU.cc +++ /dev/null @@ -1,40 +0,0 @@ -#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/plugins/AmplitudeComputationCommonKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.cu index f1b1a53a78a30..5a6bb0577c45c 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.cu +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.cu @@ -7,6 +7,7 @@ #include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" #include "CondFormats/EcalObjects/interface/EcalSamplesCorrelation.h" #include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalMGPASample.h" #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" #include "DataFormats/Math/interface/approx_exp.h" #include "DataFormats/Math/interface/approx_log.h" @@ -113,8 +114,8 @@ namespace ecal { // // amplitudes // - int const adc = ecal::mgpa::adc(digis_in[inputTx]); - int const gainId = ecal::mgpa::gainId(digis_in[inputTx]); + int const adc = ecalMGPA::adc(digis_in[inputTx]); + int const gainId = ecalMGPA::gainId(digis_in[inputTx]); SampleVector::Scalar amplitude = 0.; SampleVector::Scalar pedestal = 0.; SampleVector::Scalar gainratio = 0.; diff --git a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h index 479c623e83f62..1797fb6d2ec88 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationCommonKernels.h @@ -1,7 +1,6 @@ #ifndef RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationCommonKernels_h #define RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationCommonKernels_h -#include "Common.h" #include "DeclsForKernels.h" #include "EigenMatrixTypes_gpu.h" diff --git a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h index b8202f75b653b..72ccf3b11a987 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/AmplitudeComputationKernels.h @@ -1,7 +1,6 @@ #ifndef RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationKernels_h #define RecoLocalCalo_EcalRecProducers_plugins_AmplitudeComputationKernels_h -#include "Common.h" #include "DeclsForKernels.h" #include "EigenMatrixTypes_gpu.h" diff --git a/RecoLocalCalo/EcalRecProducers/plugins/Common.h b/RecoLocalCalo/EcalRecProducers/plugins/Common.h deleted file mode 100644 index 55f5f613ed356..0000000000000 --- a/RecoLocalCalo/EcalRecProducers/plugins/Common.h +++ /dev/null @@ -1,17 +0,0 @@ -#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 index cac63b6b30112..b1e1dafdb7496 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/DeclsForKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/DeclsForKernels.h @@ -13,26 +13,26 @@ #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" #include "CondFormats/EcalObjects/interface/EcalChannelStatusCode.h" #include "CondFormats/EcalObjects/interface/EcalGainRatios.h" +#include "CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h" +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h" #include "CondFormats/EcalObjects/interface/EcalPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalPedestalsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h" +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h" #include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.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" @@ -67,11 +67,11 @@ namespace ecal { struct ConfigurationParameters { using type = double; // device ptrs - type *amplitudeFitParametersEB = nullptr, *amplitudeFitParametersEE = nullptr; + const type *amplitudeFitParametersEB = nullptr, *amplitudeFitParametersEE = nullptr; uint32_t timeFitParametersSizeEB, timeFitParametersSizeEE; // device ptrs - type *timeFitParametersEB = nullptr, *timeFitParametersEE = nullptr; + const type *timeFitParametersEB = nullptr, *timeFitParametersEE = nullptr; type timeFitLimitsFirstEB, timeFitLimitsFirstEE; type timeFitLimitsSecondEB, timeFitLimitsSecondEE; @@ -250,7 +250,7 @@ namespace ecal { // parameters that are read in the configuration file for rechit producer struct ConfigurationParameters { // device ptrs - int* ChannelStatusToBeExcluded = nullptr; + const int* ChannelStatusToBeExcluded = nullptr; uint32_t ChannelStatusToBeExcludedSize; bool killDeadChannels; @@ -267,9 +267,9 @@ namespace ecal { 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; + const int* expanded_v_DB_reco_flags; + const uint32_t* expanded_Sizes_v_DB_reco_flags; + const uint32_t* expanded_flagbit_v_DB_reco_flags; uint32_t expanded_v_DB_reco_flagsSize; uint32_t flagmask; diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc index 3118d54c6a7e9..5bdadecc75ef8 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalESProducersGPUDefs.cc @@ -12,22 +12,22 @@ #include "CondFormats/DataRecord/interface/EcalSamplesCorrelationRcd.h" #include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" #include "CondFormats/DataRecord/interface/EcalTimeCalibConstantsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h" +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPedestalsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h" +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h" +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.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; diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc index 1743df5aa945d..406f5507be5fc 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalMultifitParametersGPUESProducer.cc @@ -2,6 +2,7 @@ #include #include +#include "CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/ESProductHost.h" #include "FWCore/Framework/interface/ESTransientHandle.h" @@ -14,7 +15,6 @@ #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: diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu index 6e1b2a66c2507..8e77a58b66f4a 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.cu @@ -285,11 +285,9 @@ namespace ecal { // // Check for channels to be excluded from reconstruction // - // - // Default energy? Not to be updated if "ChannelStatusToBeExcluded" + // Default energy not to be updated if "ChannelStatusToBeExcluded" // Exploited later by the module "EcalRecHitConvertGPU2CPUFormat" - // - energy[inputCh] = -1; //---- AM: default, un-physical, ok + energy[inputCh] = -1; //un-physical default // truncate the chi2 if (chi2_in[inputCh] > 64) diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h index cb9c7f435d7b3..8d468a0f7f1ec 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitBuilderKernels.h @@ -9,7 +9,6 @@ #include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h" #include "DataFormats/Provenance/interface/Timestamp.h" -#include "Common.h" #include "DeclsForKernels.h" namespace ecal { diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc index 6df36f4a8b592..b71747a57db78 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitConvertGPU2CPUFormat.cc @@ -8,8 +8,6 @@ #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); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc index a63ed42cb2b70..8c6c8ce3ae236 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc @@ -2,6 +2,7 @@ #include #include +#include "CondFormats/EcalObjects/interface/EcalRecHitParametersGPU.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/ESProductHost.h" #include "FWCore/Framework/interface/ESTransientHandle.h" @@ -14,7 +15,6 @@ #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: diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc index a6dabd37f8439..38c142f4c41f2 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc @@ -9,6 +9,14 @@ #include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRefRcd.h" #include "CondFormats/DataRecord/interface/EcalLaserAlphasRcd.h" #include "CondFormats/DataRecord/interface/EcalLinearCorrectionsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRefGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLaserAlphasGPU.h" +#include "CondFormats/EcalObjects/interface/EcalLinearCorrectionsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRecHitParametersGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRechitADCToGeVConstantGPU.h" +#include "CondFormats/EcalObjects/interface/EcalRechitChannelStatusGPU.h" #include "DataFormats/EcalRecHit/interface/EcalRecHit.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" @@ -20,14 +28,6 @@ #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" @@ -198,11 +198,11 @@ void EcalRecHitProducerGPU::acquire(edm::Event const& event, auto const& recHitParametersProduct = recHitParametersHandle_->getProduct(ctx.stream()); // set config ptrs : this is done to avoid changing things downstream - configParameters_.ChannelStatusToBeExcluded = recHitParametersProduct.ChannelStatusToBeExcluded; + configParameters_.ChannelStatusToBeExcluded = recHitParametersProduct.channelStatusToBeExcluded.get(); 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_flags = recHitParametersProduct.expanded_v_DB_reco_flags.get(); + configParameters_.expanded_Sizes_v_DB_reco_flags = recHitParametersProduct.expanded_Sizes_v_DB_reco_flags.get(); + configParameters_.expanded_flagbit_v_DB_reco_flags = recHitParametersProduct.expanded_flagbit_v_DB_reco_flags.get(); configParameters_.expanded_v_DB_reco_flagsSize = std::get<3>(recHitParametersHandle_->getValues()).get().size(); // bundle up conditions diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc index f7e57a61fdd96..b26fbe3a0c572 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc @@ -8,8 +8,6 @@ #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); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu index 9d5a8a2ad1bd3..6d4f0b9a24220 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitMultiFitAlgoGPU.cu @@ -15,7 +15,6 @@ #include "AmplitudeComputationCommonKernels.h" #include "AmplitudeComputationKernels.h" -#include "Common.h" #include "EcalUncalibRecHitMultiFitAlgoGPU.h" #include "TimeComputationKernels.h" @@ -262,10 +261,10 @@ namespace ecal { eventInputGPU.ebDigis.ids.get(), eventInputGPU.eeDigis.data.get(), eventInputGPU.eeDigis.ids.get(), - conditions.timeBiasCorrections.EBTimeCorrAmplitudeBins, - conditions.timeBiasCorrections.EETimeCorrAmplitudeBins, - conditions.timeBiasCorrections.EBTimeCorrShiftBins, - conditions.timeBiasCorrections.EETimeCorrShiftBins, + conditions.timeBiasCorrections.ebTimeCorrAmplitudeBins, + conditions.timeBiasCorrections.eeTimeCorrAmplitudeBins, + conditions.timeBiasCorrections.ebTimeCorrShiftBins, + conditions.timeBiasCorrections.eeTimeCorrShiftBins, scratch.timeMax.get(), scratch.timeError.get(), conditions.pedestals.rms_x12, @@ -276,8 +275,8 @@ namespace ecal { eventOutputGPU.recHitsEE.jitterError.get(), eventOutputGPU.recHitsEB.flags.get(), eventOutputGPU.recHitsEE.flags.get(), - conditions.timeBiasCorrections.EBTimeCorrAmplitudeBinsSize, - conditions.timeBiasCorrections.EETimeCorrAmplitudeBinsSize, + conditions.timeBiasCorrections.ebTimeCorrAmplitudeBinsSize, + conditions.timeBiasCorrections.eeTimeCorrAmplitudeBinsSize, configParameters.timeConstantTermEB, configParameters.timeConstantTermEE, conditions.timeOffsetConstant.getEBValue(), diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc index a321f35144c39..3729bddde895f 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitProducerGPU.cc @@ -8,6 +8,14 @@ #include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" #include "CondFormats/DataRecord/interface/EcalTimeCalibConstantsRcd.h" #include "CondFormats/DataRecord/interface/EcalTimeOffsetConstantRcd.h" +#include "CondFormats/EcalObjects/interface/EcalGainRatiosGPU.h" +#include "CondFormats/EcalObjects/interface/EcalMultifitParametersGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPedestalsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseCovariancesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalPulseShapesGPU.h" +#include "CondFormats/EcalObjects/interface/EcalSamplesCorrelationGPU.h" +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrectionsGPU.h" +#include "CondFormats/EcalObjects/interface/EcalTimeCalibConstantsGPU.h" #include "CondFormats/EcalObjects/interface/EcalTimeOffsetConstant.h" #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" #include "FWCore/Framework/interface/Event.h" @@ -18,16 +26,7 @@ #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" @@ -229,10 +228,10 @@ void EcalUncalibRecHitProducerGPU::acquire(edm::Event const& event, 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_.amplitudeFitParametersEB = multifitParameters.amplitudeFitParametersEB.get(); + configParameters_.amplitudeFitParametersEE = multifitParameters.amplitudeFitParametersEE.get(); + configParameters_.timeFitParametersEB = multifitParameters.timeFitParametersEB.get(); + configParameters_.timeFitParametersEE = multifitParameters.timeFitParametersEE.get(); configParameters_.timeFitParametersSizeEB = multifitParametersData.getValues()[2].get().size(); configParameters_.timeFitParametersSizeEE = multifitParametersData.getValues()[3].get().size(); 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/KernelHelpers.cu b/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.cu index 5316ed87d6ecc..a05e69f7b0442 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.cu +++ b/RecoLocalCalo/EcalRecProducers/plugins/KernelHelpers.cu @@ -47,10 +47,6 @@ namespace ecal { 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 diff --git a/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu index 9c2d2fc986c08..e67802f44c8df 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu +++ b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.cu @@ -4,12 +4,12 @@ #include #include "DataFormats/EcalDigi/interface/EcalDataFrame.h" +#include "DataFormats/EcalDigi/interface/EcalMGPASample.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" @@ -693,8 +693,8 @@ namespace ecal { if (!use_sample(sample_mask, sample)) return; - const auto gainIdPrev = ecal::mgpa::gainId(digis[inputGtx - 1]); - const auto gainIdNext = ecal::mgpa::gainId(digis[inputGtx]); + const auto gainIdPrev = ecalMGPA::gainId(digis[inputGtx - 1]); + const auto gainIdNext = ecalMGPA::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; @@ -849,10 +849,10 @@ namespace ecal { 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 adc0 = ecalMGPA::adc(digis[input_ch_start]); + const auto gainId0 = ecalMGPA::gainId(digis[input_ch_start]); + const auto adc1 = ecalMGPA::adc(digis[input_ch_start + 1]); + const auto gainId1 = ecalMGPA::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; @@ -875,8 +875,8 @@ namespace ecal { } // ped subtracted and gain-renormalized samples. - const auto gainId = ecal::mgpa::gainId(digis[inputTx]); - const auto adc = ecal::mgpa::adc(digis[inputTx]); + const auto gainId = ecalMGPA::gainId(digis[inputTx]); + const auto adc = ecalMGPA::adc(digis[inputTx]); bool bad = false; SampleVector::Scalar sample_value, sample_value_error; @@ -1112,7 +1112,7 @@ namespace ecal { auto threshM = outOfTimeThreshG12m; if (amplitude > 3000.) { for (int isample = 0; isample < nsamples; isample++) { - int gainid = ecal::mgpa::gainId(digis[nsamples * inputGtx + isample]); + int gainid = ecalMGPA::gainId(digis[nsamples * inputGtx + isample]); if (gainid != 1) { threshP = outOfTimeThreshG61p; threshM = outOfTimeThreshG61m; diff --git a/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h index a9b1c69678abd..dea6bad26fa0d 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/TimeComputationKernels.h @@ -9,7 +9,6 @@ #include "DataFormats/Math/interface/approx_exp.h" #include "DataFormats/Math/interface/approx_log.h" -#include "Common.h" #include "DeclsForKernels.h" #include "EigenMatrixTypes_gpu.h" 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/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/HGCalRecProducers/BuildFile.xml b/RecoLocalCalo/HGCalRecProducers/BuildFile.xml index 291cf1fc01881..caf337a1ffdd6 100644 --- a/RecoLocalCalo/HGCalRecProducers/BuildFile.xml +++ b/RecoLocalCalo/HGCalRecProducers/BuildFile.xml @@ -1,7 +1,20 @@ + + + + + + + + + + + + + + - diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/BuildFile.xml b/RecoLocalCalo/HGCalRecProducers/plugins/BuildFile.xml index 318a924040fad..ddd7b85e4f9b0 100644 --- a/RecoLocalCalo/HGCalRecProducers/plugins/BuildFile.xml +++ b/RecoLocalCalo/HGCalRecProducers/plugins/BuildFile.xml @@ -1,12 +1,21 @@ - - - + + + + + + + + - - + + + + + + diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitFromSoA.cc b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitFromSoA.cc new file mode 100644 index 0000000000000..1e4585d075def --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitFromSoA.cc @@ -0,0 +1,58 @@ +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" + +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" +#include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h" + +class EERecHitFromSoA : public edm::stream::EDProducer<> { +public: + explicit EERecHitFromSoA(const edm::ParameterSet& ps); + ~EERecHitFromSoA() override; + + void produce(edm::Event&, const edm::EventSetup&) override; + void convert_soa_data_to_collection_(uint32_t, HGCRecHitCollection&, ConstHGCRecHitSoA*); + +private: + std::unique_ptr rechits_; + edm::EDGetTokenT recHitSoAToken_; + edm::EDPutTokenT recHitCollectionToken_; +}; + +EERecHitFromSoA::EERecHitFromSoA(const edm::ParameterSet& ps) { + recHitSoAToken_ = consumes(ps.getParameter("EERecHitSoATok")); + recHitCollectionToken_ = produces(); +} + +EERecHitFromSoA::~EERecHitFromSoA() {} + +void EERecHitFromSoA::produce(edm::Event& event, const edm::EventSetup& setup) { + const HGCRecHitCPUProduct& recHits = event.get(recHitSoAToken_); + ConstHGCRecHitSoA recHitsSoA = recHits.get(); + rechits_ = std::make_unique(); + convert_soa_data_to_collection_(recHits.nHits(), *rechits_, &recHitsSoA); + event.put(std::move(rechits_)); +} + +void EERecHitFromSoA::convert_soa_data_to_collection_(uint32_t nhits, + HGCRecHitCollection& rechits, + ConstHGCRecHitSoA* h_calibSoA) { + rechits.reserve(nhits); + for (uint i = 0; i < nhits; ++i) { + DetId id_converted(h_calibSoA->id_[i]); + rechits.emplace_back(id_converted, + h_calibSoA->energy_[i], + h_calibSoA->time_[i], + 0, + h_calibSoA->flagBits_[i], + h_calibSoA->son_[i], + h_calibSoA->timeError_[i]); + } +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EERecHitFromSoA); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc new file mode 100644 index 0000000000000..aa0e41bd82b6c --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc @@ -0,0 +1,145 @@ +#include +#include + +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDACore/interface/ContextState.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/MessageLogger.h" + +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitHost.h" + +class EERecHitGPU : public edm::stream::EDProducer<> { +public: + explicit EERecHitGPU(const edm::ParameterSet &ps); + ~EERecHitGPU() override; + void beginRun(edm::Run const &, edm::EventSetup const &) override; + + void produce(edm::Event &, const edm::EventSetup &) override; + +private: + edm::EDGetTokenT uncalibRecHitCPUToken_; + edm::EDPutTokenT> recHitGPUToken_; + + std::unique_ptr rechits_; + + //constants + HGCeeUncalibRecHitConstantData cdata_; + HGCConstantVectorData vdata_; + + std::string assert_error_message_(std::string, const size_t &, const size_t &); + void assert_sizes_constants_(const HGCConstantVectorData &); + + //conditions (geometry, topology, ...) + std::unique_ptr tools_; + + //data processing + void convert_collection_data_to_soa_(const uint32_t &, const HGCeeUncalibratedRecHitCollection &); + void convert_constant_data_(KernelConstantData *); + + HGCRecHitGPUProduct prod_; + HGCUncalibRecHitDevice d_uncalib_; + HGCUncalibRecHitHost h_uncalib_; + + KernelConstantData *kcdata_; +}; + +EERecHitGPU::EERecHitGPU(const edm::ParameterSet &ps) + : uncalibRecHitCPUToken_{consumes( + ps.getParameter("HGCEEUncalibRecHitsTok"))}, + recHitGPUToken_{produces>()} { + cdata_.keV2DIGI_ = ps.getParameter("HGCEE_keV2DIGI"); + cdata_.xmin_ = ps.getParameter("minValSiPar"); //float + cdata_.xmax_ = ps.getParameter("maxValSiPar"); //float + cdata_.aterm_ = ps.getParameter("noiseSiPar"); //float + cdata_.cterm_ = ps.getParameter("constSiPar"); //float + vdata_.fCPerMIP_ = ps.getParameter>("HGCEE_fCPerMIP"); + vdata_.cce_ = ps.getParameter("HGCEE_cce").getParameter>("values"); + vdata_.noise_fC_ = ps.getParameter("HGCEE_noise_fC").getParameter>("values"); + vdata_.rcorr_ = ps.getParameter>("rcorr"); + vdata_.weights_ = ps.getParameter>("weights"); + cdata_.uncalib2GeV_ = 1e-6 / cdata_.keV2DIGI_; + assert_sizes_constants_(vdata_); + + kcdata_ = new KernelConstantData(cdata_, vdata_); + convert_constant_data_(kcdata_); + + tools_ = std::make_unique(); +} + +EERecHitGPU::~EERecHitGPU() { delete kcdata_; } + +std::string EERecHitGPU::assert_error_message_(std::string var, const size_t &s1, const size_t &s2) { + std::string str1 = "The '"; + std::string str2 = "' array must be of size "; + std::string str3 = " to hold the configuration data, but is of size "; + return str1 + var + str2 + std::to_string(s1) + str3 + std::to_string(s2); +} + +void EERecHitGPU::assert_sizes_constants_(const HGCConstantVectorData &vd) { + if (vdata_.fCPerMIP_.size() != HGCeeUncalibRecHitConstantData::ee_fCPerMIP) + edm::LogError("WrongSize") << this->assert_error_message_( + "fCPerMIP", HGCeeUncalibRecHitConstantData::ee_fCPerMIP, vdata_.fCPerMIP_.size()); + else if (vdata_.cce_.size() != HGCeeUncalibRecHitConstantData::ee_cce) + edm::LogError("WrongSize") << this->assert_error_message_( + "cce", HGCeeUncalibRecHitConstantData::ee_cce, vdata_.cce_.size()); + else if (vdata_.noise_fC_.size() != HGCeeUncalibRecHitConstantData::ee_noise_fC) + edm::LogError("WrongSize") << this->assert_error_message_( + "noise_fC", HGCeeUncalibRecHitConstantData::ee_noise_fC, vdata_.noise_fC_.size()); + else if (vdata_.rcorr_.size() != HGCeeUncalibRecHitConstantData::ee_rcorr) + edm::LogError("WrongSize") << this->assert_error_message_( + "rcorr", HGCeeUncalibRecHitConstantData::ee_rcorr, vdata_.rcorr_.size()); + else if (vdata_.weights_.size() != HGCeeUncalibRecHitConstantData::ee_weights) + edm::LogError("WrongSize") << this->assert_error_message_( + "weights", HGCeeUncalibRecHitConstantData::ee_weights, vdata_.weights_.size()); +} + +void EERecHitGPU::beginRun(edm::Run const &, edm::EventSetup const &setup) {} + +void EERecHitGPU::produce(edm::Event &event, const edm::EventSetup &setup) { + cms::cuda::ScopedContextProduce ctx{event.streamID()}; + + const auto &hits = event.get(uncalibRecHitCPUToken_); + const unsigned nhits(hits.size()); + rechits_ = std::make_unique(); + + if (nhits == 0) + edm::LogError("EERecHitGPU") << "WARNING: no input hits!"; + + prod_ = HGCRecHitGPUProduct(nhits, ctx.stream()); + d_uncalib_ = HGCUncalibRecHitDevice(nhits, ctx.stream()); + h_uncalib_ = HGCUncalibRecHitHost(nhits, hits, ctx.stream()); + + KernelManagerHGCalRecHit km(h_uncalib_.get(), d_uncalib_.get(), prod_.get()); + km.run_kernels(kcdata_, ctx.stream()); + + ctx.emplace(event, recHitGPUToken_, std::move(prod_)); +} + +void EERecHitGPU::convert_constant_data_(KernelConstantData *kcdata) { + for (size_t i = 0; i < kcdata->vdata_.fCPerMIP_.size(); ++i) + kcdata->data_.fCPerMIP_[i] = kcdata->vdata_.fCPerMIP_[i]; + for (size_t i = 0; i < kcdata->vdata_.cce_.size(); ++i) + kcdata->data_.cce_[i] = kcdata->vdata_.cce_[i]; + for (size_t i = 0; i < kcdata->vdata_.noise_fC_.size(); ++i) + kcdata->data_.noise_fC_[i] = kcdata->vdata_.noise_fC_[i]; + for (size_t i = 0; i < kcdata->vdata_.rcorr_.size(); ++i) + kcdata->data_.rcorr_[i] = kcdata->vdata_.rcorr_[i]; + for (size_t i = 0; i < kcdata->vdata_.weights_.size(); ++i) + kcdata->data_.weights_[i] = kcdata->vdata_.weights_[i]; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EERecHitGPU); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPUtoSoA.cc b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPUtoSoA.cc new file mode 100644 index 0000000000000..4ef1d4530722d --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPUtoSoA.cc @@ -0,0 +1,74 @@ +#include +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDACore/interface/ContextState.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" + +class EERecHitGPUtoSoA : public edm::stream::EDProducer { +public: + explicit EERecHitGPUtoSoA(const edm::ParameterSet& ps); + ~EERecHitGPUtoSoA() override; + + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, const edm::EventSetup&) override; + +private: + cms::cuda::ContextState ctxState_; + edm::EDGetTokenT> recHitGPUToken_; + edm::EDPutTokenT recHitCPUSoAToken_; + + std::unique_ptr prodPtr_; +}; + +EERecHitGPUtoSoA::EERecHitGPUtoSoA(const edm::ParameterSet& ps) + : recHitGPUToken_{consumes>( + ps.getParameter("EERecHitGPUTok"))}, + recHitCPUSoAToken_(produces()) {} + +EERecHitGPUtoSoA::~EERecHitGPUtoSoA() {} + +void EERecHitGPUtoSoA::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder w) { + cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(w)}; + const auto& gpuRecHits = ctx.get(event, recHitGPUToken_); + + prodPtr_ = std::make_unique(gpuRecHits.nHits(), ctx.stream()); + + HGCRecHitCPUProduct& prod_ = *prodPtr_; + KernelManagerHGCalRecHit km(prod_.get(), gpuRecHits.get()); + km.transfer_soa_to_host(ctx.stream()); +} + +void EERecHitGPUtoSoA::produce(edm::Event& event, const edm::EventSetup& setup) { event.put(std::move(prodPtr_)); } + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EERecHitGPUtoSoA); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitFromSoA.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitFromSoA.cc new file mode 100644 index 0000000000000..25f520cdc4ced --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitFromSoA.cc @@ -0,0 +1,60 @@ +#include + +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" + +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" +#include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h" + +class HEBRecHitFromSoA : public edm::stream::EDProducer<> { +public: + explicit HEBRecHitFromSoA(const edm::ParameterSet& ps); + ~HEBRecHitFromSoA() override; + + void produce(edm::Event&, const edm::EventSetup&) override; + void convert_soa_data_to_collection_(uint32_t, HGCRecHitCollection&, ConstHGCRecHitSoA*); + +private: + std::unique_ptr rechits_; + edm::EDGetTokenT recHitSoAToken_; + edm::EDPutTokenT recHitCollectionToken_; +}; + +HEBRecHitFromSoA::HEBRecHitFromSoA(const edm::ParameterSet& ps) { + recHitSoAToken_ = consumes(ps.getParameter("HEBRecHitSoATok")); + recHitCollectionToken_ = produces(); +} + +HEBRecHitFromSoA::~HEBRecHitFromSoA() {} + +void HEBRecHitFromSoA::produce(edm::Event& event, const edm::EventSetup& setup) { + const HGCRecHitCPUProduct& recHits = event.get(recHitSoAToken_); + ConstHGCRecHitSoA recHitsSoA = recHits.get(); + rechits_ = std::make_unique(); + convert_soa_data_to_collection_(recHits.nHits(), *rechits_, &recHitsSoA); + event.put(std::move(rechits_)); +} + +void HEBRecHitFromSoA::convert_soa_data_to_collection_(uint32_t nhits, + HGCRecHitCollection& rechits, + ConstHGCRecHitSoA* h_calibSoA) { + rechits.reserve(nhits); + for (uint i = 0; i < nhits; ++i) { + DetId id_converted(h_calibSoA->id_[i]); + rechits.emplace_back(id_converted, + h_calibSoA->energy_[i], + h_calibSoA->time_[i], + 0, + h_calibSoA->flagBits_[i], + h_calibSoA->son_[i], + h_calibSoA->timeError_[i]); + } +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HEBRecHitFromSoA); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc new file mode 100644 index 0000000000000..b9c08de83d519 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc @@ -0,0 +1,119 @@ +#include +#include + +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDACore/interface/ContextState.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/MessageLogger.h" + +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitHost.h" + +class HEBRecHitGPU : public edm::stream::EDProducer<> { +public: + explicit HEBRecHitGPU(const edm::ParameterSet &ps); + ~HEBRecHitGPU() override; + void beginRun(edm::Run const &, edm::EventSetup const &) override; + + void produce(edm::Event &, const edm::EventSetup &) override; + +private: + edm::EDGetTokenT uncalibRecHitCPUToken_; + edm::EDPutTokenT> recHitGPUToken_; + + std::unique_ptr rechits_; + + //constants + HGChebUncalibRecHitConstantData cdata_; + HGCConstantVectorData vdata_; + + //memory + std::string assert_error_message_(std::string, const size_t &); + void assert_sizes_constants_(const HGCConstantVectorData &); + + //conditions (geometry, topology, ...) + std::unique_ptr tools_; + + //data processing + void convert_collection_data_to_soa_(const uint32_t &, const HGChebUncalibratedRecHitCollection &); + void convert_constant_data_(KernelConstantData *); + + HGCRecHitGPUProduct prod_; + HGCUncalibRecHitDevice d_uncalib_; + HGCUncalibRecHitHost h_uncalib_; + + KernelConstantData *kcdata_; +}; + +HEBRecHitGPU::HEBRecHitGPU(const edm::ParameterSet &ps) + : uncalibRecHitCPUToken_{consumes( + ps.getParameter("HGCHEBUncalibRecHitsTok"))}, + recHitGPUToken_{produces>()} { + cdata_.keV2DIGI_ = ps.getParameter("HGCHEB_keV2DIGI"); + cdata_.noise_MIP_ = ps.getParameter("HGCHEB_noise_MIP").getParameter("noise_MIP"); + vdata_.weights_ = ps.getParameter>("weights"); + cdata_.uncalib2GeV_ = 1e-6 / cdata_.keV2DIGI_; + cdata_.layerOffset_ = 28; + assert_sizes_constants_(vdata_); + + kcdata_ = new KernelConstantData(cdata_, vdata_); + convert_constant_data_(kcdata_); + + tools_ = std::make_unique(); +} + +HEBRecHitGPU::~HEBRecHitGPU() { delete kcdata_; } + +std::string HEBRecHitGPU::assert_error_message_(std::string var, const size_t &s) { + std::string str1 = "The '"; + std::string str2 = "' array must be of size "; + std::string str3 = " to hold the configuration data."; + return str1 + var + str2 + std::to_string(s) + str3; +} + +void HEBRecHitGPU::assert_sizes_constants_(const HGCConstantVectorData &vd) { + if (vdata_.weights_.size() != HGChebUncalibRecHitConstantData::heb_weights) + edm::LogError("WrongSize") << this->assert_error_message_("weights", vdata_.fCPerMIP_.size()); +} + +void HEBRecHitGPU::beginRun(edm::Run const &, edm::EventSetup const &setup) {} + +void HEBRecHitGPU::produce(edm::Event &event, const edm::EventSetup &setup) { + cms::cuda::ScopedContextProduce ctx{event.streamID()}; + + const auto &hits = event.get(uncalibRecHitCPUToken_); + unsigned int nhits(hits.size()); + rechits_ = std::make_unique(); + + if (nhits == 0) + edm::LogError("HEBRecHitGPU") << "WARNING: no input hits!"; + + prod_ = HGCRecHitGPUProduct(nhits, ctx.stream()); + d_uncalib_ = HGCUncalibRecHitDevice(nhits, ctx.stream()); + h_uncalib_ = HGCUncalibRecHitHost(nhits, hits, ctx.stream()); + + KernelManagerHGCalRecHit km(h_uncalib_.get(), d_uncalib_.get(), prod_.get()); + km.run_kernels(kcdata_, ctx.stream()); + + ctx.emplace(event, recHitGPUToken_, std::move(prod_)); +} + +void HEBRecHitGPU::convert_constant_data_(KernelConstantData *kcdata) { + for (size_t i = 0; i < kcdata->vdata_.weights_.size(); ++i) + kcdata->data_.weights_[i] = kcdata->vdata_.weights_[i]; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HEBRecHitGPU); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPUtoSoA.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPUtoSoA.cc new file mode 100644 index 0000000000000..2322128fb09a3 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPUtoSoA.cc @@ -0,0 +1,73 @@ +#include +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDACore/interface/ContextState.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" + +class HEBRecHitGPUtoSoA : public edm::stream::EDProducer { +public: + explicit HEBRecHitGPUtoSoA(const edm::ParameterSet& ps); + ~HEBRecHitGPUtoSoA() override; + + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, const edm::EventSetup&) override; + +private: + cms::cuda::ContextState ctxState_; + edm::EDGetTokenT> recHitGPUToken_; + edm::EDPutTokenT recHitCPUSoAToken_; + + std::unique_ptr prodPtr_; +}; + +HEBRecHitGPUtoSoA::HEBRecHitGPUtoSoA(const edm::ParameterSet& ps) + : recHitGPUToken_{consumes>( + ps.getParameter("HEBRecHitGPUTok"))}, + recHitCPUSoAToken_(produces()) {} + +HEBRecHitGPUtoSoA::~HEBRecHitGPUtoSoA() {} + +void HEBRecHitGPUtoSoA::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder w) { + cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(w)}; + const auto& gpuRecHits = ctx.get(event, recHitGPUToken_); + + prodPtr_ = std::make_unique(gpuRecHits.nHits(), ctx.stream()); + + KernelManagerHGCalRecHit km((*prodPtr_).get(), gpuRecHits.get()); + km.transfer_soa_to_host(ctx.stream()); +} + +void HEBRecHitGPUtoSoA::produce(edm::Event& event, const edm::EventSetup& setup) { event.put(std::move(prodPtr_)); } + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HEBRecHitGPUtoSoA); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitFromSoA.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitFromSoA.cc new file mode 100644 index 0000000000000..ca969f42c4d1a --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitFromSoA.cc @@ -0,0 +1,58 @@ +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" + +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" +#include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h" + +class HEFRecHitFromSoA : public edm::stream::EDProducer<> { +public: + explicit HEFRecHitFromSoA(const edm::ParameterSet& ps); + ~HEFRecHitFromSoA() override; + + void produce(edm::Event&, const edm::EventSetup&) override; + void convert_soa_data_to_collection_(uint32_t, HGCRecHitCollection&, ConstHGCRecHitSoA*); + +private: + std::unique_ptr rechits_; + edm::EDGetTokenT recHitSoAToken_; + edm::EDPutTokenT recHitCollectionToken_; +}; + +HEFRecHitFromSoA::HEFRecHitFromSoA(const edm::ParameterSet& ps) { + recHitSoAToken_ = consumes(ps.getParameter("HEFRecHitSoATok")); + recHitCollectionToken_ = produces(); +} + +HEFRecHitFromSoA::~HEFRecHitFromSoA() {} + +void HEFRecHitFromSoA::produce(edm::Event& event, const edm::EventSetup& setup) { + const HGCRecHitCPUProduct& recHits = event.get(recHitSoAToken_); + ConstHGCRecHitSoA recHitsSoA = recHits.get(); + rechits_ = std::make_unique(); + convert_soa_data_to_collection_(recHits.nHits(), *rechits_, &recHitsSoA); + event.put(std::move(rechits_)); +} + +void HEFRecHitFromSoA::convert_soa_data_to_collection_(uint32_t nhits, + HGCRecHitCollection& rechits, + ConstHGCRecHitSoA* h_calibSoA) { + rechits.reserve(nhits); + for (uint i = 0; i < nhits; ++i) { + DetId id_converted(h_calibSoA->id_[i]); + rechits.emplace_back(id_converted, + h_calibSoA->energy_[i], + h_calibSoA->time_[i], + 0, + h_calibSoA->flagBits_[i], + h_calibSoA->son_[i], + h_calibSoA->timeError_[i]); + } +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HEFRecHitFromSoA); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc new file mode 100644 index 0000000000000..7ceedccb5d28e --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc @@ -0,0 +1,147 @@ +#include +#include + +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDACore/interface/ContextState.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "HeterogeneousCore/CUDAUtilities/interface/MessageLogger.h" + +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitDevice.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitHost.h" + +class HEFRecHitGPU : public edm::stream::EDProducer<> { +public: + explicit HEFRecHitGPU(const edm::ParameterSet &ps); + ~HEFRecHitGPU() override; + void beginRun(edm::Run const &, edm::EventSetup const &) override; + + void produce(edm::Event &, const edm::EventSetup &) override; + +private: + edm::EDGetTokenT uncalibRecHitCPUToken_; + edm::EDPutTokenT> recHitGPUToken_; + + std::unique_ptr rechits_; + + //constants + HGChefUncalibRecHitConstantData cdata_; + HGCConstantVectorData vdata_; + + //memory + std::string assert_error_message_(std::string, const size_t &, const size_t &); + void assert_sizes_constants_(const HGCConstantVectorData &); + + //conditions (geometry, topology, ...) + std::unique_ptr tools_; + + //data processing + void convert_collection_data_to_soa_(const uint32_t &, const HGChefUncalibratedRecHitCollection &); + void convert_constant_data_(KernelConstantData *); + + HGCRecHitGPUProduct prod_; + HGCUncalibRecHitDevice d_uncalib_; + HGCUncalibRecHitHost h_uncalib_; + + KernelConstantData *kcdata_; +}; + +HEFRecHitGPU::HEFRecHitGPU(const edm::ParameterSet &ps) + : uncalibRecHitCPUToken_{consumes( + ps.getParameter("HGCHEFUncalibRecHitsTok"))}, + recHitGPUToken_{produces>()} { + cdata_.keV2DIGI_ = ps.getParameter("HGCHEF_keV2DIGI"); + cdata_.xmin_ = ps.getParameter("minValSiPar"); //float + cdata_.xmax_ = ps.getParameter("maxValSiPar"); //float + cdata_.aterm_ = ps.getParameter("noiseSiPar"); //float + cdata_.cterm_ = ps.getParameter("constSiPar"); //float + vdata_.fCPerMIP_ = ps.getParameter>("HGCHEF_fCPerMIP"); + vdata_.cce_ = ps.getParameter("HGCHEF_cce").getParameter>("values"); + vdata_.noise_fC_ = ps.getParameter("HGCHEF_noise_fC").getParameter>("values"); + vdata_.rcorr_ = ps.getParameter>("rcorr"); + vdata_.weights_ = ps.getParameter>("weights"); + cdata_.uncalib2GeV_ = 1e-6 / cdata_.keV2DIGI_; + cdata_.layerOffset_ = 28; + assert_sizes_constants_(vdata_); + + kcdata_ = new KernelConstantData(cdata_, vdata_); + convert_constant_data_(kcdata_); + + tools_ = std::make_unique(); +} + +HEFRecHitGPU::~HEFRecHitGPU() { delete kcdata_; } + +std::string HEFRecHitGPU::assert_error_message_(std::string var, const size_t &s1, const size_t &s2) { + std::string str1 = "The '"; + std::string str2 = "' array must be of size "; + std::string str3 = " to hold the configuration data, but is of size "; + return str1 + var + str2 + std::to_string(s1) + str3 + std::to_string(s2); +} + +void HEFRecHitGPU::assert_sizes_constants_(const HGCConstantVectorData &vd) { + if (vdata_.fCPerMIP_.size() != HGChefUncalibRecHitConstantData::hef_fCPerMIP) + edm::LogError("WrongSize") << this->assert_error_message_( + "fCPerMIP", HGChefUncalibRecHitConstantData::hef_fCPerMIP, vdata_.fCPerMIP_.size()); + else if (vdata_.cce_.size() != HGChefUncalibRecHitConstantData::hef_cce) + edm::LogError("WrongSize") << this->assert_error_message_( + "cce", HGChefUncalibRecHitConstantData::hef_cce, vdata_.cce_.size()); + else if (vdata_.noise_fC_.size() != HGChefUncalibRecHitConstantData::hef_noise_fC) + edm::LogError("WrongSize") << this->assert_error_message_( + "noise_fC", HGChefUncalibRecHitConstantData::hef_noise_fC, vdata_.noise_fC_.size()); + else if (vdata_.rcorr_.size() != HGChefUncalibRecHitConstantData::hef_rcorr) + edm::LogError("WrongSize") << this->assert_error_message_( + "rcorr", HGChefUncalibRecHitConstantData::hef_rcorr, vdata_.rcorr_.size()); + else if (vdata_.weights_.size() != HGChefUncalibRecHitConstantData::hef_weights) + edm::LogError("WrongSize") << this->assert_error_message_( + "weights", HGChefUncalibRecHitConstantData::hef_weights, vdata_.weights_.size()); +} + +void HEFRecHitGPU::beginRun(edm::Run const &, edm::EventSetup const &setup) {} + +void HEFRecHitGPU::produce(edm::Event &event, const edm::EventSetup &setup) { + cms::cuda::ScopedContextProduce ctx{event.streamID()}; + + const auto &hits = event.get(uncalibRecHitCPUToken_); + unsigned int nhits(hits.size()); + rechits_ = std::make_unique(); + + if (nhits == 0) + edm::LogError("HEFRecHitGPU") << "WARNING: no input hits!"; + + prod_ = HGCRecHitGPUProduct(nhits, ctx.stream()); + d_uncalib_ = HGCUncalibRecHitDevice(nhits, ctx.stream()); + h_uncalib_ = HGCUncalibRecHitHost(nhits, hits, ctx.stream()); + + KernelManagerHGCalRecHit km(h_uncalib_.get(), d_uncalib_.get(), prod_.get()); + km.run_kernels(kcdata_, ctx.stream()); + + ctx.emplace(event, recHitGPUToken_, std::move(prod_)); +} + +void HEFRecHitGPU::convert_constant_data_(KernelConstantData *kcdata) { + for (size_t i = 0; i < kcdata->vdata_.fCPerMIP_.size(); ++i) + kcdata->data_.fCPerMIP_[i] = kcdata->vdata_.fCPerMIP_[i]; + for (size_t i = 0; i < kcdata->vdata_.cce_.size(); ++i) + kcdata->data_.cce_[i] = kcdata->vdata_.cce_[i]; + for (size_t i = 0; i < kcdata->vdata_.noise_fC_.size(); ++i) + kcdata->data_.noise_fC_[i] = kcdata->vdata_.noise_fC_[i]; + for (size_t i = 0; i < kcdata->vdata_.rcorr_.size(); ++i) + kcdata->data_.rcorr_[i] = kcdata->vdata_.rcorr_[i]; + for (size_t i = 0; i < kcdata->vdata_.weights_.size(); ++i) + kcdata->data_.weights_[i] = kcdata->vdata_.weights_[i]; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HEFRecHitGPU); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPUtoSoA.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPUtoSoA.cc new file mode 100644 index 0000000000000..16a252fb33e48 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPUtoSoA.cc @@ -0,0 +1,73 @@ +#include +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" + +#include "HeterogeneousCore/CUDACore/interface/ScopedContext.h" +#include "HeterogeneousCore/CUDACore/interface/ContextState.h" +#include "HeterogeneousCore/CUDAServices/interface/CUDAService.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +#include "CUDADataFormats/HGCal/interface/HGCRecHitGPUProduct.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h" + +class HEFRecHitGPUtoSoA : public edm::stream::EDProducer { +public: + explicit HEFRecHitGPUtoSoA(const edm::ParameterSet& ps); + ~HEFRecHitGPUtoSoA() override; + + void acquire(edm::Event const&, edm::EventSetup const&, edm::WaitingTaskWithArenaHolder) override; + void produce(edm::Event&, const edm::EventSetup&) override; + +private: + cms::cuda::ContextState ctxState_; + edm::EDGetTokenT> recHitGPUToken_; + edm::EDPutTokenT recHitCPUSoAToken_; + + std::unique_ptr prodPtr_; +}; + +HEFRecHitGPUtoSoA::HEFRecHitGPUtoSoA(const edm::ParameterSet& ps) + : recHitGPUToken_{consumes>( + ps.getParameter("HEFRecHitGPUTok"))}, + recHitCPUSoAToken_(produces()) {} + +HEFRecHitGPUtoSoA::~HEFRecHitGPUtoSoA() {} + +void HEFRecHitGPUtoSoA::acquire(edm::Event const& event, + edm::EventSetup const& setup, + edm::WaitingTaskWithArenaHolder w) { + cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(w)}; + const auto& gpuRecHits = ctx.get(event, recHitGPUToken_); + + prodPtr_ = std::make_unique(gpuRecHits.nHits(), ctx.stream()); + + KernelManagerHGCalRecHit km((*prodPtr_).get(), gpuRecHits.get()); + km.transfer_soa_to_host(ctx.stream()); +} + +void HEFRecHitGPUtoSoA::produce(edm::Event& event, const edm::EventSetup& setup) { event.put(std::move(prodPtr_)); } + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(HEFRecHitGPUtoSoA); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cu b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cu new file mode 100644 index 0000000000000..ecaaa177f9cdd --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cu @@ -0,0 +1,147 @@ +#include +#include +#include +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cuh" + +__global__ void fill_positions_from_detids( + const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds) { + unsigned int tid = blockDim.x * blockIdx.x + threadIdx.x; + + for (unsigned int i = tid; i < conds->nelems_posmap; i += blockDim.x * gridDim.x) { + HeterogeneousHGCSiliconDetId did(conds->posmap.detid[i]); + const float cU = static_cast(did.cellU()); + const float cV = static_cast(did.cellV()); + const float wU = static_cast(did.waferU()); + const float wV = static_cast(did.waferV()); + const float ncells = static_cast(did.nCellsSide()); + const int32_t layer = did.layer(); + + //based on `std::pair HGCalDDDConstants::locateCell(const HGCSiliconDetId&, bool) + const float r_x2 = conds->posmap.waferSize + conds->posmap.sensorSeparation; + const float r = 0.5f * r_x2; + const float sqrt3 = __fsqrt_rn(3.f); + const float rsqrt3 = __frsqrt_rn(3.f); //rsqrt: 1 / sqrt + const float R = r_x2 * rsqrt3; + const float n2 = ncells / 2.f; + const float yoff_abs = rsqrt3 * r_x2; + const float yoff = (layer % 2 == 1) ? yoff_abs : -1.f * yoff_abs; //CHANGE according to Sunanda's reply + float xpos = (-2.f * wU + wV) * r; + float ypos = yoff + (1.5f * wV * R); + const float R1 = __fdividef(conds->posmap.waferSize, 3.f * ncells); + const float r1_x2 = R1 * sqrt3; + xpos += (1.5f * (cV - ncells) + 1.f) * R1; + ypos += (cU - 0.5f * cV - n2) * r1_x2; + conds->posmap.x[i] = + xpos; // times side; multiply by -1 if one wants to obtain the position from the opposite endcap. CAREFUL WITH LATER DETECTOR ALIGNMENT!!! + conds->posmap.y[i] = ypos; + } +} + +__global__ void print_positions_from_detids( + const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds) { + unsigned int tid = blockDim.x * blockIdx.x + threadIdx.x; + + for (unsigned int i = tid; i < conds->nelems_posmap; i += blockDim.x * gridDim.x) { + HeterogeneousHGCSiliconDetId did(conds->posmap.detid[i]); + const int32_t layer = did.layer(); + float posz = conds->posmap.zLayer[layer - 1]; + printf("PosX: %lf\t PosY: %lf\t Posz: %lf\n", conds->posmap.x[i], conds->posmap.y[i], posz); + } +} + +//eventually this can also be written in parallel +__device__ unsigned map_cell_index(const float& cu, const float& cv, const unsigned& ncells_side) { + unsigned counter = 0; + //left side of wafer + for (int cellUmax = ncells_side, icellV = 0; cellUmax < 2 * ncells_side && icellV < ncells_side; + ++cellUmax, ++icellV) { + for (int icellU = 0; icellU <= cellUmax; ++icellU) { + if (cu == icellU and cv == icellV) + return counter; + else + counter += 1; + } + } + //right side of wafer + for (int cellUmin = 1, icellV = ncells_side; cellUmin <= ncells_side && icellV < 2 * ncells_side; + ++cellUmin, ++icellV) { + for (int icellU = cellUmin; icellU < 2 * ncells_side; ++icellU) { + if (cu == icellU and cv == icellV) + return counter; + else + counter += 1; + } + } + printf("ERROR: The cell was not found!"); + return 99; +} + +//returns the index of the positions of a specific cell +//performs several geometry-related shifts, and adds them at the end: +// 1) number of cells up to the layer being inspected +// 2) number of cells up to the waferUchunk in question, only in the layer being inspected +// 3) number of cells up to the waferV in question, only in the layer and waferUchunk being inspected +// 4) cell index within this layer, waferUchunk and waferV +//Note: a 'waferUchunk' represents the first dimension of a 2D squared grid of wafers, and includes multiple waferV +__device__ unsigned hash_function(const int32_t& l, + const int32_t& wU, + const int32_t& wV, + const int32_t& cu, + const int32_t& cv, + const int32_t& ncells_side, + const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds) { + const unsigned thislayer = l - conds->posmap.firstLayer; + const unsigned thisUwafer = wU - conds->posmap.waferMin; + const unsigned thisVwafer = wV - conds->posmap.waferMin; + const unsigned nwafers1D = conds->posmap.waferMax - conds->posmap.waferMin; + + //layer shift in terms of cell number + unsigned ncells_up_to_thislayer = 0; + for (unsigned q = 0; q < thislayer; ++q) + ncells_up_to_thislayer += conds->posmap.nCellsLayer[q]; + + //waferU shift in terms of cell number + unsigned ncells_up_to_thisUwafer = 0; + unsigned nwaferUchunks_up_to_this_layer = thislayer * nwafers1D; + for (unsigned q = 0; q < thisUwafer; ++q) + ncells_up_to_thisUwafer += conds->posmap.nCellsWaferUChunk[nwaferUchunks_up_to_this_layer + q]; + + //waferV shift in terms of cell number + unsigned ncells_up_to_thisVwafer = 0; + const unsigned nwafers_up_to_thisLayer = thislayer * nwafers1D * nwafers1D; + const unsigned nwafers_up_to_thisUwafer = thisUwafer * nwafers1D; + for (unsigned q = 0; q < thisVwafer; ++q) + ncells_up_to_thisVwafer += conds->posmap.nCellsHexagon[nwafers_up_to_thisLayer + nwafers_up_to_thisUwafer + q]; + + //cell shift in terms of cell number + const unsigned cell_shift = map_cell_index(cu, cv, ncells_side); + const unsigned shift_total = ncells_up_to_thislayer + ncells_up_to_thisUwafer + ncells_up_to_thisVwafer + cell_shift; + return shift_total; +} + +__global__ void test(uint32_t detid_test, + const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds) { + unsigned int tid = blockDim.x * blockIdx.x + threadIdx.x; + + if (tid == 0) { + //printf("Nelems: %u\n", static_cast(conds->nelems_posmap)); + for (unsigned i = 0; i < 1; ++i) { + HeterogeneousHGCSiliconDetId did(detid_test); // 2416969935, 2552165379, ... + const int32_t cU = did.cellU(); + const int32_t cV = did.cellV(); + const int32_t wU = did.waferU(); + const int32_t wV = did.waferV(); + const int32_t ncs = did.nCellsSide(); + + const int32_t layer = abs(did.layer()); //remove abs in case both endcaps are considered for x and y + const unsigned shift = hash_function(layer, wU, wV, cU, cV, ncs, conds); + //printf("id: cu: %d, cv: %d, wu: %d, wv: %d, ncells: %d, layer: %d\n", cU, cV, wU, wV, ncs, layer); + printf("id: %u | shift: %u | x: %lf y: %lf\n", + conds->posmap.detid[shift], + shift, + conds->posmap.x[shift], + conds->posmap.y[shift]); + } + } +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cuh b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cuh new file mode 100644 index 0000000000000..6b3bfe3816c7a --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cuh @@ -0,0 +1,19 @@ +#ifndef RecoLocalCalo_HGCalESProducers_HGCalCellPositionsKernelImpl_cuh +#define RecoLocalCalo_HGCalESProducers_HGCalCellPositionsKernelImpl_cuh + +#include +#include + +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h" + +__global__ +void fill_positions_from_detids(const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds); + +__global__ +void print_positions_from_detids(const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds); + +__global__ +void test(uint32_t detid_test, const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* conds); + +#endif //RecoLocalCalo_HGCalESProducers_HGCalCellPositionsKernelImpl_cuh diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalLayerClusterProducer.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalLayerClusterProducer.cc index fba15664ae202..804a310dcfcbf 100644 --- a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalLayerClusterProducer.cc +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalLayerClusterProducer.cc @@ -247,4 +247,4 @@ void HGCalLayerClusterProducer::produce(edm::Event& evt, const edm::EventSetup& algo->reset(); } -#endif +#endif //__RecoLocalCalo_HGCRecProducers_HGCalLayerClusterProducer_H__ diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cu b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cu new file mode 100644 index 0000000000000..bbde9358b9716 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cu @@ -0,0 +1,163 @@ +#include +#include +#include +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "HGCalRecHitKernelImpl.cuh" + +__device__ float get_weight_from_layer(const int32_t& layer, + const double (&weights)[HGChefUncalibRecHitConstantData::hef_weights]) { + return (float)weights[layer]; +} + +__device__ void make_rechit_silicon(unsigned tid, + HGCRecHitSoA dst_soa, + HGCUncalibRecHitSoA src_soa, + const float& weight, + const float& rcorr, + const float& cce_correction, + const float& sigmaNoiseGeV, + const float& xmin, + const float& xmax, + const float& aterm, + const float& cterm) { + dst_soa.id_[tid] = src_soa.id_[tid]; + dst_soa.energy_[tid] = src_soa.amplitude_[tid] * weight * 0.001f * __fdividef(rcorr, cce_correction); + dst_soa.time_[tid] = src_soa.jitter_[tid]; + + HeterogeneousHGCSiliconDetId detid(src_soa.id_[tid]); + dst_soa.flagBits_[tid] = 0 | (0x1 << HGCRecHit::kGood); + float son = __fdividef(dst_soa.energy_[tid], sigmaNoiseGeV); + float son_norm = fminf(32.f, son) / 32.f * ((1 << 8) - 1); + long int son_round = lroundf(son_norm); + //there is an extra 0.125 factor in HGCRecHit::signalOverSigmaNoise(), which should not affect CPU/GPU comparison + dst_soa.son_[tid] = static_cast(son_round); + + //get time resolution + //https://github.com/cms-sw/cmssw/blob/master/RecoLocalCalo/HGCalRecProducers/src/ComputeClusterTime.cc#L50 + /*Maxmin trick to avoid conditions within the kernel (having xmin < xmax) + 3 possibilities: 1) xval -> xmin -> xmax + 2) xmin -> xval -> xmax + 3) xmin -> xmax -> xval + The time error is calculated with the number in the middle. + */ + float denominator = fminf(fmaxf(son, xmin), xmax); + float div_ = __fdividef(aterm, denominator); + dst_soa.timeError_[tid] = dst_soa.time_[tid] < 0 ? -1 : __fsqrt_rn(div_ * div_ + cterm * cterm); + //if dst_soa.time_[tid] < 1 always, then the above conditional expression can be replaced by + //dst_soa.timeError_[tid] = fminf( fmaxf( dst_soa.time_[tid]-1, -1 ), sqrt( div_*div_ + cterm*cterm ) ) + //which is *not* conditional, and thus potentially faster; compare to HGCalRecHitWorkerSimple.cc +} + +__device__ void make_rechit_scintillator( + unsigned tid, HGCRecHitSoA dst_soa, HGCUncalibRecHitSoA src_soa, const float& weight, const float& sigmaNoiseGeV) { + dst_soa.id_[tid] = src_soa.id_[tid]; + dst_soa.energy_[tid] = src_soa.amplitude_[tid] * weight * 0.001f; + dst_soa.time_[tid] = src_soa.jitter_[tid]; + + HeterogeneousHGCScintillatorDetId detid(src_soa.id_[tid]); + dst_soa.flagBits_[tid] = 0 | (0x1 << HGCRecHit::kGood); + float son = __fdividef(dst_soa.energy_[tid], sigmaNoiseGeV); + float son_norm = fminf(32.f, son) / 32.f * ((1 << 8) - 1); + long int son_round = lroundf(son_norm); + //there is an extra 0.125 factor in HGCRecHit::signalOverSigmaNoise(), which should not affect CPU/GPU comparison + dst_soa.son_[tid] = static_cast(son_round); + dst_soa.timeError_[tid] = -1; +} + +__device__ float get_thickness_correction(const int& type, + const double (&rcorr)[HGChefUncalibRecHitConstantData::hef_rcorr]) { + return __fdividef(1.f, (float)rcorr[type]); +} + +__device__ float get_noise(const int& type, const double (&noise_fC)[HGChefUncalibRecHitConstantData::hef_noise_fC]) { + return (float)noise_fC[type]; +} + +__device__ float get_cce_correction(const int& type, const double (&cce)[HGChefUncalibRecHitConstantData::hef_cce]) { + return (float)cce[type]; +} + +__device__ float get_fCPerMIP(const int& type, + const double (&fCPerMIP)[HGChefUncalibRecHitConstantData::hef_fCPerMIP]) { + return (float)fCPerMIP[type]; +} + +__global__ void ee_to_rechit(HGCRecHitSoA dst_soa, + HGCUncalibRecHitSoA src_soa, + const HGCeeUncalibRecHitConstantData cdata, + int length) { + unsigned tid = blockDim.x * blockIdx.x + threadIdx.x; + + for (unsigned i = tid; i < length; i += blockDim.x * gridDim.x) { + HeterogeneousHGCSiliconDetId detid(src_soa.id_[i]); + int32_t layer = detid.layer(); + float weight = get_weight_from_layer(layer, cdata.weights_); + float rcorr = get_thickness_correction(detid.type(), cdata.rcorr_); + float noise = get_noise(detid.type(), cdata.noise_fC_); + float cce_correction = get_cce_correction(detid.type(), cdata.cce_); + float fCPerMIP = get_fCPerMIP(detid.type(), cdata.fCPerMIP_); + float sigmaNoiseGeV = 1e-3 * weight * rcorr * __fdividef(noise, fCPerMIP); + make_rechit_silicon(i, + dst_soa, + src_soa, + weight, + rcorr, + cce_correction, + sigmaNoiseGeV, + cdata.xmin_, + cdata.xmax_, + cdata.aterm_, + cdata.cterm_); + } + __syncthreads(); +} + +__global__ void hef_to_rechit(HGCRecHitSoA dst_soa, + HGCUncalibRecHitSoA src_soa, + const HGChefUncalibRecHitConstantData cdata, + int length) { + unsigned tid = blockDim.x * blockIdx.x + threadIdx.x; + for (unsigned i = tid; i < length; i += blockDim.x * gridDim.x) { + /*Uncomment the lines set to 1. as soon as those factors are centrally defined for the HSi. + CUDADataFormats/HGCal/interface/HGCUncalibRecHitsToRecHitsConstants.h maxsizes_constanats will perhaps have to be changed (change some 3's to 6's) + */ + HeterogeneousHGCSiliconDetId detid(src_soa.id_[i]); + int32_t layer = detid.layer() + cdata.layerOffset_; + float weight = get_weight_from_layer(layer, cdata.weights_); + float rcorr = 1.f; //get_thickness_correction(detid.type(), cdata.rcorr_); + float noise = get_noise(detid.type(), cdata.noise_fC_); + float cce_correction = 1.f; //get_cce_correction(detid.type(), cdata.cce_); + float fCPerMIP = get_fCPerMIP(detid.type(), cdata.fCPerMIP_); + float sigmaNoiseGeV = 1e-3 * weight * rcorr * __fdividef(noise, fCPerMIP); + make_rechit_silicon(i, + dst_soa, + src_soa, + weight, + rcorr, + cce_correction, + sigmaNoiseGeV, + cdata.xmin_, + cdata.xmax_, + cdata.aterm_, + cdata.cterm_); + } + __syncthreads(); +} + +__global__ void heb_to_rechit(HGCRecHitSoA dst_soa, + HGCUncalibRecHitSoA src_soa, + const HGChebUncalibRecHitConstantData cdata, + int length) { + unsigned tid = blockDim.x * blockIdx.x + threadIdx.x; + + for (unsigned i = tid; i < length; i += blockDim.x * gridDim.x) { + HeterogeneousHGCScintillatorDetId detid(src_soa.id_[i]); + int32_t layer = detid.layer() + cdata.layerOffset_; + float weight = get_weight_from_layer(layer, cdata.weights_); + float noise = cdata.noise_MIP_; + float sigmaNoiseGeV = 1e-3 * noise * weight; + make_rechit_scintillator(i, dst_soa, src_soa, weight, sigmaNoiseGeV); + } + __syncthreads(); +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cuh b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cuh new file mode 100644 index 0000000000000..cca60cbbbadfd --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cuh @@ -0,0 +1,22 @@ +#ifndef RecoLocalCalo_HGCalRecProducers_HGCalRecHitKernelImpl_cuh +#define RecoLocalCalo_HGCalRecProducers_HGCalRecHitKernelImpl_cuh + +#include +#include + +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/HGCUncalibRecHitsToRecHitsConstants.h" + +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +__global__ +void ee_to_rechit(HGCRecHitSoA dst_soa, HGCUncalibRecHitSoA src_soa, HGCeeUncalibRecHitConstantData cdata, int length); + +__global__ +void hef_to_rechit(HGCRecHitSoA dst_soa, HGCUncalibRecHitSoA src_soa, HGChefUncalibRecHitConstantData cdata, int length); + +__global__ +void heb_to_rechit(HGCRecHitSoA dst_soa, HGCUncalibRecHitSoA src_soa, HGChebUncalibRecHitConstantData cdata, int length); + +#endif //RecoLocalCalo_HGCalRecProducers_HGCalRecHitKernelImpl_cuh diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitWorkerSimple.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitWorkerSimple.cc index 24c1139719d2b..1640ae1e02334 100644 --- a/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitWorkerSimple.cc +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitWorkerSimple.cc @@ -171,6 +171,7 @@ bool HGCalRecHitWorkerSimple::run(const edm::Event& evt, break; } } + switch (idtype) { case hgcee: rechitMaker_->setADCToGeVConstant(float(hgceeUncalib2GeV_)); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.cc new file mode 100644 index 0000000000000..cb4d43f9d57d9 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.cc @@ -0,0 +1,188 @@ +#include "RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.h" + +namespace { + double*& select_pointer_d(cp::HeterogeneousHGCalEEParameters* cpuObject, const unsigned& item) { + switch (item) { + case 0: + return cpuObject->cellFineX_; + case 1: + return cpuObject->cellFineY_; + case 2: + return cpuObject->cellCoarseX_; + case 3: + return cpuObject->cellCoarseY_; + default: + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") << "select_pointer_d(heterogeneous): no item."; + return cpuObject->cellCoarseY_; + } + } + + const std::vector& select_pointer_d(const HGCalParameters* cpuObject, const unsigned& item) { + switch (item) { + case 0: + return cpuObject->cellFineX_; + case 1: + return cpuObject->cellFineY_; + case 2: + return cpuObject->cellCoarseX_; + case 3: + return cpuObject->cellCoarseY_; + default: + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") + << "select_pointer_d(non-heterogeneous): no item."; + return cpuObject->cellCoarseY_; + } + } + + int32_t*& select_pointer_i(cp::HeterogeneousHGCalEEParameters* cpuObject, const unsigned& item) { + switch (item) { + case 4: + return cpuObject->waferTypeL_; + default: + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") << "select_pointer_i(heterogeneous): no item."; + return cpuObject->waferTypeL_; + } + } + + const std::vector& select_pointer_i(const HGCalParameters* cpuObject, const unsigned& item) { + switch (item) { + case 4: + return cpuObject->waferTypeL_; + default: + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") + << "select_pointer_i(non-heterogeneous): no item."; + return cpuObject->waferTypeL_; + } + } +} // namespace + +HeterogeneousHGCalEEConditionsWrapper::HeterogeneousHGCalEEConditionsWrapper(const HGCalParameters* cpuHGCalParameters) { + calculate_memory_bytes(cpuHGCalParameters); + + chunk_ = std::accumulate(this->sizes_.begin(), this->sizes_.end(), 0); //total memory required in bytes + cudaCheck(cudaMallocHost(&this->params_.cellFineX_, chunk_)); + + //store cumulative sum in bytes and convert it to sizes in units of C++ typesEE, i.e., number if items to be transferred to GPU + std::vector cumsum_sizes(this->sizes_.size() + 1, 0); //starting with zero + std::partial_sum(this->sizes_.begin(), this->sizes_.end(), cumsum_sizes.begin() + 1); + for (unsigned i(1); i < cumsum_sizes.size(); ++i) //start at second element (the first is zero) + { + unsigned typesEEsize(0); + if (cp::typesEE[i - 1] == cp::HeterogeneousHGCalEEParametersType::Double) + typesEEsize = sizeof(double); + else if (cp::typesEE[i - 1] == cp::HeterogeneousHGCalEEParametersType::Int32_t) + typesEEsize = sizeof(int32_t); + else + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") << "Wrong HeterogeneousHGCalParameters type"; + cumsum_sizes[i] /= typesEEsize; + } + + for (unsigned j(0); j < this->sizes_.size(); ++j) { + //setting the pointers + if (j != 0) { + const unsigned jm1(j - 1); + if (cp::typesEE[jm1] == cp::HeterogeneousHGCalEEParametersType::Double and + cp::typesEE[j] == cp::HeterogeneousHGCalEEParametersType::Double) + ::select_pointer_d(&this->params_, j) = ::select_pointer_d(&this->params_, jm1) + this->sizes_[jm1]; + else if (cp::typesEE[jm1] == cp::HeterogeneousHGCalEEParametersType::Double and + cp::typesEE[j] == cp::HeterogeneousHGCalEEParametersType::Int32_t) + ::select_pointer_i(&this->params_, j) = + reinterpret_cast(::select_pointer_d(&this->params_, jm1) + this->sizes_[jm1]); + } + + //copying the pointers' content + for (unsigned i(cumsum_sizes[j]); i < cumsum_sizes[j + 1]; ++i) { + unsigned index(i - cumsum_sizes[j]); + if (cp::typesEE[j] == cp::HeterogeneousHGCalEEParametersType::Double) { + ::select_pointer_d(&this->params_, j)[index] = ::select_pointer_d(cpuHGCalParameters, j)[index]; + } else if (cp::typesEE[j] == cp::HeterogeneousHGCalEEParametersType::Int32_t) + ::select_pointer_i(&this->params_, j)[index] = ::select_pointer_i(cpuHGCalParameters, j)[index]; + else + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") << "Wrong HeterogeneousHGCalParameters type"; + } + } +} + +void HeterogeneousHGCalEEConditionsWrapper::calculate_memory_bytes(const HGCalParameters* cpuHGCalParameters) { + size_t npointers = hgcal_conditions::parameters::typesEE.size(); + std::vector sizes(npointers); + for (unsigned i(0); i < npointers; ++i) { + if (cp::typesEE[i] == cp::HeterogeneousHGCalEEParametersType::Double) + sizes[i] = ::select_pointer_d(cpuHGCalParameters, i).size(); + else + sizes[i] = ::select_pointer_i(cpuHGCalParameters, i).size(); + } + + std::vector sizes_units(npointers); + for (unsigned i(0); i < npointers; ++i) { + if (cp::typesEE[i] == cp::HeterogeneousHGCalEEParametersType::Double) + sizes_units[i] = sizeof(double); + else if (cp::typesEE[i] == cp::HeterogeneousHGCalEEParametersType::Int32_t) + sizes_units[i] = sizeof(int32_t); + } + + //element by element multiplication + this->sizes_.resize(npointers); + std::transform(sizes.begin(), sizes.end(), sizes_units.begin(), this->sizes_.begin(), std::multiplies()); +} + +HeterogeneousHGCalEEConditionsWrapper::~HeterogeneousHGCalEEConditionsWrapper() { + cudaCheck(cudaFreeHost(this->params_.cellFineX_)); +} + +//I could use template specializations +//try to use std::variant in the future to avoid similar functions with different return values + +hgcal_conditions::HeterogeneousEEConditionsESProduct const* +HeterogeneousHGCalEEConditionsWrapper::getHeterogeneousConditionsESProductAsync(cudaStream_t stream) const { + // cms::cuda::ESProduct essentially holds an array of GPUData objects, + // one per device. If the data have already been transferred to the + // current device (or the transfer has been queued), the helper just + // returns a reference to that GPUData object. Otherwise, i.e. data are + // not yet on the current device, the helper calls the lambda to do the + // necessary memory allocations and to queue the transfers. + auto const& data = gpuData_.dataForCurrentDeviceAsync(stream, [this](GPUData& data, cudaStream_t stream) { + // Allocate the payload object on pinned host memory. + cudaCheck(cudaMallocHost(&data.host, sizeof(hgcal_conditions::HeterogeneousEEConditionsESProduct))); + // Allocate the payload array(s) on device memory. + cudaCheck(cudaMalloc(&(data.host->params.cellFineX_), chunk_)); + + // Allocate the payload object on the device memory. + cudaCheck(cudaMalloc(&data.device, sizeof(hgcal_conditions::HeterogeneousEEConditionsESProduct))); + // Transfer the payload, first the array(s) ... + cudaCheck(cudaMemcpyAsync( + data.host->params.cellFineX_, this->params_.cellFineX_, chunk_, cudaMemcpyHostToDevice, stream)); + + for (unsigned j(0); j < this->sizes_.size() - 1; ++j) { + if (cp::typesEE[j] == cp::HeterogeneousHGCalEEParametersType::Double and + cp::typesEE[j + 1] == cp::HeterogeneousHGCalEEParametersType::Double) + ::select_pointer_d(&(data.host->params), j + 1) = ::select_pointer_d(&(data.host->params), j) + this->sizes_[j]; + else if (cp::typesEE[j] == cp::HeterogeneousHGCalEEParametersType::Double and + cp::typesEE[j + 1] == cp::HeterogeneousHGCalEEParametersType::Int32_t) + ::select_pointer_i(&(data.host->params), j + 1) = + reinterpret_cast(::select_pointer_d(&(data.host->params), j) + this->sizes_[j]); + else + throw cms::Exception("HeterogeneousHGCalEEConditionsWrapper") + << "compare this functions' logic with hgcal_conditions::parameters::typesEE"; + } + + // ... and then the payload object + cudaCheck(cudaMemcpyAsync(data.device, + data.host, + sizeof(hgcal_conditions::HeterogeneousEEConditionsESProduct), + cudaMemcpyHostToDevice, + stream)); + }); //gpuData_.dataForCurrentDeviceAsync + + // Returns the payload object on the memory of the current device + return data.device; +} + +// Destructor frees all member pointers +HeterogeneousHGCalEEConditionsWrapper::GPUData::~GPUData() { + if (host != nullptr) { + cudaCheck(cudaFree(host->params.cellFineX_)); + cudaCheck(cudaFreeHost(host)); + } + cudaCheck(cudaFree(device)); +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.h b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.h new file mode 100644 index 0000000000000..9f44e4f13249e --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalEEConditions.h @@ -0,0 +1,59 @@ +#ifndef HeterogeneousHGCalEEConditions_h +#define HeterogeneousHGCalEEConditions_h + +#include //accumulate +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +namespace cp = hgcal_conditions::parameters; + +// Declare the wrapper ESProduct. The corresponding ESProducer should +// produce objects of this type. +class HeterogeneousHGCalEEConditionsWrapper { +public: + // Constructor takes the standard CPU ESProduct, and transforms the + // necessary data to array(s) in pinned host memory + HeterogeneousHGCalEEConditionsWrapper(const HGCalParameters *); + + // Deallocates all pinned host memory + ~HeterogeneousHGCalEEConditionsWrapper(); + + // Function to return the actual payload on the memory of the current device + hgcal_conditions::HeterogeneousEEConditionsESProduct const *getHeterogeneousConditionsESProductAsync( + cudaStream_t stream) const; + +private: + // Holds the data in pinned CPU memory + // Contrary to its non-heterogeneous counterpart (constructor argument) it is *not* a pointer (so to avoid an extra allocation) + cp::HeterogeneousHGCalEEParameters params_; + + std::vector sizes_; + size_t chunk_; + + void calculate_memory_bytes(const HGCalParameters *); + + // Helper struct to hold all information that has to be allocated and + // deallocated per device + struct GPUData { + // Destructor should free all member pointers + ~GPUData(); + // internal pointers are on device, struct itself is on CPU + hgcal_conditions::HeterogeneousEEConditionsESProduct *host = nullptr; + // internal pounters and struct are on device + hgcal_conditions::HeterogeneousEEConditionsESProduct *device = nullptr; + }; + + // Helper that takes care of complexity of transferring the data to + // multiple devices + cms::cuda::ESProduct gpuData_; +}; + +#endif //HeterogeneousHGCalEEConditions_h diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.cc new file mode 100644 index 0000000000000..88cb155574b2e --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.cc @@ -0,0 +1,177 @@ +#include "RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.h" + +HeterogeneousHGCalHEBConditionsWrapper::HeterogeneousHGCalHEBConditionsWrapper( + const HGCalParameters* cpuHGCalParameters) { + calculate_memory_bytes(cpuHGCalParameters); + + chunk_ = std::accumulate(this->sizes_.begin(), this->sizes_.end(), 0); //total memory required in bytes + cudaCheck(cudaMallocHost(&this->params_.testD_, chunk_)); + + //store cumulative sum in bytes and convert it to sizes in units of C++ typesHEB, i.e., number if items to be transferred to GPU + std::vector cumsum_sizes(this->sizes_.size() + 1, 0); //starting with zero + std::partial_sum(this->sizes_.begin(), this->sizes_.end(), cumsum_sizes.begin() + 1); + for (unsigned int i = 1; i < cumsum_sizes.size(); ++i) //start at second element (the first is zero) + { + unsigned int typesHEBize = 0; + if (cp::typesHEB[i - 1] == cp::HeterogeneousHGCalHEBParametersType::Double) + typesHEBize = sizeof(double); + else if (cp::typesHEB[i - 1] == cp::HeterogeneousHGCalHEBParametersType::Int32_t) + typesHEBize = sizeof(int32_t); + else + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") << "Wrong HeterogeneousHGCalParameters type"; + cumsum_sizes[i] /= typesHEBize; + } + + for (unsigned int j = 0; j < this->sizes_.size(); ++j) { + //setting the pointers + if (j != 0) { + const unsigned int jm1 = j - 1; + if (cp::typesHEB[jm1] == cp::HeterogeneousHGCalHEBParametersType::Double and + cp::typesHEB[j] == cp::HeterogeneousHGCalHEBParametersType::Double) + select_pointer_d(&this->params_, j) = select_pointer_d(&this->params_, jm1) + this->sizes_[jm1]; + else if (cp::typesHEB[jm1] == cp::HeterogeneousHGCalHEBParametersType::Double and + cp::typesHEB[j] == cp::HeterogeneousHGCalHEBParametersType::Int32_t) + select_pointer_i(&this->params_, j) = + reinterpret_cast(select_pointer_d(&this->params_, jm1) + this->sizes_[jm1]); + } + + //copying the pointers' content + for (unsigned int i = cumsum_sizes[j]; i < cumsum_sizes[j + 1]; ++i) { + unsigned int index = i - cumsum_sizes[j]; + if (cp::typesHEB[j] == cp::HeterogeneousHGCalHEBParametersType::Double) { + select_pointer_d(&this->params_, j)[index] = select_pointer_d(cpuHGCalParameters, j)[index]; + } else if (cp::typesHEB[j] == cp::HeterogeneousHGCalHEBParametersType::Int32_t) + select_pointer_i(&this->params_, j)[index] = select_pointer_i(cpuHGCalParameters, j)[index]; + else + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") << "Wrong HeterogeneousHGCalParameters type"; + } + } +} + +void HeterogeneousHGCalHEBConditionsWrapper::calculate_memory_bytes(const HGCalParameters* cpuHGCalParameters) { + size_t npointers = hgcal_conditions::parameters::typesHEB.size(); + std::vector sizes(npointers); + for (unsigned int i = 0; i < npointers; ++i) { + if (cp::typesHEB[i] == cp::HeterogeneousHGCalHEBParametersType::Double) + sizes[i] = select_pointer_d(cpuHGCalParameters, i).size(); + else + sizes[i] = select_pointer_i(cpuHGCalParameters, i).size(); + } + + std::vector sizes_units(npointers); + for (unsigned int i = 0; i < npointers; ++i) { + if (cp::typesHEB[i] == cp::HeterogeneousHGCalHEBParametersType::Double) + sizes_units[i] = sizeof(double); + else if (cp::typesHEB[i] == cp::HeterogeneousHGCalHEBParametersType::Int32_t) + sizes_units[i] = sizeof(int32_t); + } + + //element by element multiplication + this->sizes_.resize(npointers); + std::transform(sizes.begin(), sizes.end(), sizes_units.begin(), this->sizes_.begin(), std::multiplies()); +} + +HeterogeneousHGCalHEBConditionsWrapper::~HeterogeneousHGCalHEBConditionsWrapper() { + cudaCheck(cudaFreeHost(this->params_.testD_)); +} + +//I could use template specializations +//try to use std::variant in the future to avoid similar functions with different return values +double*& HeterogeneousHGCalHEBConditionsWrapper::select_pointer_d(cp::HeterogeneousHGCalHEBParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 0: + return cpuObject->testD_; + default: + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") << "select_pointer_d(heterogeneous): no item."; + return cpuObject->testD_; + } +} + +std::vector HeterogeneousHGCalHEBConditionsWrapper::select_pointer_d(const HGCalParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 0: + return cpuObject->cellFineX_; + default: + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") << "select_pointer_d(non-heterogeneous): no item."; + return cpuObject->cellFineX_; + } +} + +int32_t*& HeterogeneousHGCalHEBConditionsWrapper::select_pointer_i(cp::HeterogeneousHGCalHEBParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 1: + return cpuObject->testI_; + default: + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") << "select_pointer_i(heterogeneous): no item."; + return cpuObject->testI_; + } +} + +std::vector HeterogeneousHGCalHEBConditionsWrapper::select_pointer_i(const HGCalParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 4: + return cpuObject->waferTypeL_; + default: + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") << "select_pointer_i(non-heterogeneous): no item."; + return cpuObject->waferTypeL_; + } +} + +hgcal_conditions::HeterogeneousHEBConditionsESProduct const* +HeterogeneousHGCalHEBConditionsWrapper::getHeterogeneousConditionsESProductAsync(cudaStream_t stream) const { + // cms::cuda::ESProduct essentially holds an array of GPUData objects, + // one per device. If the data have already been transferred to the + // current device (or the transfer has been queued), the helper just + // returns a reference to that GPUData object. Otherwise, i.e. data are + // not yet on the current device, the helper calls the lambda to do the + // necessary memory allocations and to queue the transfers. + auto const& data = gpuData_.dataForCurrentDeviceAsync(stream, [this](GPUData& data, cudaStream_t stream) { + // Allocate the payload object on pinned host memory. + cudaCheck(cudaMallocHost(&data.host, sizeof(hgcal_conditions::HeterogeneousHEBConditionsESProduct))); + // Allocate the payload array(s) on device memory. + cudaCheck(cudaMalloc(&(data.host->params.testD_), chunk_)); + + // Allocate the payload object on the device memory. + cudaCheck(cudaMalloc(&data.device, sizeof(hgcal_conditions::HeterogeneousHEBConditionsESProduct))); + // Transfer the payload, first the array(s) ... + cudaCheck(cudaMemcpyAsync(data.host->params.testD_, this->params_.testD_, chunk_, cudaMemcpyHostToDevice, stream)); + + for (unsigned int j = 0; j < this->sizes_.size() - 1; ++j) { + if (cp::typesHEB[j] == cp::HeterogeneousHGCalHEBParametersType::Double and + cp::typesHEB[j + 1] == cp::HeterogeneousHGCalHEBParametersType::Double) + select_pointer_d(&(data.host->params), j + 1) = select_pointer_d(&(data.host->params), j) + this->sizes_[j]; + else if (cp::typesHEB[j] == cp::HeterogeneousHGCalHEBParametersType::Double and + cp::typesHEB[j + 1] == cp::HeterogeneousHGCalHEBParametersType::Int32_t) + select_pointer_i(&(data.host->params), j + 1) = + reinterpret_cast(select_pointer_d(&(data.host->params), j) + this->sizes_[j]); + else + throw cms::Exception("HeterogeneousHGCalHEBConditionsWrapper") + << "compare this functions' logic with hgcal_conditions::parameters::typesHEB"; + } + + // ... and then the payload object + cudaCheck(cudaMemcpyAsync(data.device, + data.host, + sizeof(hgcal_conditions::HeterogeneousHEBConditionsESProduct), + cudaMemcpyHostToDevice, + stream)); + }); //gpuData_.dataForCurrentDeviceAsync + + // Returns the payload object on the memory of the current device + return data.device; +} + +// Destructor frees all member pointers +HeterogeneousHGCalHEBConditionsWrapper::GPUData::~GPUData() { + if (host != nullptr) { + cudaCheck(cudaFree(host->params.testD_)); + cudaCheck(cudaFreeHost(host)); + } + cudaCheck(cudaFree(device)); +} + +//template double*& HeterogeneousHGCalHEBConditionsWrapper::select_pointer_d(cp::HeterogeneousHGCalParameters*, const unsigned int&) const; diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.h b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.h new file mode 100644 index 0000000000000..a16b13872cdea --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEBConditions.h @@ -0,0 +1,62 @@ +#ifndef HeterogeneousHGCalHEBConditions_h +#define HeterogeneousHGCalHEBConditions_h + +#include //accumulate +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +namespace cp = hgcal_conditions::parameters; + +// Declare the wrapper ESProduct. The corresponding ESProducer should +// produce objects of this type. +class HeterogeneousHGCalHEBConditionsWrapper { +public: + // Constructor takes the standard CPU ESProduct, and transforms the + // necessary data to array(s) in pinned host memory + HeterogeneousHGCalHEBConditionsWrapper(const HGCalParameters *); + + // Deallocates all pinned host memory + ~HeterogeneousHGCalHEBConditionsWrapper(); + + // Function to return the actual payload on the memory of the current device + hgcal_conditions::HeterogeneousHEBConditionsESProduct const *getHeterogeneousConditionsESProductAsync( + cudaStream_t stream) const; + +private: + // Holds the data in pinned CPU memory + // Contrary to its non-heterogeneous counterpart (constructor argument) it is *not* a pointer (so to avoid an extra allocation) + cp::HeterogeneousHGCalHEBParameters params_; + + std::vector sizes_; + size_t chunk_; + + void calculate_memory_bytes(const HGCalParameters *); + double *&select_pointer_d(cp::HeterogeneousHGCalHEBParameters *, const unsigned int &) const; + std::vector select_pointer_d(const HGCalParameters *, const unsigned int &) const; + int32_t *&select_pointer_i(cp::HeterogeneousHGCalHEBParameters *, const unsigned int &) const; + std::vector select_pointer_i(const HGCalParameters *, const unsigned int &) const; + + // Helper struct to hold all information that has to be allocated and + // deallocated per device + struct GPUData { + // Destructor should free all member pointers + ~GPUData(); + // internal pointers are on device, struct itself is on CPU + hgcal_conditions::HeterogeneousHEBConditionsESProduct *host = nullptr; + // internal pounters and struct are on device + hgcal_conditions::HeterogeneousHEBConditionsESProduct *device = nullptr; + }; + + // Helper that takes care of complexity of transferring the data to + // multiple devices + cms::cuda::ESProduct gpuData_; +}; + +#endif //HeterogeneousHGCalHEBConditions_h diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsConditions.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsConditions.cc new file mode 100644 index 0000000000000..d8074c58a7927 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsConditions.cc @@ -0,0 +1,304 @@ +#include "CondFormats/HGCalObjects/interface/HeterogeneousHGCalHEFCellPositionsConditions.h" + +HeterogeneousHGCalHEFCellPositionsConditions::HeterogeneousHGCalHEFCellPositionsConditions( + cpos::HGCalPositionsMapping* cpuPos) { + //HGCalPositions as defined in hgcal_conditions::positions + this->sizes_ = calculate_memory_bytes_(cpuPos); + this->chunk_ = allocate_memory_(this->sizes_); + transfer_data_to_heterogeneous_pointers_(this->sizes_, cpuPos); + transfer_data_to_heterogeneous_vars_(cpuPos); +} + +size_t HeterogeneousHGCalHEFCellPositionsConditions::allocate_memory_(const std::vector& sz) { + size_t chunk = std::accumulate(sz.begin(), sz.end(), 0); //total memory required in bytes + cudaCheck(cudaMallocHost(&this->posmap_.x, chunk)); + return chunk; +} + +void HeterogeneousHGCalHEFCellPositionsConditions::transfer_data_to_heterogeneous_pointers_( + const std::vector& sz, cpos::HGCalPositionsMapping* cpuPos) { + //store cumulative sum in bytes and convert it to sizes in units of C++ typesHEF, i.e., number if items to be transferred to GPU + std::vector cumsum_sizes(sz.size() + 1, 0); //starting with zero + std::partial_sum(sz.begin(), sz.end(), cumsum_sizes.begin() + 1); + for (unsigned int i = 1; i < cumsum_sizes.size(); ++i) //start at second element (the first is zero) + { + size_t types_size = 0; + if (cpos::types[i - 1] == cpos::HeterogeneousHGCalPositionsType::Float) + types_size = sizeof(float); + else if (cpos::types[i - 1] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + types_size = sizeof(int32_t); + else if (cpos::types[i - 1] == cpos::HeterogeneousHGCalPositionsType::Uint32_t) + types_size = sizeof(uint32_t); + else + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "Wrong HeterogeneousHGCalPositionsMapping type"; + cumsum_sizes[i] /= types_size; + } + + for (unsigned int j = 0; j < sz.size(); ++j) { + //setting the pointers + if (j != 0) { + const unsigned int jm1 = j - 1; + const size_t shift = cumsum_sizes[j] - cumsum_sizes[jm1]; + if (cpos::types[jm1] == cpos::HeterogeneousHGCalPositionsType::Float and + cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Float) + select_pointer_f_(&this->posmap_, j) = select_pointer_f_(&this->posmap_, jm1) + shift; + else if (cpos::types[jm1] == cpos::HeterogeneousHGCalPositionsType::Float and + cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + select_pointer_i_(&this->posmap_, j) = + reinterpret_cast(select_pointer_f_(&this->posmap_, jm1) + shift); + else if (cpos::types[jm1] == cpos::HeterogeneousHGCalPositionsType::Int32_t and + cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + select_pointer_i_(&this->posmap_, j) = select_pointer_i_(&this->posmap_, jm1) + shift; + else if (cpos::types[jm1] == cpos::HeterogeneousHGCalPositionsType::Int32_t and + cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Uint32_t) + select_pointer_u_(&this->posmap_, j) = + reinterpret_cast(select_pointer_i_(&this->posmap_, jm1) + shift); + else + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "Wrong HeterogeneousHGCalPositionsMapping type"; + } + + //copying the pointers' content + if (j >= + this->number_position_arrays) //required due to the assymetry between cpos::HeterogeneousHGCalPositionsMapping and cpos::HGCalPositionsMapping + { + for (unsigned int i = cumsum_sizes[j]; i < cumsum_sizes[j + 1]; ++i) { + unsigned int index = i - cumsum_sizes[j]; + if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Float) { + select_pointer_f_(&this->posmap_, j)[index] = + select_pointer_f_(cpuPos, j - this->number_position_arrays)[index]; + } else if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Int32_t) { + select_pointer_i_(&this->posmap_, j)[index] = + select_pointer_i_(cpuPos, j - this->number_position_arrays)[index]; + } else if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Uint32_t) { + select_pointer_u_(&this->posmap_, j)[index] = + select_pointer_u_(cpuPos, j - this->number_position_arrays)[index]; + } else + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "Wrong HeterogeneousHGCalPositions type"; + } + } + } +} + +void HeterogeneousHGCalHEFCellPositionsConditions::transfer_data_to_heterogeneous_vars_( + const cpos::HGCalPositionsMapping* cpuPos) { + this->posmap_.waferSize = cpuPos->waferSize; + this->posmap_.sensorSeparation = cpuPos->sensorSeparation; + this->posmap_.firstLayer = cpuPos->firstLayer; + this->posmap_.lastLayer = cpuPos->lastLayer; + this->posmap_.waferMin = cpuPos->waferMin; + this->posmap_.waferMax = cpuPos->waferMax; + this->nelems_posmap_ = cpuPos->detid.size(); +} + +std::vector HeterogeneousHGCalHEFCellPositionsConditions::calculate_memory_bytes_( + cpos::HGCalPositionsMapping* cpuPos) { + size_t npointers = cpos::types.size(); + std::vector sizes(npointers); + for (unsigned int i = 0; i < npointers; ++i) { + const unsigned detid_index = 4; + const unsigned nlayers_index = 3; + if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Float and (i == 0 or i == 1)) + sizes[i] = select_pointer_u_(cpuPos, detid_index) + .size(); //x and y position array will have the same size as the detid array + else if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Float and i == 2) + sizes[i] = select_pointer_i_(cpuPos, nlayers_index).size(); //z position's size is equal to the #layers + else if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Float and i > 2) + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "Wrong HeterogeneousHGCalPositions type (Float)"; + else if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + sizes[i] = select_pointer_i_(cpuPos, i - this->number_position_arrays).size(); + else if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Uint32_t) + sizes[i] = select_pointer_u_(cpuPos, detid_index).size(); + } + + std::vector sizes_units(npointers); + for (unsigned int i = 0; i < npointers; ++i) { + if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Float) + sizes_units[i] = sizeof(float); + else if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + sizes_units[i] = sizeof(int32_t); + else if (cpos::types[i] == cpos::HeterogeneousHGCalPositionsType::Uint32_t) + sizes_units[i] = sizeof(uint32_t); + } + + //element by element multiplication + this->sizes_.resize(npointers); + std::transform(sizes.begin(), sizes.end(), sizes_units.begin(), this->sizes_.begin(), std::multiplies()); + return this->sizes_; +} + +HeterogeneousHGCalHEFCellPositionsConditions::~HeterogeneousHGCalHEFCellPositionsConditions() { + cudaCheck(cudaFreeHost(this->posmap_.x)); +} + +//I could use template specializations +//try to use std::variant in the future to avoid similar functions with different return values +float*& HeterogeneousHGCalHEFCellPositionsConditions::select_pointer_f_( + cpos::HeterogeneousHGCalPositionsMapping* cpuObject, const unsigned int& item) const { + switch (item) { + case 0: + return cpuObject->x; + case 1: + return cpuObject->y; + case 2: + return cpuObject->zLayer; + default: + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "select_pointer_f(heterogeneous): no item (typed " << item << ")."; + return cpuObject->x; + } +} + +std::vector& HeterogeneousHGCalHEFCellPositionsConditions::select_pointer_f_( + cpos::HGCalPositionsMapping* cpuObject, const unsigned int& item) { + switch (item) { + case 0: + return cpuObject->zLayer; + default: + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "select_pointer_f(non-heterogeneous): no item (typed " << item << ")."; + return cpuObject->zLayer; + } +} + +int32_t*& HeterogeneousHGCalHEFCellPositionsConditions::select_pointer_i_( + cpos::HeterogeneousHGCalPositionsMapping* cpuObject, const unsigned int& item) const { + switch (item) { + case 3: + return cpuObject->nCellsLayer; + case 4: + return cpuObject->nCellsWaferUChunk; + case 5: + return cpuObject->nCellsHexagon; + default: + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "select_pointer_i(heterogeneous): no item (typed " << item << ")."; + return cpuObject->nCellsHexagon; + } +} + +std::vector& HeterogeneousHGCalHEFCellPositionsConditions::select_pointer_i_( + cpos::HGCalPositionsMapping* cpuObject, const unsigned int& item) { + switch (item) { + case 1: + return cpuObject->nCellsLayer; + case 2: + return cpuObject->nCellsWaferUChunk; + case 3: + return cpuObject->nCellsHexagon; + default: + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "select_pointer_i(non-heterogeneous): no item (typed " << item << ")."; + return cpuObject->nCellsHexagon; + } +} + +uint32_t*& HeterogeneousHGCalHEFCellPositionsConditions::select_pointer_u_( + cpos::HeterogeneousHGCalPositionsMapping* cpuObject, const unsigned int& item) const { + switch (item) { + case 6: + return cpuObject->detid; + default: + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "select_pointer_u(heterogeneous): no item (typed " << item << ")."; + return cpuObject->detid; + } +} + +std::vector& HeterogeneousHGCalHEFCellPositionsConditions::select_pointer_u_( + cpos::HGCalPositionsMapping* cpuObject, const unsigned int& item) { + switch (item) { + case 4: + return cpuObject->detid; + default: + throw cms::Exception("HeterogeneousHGCalHEFCellPositionsConditions") + << "select_pointer_u(non-heterogeneous): no item (typed " << item << ")."; + return cpuObject->detid; + } +} + +hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct const* +HeterogeneousHGCalHEFCellPositionsConditions::getHeterogeneousConditionsESProductAsync(cudaStream_t stream) const { + // cms::cuda::ESProduct essentially holds an array of GPUData objects, + // one per device. If the data have already been transferred to the + // current device (or the transfer has been queued), the helper just + // returns a reference to that GPUData object. Otherwise, i.e. data are + // not yet on the current device, the helper calls the lambda to do the + // necessary memory allocations and to queue the transfers. + auto const& data = gpuData_.dataForCurrentDeviceAsync(stream, [this](GPUData& data, cudaStream_t stream) { + // Allocate the payload object on pinned host memory. + cudaCheck(cudaMallocHost(&data.host, sizeof(hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct))); + // Allocate the payload array(s) on device memory. + cudaCheck(cudaMalloc(&(data.host->posmap.x), this->chunk_)); + // Complete the host-side information on the payload + data.host->posmap.waferSize = this->posmap_.waferSize; + data.host->posmap.sensorSeparation = this->posmap_.sensorSeparation; + data.host->posmap.firstLayer = this->posmap_.firstLayer; + data.host->posmap.lastLayer = this->posmap_.lastLayer; + data.host->posmap.waferMax = this->posmap_.waferMax; + data.host->posmap.waferMin = this->posmap_.waferMin; + data.host->nelems_posmap = this->nelems_posmap_; + + //(set the pointers of the positions' mapping) + size_t sfloat = sizeof(float); + size_t sint32 = sizeof(int32_t); + for (unsigned int j = 0; j < this->sizes_.size() - 1; ++j) { + if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Float and + cpos::types[j + 1] == cpos::HeterogeneousHGCalPositionsType::Float) + select_pointer_f_(&(data.host->posmap), j + 1) = + select_pointer_f_(&(data.host->posmap), j) + (this->sizes_[j] / sfloat); + else if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Float and + cpos::types[j + 1] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + select_pointer_i_(&(data.host->posmap), j + 1) = + reinterpret_cast(select_pointer_f_(&(data.host->posmap), j) + (this->sizes_[j] / sfloat)); + else if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Int32_t and + cpos::types[j + 1] == cpos::HeterogeneousHGCalPositionsType::Int32_t) + select_pointer_i_(&(data.host->posmap), j + 1) = + select_pointer_i_(&(data.host->posmap), j) + (this->sizes_[j] / sint32); + else if (cpos::types[j] == cpos::HeterogeneousHGCalPositionsType::Int32_t and + cpos::types[j + 1] == cpos::HeterogeneousHGCalPositionsType::Uint32_t) + select_pointer_u_(&(data.host->posmap), j + 1) = + reinterpret_cast(select_pointer_i_(&(data.host->posmap), j) + (this->sizes_[j] / sint32)); + } + + // Allocate the payload object on the device memory. + cudaCheck(cudaMalloc(&data.device, sizeof(hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct))); + + // Transfer the payload, first the array(s) ... + //Important: The transfer does *not* start at posmap.x because the positions are not known in the CPU side! + size_t non_position_memory_size_to_transfer = + this->chunk_ - this->number_position_arrays * this->nelems_posmap_ * + sfloat; //size in bytes occupied by the non-position information + cudaCheck(cudaMemcpyAsync(data.host->posmap.zLayer, + this->posmap_.zLayer, + non_position_memory_size_to_transfer, + cudaMemcpyHostToDevice, + stream)); + + // ... and then the payload object + cudaCheck(cudaMemcpyAsync(data.device, + data.host, + sizeof(hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct), + cudaMemcpyHostToDevice, + stream)); + + //Fill x and y positions in the GPU + KernelManagerHGCalCellPositions km(this->nelems_posmap_); + km.fill_positions(data.device); + }); //gpuData_.dataForCurrentDeviceAsync + + // Returns the payload object on the memory of the current device + return data.device; +} + +// Destructor frees all member pointers +HeterogeneousHGCalHEFCellPositionsConditions::GPUData::~GPUData() { + if (host != nullptr) { + cudaCheck(cudaFree(host->posmap.x)); + cudaCheck(cudaFreeHost(host)); + } + cudaCheck(cudaFree(device)); +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.cc new file mode 100644 index 0000000000000..1980eb9d4a4f3 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.cc @@ -0,0 +1,98 @@ +#include "RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.h" + +HeterogeneousHGCalHEFCellPositionsFiller::HeterogeneousHGCalHEFCellPositionsFiller(const edm::ParameterSet& ps) { + geometryToken_ = setWhatProduced(this).consumesFrom( + edm::ESInputTag{"", "HGCalHESiliconSensitive"}); + posmap_ = new hgcal_conditions::positions::HGCalPositionsMapping(); +} + +HeterogeneousHGCalHEFCellPositionsFiller::~HeterogeneousHGCalHEFCellPositionsFiller() { delete posmap_; } + +//the geometry is not required if the layer offset is hardcoded (potential speed-up) +void HeterogeneousHGCalHEFCellPositionsFiller::set_conditions_() { + //fill the CPU position structure from the geometry + posmap_->zLayer.clear(); + posmap_->nCellsLayer.clear(); + posmap_->nCellsWaferUChunk.clear(); + posmap_->nCellsHexagon.clear(); + posmap_->detid.clear(); + + int nlayers = ddd_->lastLayer(true) - ddd_->firstLayer() + 1; + int upper_estimate_wafer_number_1D = 2 * nlayers * (ddd_->waferMax() - ddd_->waferMin()); + int upper_estimate_wafer_number_2D = upper_estimate_wafer_number_1D * (ddd_->waferMax() - ddd_->waferMin()); + int upper_estimate_cell_number = upper_estimate_wafer_number_2D * 3 * 12 * 12; + posmap_->zLayer.resize(nlayers * 2); + posmap_->nCellsLayer.reserve(nlayers * 2); + posmap_->nCellsWaferUChunk.reserve(upper_estimate_wafer_number_1D); + posmap_->nCellsHexagon.reserve(upper_estimate_wafer_number_2D); + posmap_->detid.reserve(upper_estimate_cell_number); + //set position-related variables + posmap_->waferSize = static_cast(params_->waferSize_); + posmap_->sensorSeparation = static_cast(params_->sensorSeparation_); + posmap_->firstLayer = ddd_->firstLayer(); + assert(posmap_->firstLayer == 1); //otherwise the loop over the layers has to be changed + posmap_->lastLayer = ddd_->lastLayer(true); + posmap_->waferMin = ddd_->waferMin(); + posmap_->waferMax = ddd_->waferMax(); + + unsigned sumCellsLayer, sumCellsWaferUChunk; + + //store detids following a geometry ordering + for (int ilayer = 1; ilayer <= posmap_->lastLayer; ++ilayer) { + sumCellsLayer = 0; + posmap_->zLayer[ilayer - 1] = static_cast(ddd_->waferZ(ilayer, true)); //originally a double + posmap_->zLayer[ilayer - 1 + nlayers] = static_cast(ddd_->waferZ(ilayer, true)); //originally a double + + for (int iwaferU = posmap_->waferMin; iwaferU < posmap_->waferMax; ++iwaferU) { + sumCellsWaferUChunk = 0; + + for (int iwaferV = posmap_->waferMin; iwaferV < posmap_->waferMax; ++iwaferV) { + //0: fine; 1: coarseThin; 2: coarseThick (as defined in DataFormats/ForwardDetId/interface/HGCSiliconDetId.h) + int type_ = ddd_->waferType(ilayer, iwaferU, iwaferV); + + int nCellsHexSide = ddd_->numberCellsHexagon(ilayer, iwaferU, iwaferV, false); + int nCellsHexTotal = ddd_->numberCellsHexagon(ilayer, iwaferU, iwaferV, true); + sumCellsLayer += nCellsHexTotal; + sumCellsWaferUChunk += nCellsHexTotal; + posmap_->nCellsHexagon.push_back(nCellsHexTotal); + + //left side of wafer + for (int cellUmax = nCellsHexSide, icellV = 0; cellUmax < 2 * nCellsHexSide and icellV < nCellsHexSide; + ++cellUmax, ++icellV) { + for (int icellU = 0; icellU <= cellUmax; ++icellU) { + HGCSiliconDetId detid_(DetId::HGCalHSi, 1, type_, ilayer, iwaferU, iwaferV, icellU, icellV); + posmap_->detid.push_back(detid_.rawId()); + } + } + //right side of wafer + for (int cellUmin = 1, icellV = nCellsHexSide; cellUmin <= nCellsHexSide and icellV < 2 * nCellsHexSide; + ++cellUmin, ++icellV) { + for (int icellU = cellUmin; icellU < 2 * nCellsHexSide; ++icellU) { + HGCSiliconDetId detid_(DetId::HGCalHSi, 1, type_, ilayer, iwaferU, iwaferV, icellU, icellV); + posmap_->detid.push_back(detid_.rawId()); + } + } + } + posmap_->nCellsWaferUChunk.push_back(sumCellsWaferUChunk); + } + posmap_->nCellsLayer.push_back(sumCellsLayer); + } +} + +std::unique_ptr HeterogeneousHGCalHEFCellPositionsFiller::produce( + const HeterogeneousHGCalHEFCellPositionsConditionsRecord& iRecord) { + auto geom = iRecord.getTransientHandle(geometryToken_); + ddd_ = &(geom->topology().dddConstants()); + params_ = ddd_->getParameter(); + + set_conditions_(); + + std::unique_ptr up = + std::make_unique(posmap_); + return up; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/typelookup.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" +DEFINE_FWK_EVENTSETUP_MODULE(HeterogeneousHGCalHEFCellPositionsFiller); diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.h b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.h new file mode 100644 index 0000000000000..8a83430b03b1d --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFCellPositionsFiller.h @@ -0,0 +1,54 @@ +#ifndef RecoLocalCalo_HGCalESProducers_HeterogeneousHGCalHEFCellPositionsFiller_h +#define RecoLocalCalo_HGCalESProducers_HeterogeneousHGCalHEFCellPositionsFiller_h + +#include +#include +#include +#include +#include + +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" + +#include "CondFormats/HGCalObjects/interface/HeterogeneousHGCalHEFCellPositionsConditions.h" +#include "CondFormats/DataRecord/interface/HeterogeneousHGCalHEFCellPositionsConditionsRecord.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h" + +class HeterogeneousHGCalHEFCellPositionsFiller : public edm::ESProducer { +public: + explicit HeterogeneousHGCalHEFCellPositionsFiller(const edm::ParameterSet&); + ~HeterogeneousHGCalHEFCellPositionsFiller() override; + std::unique_ptr produce( + const HeterogeneousHGCalHEFCellPositionsConditionsRecord&); + +private: + edm::ESGetToken geometryToken_; + + //cms::cuda::ContextState ctxState_; + + //conditions (geometry, topology, ...) + //void geometryCallback(const IdealGeometryRecord&); + void set_conditions_(); + + const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* d_conds = nullptr; + hgcal_conditions::positions::HGCalPositionsMapping* posmap_; + + const HGCalDDDConstants* ddd_ = nullptr; + const HGCalParameters* params_ = nullptr; +}; + +#endif //RecoLocalCalo_HGCalESProducers_HeterogeneousHGCalHEFCellPositionsFiller_h diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.cc new file mode 100644 index 0000000000000..cc7cad636f947 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.cc @@ -0,0 +1,206 @@ +#include "RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.h" + +HeterogeneousHGCalHEFConditionsWrapper::HeterogeneousHGCalHEFConditionsWrapper( + const HGCalParameters* cpuHGCalParameters) { + //HGCalParameters as defined in CMSSW + this->sizes_params_ = calculate_memory_bytes_params_(cpuHGCalParameters); + this->chunk_params_ = allocate_memory_params_(this->sizes_params_); + transfer_data_to_heterogeneous_pointers_params_(this->sizes_params_, cpuHGCalParameters); +} + +size_t HeterogeneousHGCalHEFConditionsWrapper::allocate_memory_params_(const std::vector& sz) { + size_t chunk_ = std::accumulate(sz.begin(), sz.end(), 0); //total memory required in bytes + cudaCheck(cudaMallocHost(&this->params_.cellFineX_, chunk_)); + return chunk_; +} + +void HeterogeneousHGCalHEFConditionsWrapper::transfer_data_to_heterogeneous_pointers_params_( + const std::vector& sz, const HGCalParameters* cpuParams) { + //store cumulative sum in bytes and convert it to sizes in units of C++ typesHEF, i.e., number if items to be transferred to GPU + std::vector cumsum_sizes(sz.size() + 1, 0); //starting with zero + std::partial_sum(sz.begin(), sz.end(), cumsum_sizes.begin() + 1); + for (unsigned int i = 1; i < cumsum_sizes.size(); ++i) //start at second element (the first is zero) + { + size_t typesHEFsize = 0; + if (cpar::typesHEF[i - 1] == cpar::HeterogeneousHGCalHEFParametersType::Double) + typesHEFsize = sizeof(double); + else if (cpar::typesHEF[i - 1] == cpar::HeterogeneousHGCalHEFParametersType::Int32_t) + typesHEFsize = sizeof(int32_t); + else + throw cms::Exception("HeterogeneousHGCalHEFConditionsWrapper") << "Wrong HeterogeneousHGCalParameters type"; + cumsum_sizes[i] /= typesHEFsize; + } + + for (unsigned int j = 0; j < sz.size(); ++j) { + //setting the pointers + if (j != 0) { + const unsigned int jm1 = j - 1; + const size_t shift = cumsum_sizes[j] - cumsum_sizes[jm1]; + if (cpar::typesHEF[jm1] == cpar::HeterogeneousHGCalHEFParametersType::Double and + cpar::typesHEF[j] == cpar::HeterogeneousHGCalHEFParametersType::Double) + select_pointer_d_(&this->params_, j) = select_pointer_d_(&this->params_, jm1) + shift; + else if (cpar::typesHEF[jm1] == cpar::HeterogeneousHGCalHEFParametersType::Double and + cpar::typesHEF[j] == cpar::HeterogeneousHGCalHEFParametersType::Int32_t) + select_pointer_i_(&this->params_, j) = + reinterpret_cast(select_pointer_d_(&this->params_, jm1) + shift); + } + + //copying the pointers' content + for (unsigned int i = cumsum_sizes[j]; i < cumsum_sizes[j + 1]; ++i) { + unsigned int index = i - cumsum_sizes[j]; + if (cpar::typesHEF[j] == cpar::HeterogeneousHGCalHEFParametersType::Double) { + select_pointer_d_(&this->params_, j)[index] = select_pointer_d_(cpuParams, j)[index]; + } else if (cpar::typesHEF[j] == cpar::HeterogeneousHGCalHEFParametersType::Int32_t) { + select_pointer_i_(&this->params_, j)[index] = select_pointer_i_(cpuParams, j)[index]; + } else + throw cms::Exception("HeterogeneousHGCalHEFConditionsWrapper") << "Wrong HeterogeneousHGCalParameters type"; + } + } +} + +std::vector HeterogeneousHGCalHEFConditionsWrapper::calculate_memory_bytes_params_( + const HGCalParameters* cpuParams) { + size_t npointers = hgcal_conditions::parameters::typesHEF.size(); + std::vector sizes(npointers); + for (unsigned int i = 0; i < npointers; ++i) { + if (cpar::typesHEF[i] == cpar::HeterogeneousHGCalHEFParametersType::Double) + sizes[i] = select_pointer_d_(cpuParams, i).size(); + else + sizes[i] = select_pointer_i_(cpuParams, i).size(); + } + + std::vector sizes_units(npointers); + for (unsigned int i = 0; i < npointers; ++i) { + if (cpar::typesHEF[i] == cpar::HeterogeneousHGCalHEFParametersType::Double) + sizes_units[i] = sizeof(double); + else if (cpar::typesHEF[i] == cpar::HeterogeneousHGCalHEFParametersType::Int32_t) + sizes_units[i] = sizeof(int32_t); + } + + //element by element multiplication + this->sizes_params_.resize(npointers); + std::transform( + sizes.begin(), sizes.end(), sizes_units.begin(), this->sizes_params_.begin(), std::multiplies()); + return this->sizes_params_; +} + +HeterogeneousHGCalHEFConditionsWrapper::~HeterogeneousHGCalHEFConditionsWrapper() { + cudaCheck(cudaFreeHost(this->params_.cellFineX_)); +} + +//I could use template specializations +//try to use std::variant in the future to avoid similar functions with different return values +double*& HeterogeneousHGCalHEFConditionsWrapper::select_pointer_d_(cpar::HeterogeneousHGCalHEFParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 0: + return cpuObject->cellFineX_; + case 1: + return cpuObject->cellFineY_; + case 2: + return cpuObject->cellCoarseX_; + case 3: + return cpuObject->cellCoarseY_; + default: + edm::LogError("HeterogeneousHGCalHEFConditionsWrapper") << "select_pointer_d(heterogeneous): no item."; + return cpuObject->cellCoarseY_; + } +} + +std::vector HeterogeneousHGCalHEFConditionsWrapper::select_pointer_d_(const HGCalParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 0: + return cpuObject->cellFineX_; + case 1: + return cpuObject->cellFineY_; + case 2: + return cpuObject->cellCoarseX_; + case 3: + return cpuObject->cellCoarseY_; + default: + edm::LogError("HeterogeneousHGCalHEFConditionsWrapper") << "select_pointer_d(non-heterogeneous): no item."; + return cpuObject->cellCoarseY_; + } +} + +int32_t*& HeterogeneousHGCalHEFConditionsWrapper::select_pointer_i_(cpar::HeterogeneousHGCalHEFParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 4: + return cpuObject->waferTypeL_; + default: + edm::LogError("HeterogeneousHGCalHEFConditionsWrapper") << "select_pointer_i(heterogeneous): no item."; + return cpuObject->waferTypeL_; + } +} + +std::vector HeterogeneousHGCalHEFConditionsWrapper::select_pointer_i_(const HGCalParameters* cpuObject, + const unsigned int& item) const { + switch (item) { + case 4: + return cpuObject->waferTypeL_; + default: + edm::LogError("HeterogeneousHGCalHEFConditionsWrapper") << "select_pointer_i(non-heterogeneous): no item."; + return cpuObject->waferTypeL_; + } +} + +hgcal_conditions::HeterogeneousHEFConditionsESProduct const* +HeterogeneousHGCalHEFConditionsWrapper::getHeterogeneousConditionsESProductAsync(cudaStream_t stream) const { + // cms::cuda::ESProduct essentially holds an array of GPUData objects, + // one per device. If the data have already been transferred to the + // current device (or the transfer has been queued), the helper just + // returns a reference to that GPUData object. Otherwise, i.e. data are + // not yet on the current device, the helper calls the lambda to do the + // necessary memory allocations and to queue the transfers. + auto const& data = gpuData_.dataForCurrentDeviceAsync(stream, [this](GPUData& data, cudaStream_t stream) { + // Allocate the payload object on pinned host memory. + cudaCheck(cudaMallocHost(&data.host, sizeof(hgcal_conditions::HeterogeneousHEFConditionsESProduct))); + // Allocate the payload array(s) on device memory. + cudaCheck(cudaMalloc(&(data.host->params.cellFineX_), chunk_params_)); + + // Complete the host-side information on the payload + + //(set the pointers of the parameters) + size_t sdouble = sizeof(double); + for (unsigned int j = 0; j < this->sizes_params_.size() - 1; ++j) { + if (cpar::typesHEF[j] == cpar::HeterogeneousHGCalHEFParametersType::Double and + cpar::typesHEF[j + 1] == cpar::HeterogeneousHGCalHEFParametersType::Double) + select_pointer_d_(&(data.host->params), j + 1) = + select_pointer_d_(&(data.host->params), j) + (this->sizes_params_[j] / sdouble); + else if (cpar::typesHEF[j] == cpar::HeterogeneousHGCalHEFParametersType::Double and + cpar::typesHEF[j + 1] == cpar::HeterogeneousHGCalHEFParametersType::Int32_t) + select_pointer_i_(&(data.host->params), j + 1) = + reinterpret_cast(select_pointer_d_(&(data.host->params), j) + (this->sizes_params_[j] / sdouble)); + else + throw cms::Exception("HeterogeneousHGCalHEFConditionsWrapper") + << "compare this functions' logic with hgcal_conditions::parameters::typesHEF"; + } + + // Allocate the payload object on the device memory. + cudaCheck(cudaMalloc(&data.device, sizeof(hgcal_conditions::HeterogeneousHEFConditionsESProduct))); + // Transfer the payload, first the array(s) ... + cudaCheck(cudaMemcpyAsync( + data.host->params.cellFineX_, this->params_.cellFineX_, chunk_params_, cudaMemcpyHostToDevice, stream)); + + // ... and then the payload object + cudaCheck(cudaMemcpyAsync(data.device, + data.host, + sizeof(hgcal_conditions::HeterogeneousHEFConditionsESProduct), + cudaMemcpyHostToDevice, + stream)); + }); //gpuData_.dataForCurrentDeviceAsync + + // Returns the payload object on the memory of the current device + return data.device; +} + +// Destructor frees all member pointers +HeterogeneousHGCalHEFConditionsWrapper::GPUData::~GPUData() { + if (host != nullptr) { + cudaCheck(cudaFree(host->params.cellFineX_)); + cudaCheck(cudaFreeHost(host)); + } + cudaCheck(cudaFree(device)); +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.h b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.h new file mode 100644 index 0000000000000..b1bfdb7ee52a7 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HeterogeneousHGCalHEFConditions.h @@ -0,0 +1,68 @@ +#ifndef RecoLocalCalo_HGCRecProducers_HeterogeneousHGCalHEFConditions_h +#define RecoLocalCalo_HGCRecProducers_HeterogeneousHGCalHEFConditions_h + +#include //accumulate +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "HeterogeneousCore/CUDACore/interface/ESProduct.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" +#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h" +#include "Geometry/HGCalCommonData/interface/HGCalParameters.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" + +namespace cpar = hgcal_conditions::parameters; + +// Declare the wrapper ESProduct. The corresponding ESProducer should +// produce objects of this type. +class HeterogeneousHGCalHEFConditionsWrapper { +public: + // Constructor takes the standard CPU ESProduct, and transforms the + // necessary data to array(s) in pinned host memory + HeterogeneousHGCalHEFConditionsWrapper(const HGCalParameters *); + + // Deallocates all pinned host memory + ~HeterogeneousHGCalHEFConditionsWrapper(); + + // Function to return the actual payload on the memory of the current device + hgcal_conditions::HeterogeneousHEFConditionsESProduct const *getHeterogeneousConditionsESProductAsync( + cudaStream_t stream) const; + +private: + // Holds the data in pinned CPU memory + // Contrary to its non-heterogeneous counterpart (constructor argument) it is *not* a pointer (so to avoid an extra allocation) + cpar::HeterogeneousHGCalHEFParameters params_; + + std::vector sizes_params_; + size_t chunk_params_; + + std::vector calculate_memory_bytes_params_(const HGCalParameters *); + size_t allocate_memory_params_(const std::vector &); + void transfer_data_to_heterogeneous_pointers_params_(const std::vector &, const HGCalParameters *); + + /*methods for managing SoA's pointers*/ + //double + double *&select_pointer_d_(cpar::HeterogeneousHGCalHEFParameters *, const unsigned int &) const; + std::vector select_pointer_d_(const HGCalParameters *, const unsigned int &) const; + //int32_t + int32_t *&select_pointer_i_(cpar::HeterogeneousHGCalHEFParameters *, const unsigned int &) const; + std::vector select_pointer_i_(const HGCalParameters *, const unsigned int &) const; + + // Helper struct to hold all information that has to be allocated and + // deallocated per device + struct GPUData { + // Destructor should free all member pointers + ~GPUData(); + // internal pointers are on device, struct itself is on CPU + hgcal_conditions::HeterogeneousHEFConditionsESProduct *host = nullptr; + // internal pounters and struct are on device + hgcal_conditions::HeterogeneousHEFConditionsESProduct *device = nullptr; + }; + + // Helper that takes care of complexity of transferring the data to + // multiple devices + cms::cuda::ESProduct gpuData_; +}; + +#endif //RecoLocalCalo_HGCRecProducers_HeterogeneousHGCalHEFConditions_h diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.cu b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.cu new file mode 100644 index 0000000000000..3aa8d8ae0d8af --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.cu @@ -0,0 +1,24 @@ +#include +#include +#include +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cuh" + +namespace { //kernel parameters + dim3 nb_celpos_; + constexpr dim3 nt_celpos_(256); +} // namespace + +KernelManagerHGCalCellPositions::KernelManagerHGCalCellPositions(const size_t& nelems) { + ::nb_celpos_ = (nelems + ::nt_celpos_.x - 1) / ::nt_celpos_.x; +} + +void KernelManagerHGCalCellPositions::fill_positions( + const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* d_conds) { + fill_positions_from_detids<<<::nb_celpos_, ::nt_celpos_>>>(d_conds); +} + +void KernelManagerHGCalCellPositions::test_cell_positions( + unsigned id, const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* d_conds) { + test<<<::nb_celpos_, ::nt_celpos_>>>(id, d_conds); +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h new file mode 100644 index 0000000000000..dbc662700e145 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalCellPositions.h @@ -0,0 +1,32 @@ +#ifndef RecoLocalCalo_HGCalESProducers_KernelManagerHGCalCellPositions_h +#define RecoLocalCalo_HGCalESProducers_KernelManagerHGCalCellPositions_h + +#include "FWCore/Utilities/interface/Exception.h" +#include "HeterogeneousCore/CUDAUtilities/interface/MessageLogger.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h" +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/HGCalCellPositionsKernelImpl.cuh" +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" + +#include +#include //std::swap +#include +#include +#include + +/* +#ifdef __CUDA_ARCH__ +extern __constant__ uint32_t calo_rechit_masks[]; +#endif +*/ + +class KernelManagerHGCalCellPositions { +public: + KernelManagerHGCalCellPositions(const size_t&); + + void fill_positions(const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct*); + void test_cell_positions(unsigned, const hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct*); +}; + +#endif //RecoLocalCalo_HGCalESProducers_KernelManagerHGCalCellPositions_h diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.cu b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.cu new file mode 100644 index 0000000000000..4daaa5c0247f3 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.cu @@ -0,0 +1,62 @@ +#include +#include +#include +#include "RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cuh" + +namespace { //kernel parameters + dim3 nb_rechits_; + constexpr dim3 nt_rechits_(1024); +} // namespace + +KernelManagerHGCalRecHit::KernelManagerHGCalRecHit(const HGCUncalibRecHitSoA& h_uncalibSoA, + const HGCUncalibRecHitSoA& d_uncalibSoA, + const HGCRecHitSoA& d_calibSoA) + : h_uncalibSoA_(h_uncalibSoA), d_uncalibSoA_(d_uncalibSoA), d_calibSoA_(d_calibSoA) { + nhits_ = h_uncalibSoA_.nhits_; + pad_ = h_uncalibSoA_.pad_; + ::nb_rechits_ = (pad_ + ::nt_rechits_.x - 1) / ::nt_rechits_.x; + nbytes_device_ = d_uncalibSoA_.nbytes_ * pad_; +} + +KernelManagerHGCalRecHit::KernelManagerHGCalRecHit(const HGCRecHitSoA& h_calibSoA_, + const ConstHGCRecHitSoA& d_calibConstSoA) + : h_calibSoA_(h_calibSoA_), d_calibConstSoA_(d_calibConstSoA) { + nhits_ = h_calibSoA_.nhits_; + pad_ = h_calibSoA_.pad_; + ::nb_rechits_ = (pad_ + ::nt_rechits_.x - 1) / ::nt_rechits_.x; + nbytes_host_ = h_calibSoA_.nbytes_ * pad_; +} + +KernelManagerHGCalRecHit::~KernelManagerHGCalRecHit() {} + +void KernelManagerHGCalRecHit::transfer_soa_to_device_(const cudaStream_t& stream) { + cudaCheck(cudaMemcpyAsync( + d_uncalibSoA_.amplitude_, h_uncalibSoA_.amplitude_, nbytes_device_, cudaMemcpyHostToDevice, stream)); +} + +void KernelManagerHGCalRecHit::transfer_soa_to_host(const cudaStream_t& stream) { + cudaCheck( + cudaMemcpyAsync(h_calibSoA_.energy_, d_calibConstSoA_.energy_, nbytes_host_, cudaMemcpyDeviceToHost, stream)); +} + +void KernelManagerHGCalRecHit::run_kernels(const KernelConstantData* kcdata, + const cudaStream_t& stream) { + transfer_soa_to_device_(stream); + ee_to_rechit<<<::nb_rechits_, ::nt_rechits_, 0, stream>>>(d_calibSoA_, d_uncalibSoA_, kcdata->data_, nhits_); + cudaCheck(cudaGetLastError()); +} + +void KernelManagerHGCalRecHit::run_kernels(const KernelConstantData* kcdata, + const cudaStream_t& stream) { + transfer_soa_to_device_(stream); + hef_to_rechit<<<::nb_rechits_, ::nt_rechits_, 0, stream>>>(d_calibSoA_, d_uncalibSoA_, kcdata->data_, nhits_); + cudaCheck(cudaGetLastError()); +} + +void KernelManagerHGCalRecHit::run_kernels(const KernelConstantData* kcdata, + const cudaStream_t& stream) { + transfer_soa_to_device_(stream); + heb_to_rechit<<<::nb_rechits_, ::nt_rechits_, 0, stream>>>(d_calibSoA_, d_uncalibSoA_, kcdata->data_, nhits_); + cudaCheck(cudaGetLastError()); +} diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h new file mode 100644 index 0000000000000..6e9f973df876f --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/plugins/KernelManagerHGCalRecHit.h @@ -0,0 +1,56 @@ +#ifndef RecoLocalCalo_HGCalRecProducers_KernelManagerHGCalRecHit_h +#define RecoLocalCalo_HGCalRecProducers_KernelManagerHGCalRecHit_h + +#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h" +#include "RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cuh" +#include "CUDADataFormats/HGCal/interface/HGCConditions.h" +#include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h" +#include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h" + +#include +#include //std::swap +#include +#include +#include + +#ifdef __CUDA_ARCH__ +extern __constant__ uint32_t calo_rechit_masks[]; +#endif + +template +class KernelConstantData { +public: + KernelConstantData(T& data, HGCConstantVectorData& vdata) : data_(data), vdata_(vdata) { + static_assert(std::is_same::value or + std::is_same::value or + std::is_same::value, + "The KernelConstantData class does not support this type."); + } + T data_; + HGCConstantVectorData vdata_; +}; + +class KernelManagerHGCalRecHit { +public: + KernelManagerHGCalRecHit(); + KernelManagerHGCalRecHit(const HGCUncalibRecHitSoA&, const HGCUncalibRecHitSoA&, const HGCRecHitSoA&); + KernelManagerHGCalRecHit(const HGCRecHitSoA&, const ConstHGCRecHitSoA&); + ~KernelManagerHGCalRecHit(); + void run_kernels(const KernelConstantData*, const cudaStream_t&); + void run_kernels(const KernelConstantData*, const cudaStream_t&); + void run_kernels(const KernelConstantData*, const cudaStream_t&); + void transfer_soa_to_host(const cudaStream_t&); + +private: + void transfer_soa_to_device_(const cudaStream_t&); + + uint32_t nhits_; + uint32_t pad_; + uint32_t nbytes_host_; + uint32_t nbytes_device_; + HGCUncalibRecHitSoA h_uncalibSoA_, d_uncalibSoA_; + HGCRecHitSoA h_calibSoA_, d_calibSoA_; + ConstHGCRecHitSoA d_calibConstSoA_; +}; + +#endif //RecoLocalCalo_HGCalRecProducers_KernelManagerHGCalRecHit_h diff --git a/RecoLocalCalo/HGCalRecProducers/python/HGCalRecHit_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HGCalRecHit_cfi.py index dee4d1329a02c..7975ec9b9177c 100644 --- a/RecoLocalCalo/HGCalRecProducers/python/HGCalRecHit_cfi.py +++ b/RecoLocalCalo/HGCalRecProducers/python/HGCalRecHit_cfi.py @@ -104,7 +104,7 @@ #With the new regional em factors there are 7 different factors used. #Six of them are for silicon and one for scint. For silicon it is in the following order # CE_E_120um, CE_E_200um, CE_E_300um, CE_H_120um, CE_H_200um, CE_H_300um - thicknessCorrection = cms.vdouble(1.132,1.092,1.084, 1.0, 1.0, 1.0), # 100, 200, 300 um + thicknessCorrection = cms.vdouble(1.132,1.092,1.084,1.0,1.0,1.0), deltasi_index_regemfac = cms.int32(3), #One factor for scint sciThicknessCorrection = cms.double(1.0), diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitFromSoA_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitFromSoA_cfi.py new file mode 100644 index 0000000000000..bce190b4b45c1 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitFromSoA_cfi.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +EERecHitFromSoAProd = cms.EDProducer('EERecHitFromSoA', + EERecHitSoATok = cms.InputTag('EERecHitGPUtoSoAProd')) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitGPU_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitGPU_cfi.py new file mode 100644 index 0000000000000..9b72006d5df73 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitGPU_cfi.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms +from RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi import HGCalRecHit + +EERecHitGPUProd = cms.EDProducer('EERecHitGPU', + HGCEEUncalibRecHitsTok = cms.InputTag('HGCalUncalibRecHit', 'HGCEEUncalibRecHits'), + HGCEE_keV2DIGI = HGCalRecHit.__dict__['HGCEE_keV2DIGI'], + minValSiPar = HGCalRecHit.__dict__['minValSiPar'], + maxValSiPar = HGCalRecHit.__dict__['maxValSiPar'], + constSiPar = HGCalRecHit.__dict__['constSiPar'], + noiseSiPar = HGCalRecHit.__dict__['noiseSiPar'], + HGCEE_fCPerMIP = HGCalRecHit.__dict__['HGCEE_fCPerMIP'], + HGCEE_isSiFE = HGCalRecHit.__dict__['HGCEE_isSiFE'], + HGCEE_noise_fC = HGCalRecHit.__dict__['HGCEE_noise_fC'], + HGCEE_cce = HGCalRecHit.__dict__['HGCEE_cce'], + rcorr = cms.vdouble( HGCalRecHit.__dict__['thicknessCorrection'][0:3] ), + weights = HGCalRecHit.__dict__['layerWeights'] ) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitGPUtoSoA_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitGPUtoSoA_cfi.py new file mode 100644 index 0000000000000..58e80e9d1ff3b --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousEERecHitGPUtoSoA_cfi.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +EERecHitGPUtoSoAProd = cms.EDProducer('EERecHitGPUtoSoA', + EERecHitGPUTok = cms.InputTag('EERecHitGPUProd')) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitFromSoA_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitFromSoA_cfi.py new file mode 100644 index 0000000000000..2f9abd6b56356 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitFromSoA_cfi.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +HEBRecHitFromSoAProd = cms.EDProducer('HEBRecHitFromSoA', + HEBRecHitSoATok = cms.InputTag('HEBRecHitGPUtoSoAProd')) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitGPU_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitGPU_cfi.py new file mode 100644 index 0000000000000..1018cd4fb8d7f --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitGPU_cfi.py @@ -0,0 +1,8 @@ +import FWCore.ParameterSet.Config as cms +from RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi import HGCalRecHit + +HEBRecHitGPUProd = cms.EDProducer('HEBRecHitGPU', + HGCHEBUncalibRecHitsTok = cms.InputTag('HGCalUncalibRecHit', 'HGCHEBUncalibRecHits'), + HGCHEB_keV2DIGI = HGCalRecHit.__dict__['HGCHEB_keV2DIGI'], + HGCHEB_noise_MIP = HGCalRecHit.__dict__['HGCHEB_noise_MIP'], + weights = HGCalRecHit.__dict__['layerWeights'] ) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitGPUtoSoA_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitGPUtoSoA_cfi.py new file mode 100644 index 0000000000000..331dc380a0542 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEBRecHitGPUtoSoA_cfi.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +HEBRecHitGPUtoSoAProd = cms.EDProducer('HEBRecHitGPUtoSoA', + HEBRecHitGPUTok = cms.InputTag('HEBRecHitGPUProd')) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitFromSoA_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitFromSoA_cfi.py new file mode 100644 index 0000000000000..09f2b232e521b --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitFromSoA_cfi.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +HEFRecHitFromSoAProd = cms.EDProducer('HEFRecHitFromSoA', + HEFRecHitSoATok = cms.InputTag('HEFRecHitGPUtoSoAProd')) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitGPU_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitGPU_cfi.py new file mode 100644 index 0000000000000..8cbf2505e6aa4 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitGPU_cfi.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms +from RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi import HGCalRecHit + +HEFRecHitGPUProd = cms.EDProducer('HEFRecHitGPU', + HGCHEFUncalibRecHitsTok = cms.InputTag('HGCalUncalibRecHit','HGCHEFUncalibRecHits'), + HGCHEF_keV2DIGI = HGCalRecHit.__dict__['HGCHEF_keV2DIGI'], + minValSiPar = HGCalRecHit.__dict__['minValSiPar'], + maxValSiPar = HGCalRecHit.__dict__['maxValSiPar'], + constSiPar = HGCalRecHit.__dict__['constSiPar'], + noiseSiPar = HGCalRecHit.__dict__['noiseSiPar'], + HGCHEF_fCPerMIP = HGCalRecHit.__dict__['HGCHEF_fCPerMIP'], + HGCHEF_isSiFE = HGCalRecHit.__dict__['HGCHEF_isSiFE'], + HGCHEF_noise_fC = HGCalRecHit.__dict__['HGCHEF_noise_fC'], + HGCHEF_cce = HGCalRecHit.__dict__['HGCHEF_cce'], + rcorr = cms.vdouble( HGCalRecHit.__dict__['thicknessCorrection'][3:6] ), + weights = HGCalRecHit.__dict__['layerWeights'] ) diff --git a/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitGPUtoSoA_cfi.py b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitGPUtoSoA_cfi.py new file mode 100644 index 0000000000000..86d5ea6fb65fe --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/python/HeterogeneousHEFRecHitGPUtoSoA_cfi.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +HEFRecHitGPUtoSoAProd = cms.EDProducer('HEFRecHitGPUtoSoA', + HEFRecHitGPUTok = cms.InputTag('HEFRecHitGPUProd')) diff --git a/RecoLocalCalo/HGCalRecProducers/src/ComputeClusterTime.cc b/RecoLocalCalo/HGCalRecProducers/src/ComputeClusterTime.cc index 2643a22571725..1c36039e482d7 100644 --- a/RecoLocalCalo/HGCalRecProducers/src/ComputeClusterTime.cc +++ b/RecoLocalCalo/HGCalRecProducers/src/ComputeClusterTime.cc @@ -47,6 +47,8 @@ float ComputeClusterTime::getTimeError(std::string type, float xVal) { if (type == "recHit") { //xVal is S/N //time is in ns units + //std::cout << type << ", " << xVal << ", " << xMax_ << ", " < xMin_ << ", " << timeResolution(xMin_) << ", " << timeResolution(xVal) << std::endl; + if (xVal < xMin_) return timeResolution(xMin_); else if (xVal > xMax_) diff --git a/RecoLocalCalo/HGCalRecProducers/test/HeterogeneousHGCalRecHit_cfg.py b/RecoLocalCalo/HGCalRecProducers/test/HeterogeneousHGCalRecHit_cfg.py new file mode 100644 index 0000000000000..249ee0d700909 --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/test/HeterogeneousHGCalRecHit_cfg.py @@ -0,0 +1,97 @@ +import FWCore.ParameterSet.Config as cms +import os, glob + +def getHeterogeneousRecHitsSource(pu): + indir = '/eos/user/b/bfontana/Samples/' #indir = '/home/bfontana/' + filename_suff = 'step3_ttbar_PU' + str(pu) #filename_suff = 'hadd_out_PU' + str(pu) + fNames = [ 'file:' + x for x in glob.glob(os.path.join(indir, filename_suff + '*.root')) ] + print(indir, filename_suff, pu, fNames) + for _ in range(4): + fNames.extend(fNames) + if len(fNames)==0: + print('Used globbing: ', glob.glob(os.path.join(indir, filename_suff + '*.root'))) + raise ValueError('No input files!') + + keep = 'keep *' + drop1 = 'drop CSCDetIdCSCALCTPreTriggerDigiMuonDigiCollection_simCscTriggerPrimitiveDigis__HLT' + drop2 = 'drop HGCRecHitsSorted_HGCalRecHit_HGC*E*RecHits_*' + return cms.Source("PoolSource", + fileNames = cms.untracked.vstring(fNames), + inputCommands = cms.untracked.vstring(keep, drop1, drop2), + duplicateCheckMode = cms.untracked.string("noDuplicateCheck")) + +enableGPU = True +from Configuration.ProcessModifiers.gpu_cff import gpu + +from RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi import HGCalRecHit +from SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi import HGCAL_noise_fC, HGCAL_chargeCollectionEfficiencies + +#arguments parsing +from FWCore.ParameterSet.VarParsing import VarParsing +F = VarParsing('analysis') +F.register('PU', + -1, + F.multiplicity.singleton, + F.varType.int, + "Pileup to consider.") +F.parseArguments() + +process = cms.Process("TESTgpu", gpu) if enableGPU else cms.Process("TESTnongpu") +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +#process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi') +process.load('SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi') + +process.TFileService = cms.Service("TFileService", + fileName = cms.string("histo.root"), + closeFileFast = cms.untracked.bool(True) + ) + + +process.source = getHeterogeneousRecHitsSource(F.PU) +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(20) ) +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool( False )) #add option for edmStreams + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitFromSoA_cfi') + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitFromSoA_cfi') + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitFromSoA_cfi') + + +#process.HeterogeneousHGCalHEFCellPositionsFiller = cms.ESProducer("HeterogeneousHGCalHEFCellPositionsFiller") + + +#process.HGCalRecHits = HGCalRecHit.clone() + +#process.task = cms.Task( process.HeterogeneousHGCalHEFCellPositionsFiller, process.HeterogeneousHGCalHEFRecHits ) +#process.task = cms.Task( process.HGCalRecHits, process.HeterogeneousHGCalHEFRecHits ) + +process.ee_task = cms.Task( process.EERecHitGPUProd, process.EERecHitGPUtoSoAProd, process.EERecHitFromSoAProd ) +process.hef_task = cms.Task( process.HEFRecHitGPUProd, process.HEFRecHitGPUtoSoAProd, process.HEFRecHitFromSoAProd ) +process.heb_task = cms.Task( process.HEBRecHitGPUProd, process.HEBRecHitGPUtoSoAProd, process.HEBRecHitFromSoAProd ) +process.recHits_task = cms.Task( process.ee_task, process.hef_task, process.heb_task ) +process.path = cms.Path( process.recHits_task ) + +outkeeps = ['keep *_EERecHitFromSoAProd_*_*', + 'keep *_HEFRecHitFromSoAProd_*_*', + 'keep *_HEBRecHitFromSoAProd_*_*'] + +process.out = cms.OutputModule( "PoolOutputModule", + fileName = cms.untracked.string( '/eos/user/b/bfontana/GPUs/GPUs_' + str(F.PU) + '.root'), + outputCommands = cms.untracked.vstring(outkeeps[0], outkeeps[1], outkeeps[2]) +) +process.outpath = cms.EndPath(process.out) diff --git a/RecoLocalCalo/HGCalRecProducers/test/HeterogeneousRecHitsTiming_cfg.py b/RecoLocalCalo/HGCalRecProducers/test/HeterogeneousRecHitsTiming_cfg.py new file mode 100644 index 0000000000000..476006f1a20bd --- /dev/null +++ b/RecoLocalCalo/HGCalRecProducers/test/HeterogeneousRecHitsTiming_cfg.py @@ -0,0 +1,110 @@ +import os, sys, glob +import FWCore.ParameterSet.Config as cms +from Configuration.StandardSequences.Eras import eras +from Configuration.ProcessModifiers.gpu_cff import gpu +from RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi import HGCalRecHit + +PU=0 +withGPU=0 + +#package loading +process = cms.Process("gpuTiming", gpu) if withGPU else cms.Process("cpuTiming") +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi') +process.load('SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi') +process.load( "HLTrigger.Timer.FastTimerService_cfi" ) + +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') + +indir = '/home/bfontana/' #'/eos/user/b/bfontana/Samples/' +filename_suff = 'hadd_out_PU' + str(PU) + '_uncompressed' #'step3_ttbar_PU' + str(PU) +fNames = [ 'file:' + x for x in glob.glob(os.path.join(indir, filename_suff + '*.root')) ] +if len(fNames)==0: + print('Used globbing: ', glob.glob(os.path.join(indir, filename_suff + '*.root'))) + raise ValueError('No input files!') +print('Input: ', fNames) +keep = 'keep *' +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(fNames), + inputCommands = cms.untracked.vstring(keep), + duplicateCheckMode = cms.untracked.string("noDuplicateCheck") ) + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) +wantSummaryFlag = True +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool( wantSummaryFlag )) #add option for edmStreams + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitFromSoA_cfi') + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitFromSoA_cfi') + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitFromSoA_cfi') + +process.ThroughputService = cms.Service( "ThroughputService", + eventRange = cms.untracked.uint32( 300 ), + eventResolution = cms.untracked.uint32( 1 ), + printEventSummary = cms.untracked.bool( wantSummaryFlag ), + enableDQM = cms.untracked.bool( False ) + #valid only for enableDQM=True + #dqmPath = cms.untracked.string( "HLT/Throughput" ), + #timeRange = cms.untracked.double( 60000.0 ), + #dqmPathByProcesses = cms.untracked.bool( False ), + #timeResolution = cms.untracked.double( 5.828 ) +) + +process.FastTimerService.enableDQM = False +process.FastTimerService.writeJSONSummary = True +process.FastTimerService.jsonFileName = 'resources.json' +process.MessageLogger.categories.append('ThroughputService') + +if withGPU: + process.ee_t = cms.Task( process.EERecHitGPUProd, process.EERecHitGPUtoSoAProd, process.EERecHitFromSoAProd ) + process.hef_t = cms.Task( process.HEFRecHitGPUProd, process.HEFRecHitGPUtoSoAProd, process.HEFRecHitFromSoAProd ) + process.heb_t = cms.Task( process.HEBRecHitGPUProd, process.HEBRecHitGPUtoSoAProd, process.HEBRecHitFromSoAProd ) + process.recHitsTask = cms.Task( process.ee_t, process.hef_t, process.heb_t ) + outkeeps = ['keep *_EERecHitFromSoAProd_*_*', + 'keep *_HEFRecHitFromSoAProd_*_*', + 'keep *_HEBRecHitFromSoAProd_*_*'] +else: + process.recHitsClone = HGCalRecHit.clone() + process.recHitsTask = cms.Task( process.recHitsClone ) #CPU version + outkeeps = ['keep *_*_' + f + '*_*' for f in ['HGCEERecHits', 'HGCHEFRecHits', 'HGCHEBRecHits'] ] + +process.path = cms.Path( process.recHitsTask ) + +""" +process.consumer = cms.EDAnalyzer("GenericConsumer", + eventProducts = cms.untracked.vstring('EERecHitGPUProd', + 'HEFRecHitGPUProd', + 'HEBRecHitGPUProd') ) +""" +""" +process.consumer = cms.EDAnalyzer('GenericConsumer', + eventProducts = cms.untracked.vstring('recHitsClone') ) + #eventProducts = cms.untracked.vstring('HGCalUncalibRecHit') ) #uncalib only (to assess reading speed) +""" +""" +process.consume_step = cms.EndPath(process.consumer) +""" + +process.out = cms.OutputModule( "PoolOutputModule", + fileName = cms.untracked.string( '/home/bfontana/out_Timing_PU' + str(PU) + '_' +str(withGPU)+ '.root'), + outputCommands = cms.untracked.vstring(outkeeps[0], outkeeps[1], outkeeps[2]) +) +process.outpath = cms.EndPath(process.out) + + +#process.schedule.append(process.consume_step) #in case one has multiple Paths or EndPaths to run diff --git a/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h b/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h index 807c42b057fa3..24735f36eab72 100644 --- a/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h +++ b/RecoLocalCalo/HcalRecProducers/src/DeclsForKernels.h @@ -99,7 +99,8 @@ namespace hcal { }; struct ScratchDataGPU { - cms::cuda::device::unique_ptr amplitudes, noiseTerms, pulseMatrices, pulseMatricesM, pulseMatricesP; + cms::cuda::device::unique_ptr amplitudes, noiseTerms, electronicNoiseTerms, pulseMatrices, + pulseMatricesM, pulseMatricesP; cms::cuda::device::unique_ptr soiSamples; }; diff --git a/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc b/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc index af5398e49fa8f..d6f0d1a998a64 100644 --- a/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc +++ b/RecoLocalCalo/HcalRecProducers/src/HBHERecHitProducerGPU.cc @@ -214,6 +214,8 @@ void HBHERecHitProducerGPU::acquire(edm::Event const& event, 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()), diff --git a/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu b/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu index 10098a8b3a962..3dba47ba50191 100644 --- a/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu +++ b/RecoLocalCalo/HcalRecProducers/src/MahiGPU.cu @@ -69,6 +69,7 @@ namespace hcal { // 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, @@ -166,6 +167,7 @@ namespace hcal { // 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 @@ -182,6 +184,7 @@ namespace hcal { ? 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) @@ -216,6 +219,7 @@ namespace hcal { 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]; @@ -433,6 +437,7 @@ namespace hcal { // 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...) @@ -728,7 +733,9 @@ namespace hcal { 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, @@ -788,11 +795,14 @@ namespace hcal { 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) @@ -816,6 +826,8 @@ namespace hcal { // 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 + @@ -856,10 +868,14 @@ namespace hcal { calo::multifit::MapSymM covarianceMatrix{covarianceMatrixStorage}; CMS_UNROLL_LOOP for (int counter = 0; counter < calo::multifit::MapSymM::total; counter++) - covarianceMatrixStorage[counter] = averagePedestalWidth2; + covarianceMatrixStorage[counter] = (noisecorr != 0.f) ? 0.f : averagePedestalWidth2; CMS_UNROLL_LOOP - for (int counter = 0; counter < calo::multifit::MapSymM::stride; counter++) - covarianceMatrix(counter, counter) += __ldg(&noiseTermsView.coeffRef(counter)); + 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( @@ -1060,6 +1076,7 @@ namespace hcal { 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(), @@ -1187,7 +1204,9 @@ namespace hcal { 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, 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/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/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/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/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/SiPixelClusterizer/plugins/BuildFile.xml b/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml index 8c9e1456eb1bb..82519c629f620 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/BuildFile.xml @@ -9,7 +9,6 @@ - diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc index 0d95370f25e47..b3dafcc45d029 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc +++ b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc @@ -236,11 +236,16 @@ void SiPixelRecHitSoAFromLegacy::produce(edm::StreamID streamID, edm::Event& iEv assert(numberOfHits == numberOfClusters); // fill data structure to support CA - for (auto i = 0; i < 11; ++i) { + for (auto i = 0U; i < phase1PixelTopology::numberOfLayers + 1; ++i) { output->hitsLayerStart()[i] = hitsModuleStart[cpeView.layerGeometry().layerStart[i]]; } - cms::cuda::fillManyFromVector( - output->phiBinner(), 10, output->iphi(), output->hitsLayerStart(), numberOfHits, 256, nullptr); + cms::cuda::fillManyFromVector(output->phiBinner(), + phase1PixelTopology::numberOfLayers, + output->iphi(), + output->hitsLayerStart(), + numberOfHits, + 256, + nullptr); LogDebug("SiPixelRecHitSoAFromLegacy") << "created HitSoa for " << numberOfClusters << " clusters in " << numberOfDetUnits << " Dets"; diff --git a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py index fb275d2af4beb..b2aebdd46239d 100644 --- a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py +++ b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEGeneric_cfi.py @@ -23,16 +23,17 @@ # 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 - ) +from Configuration.ProcessModifiers.PixelCPEGeneric_cff import PixelCPEGeneric +(phase2_tracker & (phase2_3DPixels & 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) - ) +(phase2_tracker & (phase2_squarePixels | phase2_3DPixels)).toModify(PixelCPEGenericESProducer, + NoTemplateErrorsWhenNoTrkAngles = False # use genErrors in the seeding step (when no track angles are available) + ) diff --git a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc index a03d05119b896..51b75525c7218 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEClusterRepair.cc @@ -155,10 +155,7 @@ void PixelCPEClusterRepair::fill2DTemplIDs() { //----------------------------------------------------------------------------- // Clean up. //----------------------------------------------------------------------------- -PixelCPEClusterRepair::~PixelCPEClusterRepair() { - 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/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/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/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/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_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/TrackExtender/plugins/TrackExtenderWithMTD.cc b/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc index 426eb04bce2ae..c311758fc9d78 100644 --- a/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc +++ b/RecoMTD/TrackExtender/plugins/TrackExtenderWithMTD.cc @@ -54,6 +54,7 @@ #include "DataFormats/Math/interface/GeantUnits.h" #include "DataFormats/Math/interface/LorentzVector.h" #include "CLHEP/Units/GlobalPhysicalConstants.h" +#include "DataFormats/Math/interface/Rounding.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/VertexReco/interface/Vertex.h" @@ -875,6 +876,14 @@ TransientTrackingRecHit::ConstRecHitContainer TrackExtenderWithMTDTglobalPosition().z()) > std::abs(output[1]->globalPosition().z())) { + std::reverse(output.begin(), output.end()); + } + } return output; } @@ -979,6 +988,21 @@ reco::Track TrackExtenderWithMTDT::buildTrack(const reco::Track double betaOut = 0.; double covbetabeta = -1.; + auto routput = [&]() { + return reco::Track(traj.chiSquared(), + int(ndof), + pos, + mom, + tscbl.trackStateAtPCA().charge(), + tscbl.trackStateAtPCA().curvilinearError(), + orig.algo(), + reco::TrackBase::undefQuality, + t0, + betaOut, + covt0t0, + covbetabeta); + }; + //compute path length for time backpropagation, using first MTD hit for the momentum if (hasMTD) { double pathlength; @@ -987,19 +1011,74 @@ reco::Track TrackExtenderWithMTDT::buildTrack(const reco::Track double thiterror = -1.; bool validmtd = false; - //need to better handle the cases with >1 hit in MTD + if (!validpropagation) { + return routput(); + } + + size_t ihitcount(0), ietlcount(0); for (auto const& hit : trajWithMtd.measurements()) { - bool ismtd = hit.recHit()->geographicalId().det() == DetId::Forward && - ForwardSubdetector(hit.recHit()->geographicalId().subdetId()) == FastTime; - if (ismtd) { - const MTDTrackingRecHit* mtdhit = static_cast(hit.recHit()->hit()); - thit = mtdhit->time(); - thiterror = mtdhit->timeError(); - validmtd = true; - break; + if (hit.recHit()->geographicalId().det() == DetId::Forward && + ForwardSubdetector(hit.recHit()->geographicalId().subdetId()) == FastTime) { + ihitcount++; + if (MTDDetId(hit.recHit()->geographicalId()).mtdSubDetector() == MTDDetId::MTDType::ETL) { + ietlcount++; + } } } + auto ihit1 = trajWithMtd.measurements().cbegin(); + if (ihitcount == 1) { + const MTDTrackingRecHit* mtdhit = static_cast((*ihit1).recHit()->hit()); + thit = mtdhit->time(); + thiterror = mtdhit->timeError(); + validmtd = true; + } else if (ihitcount == 2 && ietlcount == 2) { + const auto& propresult = + thePropagator->propagateWithPath(ihit1->updatedState(), (ihit1 + 1)->updatedState().surface()); + double etlpathlength = std::abs(propresult.second); + // + // The information of the two ETL hits is combined and attributed to the innermost hit + // + if (etlpathlength == 0.) { + validpropagation = false; + } else { + pathlength -= etlpathlength; + const MTDTrackingRecHit* mtdhit1 = static_cast((*ihit1).recHit()->hit()); + const MTDTrackingRecHit* mtdhit2 = static_cast((*(ihit1 + 1)).recHit()->hit()); + TrackTofPidInfo tofInfo = + computeTrackTofPidInfo(p.mag2(), etlpathlength, mtdhit1->time(), mtdhit1->timeError(), 0., 0., true); + // + // Protect against incompatible times + // + double err1 = tofInfo.dterror * tofInfo.dterror; + double err2 = mtdhit2->timeError() * mtdhit2->timeError(); + if (cms_rounding::roundIfNear0(err1) == 0. || cms_rounding::roundIfNear0(err2) == 0.) { + edm::LogError("TrackExtenderWithMTD") + << "MTD tracking hits with zero time uncertainty: " << err1 << " " << err2; + } else { + if ((tofInfo.dt - mtdhit2->time()) * (tofInfo.dt - mtdhit2->time()) < (err1 + err2) * etlTimeChi2Cut_) { + // + // Subtract the ETL time of flight from the outermost measurement, and combine it in a weighted average with the innermost + // the mass ambiguity related uncertainty on the time of flight is added as an additional uncertainty + // + err1 = 1. / err1; + err2 = 1. / err2; + thiterror = 1. / (err1 + err2); + thit = (tofInfo.dt * err1 + mtdhit2->time() * err2) * thiterror; + thiterror = std::sqrt(thiterror); + LogDebug("TrackExtenderWithMTD") << "p trk = " << p.mag() << " ETL hits times/errors: " << mtdhit1->time() + << " +/- " << mtdhit1->timeError() << " , " << mtdhit2->time() << " +/- " + << mtdhit2->timeError() << " extrapolated time1: " << tofInfo.dt << " +/- " + << tofInfo.dterror << " average = " << thit << " +/- " << thiterror; + validmtd = true; + } + } + } + } else { + edm::LogInfo("TrackExtenderWithMTD") + << "MTD hits #" << ihitcount << "ETL hits #" << ietlcount << " anomalous pattern, skipping..."; + } + if (validmtd && validpropagation) { //here add the PID uncertainty for later use in the 1st step of 4D vtx reconstruction TrackTofPidInfo tofInfo = computeTrackTofPidInfo(p.mag2(), pathlength, thit, thiterror, 0., 0., true); @@ -1013,18 +1092,7 @@ reco::Track TrackExtenderWithMTDT::buildTrack(const reco::Track } } - return reco::Track(traj.chiSquared(), - int(ndof), - pos, - mom, - tscbl.trackStateAtPCA().charge(), - tscbl.trackStateAtPCA().curvilinearError(), - orig.algo(), - reco::TrackBase::undefQuality, - t0, - betaOut, - covt0t0, - covbetabeta); + return routput(); } template 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/RecoPPS/Configuration/python/recoCTPPS_cff.py b/RecoPPS/Configuration/python/recoCTPPS_cff.py index 8d9d79cab6a0c..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 , 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/plugins/CTPPSPixelClusterProducer.cc b/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc index f845ac676e062..f901c6a1940ba 100644 --- a/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc +++ b/RecoPPS/Local/plugins/CTPPSPixelClusterProducer.cc @@ -3,8 +3,7 @@ #include "RecoPPS/Local/interface/CTPPSPixelClusterProducer.h" CTPPSPixelClusterProducer::CTPPSPixelClusterProducer(const edm::ParameterSet &conf) - : tokenCTPPSPixelDigi_( - consumes >(edm::InputTag(conf.getParameter("label")))), + : tokenCTPPSPixelDigi_(consumes >(conf.getParameter("tag"))), tokenCTPPSPixelAnalysisMask_(esConsumes()), tokenGainCalib_(esConsumes()), verbosity_(conf.getUntrackedParameter("RPixVerbosity")), @@ -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); 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/src/RPixClusterToHit.cc b/RecoPPS/Local/src/RPixClusterToHit.cc index c34e00a26dbfb..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 #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/PFProducer/python/photonPFIsolationDeposits_cff.py b/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py index 4065f3e124937..564582c6eb492 100644 --- a/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py +++ b/RecoParticleFlow/PFProducer/python/photonPFIsolationDeposits_cff.py @@ -37,4 +37,3 @@ phPFIsoDepositNeutral, phPFIsoDepositPU ) -photonPFIsolationDepositsSequence = cms.Sequence(photonPFIsolationDepositsTask) diff --git a/RecoParticleFlow/PFProducer/python/photonPFIsolationValues_cff.py b/RecoParticleFlow/PFProducer/python/photonPFIsolationValues_cff.py index bbc479015b81b..4a71560eecc5d 100644 --- a/RecoParticleFlow/PFProducer/python/photonPFIsolationValues_cff.py +++ b/RecoParticleFlow/PFProducer/python/photonPFIsolationValues_cff.py @@ -161,4 +161,3 @@ phPFIsoValueNeutral04PFId, phPFIsoValuePU04PFId ) -photonPFIsolationValuesSequence = cms.Sequence(photonPFIsolationValuesTask) 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/PixelVertexFinding/plugins/FastPrimaryVertexProducer.cc b/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexProducer.cc index 6c74ff25390c9..284d0c5b7913a 100644 --- a/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexProducer.cc +++ b/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexProducer.cc @@ -76,21 +76,24 @@ class FastPrimaryVertexProducer : public edm::global::EDProducer<> { private: void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + + edm::ESGetToken const m_geomToken; + edm::ESGetToken const m_pixelCPEToken; edm::EDGetTokenT m_clusters; edm::EDGetTokenT > m_jets; edm::EDGetTokenT m_beamSpot; - std::string m_pixelCPE; double m_maxZ; double m_maxSizeX; double m_maxDeltaPhi; double m_clusterLength; }; -FastPrimaryVertexProducer::FastPrimaryVertexProducer(const edm::ParameterSet& iConfig) { +FastPrimaryVertexProducer::FastPrimaryVertexProducer(const edm::ParameterSet& iConfig) + : m_geomToken(esConsumes()), + m_pixelCPEToken(esConsumes(edm::ESInputTag("", iConfig.getParameter("pixelCPE")))) { m_clusters = consumes(iConfig.getParameter("clusters")); m_jets = consumes >(iConfig.getParameter("jets")); m_beamSpot = consumes(iConfig.getParameter("beamSpot")); - m_pixelCPE = iConfig.getParameter("pixelCPE"); m_maxZ = iConfig.getParameter("maxZ"); m_maxSizeX = iConfig.getParameter("maxSizeX"); m_maxDeltaPhi = iConfig.getParameter("maxDeltaPhi"); @@ -122,17 +125,12 @@ void FastPrimaryVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const } } - edm::ESHandle pe; - const PixelClusterParameterEstimator* pp; - iSetup.get().get(m_pixelCPE, pe); - pp = pe.product(); + const PixelClusterParameterEstimator* pp = &iSetup.getData(m_pixelCPEToken); edm::Handle beamSpot; iEvent.getByToken(m_beamSpot, beamSpot); - edm::ESHandle tracker; - iSetup.get().get(tracker); - const TrackerGeometry* trackerGeometry = tracker.product(); + const TrackerGeometry* trackerGeometry = &iSetup.getData(m_geomToken); float lengthBmodule = 6.66; //cm std::vector zProjections; diff --git a/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexWithWeightsProducer.cc b/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexWithWeightsProducer.cc index 014cc6998fce9..d4717f13c3ddc 100644 --- a/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexWithWeightsProducer.cc +++ b/RecoPixelVertexing/PixelVertexFinding/plugins/FastPrimaryVertexWithWeightsProducer.cc @@ -61,9 +61,11 @@ class FastPrimaryVertexWithWeightsProducer : public edm::stream::EDProducer<> { private: void produce(edm::Event&, const edm::EventSetup&) override; + edm::ESGetToken const m_geomToken; + edm::ESGetToken const m_pixelCPEToken; + const double m_maxZ; // Use only pixel clusters with |z| < maxZ const edm::InputTag m_clusters; // PixelClusters InputTag - std::string m_pixelCPE; // PixelCPE (PixelClusterParameterEstimator) edm::EDGetTokenT clustersToken; edm::EDGetTokenT beamSpotToken; edm::EDGetTokenT > jetsToken; @@ -125,9 +127,9 @@ class FastPrimaryVertexWithWeightsProducer : public edm::stream::EDProducer<> { }; FastPrimaryVertexWithWeightsProducer::FastPrimaryVertexWithWeightsProducer(const edm::ParameterSet& iConfig) - : m_maxZ(iConfig.getParameter("maxZ")), - m_pixelCPE(iConfig.getParameter("pixelCPE")), - + : m_geomToken(esConsumes()), + m_pixelCPEToken(esConsumes(edm::ESInputTag("", iConfig.getParameter("pixelCPE")))), + m_maxZ(iConfig.getParameter("maxZ")), m_njets(iConfig.getParameter("njets")), m_maxJetEta(iConfig.getParameter("maxJetEta")), m_minJetPt(iConfig.getParameter("minJetPt")), @@ -248,19 +250,14 @@ void FastPrimaryVertexWithWeightsProducer::produce(edm::Event& iEvent, const edm } //get PixelClusterParameterEstimator - edm::ESHandle pe; - const PixelClusterParameterEstimator* pp; - iSetup.get().get(m_pixelCPE, pe); - pp = pe.product(); + const PixelClusterParameterEstimator* pp = &iSetup.getData(m_pixelCPEToken); //get beamSpot edm::Handle beamSpot; iEvent.getByToken(beamSpotToken, beamSpot); //get TrackerGeometry - edm::ESHandle tracker; - iSetup.get().get(tracker); - const TrackerGeometry* trackerGeometry = tracker.product(); + const TrackerGeometry* trackerGeometry = &iSetup.getData(m_geomToken); // PART I: get z-projections with z-weights std::vector zProjections; 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/python/tools/runTauIdMVA.py b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py index 0745629fc1134..1d5de715a8d8b 100644 --- a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py +++ b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py @@ -18,7 +18,9 @@ class TauIDEmbedder(object): ] def __init__(self, process, debug = False, + originalTauName = "slimmedTaus", updatedTauName = "slimmedTausNewID", + postfix = "", toKeep = ["deepTau2017v2p1"], tauIdDiscrMVA_trainings_run2_2017 = { 'tauIdMVAIsoDBoldDMwLT2017' : "tauIdMVAIsoDBoldDMwLT2017", }, tauIdDiscrMVA_WPs_run2_2017 = { @@ -38,7 +40,9 @@ def __init__(self, process, debug = False, super(TauIDEmbedder, self).__init__() self.process = process self.debug = debug + self.originalTauName = originalTauName self.updatedTauName = updatedTauName + self.postfix = postfix self.process.load('RecoTauTag.Configuration.loadRecoTauTagMVAsFromPrepDB_cfi') if len(conditionDB) != 0: self.process.CondDBTauConnection.connect = cms.string(conditionDB) @@ -126,8 +130,8 @@ def loadMVA_WPs_run2_2017(self): ) def runTauID(self): - self.process.rerunMvaIsolationTask = cms.Task() - self.process.rerunMvaIsolationSequence = cms.Sequence() + _rerunMvaIsolationTask = cms.Task() + _rerunMvaIsolationSequence = cms.Sequence() tauIDSources = cms.PSet() # rerun the seq to obtain the 2017 nom training with 0.5 iso cone, old DM, ptph>1, trained on 2017MCv1 @@ -152,19 +156,21 @@ def runTauID(self): if self.debug: print ("runTauID: not is_above_cmssw_version(9, 4, 4). Will update the list of available in DB samples to access 2017v1") self.loadMVA_WPs_run2_2017() - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v1raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMMVArun2017v1raw = "rerunDiscriminationByIsolationOldDMMVArun2017v1raw"+self.postfix + setattr(self.process,_byIsolationOldDMMVArun2017v1raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = cms.bool(True), mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2017v1"),#RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v1 writeTauIdDiscrMVAs mvaOpt = cms.string("DBoldDMwLTwGJ"), verbosity = cms.int32(0) - ) + )) - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v1 = patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMMVArun2017v1 = "rerunDiscriminationByIsolationOldDMMVArun2017v1"+self.postfix + setattr(self.process,_byIsolationOldDMMVArun2017v1,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = cms.InputTag('rerunDiscriminationByIsolationOldDMMVArun2017v1raw'), + toMultiplex = _byIsolationOldDMMVArun2017v1raw, loadMVAfromDB = cms.bool(True), mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2017v1_mvaOutput_normalization"), #writeTauIdDiscrMVAoutputNormalizations mapping = cms.VPSet( @@ -183,23 +189,23 @@ def runTauID(self): "_WPEff50", "_WPEff40" ) - ) + )) - self.rerunIsolationOldDMMVArun2017v1Task = cms.Task( - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v1raw, - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v1 + _rerunIsolationOldDMMVArun2017v1Task = cms.Task( + getattr(self.process,_byIsolationOldDMMVArun2017v1raw), + getattr(self.process,_byIsolationOldDMMVArun2017v1) ) - self.process.rerunMvaIsolationTask.add(self.rerunIsolationOldDMMVArun2017v1Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.rerunIsolationOldDMMVArun2017v1Task) + _rerunMvaIsolationTask.add(_rerunIsolationOldDMMVArun2017v1Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationOldDMMVArun2017v1Task) - tauIDSources.byIsolationMVArun2017v1DBoldDMwLTraw2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "raw") - tauIDSources.byVVLooseIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff95") - tauIDSources.byVLooseIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff90") - tauIDSources.byLooseIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff80") - tauIDSources.byMediumIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff70") - tauIDSources.byTightIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff60") - tauIDSources.byVTightIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff50") - tauIDSources.byVVTightIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v1", "_WPEff40") + tauIDSources.byIsolationMVArun2017v1DBoldDMwLTraw2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "raw") + tauIDSources.byVVLooseIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff95") + tauIDSources.byVLooseIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff90") + tauIDSources.byLooseIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff80") + tauIDSources.byMediumIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff70") + tauIDSources.byTightIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff60") + tauIDSources.byVTightIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff50") + tauIDSources.byVVTightIsolationMVArun2017v1DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v1, "_WPEff40") if "2017v2" in self.toKeep: @@ -223,19 +229,21 @@ def runTauID(self): if self.debug: print ("runTauID: not is_above_cmssw_version(9, 4, 5). Will update the list of available in DB samples to access 2017v2") self.loadMVA_WPs_run2_2017() - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v2raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMMVArun2017v2raw = "rerunDiscriminationByIsolationOldDMMVArun2017v2raw"+self.postfix + setattr(self.process,_byIsolationOldDMMVArun2017v2raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = cms.bool(True), mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2017v2"),#RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v1 writeTauIdDiscrMVAs mvaOpt = cms.string("DBoldDMwLTwGJ"), verbosity = cms.int32(0) - ) + )) - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v2 = patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMMVArun2017v2 = "rerunDiscriminationByIsolationOldDMMVArun2017v2"+self.postfix + setattr(self.process,_byIsolationOldDMMVArun2017v2,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = cms.InputTag('rerunDiscriminationByIsolationOldDMMVArun2017v2raw'), + toMultiplex = _byIsolationOldDMMVArun2017v2raw, loadMVAfromDB = cms.bool(True), mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2017v2_mvaOutput_normalization"), #writeTauIdDiscrMVAoutputNormalizations mapping = cms.VPSet( @@ -255,23 +263,23 @@ def runTauID(self): "_WPEff40" ), verbosity = cms.int32(0) - ) + )) - self.rerunIsolationOldDMMVArun2017v2Task = cms.Task( - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v2raw, - self.process.rerunDiscriminationByIsolationOldDMMVArun2017v2 + _rerunIsolationOldDMMVArun2017v2Task = cms.Task( + getattr(self.process,_byIsolationOldDMMVArun2017v2raw), + getattr(self.process,_byIsolationOldDMMVArun2017v2) ) - self.process.rerunMvaIsolationTask.add(self.rerunIsolationOldDMMVArun2017v2Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.rerunIsolationOldDMMVArun2017v2Task) - - tauIDSources.byIsolationMVArun2017v2DBoldDMwLTraw2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "raw") - tauIDSources.byVVLooseIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff95") - tauIDSources.byVLooseIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff90") - tauIDSources.byLooseIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff80") - tauIDSources.byMediumIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff70") - tauIDSources.byTightIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff60") - tauIDSources.byVTightIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff50") - tauIDSources.byVVTightIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2017v2", "_WPEff40") + _rerunMvaIsolationTask.add(_rerunIsolationOldDMMVArun2017v2Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationOldDMMVArun2017v2Task) + + tauIDSources.byIsolationMVArun2017v2DBoldDMwLTraw2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "raw") + tauIDSources.byVVLooseIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff95") + tauIDSources.byVLooseIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff90") + tauIDSources.byLooseIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff80") + tauIDSources.byMediumIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff70") + tauIDSources.byTightIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff60") + tauIDSources.byVTightIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff50") + tauIDSources.byVVTightIsolationMVArun2017v2DBoldDMwLT2017 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2017v2, "_WPEff40") if "newDM2017v2" in self.toKeep: self.tauIdDiscrMVA_2017_version = "v2" @@ -294,19 +302,21 @@ def runTauID(self): if self.debug: print ("runTauID: not is_above_cmssw_version(9, 4, 5). Will update the list of available in DB samples to access newDM2017v2") self.loadMVA_WPs_run2_2017() - self.process.rerunDiscriminationByIsolationNewDMMVArun2017v2raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationNewDMMVArun2017v2raw = "rerunDiscriminationByIsolationNewDMMVArun2017v2raw"+self.postfix + setattr(self.process,_byIsolationNewDMMVArun2017v2raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = cms.bool(True), mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBnewDMwLT2017v2"),#RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v1 writeTauIdDiscrMVAs mvaOpt = cms.string("DBnewDMwLTwGJ"), verbosity = cms.int32(0) - ) + )) - self.process.rerunDiscriminationByIsolationNewDMMVArun2017v2 = patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationNewDMMVArun2017v2 = "rerunDiscriminationByIsolationNewDMMVArun2017v2"+self.postfix + setattr(self.process,_byIsolationNewDMMVArun2017v2,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = cms.InputTag('rerunDiscriminationByIsolationNewDMMVArun2017v2raw'), + toMultiplex = _byIsolationNewDMMVArun2017v2raw, loadMVAfromDB = cms.bool(True), mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBnewDMwLT2017v2_mvaOutput_normalization"), #writeTauIdDiscrMVAoutputNormalizations mapping = cms.VPSet( @@ -326,23 +336,23 @@ def runTauID(self): "_WPEff40" ), verbosity = cms.int32(0) - ) + )) - self.rerunIsolationNewDMMVArun2017v2Task = cms.Task( - self.process.rerunDiscriminationByIsolationNewDMMVArun2017v2raw, - self.process.rerunDiscriminationByIsolationNewDMMVArun2017v2 + _rerunIsolationNewDMMVArun2017v2Task = cms.Task( + getattr(self.process,_byIsolationNewDMMVArun2017v2raw), + getattr(self.process,_byIsolationNewDMMVArun2017v2) ) - self.process.rerunMvaIsolationTask.add(self.rerunIsolationNewDMMVArun2017v2Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.rerunIsolationNewDMMVArun2017v2Task) - - tauIDSources.byIsolationMVArun2017v2DBnewDMwLTraw2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "raw") - tauIDSources.byVVLooseIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff95") - tauIDSources.byVLooseIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff90") - tauIDSources.byLooseIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff80") - tauIDSources.byMediumIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff70") - tauIDSources.byTightIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff60") - tauIDSources.byVTightIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff50") - tauIDSources.byVVTightIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2017v2", "_WPEff40") + _rerunMvaIsolationTask.add(_rerunIsolationNewDMMVArun2017v2Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationNewDMMVArun2017v2Task) + + tauIDSources.byIsolationMVArun2017v2DBnewDMwLTraw2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "raw") + tauIDSources.byVVLooseIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff95") + tauIDSources.byVLooseIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff90") + tauIDSources.byLooseIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff80") + tauIDSources.byMediumIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff70") + tauIDSources.byTightIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff60") + tauIDSources.byVTightIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff50") + tauIDSources.byVVTightIsolationMVArun2017v2DBnewDMwLT2017 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2017v2, "_WPEff40") if "dR0p32017v2" in self.toKeep: self.tauIdDiscrMVA_2017_version = "v2" @@ -365,8 +375,9 @@ def runTauID(self): if self.debug: print ("runTauID: not is_above_cmssw_version(9, 4, 5). Will update the list of available in DB samples to access dR0p32017v2") self.loadMVA_WPs_run2_2017() - self.process.rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMdR0p3MVArun2017v2raw = "rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2raw"+self.postfix + setattr(self.process,_byIsolationOldDMdR0p3MVArun2017v2raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = cms.bool(True), mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMdR0p3wLT2017v2"), @@ -376,12 +387,13 @@ def runTauID(self): srcNeutralIsoPtSum = cms.string('neutralIsoPtSumdR03'), srcPhotonPtSumOutsideSignalCone = cms.string('photonPtSumOutsideSignalConedR03'), verbosity = cms.int32(0) - ) + )) - self.process.rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2= patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMdR0p3MVArun2017v2 = "rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2"+self.postfix + setattr(self.process,_byIsolationOldDMdR0p3MVArun2017v2,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = cms.InputTag('rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2raw'), + toMultiplex = _byIsolationOldDMdR0p3MVArun2017v2raw, loadMVAfromDB = cms.bool(True), mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMdR0p3wLT2017v2_mvaOutput_normalization"), #writeTauIdDiscrMVAoutputNormalizations mapping = cms.VPSet( @@ -401,27 +413,27 @@ def runTauID(self): "_WPEff40" ), verbosity = cms.int32(0) - ) + )) - self.rerunIsolationOldDMdR0p3MVArun2017v2Task = cms.Task( - self.process.rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2raw, - self.process.rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2 + _rerunIsolationOldDMdR0p3MVArun2017v2Task = cms.Task( + getattr(self.process,_byIsolationOldDMdR0p3MVArun2017v2raw), + getattr(self.process,_byIsolationOldDMdR0p3MVArun2017v2) ) - self.process.rerunMvaIsolationTask.add(self.rerunIsolationOldDMdR0p3MVArun2017v2Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.rerunIsolationOldDMdR0p3MVArun2017v2Task) - - tauIDSources.byIsolationMVArun2017v2DBoldDMdR0p3wLTraw2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "raw") - tauIDSources.byVVLooseIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff95") - tauIDSources.byVLooseIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff90") - tauIDSources.byLooseIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff80") - tauIDSources.byMediumIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff70") - tauIDSources.byTightIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff60") - tauIDSources.byVTightIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff50") - tauIDSources.byVVTightIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMdR0p3MVArun2017v2", "_WPEff40") + _rerunMvaIsolationTask.add(_rerunIsolationOldDMdR0p3MVArun2017v2Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationOldDMdR0p3MVArun2017v2Task) + + tauIDSources.byIsolationMVArun2017v2DBoldDMdR0p3wLTraw2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "raw") + tauIDSources.byVVLooseIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff95") + tauIDSources.byVLooseIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff90") + tauIDSources.byLooseIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff80") + tauIDSources.byMediumIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff70") + tauIDSources.byTightIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff60") + tauIDSources.byVTightIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff50") + tauIDSources.byVVTightIsolationMVArun2017v2DBoldDMdR0p3wLT2017 = self.tauIDMVAinputs(_byIsolationOldDMdR0p3MVArun2017v2, "_WPEff40") # 2016 training strategy(v2) - essentially the same as 2017 training strategy (v1), trained on 2016MC, old DM - currently not implemented in the tau sequence of any release # self.process.rerunDiscriminationByIsolationOldDMMVArun2v2raw = patDiscriminationByIsolationMVArun2v1raw.clone( - # PATTauProducer = cms.InputTag('slimmedTaus'), + # PATTauProducer = self.originalTauName, # Prediscriminants = noPrediscriminants, # loadMVAfromDB = cms.bool(True), # mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v2"),#RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v1 writeTauIdDiscrMVAs @@ -430,9 +442,9 @@ def runTauID(self): # ) # # # self.process.rerunDiscriminationByIsolationOldDMMVArun2v2VLoose = patDiscriminationByIsolationMVArun2v1VLoose.clone( - # PATTauProducer = cms.InputTag('slimmedTaus'), + # PATTauProducer = self.originalTauName, # Prediscriminants = noPrediscriminants, - # toMultiplex = cms.InputTag('rerunDiscriminationByIsolationOldDMMVArun2v2raw'), + # toMultiplex = 'rerunDiscriminationByIsolationOldDMMVArun2v2raw', # key = cms.InputTag('rerunDiscriminationByIsolationOldDMMVArun2v2raw:category'),#? # loadMVAfromDB = cms.bool(True), # mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v2_mvaOutput_normalization"), #writeTauIdDiscrMVAoutputNormalizations @@ -447,19 +459,21 @@ def runTauID(self): # 2016 training strategy(v1), trained on 2016MC, old DM if "2016v1" in self.toKeep: - self.process.rerunDiscriminationByIsolationOldDMMVArun2v1raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMMVArun2016v1raw = "rerunDiscriminationByIsolationOldDMMVArun2v1raw"+self.postfix + setattr(self.process,_byIsolationOldDMMVArun2016v1raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = cms.bool(True), mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v1"), mvaOpt = cms.string("DBoldDMwLT"), verbosity = cms.int32(0) - ) + )) - self.process.rerunDiscriminationByIsolationOldDMMVArun2v1 = patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationOldDMMVArun2016v1 = "rerunDiscriminationByIsolationOldDMMVArun2v1"+self.postfix + setattr(self.process,_byIsolationOldDMMVArun2016v1,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = cms.InputTag('rerunDiscriminationByIsolationOldDMMVArun2v1raw'), + toMultiplex = _byIsolationOldDMMVArun2016v1raw, loadMVAfromDB = cms.bool(True), mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBoldDMwLT2016v1_mvaOutput_normalization"), mapping = cms.VPSet( @@ -477,38 +491,40 @@ def runTauID(self): "_WPEff50", "_WPEff40" ) - ) + )) - self.rerunIsolationOldDMMVArun2016v1Task = cms.Task( - self.process.rerunDiscriminationByIsolationOldDMMVArun2v1raw, - self.process.rerunDiscriminationByIsolationOldDMMVArun2v1 + _rerunIsolationOldDMMVArun2016v1Task = cms.Task( + getattr(self.process,_byIsolationOldDMMVArun2016v1raw), + getattr(self.process,_byIsolationOldDMMVArun2016v1) ) - self.process.rerunMvaIsolationTask.add(self.rerunIsolationOldDMMVArun2016v1Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.rerunIsolationOldDMMVArun2016v1Task) + _rerunMvaIsolationTask.add(_rerunIsolationOldDMMVArun2016v1Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationOldDMMVArun2016v1Task) - tauIDSources.byIsolationMVArun2v1DBoldDMwLTraw2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "raw") - tauIDSources.byVLooseIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "_WPEff90") - tauIDSources.byLooseIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "_WPEff80") - tauIDSources.byMediumIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "_WPEff70") - tauIDSources.byTightIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "_WPEff60") - tauIDSources.byVTightIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "_WPEff50") - tauIDSources.byVVTightIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationOldDMMVArun2v1", "_WPEff40") + tauIDSources.byIsolationMVArun2v1DBoldDMwLTraw2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "raw") + tauIDSources.byVLooseIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "_WPEff90") + tauIDSources.byLooseIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "_WPEff80") + tauIDSources.byMediumIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "_WPEff70") + tauIDSources.byTightIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "_WPEff60") + tauIDSources.byVTightIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "_WPEff50") + tauIDSources.byVVTightIsolationMVArun2v1DBoldDMwLT2016 = self.tauIDMVAinputs(_byIsolationOldDMMVArun2016v1, "_WPEff40") # 2016 training strategy(v1), trained on 2016MC, new DM if "newDM2016v1" in self.toKeep: - self.process.rerunDiscriminationByIsolationNewDMMVArun2v1raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationNewDMMVArun2016v1raw = "rerunDiscriminationByIsolationNewDMMVArun2v1raw"+self.postfix + setattr(self.process,_byIsolationNewDMMVArun2016v1raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = cms.bool(True), mvaName = cms.string("RecoTauTag_tauIdMVAIsoDBnewDMwLT2016v1"), mvaOpt = cms.string("DBnewDMwLT"), verbosity = cms.int32(0) - ) + )) - self.process.rerunDiscriminationByIsolationNewDMMVArun2v1 = patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byIsolationNewDMMVArun2016v1 = "rerunDiscriminationByIsolationNewDMMVArun2v1"+self.postfix + setattr(self.process,_byIsolationNewDMMVArun2016v1,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = cms.InputTag('rerunDiscriminationByIsolationNewDMMVArun2v1raw'), + toMultiplex = _byIsolationNewDMMVArun2016v1raw, loadMVAfromDB = cms.bool(True), mvaOutput_normalization = cms.string("RecoTauTag_tauIdMVAIsoDBnewDMwLT2016v1_mvaOutput_normalization"), mapping = cms.VPSet( @@ -526,26 +542,27 @@ def runTauID(self): "_WPEff50", "_WPEff40" ) - ) + )) - self.rerunIsolationNewDMMVArun2016v1Task = cms.Task( - self.process.rerunDiscriminationByIsolationNewDMMVArun2v1raw, - self.process.rerunDiscriminationByIsolationNewDMMVArun2v1 + _rerunIsolationNewDMMVArun2016v1Task = cms.Task( + getattr(self.process,_byIsolationNewDMMVArun2016v1raw), + getattr(self.process,_byIsolationNewDMMVArun2016v1) ) - self.process.rerunMvaIsolationTask.add(self.rerunIsolationNewDMMVArun2016v1Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.rerunIsolationNewDMMVArun2016v1Task) + _rerunMvaIsolationTask.add(_rerunIsolationNewDMMVArun2016v1Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationNewDMMVArun2016v1Task) - tauIDSources.byIsolationMVArun2v1DBnewDMwLTraw2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "raw") - tauIDSources.byVLooseIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "_WPEff90") - tauIDSources.byLooseIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "_WPEff80") - tauIDSources.byMediumIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "_WPEff70") - tauIDSources.byTightIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "_WPEff60") - tauIDSources.byVTightIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "_WPEff50") - tauIDSources.byVVTightIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs("rerunDiscriminationByIsolationNewDMMVArun2v1", "_WPEff40") + tauIDSources.byIsolationMVArun2v1DBnewDMwLTraw2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "raw") + tauIDSources.byVLooseIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "_WPEff90") + tauIDSources.byLooseIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "_WPEff80") + tauIDSources.byMediumIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "_WPEff70") + tauIDSources.byTightIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "_WPEff60") + tauIDSources.byVTightIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "_WPEff50") + tauIDSources.byVVTightIsolationMVArun2v1DBnewDMwLT2016 = self.tauIDMVAinputs(_byIsolationNewDMMVArun2016v1, "_WPEff40") if "deepTau2017v1" in self.toKeep: if self.debug: print ("Adding DeepTau IDs") + _deepTauName = "deepTau2017v1" workingPoints_ = { "e": { "VVVLoose" : 0.96424, @@ -580,10 +597,10 @@ def runTauID(self): } } file_names = ['RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v1_20L1024N_quantized.pb'] - self.process.deepTau2017v1 = cms.EDProducer("DeepTauId", + setattr(self.process,_deepTauName+self.postfix,cms.EDProducer("DeepTauId", electrons = cms.InputTag('slimmedElectrons'), muons = cms.InputTag('slimmedMuons'), - taus = cms.InputTag('slimmedTaus'), + taus = cms.InputTag(self.originalTauName), pfcands = cms.InputTag('packedPFCandidates'), vertices = cms.InputTag('offlineSlimmedPrimaryVertices'), rho = cms.InputTag('fixedGridRhoAll'), @@ -592,16 +609,19 @@ def runTauID(self): version = cms.uint32(self.getDeepTauVersion(file_names[0])[1]), debug_level = cms.int32(0), disable_dxy_pca = cms.bool(False) - ) + )) + + self.processDeepProducer(_deepTauName, tauIDSources, workingPoints_) - self.processDeepProducer('deepTau2017v1', tauIDSources, workingPoints_) + _deepTauProducer = getattr(self.process,_deepTauName+self.postfix) + _rerunMvaIsolationTask.add(_deepTauProducer) + _rerunMvaIsolationSequence += _deepTauProducer - self.process.rerunMvaIsolationTask.add(self.process.deepTau2017v1) - self.process.rerunMvaIsolationSequence += self.process.deepTau2017v1 if "deepTau2017v2" in self.toKeep: if self.debug: print ("Adding DeepTau IDs") + _deepTauName = "deepTau2017v2" workingPoints_ = { "e": { "VVVLoose": 0.0630386, @@ -636,10 +656,10 @@ def runTauID(self): 'inner:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_inner.pb', 'outer:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_outer.pb', ] - self.process.deepTau2017v2 = cms.EDProducer("DeepTauId", + setattr(self.process,_deepTauName+self.postfix,cms.EDProducer("DeepTauId", electrons = cms.InputTag('slimmedElectrons'), muons = cms.InputTag('slimmedMuons'), - taus = cms.InputTag('slimmedTaus'), + taus = cms.InputTag(self.originalTauName), pfcands = cms.InputTag('packedPFCandidates'), vertices = cms.InputTag('offlineSlimmedPrimaryVertices'), rho = cms.InputTag('fixedGridRhoAll'), @@ -648,16 +668,19 @@ def runTauID(self): version = cms.uint32(self.getDeepTauVersion(file_names[0])[1]), debug_level = cms.int32(0), disable_dxy_pca = cms.bool(False) - ) + )) - self.processDeepProducer('deepTau2017v2', tauIDSources, workingPoints_) + self.processDeepProducer(_deepTauName, tauIDSources, workingPoints_) + + _deepTauProducer = getattr(self.process,_deepTauName+self.postfix) + _rerunMvaIsolationTask.add(_deepTauProducer) + _rerunMvaIsolationSequence += _deepTauProducer - self.process.rerunMvaIsolationTask.add(self.process.deepTau2017v2) - self.process.rerunMvaIsolationSequence += self.process.deepTau2017v2 if "deepTau2017v2p1" in self.toKeep: if self.debug: print ("Adding DeepTau IDs") + _deepTauName = "deepTau2017v2p1" workingPoints_ = { "e": { "VVVLoose": 0.0630386, @@ -692,10 +715,10 @@ def runTauID(self): 'inner:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_inner.pb', 'outer:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_outer.pb', ] - self.process.deepTau2017v2p1 = cms.EDProducer("DeepTauId", + setattr(self.process,_deepTauName+self.postfix,cms.EDProducer("DeepTauId", electrons = cms.InputTag('slimmedElectrons'), muons = cms.InputTag('slimmedMuons'), - taus = cms.InputTag('slimmedTaus'), + taus = cms.InputTag(self.originalTauName), pfcands = cms.InputTag('packedPFCandidates'), vertices = cms.InputTag('offlineSlimmedPrimaryVertices'), rho = cms.InputTag('fixedGridRhoAll'), @@ -705,16 +728,19 @@ def runTauID(self): debug_level = cms.int32(0), disable_dxy_pca = cms.bool(True), is_online = cms.bool(False) - ) + )) - self.processDeepProducer('deepTau2017v2p1', tauIDSources, workingPoints_) + self.processDeepProducer(_deepTauName, tauIDSources, workingPoints_) + + _deepTauProducer = getattr(self.process,_deepTauName+self.postfix) + _rerunMvaIsolationTask.add(_deepTauProducer) + _rerunMvaIsolationSequence += _deepTauProducer - self.process.rerunMvaIsolationTask.add(self.process.deepTau2017v2p1) - self.process.rerunMvaIsolationSequence += self.process.deepTau2017v2p1 if "DPFTau_2016_v0" in self.toKeep: if self.debug: print ("Adding DPFTau isolation (v0)") + _deepTauName = "DPFTau_2016_v0" workingPoints_ = { "all": { "Tight" : "if(decayMode == 0) return (0.898328 - 0.000160992 * pt);" + \ @@ -730,19 +756,20 @@ def runTauID(self): } } file_names = [ 'RecoTauTag/TrainingFiles/data/DPFTauId/DPFIsolation_2017v0_quantized.pb' ] - self.process.dpfTau2016v0 = cms.EDProducer("DPFIsolation", + setattr(self.process,_deepTauName+self.postfix,cms.EDProducer("DPFIsolation", pfcands = cms.InputTag('packedPFCandidates'), - taus = cms.InputTag('slimmedTaus'), + taus = cms.InputTag(self.originalTauName), vertices = cms.InputTag('offlineSlimmedPrimaryVertices'), graph_file = cms.vstring(file_names), version = cms.uint32(self.getDpfTauVersion(file_names[0])), mem_mapped = cms.bool(False) - ) + )) - self.processDeepProducer('dpfTau2016v0', tauIDSources, workingPoints_) + self.processDeepProducer(_deepTauName, tauIDSources, workingPoints_) - self.process.rerunMvaIsolationTask.add(self.process.dpfTau2016v0) - self.process.rerunMvaIsolationSequence += self.process.dpfTau2016v0 + _deepTauProducer = getattr(self.process,_deepTauName+self.postfix) + _rerunMvaIsolationTask.add(_deepTauProducer) + _rerunMvaIsolationSequence += _deepTauProducer if "DPFTau_2016_v1" in self.toKeep: @@ -750,32 +777,36 @@ def runTauID(self): print ("WARNING: WPs are not defined for DPFTau_2016_v1") print ("WARNING: The score of DPFTau_2016_v1 is inverted: i.e. for Sig->0, for Bkg->1 with -1 for undefined input (preselection not passed).") + _deepTauName = "DPFTau_2016_v1" workingPoints_ = { "all": {"Tight" : 0.123} #FIXME: define WP } file_names = [ 'RecoTauTag/TrainingFiles/data/DPFTauId/DPFIsolation_2017v1_quantized.pb' ] - self.process.dpfTau2016v1 = cms.EDProducer("DPFIsolation", + setattr(self.process,_deepTauName+self.postfix,cms.EDProducer("DPFIsolation", pfcands = cms.InputTag('packedPFCandidates'), - taus = cms.InputTag('slimmedTaus'), + taus = cms.InputTag(self.originalTauName), vertices = cms.InputTag('offlineSlimmedPrimaryVertices'), graph_file = cms.vstring(file_names), version = cms.uint32(self.getDpfTauVersion(file_names[0])), mem_mapped = cms.bool(False) - ) + )) + + self.processDeepProducer(_deepTauName, tauIDSources, workingPoints_) - self.processDeepProducer('dpfTau2016v1', tauIDSources, workingPoints_) + _deepTauProducer = getattr(self.process,_deepTauName+self.postfix) + _rerunMvaIsolationTask.add(_deepTauProducer) + _rerunMvaIsolationSequence += _deepTauProducer - self.process.rerunMvaIsolationTask.add(self.process.dpfTau2016v1) - self.process.rerunMvaIsolationSequence += self.process.dpfTau2016v1 if "againstEle2018" in self.toKeep: antiElectronDiscrMVA6_version = "MVA6v3_noeveto" ### Define new anti-e discriminants ## Raw from RecoTauTag.RecoTau.patTauDiscriminationAgainstElectronMVA6_cfi import patTauDiscriminationAgainstElectronMVA6 - self.process.patTauDiscriminationByElectronRejectionMVA62018Raw = patTauDiscriminationAgainstElectronMVA6.clone( - PATTauProducer = cms.InputTag('slimmedTaus'), + _byElectronRejectionMVA62018Raw = "patTauDiscriminationByElectronRejectionMVA62018Raw"+self.postfix + setattr(self.process,_byElectronRejectionMVA62018Raw,patTauDiscriminationAgainstElectronMVA6.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, #already selected for MiniAOD srcElectrons = cms.InputTag('slimmedElectrons'), vetoEcalCracks = cms.bool(False), #keep taus in EB-EE cracks @@ -787,13 +818,14 @@ def runTauID(self): mvaName_wGwGSF_EC = 'RecoTauTag_antiElectron'+antiElectronDiscrMVA6_version+'_gbr_wGwGSF_EC', mvaName_woGwGSF_BL = 'RecoTauTag_antiElectron'+antiElectronDiscrMVA6_version+'_gbr_woGwGSF_BL', mvaName_woGwGSF_EC = 'RecoTauTag_antiElectron'+antiElectronDiscrMVA6_version+'_gbr_woGwGSF_EC' - ) + )) ## WPs from RecoTauTag.RecoTau.PATTauDiscriminantCutMultiplexer_cfi import patTauDiscriminantCutMultiplexer - self.process.patTauDiscriminationByElectronRejectionMVA62018 = patTauDiscriminantCutMultiplexer.clone( - PATTauProducer = self.process.patTauDiscriminationByElectronRejectionMVA62018Raw.PATTauProducer, - Prediscriminants = self.process.patTauDiscriminationByElectronRejectionMVA62018Raw.Prediscriminants, - toMultiplex = cms.InputTag("patTauDiscriminationByElectronRejectionMVA62018Raw"), + _byElectronRejectionMVA62018 = "patTauDiscriminationByElectronRejectionMVA62018"+self.postfix + setattr(self.process,"patTauDiscriminationByElectronRejectionMVA62018"+self.postfix,patTauDiscriminantCutMultiplexer.clone( + PATTauProducer = self.originalTauName, + Prediscriminants = noPrediscriminants, + toMultiplex = _byElectronRejectionMVA62018Raw, mapping = cms.VPSet( cms.PSet( category = cms.uint32(0), @@ -843,24 +875,23 @@ def runTauID(self): "_WPeff70", "_WPeff60" ) - ) + )) ### Put all new anti-e discrminats to a sequence - self.process.patTauDiscriminationByElectronRejectionMVA62018Task = cms.Task( - self.process.patTauDiscriminationByElectronRejectionMVA62018Raw, - self.process.patTauDiscriminationByElectronRejectionMVA62018 + _patTauDiscriminationByElectronRejectionMVA62018Task = cms.Task( + getattr(self.process,_byElectronRejectionMVA62018Raw), + getattr(self.process,_byElectronRejectionMVA62018) ) - self.process.patTauDiscriminationByElectronRejectionMVA62018Seq = cms.Sequence(self.process.patTauDiscriminationByElectronRejectionMVA62018Task) - self.process.rerunMvaIsolationTask.add(self.process.patTauDiscriminationByElectronRejectionMVA62018Task) - self.process.rerunMvaIsolationSequence += self.process.patTauDiscriminationByElectronRejectionMVA62018Seq + _rerunMvaIsolationTask.add(_patTauDiscriminationByElectronRejectionMVA62018Task) + _rerunMvaIsolationSequence += cms.Sequence(_patTauDiscriminationByElectronRejectionMVA62018Task) _againstElectronTauIDSources = cms.PSet( - againstElectronMVA6Raw2018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "raw"), - againstElectronMVA6category2018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "category"), - againstElectronVLooseMVA62018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "_WPeff98"), - againstElectronLooseMVA62018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "_WPeff90"), - againstElectronMediumMVA62018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "_WPeff80"), - againstElectronTightMVA62018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "_WPeff70"), - againstElectronVTightMVA62018 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA62018", "_WPeff60") + againstElectronMVA6Raw2018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "raw"), + againstElectronMVA6category2018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "category"), + againstElectronVLooseMVA62018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "_WPeff98"), + againstElectronLooseMVA62018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "_WPeff90"), + againstElectronMediumMVA62018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "_WPeff80"), + againstElectronTightMVA62018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "_WPeff70"), + againstElectronVTightMVA62018 = self.tauIDMVAinputs(_byElectronRejectionMVA62018, "_WPeff60") ) _tauIDSourcesWithAgainistEle = cms.PSet( tauIDSources.clone(), @@ -872,19 +903,21 @@ def runTauID(self): if self.debug: print ("Adding newDMPhase2v1 ID") def tauIDMVAinputs(module, wp): return cms.PSet(inputTag = cms.InputTag(module), workingPointIndex = cms.int32(-1 if wp=="raw" else -2 if wp=="category" else getattr(self.process, module).workingPoints.index(wp))) - self.process.rerunDiscriminationByIsolationMVADBnewDMwLTPhase2raw = patDiscriminationByIsolationMVArun2v1raw.clone( - PATTauProducer = 'slimmedTaus', + _byIsolationNewDMMVAPhase2raw = "rerunDiscriminationByIsolationMVADBnewDMwLTPhase2raw"+self.postfix + setattr(self.process,_byIsolationNewDMMVAPhase2raw,patDiscriminationByIsolationMVArun2v1raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, loadMVAfromDB = True, mvaName = 'RecoTauTag_tauIdMVAIsoPhase2', mvaOpt = 'DBnewDMwLTwGJPhase2', verbosity = 0 - ) + )) - self.process.rerunDiscriminationByIsolationMVADBnewDMwLTPhase2 = patDiscriminationByIsolationMVArun2v1.clone( - PATTauProducer = 'slimmedTaus', + _byIsolationNewDMMVAPhase2 = "rerunDiscriminationByIsolationMVADBnewDMwLTPhase2"+self.postfix + setattr(self.process,_byIsolationNewDMMVAPhase2,patDiscriminationByIsolationMVArun2v1.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants, - toMultiplex = 'rerunDiscriminationByIsolationMVADBnewDMwLTPhase2raw', + toMultiplex = _byIsolationNewDMMVAPhase2raw, loadMVAfromDB = True, mvaOutput_normalization = 'RecoTauTag_tauIdMVAIsoPhase2_mvaOutput_normalization', mapping = cms.VPSet( @@ -903,57 +936,59 @@ def tauIDMVAinputs(module, wp): "_VTight", "_VVTight" ) + )) + _rerunIsolationMVADBnewDMwLTPhase2Task = cms.Task( + getattr(self.process,_byIsolationNewDMMVAPhase2raw), + getattr(self.process,_byIsolationNewDMMVAPhase2) ) - self.process.rerunIsolationMVADBnewDMwLTPhase2Task = cms.Task( - self.process.rerunDiscriminationByIsolationMVADBnewDMwLTPhase2raw, - self.process.rerunDiscriminationByIsolationMVADBnewDMwLTPhase2 - ) - self.process.rerunMvaIsolationTask.add(self.process.rerunIsolationMVADBnewDMwLTPhase2Task) - self.process.rerunMvaIsolationSequence += cms.Sequence(self.process.rerunIsolationMVADBnewDMwLTPhase2Task) - - tauIDSources.byIsolationMVADBnewDMwLTPhase2raw = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "raw") - tauIDSources.byVVLooseIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_VVLoose") - tauIDSources.byVLooseIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_VLoose") - tauIDSources.byLooseIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_Loose") - tauIDSources.byMediumIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_Medium") - tauIDSources.byTightIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_Tight") - tauIDSources.byVTightIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_VTight") - tauIDSources.byVVTightIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs("rerunDiscriminationByIsolationMVADBnewDMwLTPhase2", "_VVTight") + _rerunMvaIsolationTask.add(_rerunIsolationMVADBnewDMwLTPhase2Task) + _rerunMvaIsolationSequence += cms.Sequence(_rerunIsolationMVADBnewDMwLTPhase2Task) + + tauIDSources.byIsolationMVADBnewDMwLTPhase2raw = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "raw") + tauIDSources.byVVLooseIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_VVLoose") + tauIDSources.byVLooseIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_VLoose") + tauIDSources.byLooseIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_Loose") + tauIDSources.byMediumIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_Medium") + tauIDSources.byTightIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_Tight") + tauIDSources.byVTightIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_VTight") + tauIDSources.byVVTightIsolationMVADBnewDMwLTPhase2 = tauIDMVAinputs(_byIsolationNewDMMVAPhase2, "_VVTight") if "againstElePhase2v1" in self.toKeep: if self.debug: print ("Adding anti-e Phase2v1 ID") ### Define new anti-e discriminants for Phase2 ## Raw from RecoTauTag.RecoTau.PATTauDiscriminationAgainstElectronMVA6Phase2_cff import patTauDiscriminationAgainstElectronMVA6Phase2Raw, patTauDiscriminationAgainstElectronMVA6Phase2, mergedSlimmedElectronsForTauId - self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw = patTauDiscriminationAgainstElectronMVA6Phase2Raw.clone( - PATTauProducer = 'slimmedTaus', + _byElectronRejectionMVA6Phase2v1Raw = "patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw"+self.postfix + setattr(self.process,_byElectronRejectionMVA6Phase2v1Raw,patTauDiscriminationAgainstElectronMVA6Phase2Raw.clone( + PATTauProducer = self.originalTauName, Prediscriminants = noPrediscriminants #already selected for MiniAOD - ) + )) ## WPs - self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1 = patTauDiscriminationAgainstElectronMVA6Phase2.clone( - PATTauProducer = self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw.PATTauProducer, - Prediscriminants = self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw.Prediscriminants, - toMultiplex = 'patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw' - ) + _byElectronRejectionMVA6Phase2v1 = "patTauDiscriminationByElectronRejectionMVA6Phase2v1"+self.postfix + setattr(self.process,_byElectronRejectionMVA6Phase2v1,patTauDiscriminationAgainstElectronMVA6Phase2.clone( + PATTauProducer = self.originalTauName, + Prediscriminants = noPrediscriminants, + toMultiplex = _byElectronRejectionMVA6Phase2v1Raw + )) ### Put all new phase2 anti-e discrminats to a sequence - self.process.mergedSlimmedElectronsForTauId = mergedSlimmedElectronsForTauId - self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Task = cms.Task( + if not hasattr(self.process,"mergedSlimmedElectronsForTauId"): + self.process.mergedSlimmedElectronsForTauId = mergedSlimmedElectronsForTauId + _patTauDiscriminationByElectronRejectionMVA6Phase2v1Task = cms.Task( self.process.mergedSlimmedElectronsForTauId, - self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Raw, - self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1 + getattr(self.process,_byElectronRejectionMVA6Phase2v1Raw), + getattr(self.process,_byElectronRejectionMVA6Phase2v1) ) - self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Seq = cms.Sequence(self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Task) - self.process.rerunMvaIsolationTask.add(self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Task) - self.process.rerunMvaIsolationSequence += self.process.patTauDiscriminationByElectronRejectionMVA6Phase2v1Seq + _rerunMvaIsolationTask.add(_patTauDiscriminationByElectronRejectionMVA6Phase2v1Task) + _rerunMvaIsolationSequence += cms.Sequence(_patTauDiscriminationByElectronRejectionMVA6Phase2v1Task) _againstElectronTauIDPhase2v1Sources = cms.PSet( - againstElectronMVA6RawPhase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "raw"), - againstElectronMVA6categoryPhase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "category"), - againstElectronVLooseMVA6Phase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "_VLoose"), - againstElectronLooseMVA6Phase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "_Loose"), - againstElectronMediumMVA6Phase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "_Medium"), - againstElectronTightMVA6Phase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "_Tight"), - againstElectronVTightMVA6Phase2v1 = self.tauIDMVAinputs("patTauDiscriminationByElectronRejectionMVA6Phase2v1", "_VTight") + againstElectronMVA6RawPhase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "raw"), + againstElectronMVA6categoryPhase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "category"), + againstElectronVLooseMVA6Phase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "_VLoose"), + againstElectronLooseMVA6Phase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "_Loose"), + againstElectronMediumMVA6Phase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "_Medium"), + againstElectronTightMVA6Phase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "_Tight"), + againstElectronVTightMVA6Phase2v1 = self.tauIDMVAinputs(_byElectronRejectionMVA6Phase2v1, "_VTight") ) _tauIDSourcesWithAgainistElePhase2v1 = cms.PSet( tauIDSources.clone(), @@ -964,7 +999,7 @@ def tauIDMVAinputs(module, wp): if self.debug: print('Embedding new TauIDs into \"'+self.updatedTauName+'\"') if not hasattr(self.process, self.updatedTauName): embedID = cms.EDProducer("PATTauIDEmbedder", - src = cms.InputTag('slimmedTaus'), + src = cms.InputTag(self.originalTauName), tauIDSources = tauIDSources ) setattr(self.process, self.updatedTauName, embedID) @@ -973,21 +1008,23 @@ def tauIDMVAinputs(module, wp): getattr(self.process, self.updatedTauName).tauIDSources, tauIDSources) getattr(self.process, self.updatedTauName).tauIDSources = tauIDSources + setattr(self.process,"rerunMvaIsolationTask"+self.postfix,_rerunMvaIsolationTask) + setattr(self.process,"rerunMvaIsolationSequence"+self.postfix,_rerunMvaIsolationSequence) def processDeepProducer(self, producer_name, tauIDSources, workingPoints_): for target,points in six.iteritems(workingPoints_): setattr(tauIDSources, 'by{}VS{}raw'.format(producer_name[0].upper()+producer_name[1:], target), - cms.PSet(inputTag = cms.InputTag(producer_name, 'VS{}'.format(target)), workingPointIndex = cms.int32(-1))) + cms.PSet(inputTag = cms.InputTag(producer_name+self.postfix, 'VS{}'.format(target)), workingPointIndex = cms.int32(-1))) cut_expressions = [] for index, (point,cut) in enumerate(six.iteritems(points)): cut_expressions.append(str(cut)) setattr(tauIDSources, 'by{}{}VS{}'.format(point, producer_name[0].upper()+producer_name[1:], target), - cms.PSet(inputTag = cms.InputTag(producer_name, 'VS{}'.format(target)), workingPointIndex = cms.int32(index))) + cms.PSet(inputTag = cms.InputTag(producer_name+self.postfix, 'VS{}'.format(target)), workingPointIndex = cms.int32(index))) - setattr(getattr(self.process, producer_name), 'VS{}WP'.format(target), cms.vstring(*cut_expressions)) + setattr(getattr(self.process, producer_name+self.postfix), 'VS{}WP'.format(target), cms.vstring(*cut_expressions)) def getDpfTauVersion(self, file_name): diff --git a/RecoTauTag/RecoTau/test/runDeepTauIDsOnMiniAOD.py b/RecoTauTag/RecoTau/test/runDeepTauIDsOnMiniAOD.py index 9a555068fea5b..a2b72cf61210f 100644 --- a/RecoTauTag/RecoTau/test/runDeepTauIDsOnMiniAOD.py +++ b/RecoTauTag/RecoTau/test/runDeepTauIDsOnMiniAOD.py @@ -30,16 +30,25 @@ # Add new TauIDs import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig +toKeep = [ "2017v2", "dR0p32017v2", "newDM2017v2", + # "deepTau2017v1", + "deepTau2017v2p1", + # "DPFTau_2016_v0", + # "DPFTau_2016_v1", + "againstEle2018", + ] tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False, updatedTauName = updatedTauName, - toKeep = [ "2017v2", "dR0p32017v2", "newDM2017v2", - # "deepTau2017v1", - "deepTau2017v2p1", - # "DPFTau_2016_v0", - # "DPFTau_2016_v1", - "againstEle2018", - ]) + toKeep = toKeep) tauIdEmbedder.runTauID() +#Another tau collection with updated tauIDs +postfix = "Ver2" +tauIdEmbedder2 = tauIdConfig.TauIDEmbedder(process, debug = False, + originalTauName = "slimmedTaus", #one can run on top of other collection than default "slimmedTaus" + updatedTauName = updatedTauName+postfix, + postfix = postfix, # defaut "", specify non-trivial postfix if tool is run more than one time + toKeep = toKeep) +tauIdEmbedder2.runTauID() # Output definition process.out = cms.OutputModule("PoolOutputModule", @@ -55,11 +64,14 @@ process.out.outputCommands = MINIAODSIMEventContent.outputCommands process.out.overrideBranchesSplitLevel = MiniAODOverrideBranchesSplitLevel process.out.outputCommands.append("keep *_"+updatedTauName+"_*_*") +process.out.outputCommands.append("keep *_"+updatedTauName+postfix+"_*_*") # Path and EndPath definitions process.p = cms.Path( process.rerunMvaIsolationSequence * getattr(process,updatedTauName) + * getattr(process,"rerunMvaIsolationSequence"+postfix) * + getattr(process,updatedTauName+postfix) ) process.endjob = cms.EndPath(process.endOfProcess) process.outpath = cms.EndPath(process.out) 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/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/interface/TfGraphDefWrapper.h b/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h index 5adaee9352d72..1ecee9699ed8b 100644 --- a/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h +++ b/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h @@ -5,8 +5,8 @@ class TfGraphDefWrapper { public: - TfGraphDefWrapper(tensorflow::Session*); - ~TfGraphDefWrapper() { tensorflow::closeSession(session_); }; + TfGraphDefWrapper(tensorflow::Session*, tensorflow::GraphDef*); + ~TfGraphDefWrapper(); TfGraphDefWrapper(const TfGraphDefWrapper&) = delete; TfGraphDefWrapper& operator=(const TfGraphDefWrapper&) = delete; TfGraphDefWrapper(TfGraphDefWrapper&&) = delete; @@ -15,6 +15,7 @@ class TfGraphDefWrapper { private: tensorflow::Session* session_; + std::unique_ptr graph_; }; #endif diff --git a/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc b/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc index 8dd2dc3ee5be8..22377cb7468ab 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc +++ b/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc @@ -46,8 +46,9 @@ TfGraphDefProducer::TfGraphDefProducer(const edm::ParameterSet& iConfig) } // ------------ method called to produce the data ------------ -std::unique_ptr TfGraphDefProducer::produce(const TfGraphRecord& iRecord) { - return std::make_unique(tensorflow::createSession(tensorflow::loadGraphDef(filename_), 1)); +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) { diff --git a/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc b/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc index 1885f6768298e..cd025e2dacf12 100644 --- a/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc +++ b/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc @@ -1,6 +1,7 @@ #include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h" -TfGraphDefWrapper::TfGraphDefWrapper(tensorflow::Session* session) : session_(session) {} -const tensorflow::Session* TfGraphDefWrapper::getSession() const { - return const_cast(session_); -} +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/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/TkSeedGenerator/plugins/BuildFile.xml b/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml index 62511823f5ae7..4dc0bfafbb439 100644 --- a/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml +++ b/RecoTracker/TkSeedGenerator/plugins/BuildFile.xml @@ -31,7 +31,7 @@ - + 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/KalmanVertexFit/plugins/KVFTest.cc b/RecoVertex/KalmanVertexFit/plugins/KVFTest.cc index c7c6be3743a7f..cf350fb2736b8 100644 --- a/RecoVertex/KalmanVertexFit/plugins/KVFTest.cc +++ b/RecoVertex/KalmanVertexFit/plugins/KVFTest.cc @@ -6,16 +6,9 @@ #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" -#include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" - #include #include @@ -23,7 +16,10 @@ using namespace reco; using namespace edm; using namespace std; -KVFTest::KVFTest(const edm::ParameterSet& iConfig) : theConfig(iConfig) { +KVFTest::KVFTest(const edm::ParameterSet& iConfig) + : estoken_MF(esConsumes()), + estoken_TTB(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), + theConfig(iConfig) { token_tracks = consumes(iConfig.getParameter("TrackLabel")); outputFile_ = iConfig.getUntrackedParameter("outputFile"); kvfPSet = iConfig.getParameter("KVFParameters"); @@ -51,9 +47,7 @@ void KVFTest::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { iEvent.getByToken(token_associatorForParamAtPca, associatorForParamAtPca); if (not tree) { - edm::ESHandle magField; - iSetup.get().get(magField); - tree = std::make_unique("VertexFitter", magField.product()); + tree = std::make_unique("VertexFitter", &iSetup.getData(estoken_MF)); } edm::LogInfo("RecoVertex/KVFTest") << "Reconstructing event number: " << iEvent.id() << "\n"; @@ -67,15 +61,14 @@ void KVFTest::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { } else { edm::LogInfo("RecoVertex/KVFTest") << "Found: " << (*tks).size() << " reconstructed tracks" << "\n"; - std::cout << "got " << (*tks).size() << " tracks " << std::endl; + edm::LogPrint("RecoVertex/KVFTest") << "got " << (*tks).size() << " tracks " << std::endl; // Transform Track to TransientTrack //get the builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + const auto& theB = &iSetup.getData(estoken_TTB); //do the conversion: - std::vector t_tks = (*theB).build(tks); + std::vector t_tks = theB->build(tks); edm::LogInfo("RecoVertex/KVFTest") << "Found: " << t_tks.size() << " reconstructed tracks" << "\n"; @@ -86,7 +79,7 @@ void KVFTest::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { KalmanVertexFitter kvf(true); TransientVertex tv = kvf.vertex(t_tks); - std::cout << "Position: " << Vertex::Point(tv.position()) << "\n"; + edm::LogPrint("RecoVertex/KVFTest") << "Position: " << Vertex::Point(tv.position()) << "\n"; // For the analysis: compare to your SimVertex TrackingVertex sv = getSimVertex(iEvent); diff --git a/RecoVertex/KalmanVertexFit/plugins/KVFTest.h b/RecoVertex/KalmanVertexFit/plugins/KVFTest.h index 41e77fded46da..9cb3f4deda237 100644 --- a/RecoVertex/KalmanVertexFit/plugins/KVFTest.h +++ b/RecoVertex/KalmanVertexFit/plugins/KVFTest.h @@ -15,25 +15,27 @@ #include // user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - +#include "DataFormats/TrackReco/interface/TrackFwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" - +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" -#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" -#include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h" +#include "MagneticField/Engine/interface/MagneticField.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "RecoVertex/KalmanVertexFit/interface/SimpleVertexTree.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertex.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include /** * This is a very simple test analyzer mean to test the KalmanVertexFitter */ -class KVFTest : public edm::EDAnalyzer { +class KVFTest : public edm::one::EDAnalyzer<> { public: explicit KVFTest(const edm::ParameterSet&); ~KVFTest() override; @@ -46,6 +48,9 @@ class KVFTest : public edm::EDAnalyzer { private: TrackingVertex getSimVertex(const edm::Event& iEvent) const; + const edm::ESGetToken estoken_MF; + const edm::ESGetToken estoken_TTB; + edm::ParameterSet theConfig; edm::ParameterSet kvfPSet; std::unique_ptr tree; diff --git a/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.cc b/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.cc index 47fb5060e58ab..4c0426ad7b072 100644 --- a/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.cc +++ b/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.cc @@ -6,10 +6,6 @@ #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" @@ -23,7 +19,8 @@ using namespace reco; using namespace edm; using namespace std; -KVFTrackUpdate::KVFTrackUpdate(const edm::ParameterSet& iConfig) { +KVFTrackUpdate::KVFTrackUpdate(const edm::ParameterSet& iConfig) + : estoken_TTB(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))) { token_tracks = consumes(iConfig.getParameter("TrackLabel")); token_beamSpot = consumes(iConfig.getParameter("beamSpotLabel")); } @@ -49,15 +46,14 @@ void KVFTrackUpdate::analyze(const edm::Event& iEvent, const edm::EventSetup& iS edm::LogInfo("RecoVertex/KVFTrackUpdate") << "Found: " << (*tks).size() << " reconstructed tracks" << "\n"; - std::cout << "got " << (*tks).size() << " tracks " << std::endl; + edm::LogPrint("RecoVertex/KVFTrackUpdate") << "got " << (*tks).size() << " tracks " << std::endl; // Transform Track to TransientTrack //get the builder: - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder", theB); + const auto& theB = &iSetup.getData(estoken_TTB); //do the conversion: - std::vector t_tks = (*theB).build(tks); + std::vector t_tks = theB->build(tks); edm::LogInfo("RecoVertex/KVFTrackUpdate") << "Found: " << t_tks.size() << " reconstructed tracks" << "\n"; @@ -77,10 +73,10 @@ void KVFTrackUpdate::analyze(const edm::Event& iEvent, const edm::EventSetup& iS SingleTrackVertexConstraint stvc; for (unsigned int i = 0; i < t_tks.size(); i++) { SingleTrackVertexConstraint::BTFtuple a = stvc.constrain(t_tks[i], glbPos, glbErrPos); - std::cout << "Chi2: " << std::get<2>(a) << std::endl; + edm::LogPrint("RecoVertex/KVFTrackUpdate") << "Chi2: " << std::get<2>(a) << std::endl; if (recoBeamSpotHandle.isValid()) { SingleTrackVertexConstraint::BTFtuple b = stvc.constrain(t_tks[i], *recoBeamSpotHandle); - std::cout << "Chi2: " << std::get<2>(b) << std::endl; + edm::LogPrint("RecoVertex/KVFTrackUpdate") << "Chi2: " << std::get<2>(b) << std::endl; } } } diff --git a/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.h b/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.h index 1affe470b570f..d01917ba08ec6 100644 --- a/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.h +++ b/RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.h @@ -3,7 +3,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/EventSetup.h" @@ -11,13 +11,15 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" /** * This is a very simple test analyzer to test the update of a track with * a vertex constraint with the Kalman filter. */ -class KVFTrackUpdate : public edm::EDAnalyzer { +class KVFTrackUpdate : public edm::one::EDAnalyzer<> { public: explicit KVFTrackUpdate(const edm::ParameterSet&); ~KVFTrackUpdate() override; @@ -28,6 +30,7 @@ class KVFTrackUpdate : public edm::EDAnalyzer { void endJob() override; private: + const edm::ESGetToken estoken_TTB; edm::EDGetTokenT token_tracks; edm::EDGetTokenT token_beamSpot; }; diff --git a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h index 24879900f9272..b1c61fa9e6f6e 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h +++ b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h @@ -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" @@ -35,6 +36,8 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { std::vector kmax; // 1 + index of the last cluster within zrange std::vector tt; // a pointer to the Transient Track + double osumtkwt; // 1. / (sum of all track weights) + void addItem(double new_zpca, double new_tpca, double new_dz2, @@ -256,6 +259,8 @@ class DAClusterizerInZT_vect final : public TrackClusterizerInZ { DAClusterizerInZT_vect(const edm::ParameterSet &conf); + static void fillPSetDescription(edm::ParameterSetDescription &desc); + std::vector > clusterize( const std::vector &tracks) const override; @@ -302,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 c9c49ba010ec8..ce45577aca261 100644 --- a/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h +++ b/RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h @@ -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,6 +20,8 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { public: + static void fillPSetDescription(edm::ParameterSetDescription &desc); + // internal data structure for tracks struct track_t { std::vector zpca_vec; // z-coordinate at point of closest approach to the beamline @@ -29,6 +32,8 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ { std::vector kmax; // 1 + index of the last cluster within zrange std::vector tt; // a pointer to the Transient Track + double osumtkwt; // 1. / (sum of all track weights) + 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; @@ -206,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("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"); @@ -50,6 +52,7 @@ DAClusterizerInZT_vect::DAClusterizerInZT_vect(const edm::ParameterSet& conf) { #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; @@ -100,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, @@ -208,6 +206,8 @@ 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; @@ -259,8 +259,12 @@ DAClusterizerInZT_vect::track_t DAClusterizerInZT_vect::fill(const vector 0 ? 1. / sumtkwt : 0.; + #ifdef DEBUG if (DEBUGLEVEL > 0) { std::cout << "Track count (ZT) filled " << tks.getSize() << " initial " << tracks.size() << std::endl; @@ -350,16 +354,9 @@ double DAClusterizerInZT_vect::update( const unsigned int nt = gtracks.getSize(); const unsigned int nv = gvertices.getSize(); + auto osumtkwt = gtracks.osumtkwt; - //initialize sums - double sumtkwt = 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 } @@ -466,8 +463,8 @@ double DAClusterizerInZT_vect::update( // 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)); @@ -476,12 +473,10 @@ double DAClusterizerInZT_vect::update( kernel_calc_exp_arg_range(itrack, gtracks, 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.sum_Z[itrack])) gtracks.sum_Z[itrack] = 0.0; - // used in the next major loop to follow - sumtkwt += gtracks.tkwt[itrack]; if (gtracks.sum_Z[itrack] > 1.e-100) { kernel_calc_normalization_range(itrack, gtracks, gvertices, kmin, kmax); @@ -489,7 +484,7 @@ double DAClusterizerInZT_vect::update( } // now update z, t, and rho - auto kernel_calc_zt = [sumtkwt, nv](vertex_t& vertices) -> double { + auto kernel_calc_zt = [osumtkwt, nv](vertex_t& vertices) -> double { double delta = 0; // does not vectorize @@ -529,7 +524,6 @@ double DAClusterizerInZT_vect::update( #endif } - auto osumtkwt = 1. / sumtkwt; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { vertices.rho[ivertex] = vertices.rho[ivertex] * vertices.se[ivertex] * osumtkwt; } @@ -537,7 +531,7 @@ double DAClusterizerInZT_vect::update( return delta; }; - delta += kernel_calc_zt(gvertices); + double delta = kernel_calc_zt(gvertices); if (zorder(gvertices)) { set_vtx_range(beta, gtracks, gvertices); @@ -758,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.sum_Z[i] > eps ? 1. / tks.sum_Z[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.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.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]; // FIXME usevtxdt2? - + 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[i] = botrack_dz2 * (mult_resz * mult_resz) + botrack_dt2 * (mult_rest * mult_rest); + 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.rho[k] * peik_cache[i] * pinverse_zsums[i]; - sump += p; - nUnique += ((p > ppcut_cache[k]) & (tks.tkwt[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; } } @@ -1103,6 +1103,7 @@ bool DAClusterizerInZT_vect::split(const double beta, track_t& tks, vertex_t& y, #endif } } + return split; } @@ -1254,7 +1255,7 @@ 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]); + } + + local_exp_list_range(y.exp_arg, y.exp, kmin, kmax); + 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; + } + } - // improve vectorization (does not require reduction ....) - for (unsigned int k = 0; k < nv; k++) { - for (unsigned int i = 0; i < nt; i++) - tks.sum_Z[i] += - y.rho[k] * local_exp(-beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i], tks.tpca[i], y.tvtx[k], tks.dt2[i])); - } + } // track loop + GlobalError dummyError(0.01, 0, 0.01, 0., 0., 0.01); for (unsigned int k = 0; k < nv; k++) { - GlobalPoint pos(0, 0, y.zvtx[k]); - - vector vertexTracks; - for (unsigned int i = 0; i < nt; i++) { - if (tks.sum_Z[i] > 1e-100) { - double p = y.rho[k] * - 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]; - if ((tks.tkwt[i] > 0) && (p > mintrkweight_)) { - vertexTracks.push_back(*(tks.tt[i])); - tks.sum_Z[i] = 0; // setting Z=0 excludes double assignment - } + 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.tvtx[k], dummyError, vertexTracks, 0); - clusters.push_back(v); } return clusters; @@ -1546,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 5f9d20587a190..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,7 +22,7 @@ DAClusterizerInZ_vect::DAClusterizerInZ_vect(const edm::ParameterSet& conf) { maxIterations_ = 1000; mintrkweight_ = 0.5; - // configurable debug outptut + // configurable debug output #ifdef DEBUG zdumpcenter_ = conf.getUntrackedParameter("zdumpcenter", 0.); zdumpwidth_ = conf.getUntrackedParameter("zdumpwidth", 20.); @@ -39,6 +37,7 @@ 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"); @@ -48,6 +47,7 @@ DAClusterizerInZ_vect::DAClusterizerInZ_vect(const edm::ParameterSet& conf) { #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; @@ -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, @@ -175,6 +170,7 @@ void DAClusterizerInZ_vect::verify(const vertex_t& v, const track_t& tks, unsign 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; @@ -202,9 +198,12 @@ DAClusterizerInZ_vect::track_t DAClusterizerInZ_vect::fill(const vector 0 ? 1. / sumtkwt : 0.; + #ifdef DEBUG if (DEBUGLEVEL > 0) { std::cout << "Track count (Z) " << tks.getSize() << std::endl; @@ -278,20 +277,14 @@ 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 bool updateTc) const { - // update weights and vertex positions and Tc input - // returns the squared sum of changes of vertex positions + // update weights and vertex positions + // 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 sumtkwt = 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 @@ -327,8 +320,7 @@ double DAClusterizerInZ_vect::update( 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_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]; @@ -336,8 +328,8 @@ double DAClusterizerInZ_vect::update( if (updateTc) { #pragma GCC ivdep for (unsigned int k = kmin; k < kmax; ++k) { - vertices.se[k] += vertices.exp[k] * (tmp_trk_tkwt * o_trk_sum_Z); - auto w = vertices.rho[k] * vertices.exp[k] * (tmp_trk_tkwt * o_trk_sum_Z * o_trk_dz2); + 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]; @@ -346,8 +338,8 @@ double DAClusterizerInZ_vect::update( // same loop but without updating sWE #pragma GCC ivdep for (unsigned int k = kmin; k < kmax; ++k) { - vertices.se[k] += vertices.exp[k] * (tmp_trk_tkwt * o_trk_sum_Z); - auto w = vertices.rho[k] * vertices.exp[k] * (tmp_trk_tkwt * o_trk_sum_Z * o_trk_dz2); + 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; } @@ -371,8 +363,8 @@ double DAClusterizerInZ_vect::update( // 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]; kernel_calc_exp_arg_range(itrack, gtracks, gvertices, kmin, kmax); local_exp_list_range(gvertices.exp_arg, gvertices.exp, kmin, kmax); @@ -380,8 +372,6 @@ double DAClusterizerInZ_vect::update( if (edm::isNotFinite(gtracks.sum_Z[itrack])) gtracks.sum_Z[itrack] = 0.0; - // used in the next major loop to follow - sumtkwt += gtracks.tkwt[itrack]; if (gtracks.sum_Z[itrack] > 1.e-100) { kernel_calc_normalization_range(itrack, gtracks, gvertices, kmin, kmax); @@ -397,7 +387,7 @@ double DAClusterizerInZ_vect::update( } // now update z and rho - auto kernel_calc_z = [sumtkwt, nv](vertex_t& vertices) -> double { + auto kernel_calc_z = [osumtkwt, nv](vertex_t& vertices) -> double { double delta = 0; // does not vectorize for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) { @@ -409,14 +399,13 @@ double DAClusterizerInZ_vect::update( } } - auto osumtkwt = 1. / sumtkwt; for (unsigned int ivertex = 0; ivertex < nv; ++ivertex) 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; @@ -533,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.sum_Z[i] > eps ? 1. / tks.sum_Z[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.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.zpca[i]; - const auto botrack_dz2 = -beta * tks.dz2[i]; + 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[i] = botrack_dz2 * (mult_resz * mult_resz); + 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.rho[k] * peik_cache[i] * pinverse_zsums[i]; - sump += p; - nUnique += ((p > ppcut_cache[k]) & (tks.tkwt[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,7 +801,6 @@ 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);//to be introduced in a forthcoming PR + update(beta, tks, y, rho0, true); #ifdef DEBUG verify(y, tks); @@ -870,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]); + } + + local_exp_list_range(y.exp_arg, y.exp, kmin, kmax); + 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; + } + } - // improve vectorization (does not require reduction ....) - for (unsigned int k = 0; k < nv; k++) { - for (unsigned int i = 0; i < nt; i++) - tks.sum_Z[i] += y.rho[k] * local_exp(-beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i])); - } + } // track loop + GlobalError dummyError(0.01, 0, 0.01, 0., 0., 0.01); for (unsigned int k = 0; k < nv; k++) { - GlobalPoint pos(0, 0, y.zvtx[k]); - - vector vertexTracks; - for (unsigned int i = 0; i < nt; i++) { - if (tks.sum_Z[i] > 1e-100) { - double p = y.rho[k] * local_exp(-beta * Eik(tks.zpca[i], y.zvtx[k], tks.dz2[i])) / tks.sum_Z[i]; - if ((tks.tkwt[i] > 0) && (p > mintrkweight_)) { - vertexTracks.push_back(*(tks.tt[i])); - tks.sum_Z[i] = 0; // setting Z=0 excludes double assignment - } + 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; @@ -1158,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/RecoVertex/V0Producer/src/V0Fitter.cc b/RecoVertex/V0Producer/src/V0Fitter.cc index 0f6f9673177ed..ad73994570dbf 100644 --- a/RecoVertex/V0Producer/src/V0Fitter.cc +++ b/RecoVertex/V0Producer/src/V0Fitter.cc @@ -46,7 +46,7 @@ namespace { typedef ROOT::Math::SMatrix> SMatrixSym3D; typedef ROOT::Math::SVector SVector3; -V0Fitter::V0Fitter(const edm::ParameterSet& theParameters, edm::ConsumesCollector&& iC) { +V0Fitter::V0Fitter(const edm::ParameterSet& theParameters, edm::ConsumesCollector&& iC) : esTokenMF_(iC.esConsumes()) { token_beamSpot = iC.consumes(theParameters.getParameter("beamSpot")); useVertex_ = theParameters.getParameter("useVertex"); token_vertices = iC.consumes>(theParameters.getParameter("vertices")); @@ -108,9 +108,7 @@ void V0Fitter::fitAll(const edm::Event& iEvent, referencePos = referenceVtx.position(); } - edm::ESHandle theMagneticFieldHandle; - iSetup.get().get(theMagneticFieldHandle); - const MagneticField* theMagneticField = theMagneticFieldHandle.product(); + const MagneticField* theMagneticField = &iSetup.getData(esTokenMF_); std::vector theTrackRefs; std::vector theTransTracks; diff --git a/RecoVertex/V0Producer/src/V0Fitter.h b/RecoVertex/V0Producer/src/V0Fitter.h index a92ce2b3598be..5b399f64f6053 100644 --- a/RecoVertex/V0Producer/src/V0Fitter.h +++ b/RecoVertex/V0Producer/src/V0Fitter.h @@ -46,6 +46,8 @@ class dso_hidden V0Fitter { reco::VertexCompositeCandidateCollection& l); private: + const edm::ESGetToken esTokenMF_; + bool vertexFitter_; bool useRefTracks_; bool doKShorts_; diff --git a/RecoVertex/V0Producer/test/V0Analyzer.cc b/RecoVertex/V0Producer/test/V0Analyzer.cc index 8b5715eb047d5..1f7304b4b155a 100644 --- a/RecoVertex/V0Producer/test/V0Analyzer.cc +++ b/RecoVertex/V0Producer/test/V0Analyzer.cc @@ -23,18 +23,12 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.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" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "FWCore/Framework/interface/ESHandle.h" - #include "TrackingTools/TransientTrack/interface/TransientTrack.h" //#include "DataFormats/TrackReco/interface/Track.h" @@ -72,7 +66,7 @@ // class declaration // -class V0Analyzer : public edm::EDAnalyzer { +class V0Analyzer : public edm::one::EDAnalyzer { public: explicit V0Analyzer(const edm::ParameterSet&); ~V0Analyzer(); @@ -83,6 +77,9 @@ class V0Analyzer : public edm::EDAnalyzer { virtual void analyze(const edm::Event&, const edm::EventSetup&); virtual void endJob(); + const edm::ESGetToken m_mfToken; + const edm::ESGetToken m_geomToken; + std::string algoLabel; std::string recoAlgoLabel; std::string SimTkLabel; @@ -154,9 +151,11 @@ const double piMassSq = 0.019479101; // // constructors and destructor -// + V0Analyzer::V0Analyzer(const edm::ParameterSet& iConfig) - : algoLabel(iConfig.getUntrackedParameter("recoAlgorithm", std::string("ctfV0Prod"))), + : m_mfToken(esConsumes()), + m_geomToken(esConsumes()), + algoLabel(iConfig.getUntrackedParameter("recoAlgorithm", std::string("ctfV0Prod"))), recoAlgoLabel(iConfig.getUntrackedParameter("trackingAlgo", std::string("ctfWithMaterialTracks"))), SimTkLabel(iConfig.getUntrackedParameter("moduleLabelTk", std::string("g4SimHits"))), SimVtxLabel(iConfig.getUntrackedParameter("moduleLabelVtx", std::string("g4SimHits"))), @@ -166,6 +165,8 @@ V0Analyzer::V0Analyzer(const edm::ParameterSet& iConfig) //now do what ever initialization is needed //theHistoFile = 0; + usesResource(TFileService::kSharedResource); + numDiff1 = numDiff2 = 0; } @@ -370,11 +371,8 @@ void V0Analyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup Handle SimVtx; Handle RecoTk; - ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); - - ESHandle trackerGeomHandle; - iSetup.get().get(trackerGeomHandle); + ESHandle bFieldHandle = iSetup.getHandle(m_mfToken); + ESHandle trackerGeomHandle = iSetup.getHandle(m_geomToken); //const TrackerGeometry* trackerGeom = trackerGeomHandle.product(); 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/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 index 5a0b2b04d0f1f..e83de46afe312 100644 --- a/SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h +++ b/SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h @@ -1,15 +1,16 @@ -#if !defined(SimCalorimetry_HGCalAssociatorProducers_interface_AssociatorTools_h) -#define SimCalorimetry_HGCalAssociatorProducers_interface_AssociatorTools_h +#ifndef SimCalorimetry_HGCalAssociatorProducers_AssociatorTools_h +#define SimCalorimetry_HGCalAssociatorProducers_AssociatorTools_h + #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" #include -void removeCPFromPU(const std::vector& caloParticles, std::vector& cPIndices) { +static void removeCPFromPU(const std::vector& caloParticles, std::vector& cPIndices, bool hardScatterOnly=true) { //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) { + if (hardScatterOnly && (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() @@ -19,4 +20,5 @@ void removeCPFromPU(const std::vector& caloParticles, std::vector< cPIndices.emplace_back(cpId); } } + #endif diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc b/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc index 2a63778286cef..b4a585941a53b 100644 --- a/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/LayerClusterAssociatorByEnergyScoreImpl.cc @@ -6,7 +6,6 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" #include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" - #include "SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h" LayerClusterAssociatorByEnergyScoreImpl::LayerClusterAssociatorByEnergyScoreImpl( @@ -28,7 +27,7 @@ hgcal::association LayerClusterAssociatorByEnergyScoreImpl::makeConnections( std::vector cPIndices; //Consider CaloParticles coming from the hard scatterer //excluding the PU contribution and save the indices. - removeCPFromPU(caloParticles, cPIndices); + removeCPFromPU(caloParticles, cPIndices, hardScatterOnly_); auto nCaloParticles = cPIndices.size(); // Initialize cPOnLayer. To be returned outside, since it contains the diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreImpl.cc b/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreImpl.cc new file mode 100644 index 0000000000000..ff5472b91dd09 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreImpl.cc @@ -0,0 +1,530 @@ +// Original Author: Leonardo Cristella +// + +#include "MultiClusterAssociatorByEnergyScoreImpl.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h" +#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h" +#include "SimCalorimetry/HGCalAssociatorProducers/interface/AssociatorTools.h" + +MultiClusterAssociatorByEnergyScoreImpl::MultiClusterAssociatorByEnergyScoreImpl( + 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 MultiClusterAssociatorByEnergyScoreImpl::makeConnections( + const edm::Handle& mCCH, const edm::Handle& cPCH) const { + // 1. Extract collections and filter CaloParticles, if required + const auto& mClusters = *mCCH.product(); + const auto& caloParticles = *cPCH.product(); + auto nMultiClusters = mClusters.size(); + //Consider CaloParticles coming from the hard scatterer, excluding the PU contribution. + std::vector cPIndices; + //Consider CaloParticles coming from the hard scatterer + //excluding the PU contribution and save the indices. + removeCPFromPU(caloParticles, cPIndices, false); + auto nCaloParticles = cPIndices.size(); + + std::vector cPSelectedIndices; + removeCPFromPU(caloParticles, cPSelectedIndices, true); + + //cPOnLayer[caloparticle][layer] + //This defines a "caloParticle on layer" concept. It is only filled in case + //that caloParticle has a reconstructed hit related via detid. So, a cPOnLayer[i][j] connects a + //specific caloParticle i in layer j with: + //1. the sum of all recHits energy times fraction of the relevant simHit in layer j related to that caloParticle i. + //2. the hits and fractions of that caloParticle i in layer j. + //3. the layer clusters with matched recHit id. + hgcal::caloParticleToMultiCluster cPOnLayer; + cPOnLayer.resize(nCaloParticles); + for (unsigned int i = 0; i < nCaloParticles; ++i) { + auto cpIndex = cPIndices[i]; + cPOnLayer[cpIndex].resize(layers_ * 2); + for (unsigned int j = 0; j < layers_ * 2; ++j) { + cPOnLayer[cpIndex][j].caloParticleId = cpIndex; + cPOnLayer[cpIndex][j].energy = 0.f; + cPOnLayer[cpIndex][j].hits_and_fractions.clear(); + } + } + + std::unordered_map> detIdToCaloParticleId_Map; + // Fill detIdToCaloParticleId_Map and update cPOnLayer + for (const auto& cpId : cPIndices) { + //take sim clusters + const SimClusterRefVector& simClusterRefVector = caloParticles[cpId].simClusters(); + //loop through sim clusters + for (const auto& it_sc : simClusterRefVector) { + const SimCluster& simCluster = (*(it_sc)); + const auto& hits_and_fractions = simCluster.hits_and_fractions(); + for (const auto& it_haf : hits_and_fractions) { + const auto hitid = (it_haf.first); + const auto cpLayerId = + recHitTools_->getLayerWithOffset(hitid) + layers_ * ((recHitTools_->zside(hitid) + 1) >> 1) - 1; + const auto itcheck = hitMap_->find(hitid); + if (itcheck != hitMap_->end()) { + //Since the current hit from sim cluster has a reconstructed hit with the same detid, + //make a map that will connect a detid with: + //1. the caloParticles that have a simcluster with sim hits in that cell via caloParticle id. + //2. the sum of all simHits fractions that contributes to that detid. + //So, keep in mind that in case of multiple caloParticles contributing in the same cell + //the fraction is the sum over all caloParticles. So, something like: + //detid: (caloParticle 1, sum of hits fractions in that detid over all cp) , (caloParticle 2, sum of hits fractions in that detid over all cp), (caloParticle 3, sum of hits fractions in that detid over all cp) ... + auto hit_find_it = detIdToCaloParticleId_Map.find(hitid); + if (hit_find_it == detIdToCaloParticleId_Map.end()) { + detIdToCaloParticleId_Map[hitid] = std::vector(); + detIdToCaloParticleId_Map[hitid].emplace_back(cpId, it_haf.second); + } else { + auto findHitIt = std::find(detIdToCaloParticleId_Map[hitid].begin(), + detIdToCaloParticleId_Map[hitid].end(), + hgcal::detIdInfoInCluster{cpId, it_haf.second}); + if (findHitIt != detIdToCaloParticleId_Map[hitid].end()) { + findHitIt->fraction += it_haf.second; + } else { + detIdToCaloParticleId_Map[hitid].emplace_back(cpId, it_haf.second); + } + } + const HGCRecHit* hit = itcheck->second; + //Since the current hit from sim cluster has a reconstructed hit with the same detid, + //fill the cPOnLayer[caloparticle][layer] object with energy (sum of all recHits energy times fraction + //of the relevant simHit) and keep the hit (detid and fraction) that contributed. + cPOnLayer[cpId][cpLayerId].energy += it_haf.second * hit->energy(); + // We need to compress the hits and fractions in order to have a + // reasonable score between CP and LC. Imagine, for example, that a + // CP has detID X used by 2 SimClusters with different fractions. If + // a single LC uses X with fraction 1 and is compared to the 2 + // contributions separately, it will be assigned a score != 0, which + // is wrong. + auto& haf = cPOnLayer[cpId][cpLayerId].hits_and_fractions; + auto found = std::find_if( + std::begin(haf), std::end(haf), [&hitid](const std::pair& v) { return v.first == hitid; }); + if (found != haf.end()) { + found->second += it_haf.second; + } else { + cPOnLayer[cpId][cpLayerId].hits_and_fractions.emplace_back(hitid, it_haf.second); + } + } + } // end of loop through simHits + } // end of loop through simclusters + } // end of loop through caloParticles + +#ifdef EDM_ML_DEBUG + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << "cPOnLayer INFO" << std::endl; + for (size_t cp = 0; cp < cPOnLayer.size(); ++cp) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << "For CaloParticle Idx: " << cp << " we have: " << std::endl; + for (size_t cpp = 0; cpp < cPOnLayer[cp].size(); ++cpp) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << " On Layer: " << cpp << " we have:" << std::endl; + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << " CaloParticleIdx: " << cPOnLayer[cp][cpp].caloParticleId << std::endl; + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << " Energy: " << cPOnLayer[cp][cpp].energy << std::endl; + double tot_energy = 0.; + for (auto const& haf : cPOnLayer[cp][cpp].hits_and_fractions) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << " 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("MultiClusterAssociatorByEnergyScoreImpl") << " Tot Sum haf: " << tot_energy << std::endl; + for (auto const& mc : cPOnLayer[cp][cpp].multiClusterIdToEnergyAndScore) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << " mcIdx/energy/score: " << mc.first << "/" + << mc.second.first << "/" << mc.second.second << std::endl; + } + } + } + + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << "detIdToCaloParticleId_Map INFO" << std::endl; + for (auto const& cp : detIdToCaloParticleId_Map) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << "For detId: " << (uint32_t)cp.first + << " we have found the following connections with CaloParticles:" << std::endl; + for (auto const& cpp : cp.second) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << " CaloParticle Id: " << cpp.clusterId << " with fraction: " << cpp.fraction + << " and energy: " << cpp.fraction * hitMap_->at(cp.first)->energy() << std::endl; + } + } +#endif + + // Fill detIdToMultiClusterId_Map and cpsInMultiCluster; update cPOnLayer + std::unordered_map> detIdToMultiClusterId_Map; + + // this contains the ids of the caloParticles contributing with at least one hit to the multiCluster and the reconstruction error + //cpsInMultiCluster[multicluster][CPids] + //Connects a multiCluster with all related caloParticles. + hgcal::multiClusterToCaloParticle cpsInMultiCluster; + cpsInMultiCluster.resize(nMultiClusters); + + //Loop through multiClusters + for (unsigned int mcId = 0; mcId < nMultiClusters; ++mcId) { + const auto& hits_and_fractions = mClusters[mcId].hitsAndFractions(); + if (!hits_and_fractions.empty()) { + std::unordered_map CPEnergyInMCL; + int maxCPId_byNumberOfHits = -1; + unsigned int maxCPNumberOfHitsInMCL = 0; + int maxCPId_byEnergy = -1; + float maxEnergySharedMCLandCP = 0.f; + float energyFractionOfMCLinCP = 0.f; + float energyFractionOfCPinMCL = 0.f; + + //In case of matched rechit-simhit, so matched + //caloparticle-layercluster-multicluster, we count and save the number of + //recHits related to the maximum energy CaloParticle out of all + //CaloParticles related to that layer cluster and multiCluster. + + std::unordered_map occurrencesCPinMCL; + unsigned int numberOfNoiseHitsInMCL = 0; + unsigned int numberOfHaloHitsInMCL = 0; + unsigned int numberOfHitsInMCL = 0; + + //number of hits related to that cluster + unsigned int numberOfHitsInLC = hits_and_fractions.size(); + numberOfHitsInMCL += numberOfHitsInLC; + std::unordered_map CPEnergyInLC; + + //hitsToCaloParticleId is a vector of ints, one for each recHit of the + //layer cluster under study. If negative, there is no simHit from any CaloParticle related. + //If positive, at least one CaloParticle has been found with matched simHit. + //In more detail: + // 1. hitsToCaloParticleId[hitId] = -3 + // TN: These represent Halo Cells(N) that have not been + // assigned to any CaloParticle (hence the T). + // 2. hitsToCaloParticleId[hitId] = -2 + // FN: There represent Halo Cells(N) that have been assigned + // to a CaloParticle (hence the F, since those should have not been marked as halo) + // 3. hitsToCaloParticleId[hitId] = -1 + // FP: These represent Real Cells(P) that have not been + // assigned to any CaloParticle (hence the F, since these are fakes) + // 4. hitsToCaloParticleId[hitId] >= 0 + // TP There represent Real Cells(P) that have been assigned + // to a CaloParticle (hence the T) + + std::vector hitsToCaloParticleId(numberOfHitsInLC); + //det id of the first hit just to make the lcLayerId variable + //which maps the layers in -z: 0->51 and in +z: 52->103 + const auto firstHitDetId = hits_and_fractions[0].first; + int lcLayerId = recHitTools_->getLayerWithOffset(firstHitDetId) + + layers_ * ((recHitTools_->zside(firstHitDetId) + 1) >> 1) - 1; + + //Loop though the hits of the layer cluster under study + 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; + + //Since the hit is belonging to the layer cluster, it must also be in the recHits map. + const auto itcheck = hitMap_->find(rh_detid); + const auto hit = itcheck->second; + + //Make a map that will connect a detid (that belongs to a recHit of the layer cluster under study, + //no need to save others) with: + //1. the layer clusters that have recHits in that detid + //2. the fraction of the recHit of each layer cluster that contributes to that detid. + //So, something like: + //detid: (layer cluster 1, hit fraction) , (layer cluster 2, hit fraction), (layer cluster 3, hit fraction) ... + //here comparing with the caloParticle map above + auto hit_find_in_LC = detIdToMultiClusterId_Map.find(rh_detid); + if (hit_find_in_LC == detIdToMultiClusterId_Map.end()) { + detIdToMultiClusterId_Map[rh_detid] = std::vector(); + } + detIdToMultiClusterId_Map[rh_detid].emplace_back(hgcal::detIdInfoInMultiCluster{mcId, mcId, rhFraction}); + + // Check whether the recHit of the layer cluster under study has a sim hit in the same cell + auto hit_find_in_CP = detIdToCaloParticleId_Map.find(rh_detid); + + // If the fraction is zero or the hit does not belong to any calo + // particle, set the caloParticleId for the hit to -1 and this will + // contribute to the number of noise hits + if (rhFraction == 0.) { // this could be a real hit that has been marked as halo + hitsToCaloParticleId[hitId] = -2; + numberOfHaloHitsInMCL++; + } + if (hit_find_in_CP == detIdToCaloParticleId_Map.end()) { + hitsToCaloParticleId[hitId] -= 1; + } else { + auto maxCPEnergyInLC = 0.f; + auto maxCPId = -1; + for (auto& h : hit_find_in_CP->second) { + auto shared_fraction = std::min(rhFraction, h.fraction); + //We are in the case where there are caloParticles with simHits connected via detid with the recHit under study + //So, from all layers clusters, find the recHits that are connected with a caloParticle and save/calculate the + //energy of that caloParticle as the sum over all recHits of the recHits energy weighted + //by the caloParticle's fraction related to that recHit. + CPEnergyInMCL[h.clusterId] += shared_fraction * hit->energy(); + //Same but for layer clusters for the cell association per layer + CPEnergyInLC[h.clusterId] += shared_fraction * hit->energy(); + //Here cPOnLayer[caloparticle][layer] described above is set + //Here for multiClusters with matched recHit, the CP fraction times hit energy is added and saved + cPOnLayer[h.clusterId][lcLayerId].multiClusterIdToEnergyAndScore[mcId].first += + shared_fraction * hit->energy(); + cPOnLayer[h.clusterId][lcLayerId].multiClusterIdToEnergyAndScore[mcId].second = FLT_MAX; + //cpsInMultiCluster[multicluster][CPids] + //Connects a multiCluster with all related caloParticles + cpsInMultiCluster[mcId].emplace_back(h.clusterId, FLT_MAX); + //From all CaloParticles related to a layer cluster, we save id and energy of the caloParticle + //that after simhit-rechit matching in layer has the maximum energy. + if (shared_fraction > maxCPEnergyInLC) { + //energy is used only here. cpid is saved for multiClusters + maxCPEnergyInLC = CPEnergyInLC[h.clusterId]; + maxCPId = h.clusterId; + } + } + //Keep in mind here maxCPId could be zero. So, below ask for negative not including zero to count noise. + hitsToCaloParticleId[hitId] = maxCPId; + } + + } //end of loop through recHits of the layer cluster. + + //Loop through all recHits to count how many of them are noise and how many are matched. + //In case of matched rechit-simhit, we count and save the number of recHits related to the maximum energy CaloParticle. + for (auto c : hitsToCaloParticleId) { + if (c < 0) { + numberOfNoiseHitsInMCL++; + } else { + occurrencesCPinMCL[c]++; + } + } + + //Below from all maximum energy CaloParticles, we save the one with the largest amount + //of related recHits. + for (auto& c : occurrencesCPinMCL) { + if (c.second > maxCPNumberOfHitsInMCL) { + maxCPId_byNumberOfHits = c.first; + maxCPNumberOfHitsInMCL = c.second; + } + } + + //Find the CaloParticle that has the maximum energy shared with the multiCluster under study. + for (auto& c : CPEnergyInMCL) { + if (c.second > maxEnergySharedMCLandCP) { + maxCPId_byEnergy = c.first; + maxEnergySharedMCLandCP = c.second; + } + } + //The energy of the CaloParticle that found to have the maximum energy shared with the multiCluster under study. + float totalCPEnergyFromLayerCP = 0.f; + if (maxCPId_byEnergy >= 0) { + //Loop through all layers + for (unsigned int j = 0; j < layers_ * 2; ++j) { + totalCPEnergyFromLayerCP = totalCPEnergyFromLayerCP + cPOnLayer[maxCPId_byEnergy][j].energy; + } + energyFractionOfCPinMCL = maxEnergySharedMCLandCP / totalCPEnergyFromLayerCP; + if (mClusters[mcId].energy() > 0.f) { + energyFractionOfMCLinCP = maxEnergySharedMCLandCP / mClusters[mcId].energy(); + } + } + + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << std::setw(12) << "multiCluster" + << "\t" << std::setw(10) << "mulcl energy" + << "\t" << std::setw(5) << "nhits" + << "\t" << std::setw(12) << "noise hits" + << "\t" << std::setw(22) << "maxCPId_byNumberOfHits" + << "\t" << std::setw(8) << "nhitsCP" + << "\t" << std::setw(16) << "maxCPId_byEnergy" + << "\t" << std::setw(23) << "maxEnergySharedMCLandCP" + << "\t" << std::setw(22) << "totalCPEnergyFromAllLayerCP" + << "\t" << std::setw(22) << "energyFractionOfMCLinCP" + << "\t" << std::setw(25) << "energyFractionOfCPinMCL" + << "\t" << std::endl; + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << std::setw(12) << mcId << "\t" << std::setw(10) << mClusters[mcId].energy() << "\t" << std::setw(5) + << numberOfHitsInMCL << "\t" << std::setw(12) << numberOfNoiseHitsInMCL << "\t" << std::setw(22) + << maxCPId_byNumberOfHits << "\t" << std::setw(8) << maxCPNumberOfHitsInMCL << "\t" << std::setw(16) + << maxCPId_byEnergy << "\t" << std::setw(23) << maxEnergySharedMCLandCP << "\t" << std::setw(22) + << totalCPEnergyFromLayerCP << "\t" << std::setw(22) << energyFractionOfMCLinCP << "\t" << std::setw(25) + << energyFractionOfCPinMCL << std::endl; + } + } // end of loop through multiClusters + + // Update cpsInMultiCluster; compute the score MultiCluster-to-CaloParticle, + // together with the returned AssociationMap + for (unsigned int mcId = 0; mcId < nMultiClusters; ++mcId) { + // find the unique caloParticles id contributing to the multilusters + std::sort(cpsInMultiCluster[mcId].begin(), cpsInMultiCluster[mcId].end()); + auto last = std::unique(cpsInMultiCluster[mcId].begin(), cpsInMultiCluster[mcId].end()); + cpsInMultiCluster[mcId].erase(last, cpsInMultiCluster[mcId].end()); + + const auto& hits_and_fractions = mClusters[mcId].hitsAndFractions(); + unsigned int numberOfHitsInLC = hits_and_fractions.size(); + if (numberOfHitsInLC > 0) { + if (mClusters[mcId].energy() == 0. && !cpsInMultiCluster[mcId].empty()) { + //Loop through all CaloParticles contributing to multiCluster mcId. + for (auto& cpPair : cpsInMultiCluster[mcId]) { + //In case of a multiCluster with zero energy but related CaloParticles the score is set to 1. + cpPair.second = 1.; + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << "multiClusterId : \t " << mcId << "\t CP id : \t" << cpPair.first << "\t score \t " << cpPair.second + << "\n"; + } + continue; + } + + // Compute the correct normalization + float invMultiClusterEnergyWeight = 0.f; + for (auto const& haf : mClusters[mcId].hitsAndFractions()) { + invMultiClusterEnergyWeight += + (haf.second * hitMap_->at(haf.first)->energy()) * (haf.second * hitMap_->at(haf.first)->energy()); + } + invMultiClusterEnergyWeight = 1.f / invMultiClusterEnergyWeight; + + for (unsigned int i = 0; i < numberOfHitsInLC; ++i) { + DetId rh_detid = hits_and_fractions[i].first; + float rhFraction = hits_and_fractions[i].second; + + bool hitWithNoCP = (detIdToCaloParticleId_Map.find(rh_detid) == detIdToCaloParticleId_Map.end()); + + auto itcheck = hitMap_->find(rh_detid); + const HGCRecHit* hit = itcheck->second; + float hitEnergyWeight = hit->energy() * hit->energy(); + + for (auto& cpPair : cpsInMultiCluster[mcId]) { + unsigned int multiClusterId = cpPair.first; + float cpFraction = 0.f; + if (!hitWithNoCP) { + auto findHitIt = std::find(detIdToCaloParticleId_Map[rh_detid].begin(), + detIdToCaloParticleId_Map[rh_detid].end(), + hgcal::detIdInfoInCluster{multiClusterId, 0.f}); + if (findHitIt != detIdToCaloParticleId_Map[rh_detid].end()) + cpFraction = findHitIt->fraction; + } + if (cpPair.second == FLT_MAX) { + cpPair.second = 0.f; + } + cpPair.second += + (rhFraction - cpFraction) * (rhFraction - cpFraction) * hitEnergyWeight * invMultiClusterEnergyWeight; + } + } // End of loop over Hits within a MultiCluster +#ifdef EDM_ML_DEBUG + //In case of a multiCluster with some energy but none related CaloParticles print some info. + if (cpsInMultiCluster[mcId].empty()) + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") << "multiCluster Id: \t" << mcId << "\tCP id:\t-1 " + << "\t score \t-1" + << "\n"; +#endif + } + } // End of loop over MultiClusters + + // Compute the CaloParticle-To-MultiCluster score + for (const auto& cpId : cPSelectedIndices) { + for (unsigned int layerId = 0; layerId < layers_ * 2; ++layerId) { + unsigned int CPNumberOfHits = cPOnLayer[cpId][layerId].hits_and_fractions.size(); + if (CPNumberOfHits == 0) + continue; +#ifdef EDM_ML_DEBUG + int mcWithMaxEnergyInCP = -1; + float maxEnergyMCLperlayerinCP = 0.f; + float CPenergy = cPOnLayer[cpId][layerId].energy; + float CPEnergyFractionInMCLperlayer = 0.f; + for (auto& mc : cPOnLayer[cpId][layerId].multiClusterIdToEnergyAndScore) { + if (mc.second.first > maxEnergyMCLperlayerinCP) { + maxEnergyMCLperlayerinCP = mc.second.first; + mcWithMaxEnergyInCP = mc.first; + } + } + if (CPenergy > 0.f) + CPEnergyFractionInMCLperlayer = maxEnergyMCLperlayerinCP / CPenergy; + + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << std::setw(8) << "LayerId:\t" << std::setw(12) << "caloparticle\t" << std::setw(15) << "cp total energy\t" + << std::setw(15) << "cpEnergyOnLayer\t" << std::setw(14) << "CPNhitsOnLayer\t" << std::setw(18) + << "mcWithMaxEnergyInCP\t" << std::setw(15) << "maxEnergyMCLinCP\t" << std::setw(20) + << "CPEnergyFractionInMCL" + << "\n"; + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << std::setw(8) << layerId << "\t" << std::setw(12) << cpId << "\t" << std::setw(15) + << caloParticles[cpId].energy() << "\t" << std::setw(15) << CPenergy << "\t" << std::setw(14) + << CPNumberOfHits << "\t" << std::setw(18) << mcWithMaxEnergyInCP << "\t" << std::setw(15) + << maxEnergyMCLperlayerinCP << "\t" << std::setw(20) << CPEnergyFractionInMCLperlayer << "\n"; +#endif + + for (unsigned int i = 0; i < CPNumberOfHits; ++i) { + auto& cp_hitDetId = cPOnLayer[cpId][layerId].hits_and_fractions[i].first; + auto& cpFraction = cPOnLayer[cpId][layerId].hits_and_fractions[i].second; + + bool hitWithNoMCL = false; + if (cpFraction == 0.f) + continue; //hopefully this should never happen + auto hit_find_in_MCL = detIdToMultiClusterId_Map.find(cp_hitDetId); + if (hit_find_in_MCL == detIdToMultiClusterId_Map.end()) + hitWithNoMCL = true; + auto itcheck = hitMap_->find(cp_hitDetId); + const HGCRecHit* hit = itcheck->second; + float hitEnergyWeight = hit->energy() * hit->energy(); + for (auto& mcPair : cPOnLayer[cpId][layerId].multiClusterIdToEnergyAndScore) { + unsigned int multiClusterId = mcPair.first; + float mcFraction = 0.f; + + if (!hitWithNoMCL) { + auto findHitIt = std::find(detIdToMultiClusterId_Map[cp_hitDetId].begin(), + detIdToMultiClusterId_Map[cp_hitDetId].end(), + hgcal::detIdInfoInMultiCluster{multiClusterId, 0, 0.f}); + if (findHitIt != detIdToMultiClusterId_Map[cp_hitDetId].end()) + mcFraction = findHitIt->fraction; + } + //Observe here that we do not divide as before by the layer cluster energy weight. We should sum first + //over all layers and divide with the total CP energy over all layers. + if (mcPair.second.second == FLT_MAX) { + mcPair.second.second = 0.f; + } + mcPair.second.second += (mcFraction - cpFraction) * (mcFraction - cpFraction) * hitEnergyWeight; +#ifdef EDM_ML_DEBUG + LogDebug("HGCalValidator") << "multiClusterId:\t" << multiClusterId + << "\tmcfraction,cpfraction:\t" << mcFraction << ", " << cpFraction + << "\thitEnergyWeight:\t" << hitEnergyWeight + << "\tcurrent score numerator:\t" << mcPair.second.second << "\n"; +#endif + } // End of loop over MultiClusters linked to hits of this CaloParticle + } // End of loop over hits of CaloParticle on a Layer +#ifdef EDM_ML_DEBUG + if (cPOnLayer[cpId][layerId].multiClusterIdToEnergyAndScore.empty()) + LogDebug("HGCalValidator") << "CP Id: \t" << cpId << "\t MCL id:\t-1 " + << "\t layer \t " << layerId << " Sub score in \t -1" + << "\n"; + +#endif + } + } + return {cpsInMultiCluster, cPOnLayer}; +} + +hgcal::RecoToSimCollectionWithMultiClusters MultiClusterAssociatorByEnergyScoreImpl::associateRecoToSim( + const edm::Handle& mCCH, const edm::Handle& cPCH) const { + hgcal::RecoToSimCollectionWithMultiClusters returnValue(productGetter_); + const auto& links = makeConnections(mCCH, cPCH); + + const auto& cpsInMultiCluster = std::get<0>(links); + for (size_t mcId = 0; mcId < cpsInMultiCluster.size(); ++mcId) { + for (auto& cpPair : cpsInMultiCluster[mcId]) { + LogDebug("MultiClusterAssociatorByEnergyScoreImpl") + << "multiCluster Id: \t" << mcId << "\t CP id: \t" << cpPair.first << "\t score \t" << cpPair.second << "\n"; + // Fill AssociationMap + returnValue.insert(edm::Ref(mCCH, mcId), // Ref to MC + std::make_pair(edm::Ref(cPCH, cpPair.first), + cpPair.second) // Pair + ); + } + } + return returnValue; +} + +hgcal::SimToRecoCollectionWithMultiClusters MultiClusterAssociatorByEnergyScoreImpl::associateSimToReco( + const edm::Handle& mCCH, const edm::Handle& cPCH) const { + hgcal::SimToRecoCollectionWithMultiClusters returnValue(productGetter_); + const auto& links = makeConnections(mCCH, cPCH); + const auto& cPOnLayer = std::get<1>(links); + for (size_t cpId = 0; cpId < cPOnLayer.size(); ++cpId) { + for (size_t layerId = 0; layerId < cPOnLayer[cpId].size(); ++layerId) { + for (auto& mcPair : cPOnLayer[cpId][layerId].multiClusterIdToEnergyAndScore) { + returnValue.insert( + edm::Ref(cPCH, cpId), // Ref to CP + std::make_pair(edm::Ref(mCCH, mcPair.first), // Pair > + ); + } + } + } + return returnValue; +} diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreImpl.h b/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreImpl.h new file mode 100644 index 0000000000000..c30f7190f0b0e --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreImpl.h @@ -0,0 +1,70 @@ +// Original Author: Leonardo Cristella + +#include +#include +#include +#include // shared_ptr + +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociator.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 caloParticleOnLayer { + unsigned int caloParticleId; + float energy = 0; + std::vector> hits_and_fractions; + std::unordered_map> multiClusterIdToEnergyAndScore; + }; + + typedef std::vector>> multiClusterToCaloParticle; + typedef std::vector> caloParticleToMultiCluster; + typedef std::tuple association; +} // namespace hgcal + +class MultiClusterAssociatorByEnergyScoreImpl : public hgcal::MultiClusterToCaloParticleAssociatorBaseImpl { +public: + explicit MultiClusterAssociatorByEnergyScoreImpl(edm::EDProductGetter const &, + bool, + std::shared_ptr, + const std::unordered_map *&); + + hgcal::RecoToSimCollectionWithMultiClusters associateRecoToSim( + const edm::Handle &mCCH, + const edm::Handle &cPCH) const override; + + hgcal::SimToRecoCollectionWithMultiClusters associateSimToReco( + const edm::Handle &mCCH, + const edm::Handle &cPCH) 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 &mCCH, + const edm::Handle &cPCH) const; +}; diff --git a/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreProducer.cc b/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreProducer.cc new file mode 100644 index 0000000000000..b0ffb0ce9f8b6 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/plugins/MultiClusterAssociatorByEnergyScoreProducer.cc @@ -0,0 +1,67 @@ +// Original author: Leonardo Cristella + +// 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/MultiClusterToCaloParticleAssociator.h" +#include "MultiClusterAssociatorByEnergyScoreImpl.h" + +class MultiClusterAssociatorByEnergyScoreProducer : public edm::global::EDProducer<> { +public: + explicit MultiClusterAssociatorByEnergyScoreProducer(const edm::ParameterSet &); + ~MultiClusterAssociatorByEnergyScoreProducer() 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_; +}; + +MultiClusterAssociatorByEnergyScoreProducer::MultiClusterAssociatorByEnergyScoreProducer(const edm::ParameterSet &ps) + : hitMap_(consumes>(ps.getParameter("hitMapTag"))), + caloGeometry_(esConsumes()), + hardScatterOnly_(ps.getParameter("hardScatterOnly")) { + rhtools_.reset(new hgcal::RecHitTools()); + + // Register the product + produces(); +} + +MultiClusterAssociatorByEnergyScoreProducer::~MultiClusterAssociatorByEnergyScoreProducer() {} + +void MultiClusterAssociatorByEnergyScoreProducer::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 MultiClusterAssociatorByEnergyScoreProducer::fillDescriptions(edm::ConfigurationDescriptions &cfg) { + edm::ParameterSetDescription desc; + desc.add("hitMapTag", edm::InputTag("hgcalRecHitMapProducer")); + desc.add("hardScatterOnly", true); + + cfg.add("multiClusterAssociatorByEnergyScore", desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(MultiClusterAssociatorByEnergyScoreProducer); diff --git a/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py b/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py index ca29d5bd8eb10..956ce90365dba 100644 --- a/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py +++ b/SimCalorimetry/HGCalAssociatorProducers/python/LCToCPAssociation_cfi.py @@ -10,3 +10,7 @@ premix_stage2.toModify(layerClusterCaloParticleAssociation, label_cp = "mixData:MergedCaloTruth" ) + +layerClusterCaloParticleAssociationHFNose = layerClusterCaloParticleAssociation.clone( + label_lc = "hgcalLayerClustersHFNose" +) diff --git a/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py b/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py index 4d2515b0e0191..b070e219ce25a 100644 --- a/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py +++ b/SimCalorimetry/HGCalAssociatorProducers/python/LCToSCAssociation_cfi.py @@ -10,3 +10,7 @@ premix_stage2.toModify(layerClusterSimClusterAssociation, label_scl = "mixData:MergedCaloTruth" ) + +layerClusterSimClusterAssociationHFNose = layerClusterSimClusterAssociation.clone( + label_lcl = "hgcalLayerClustersHFNose" +) diff --git a/SimCalorimetry/HGCalAssociatorProducers/python/MCToCPAssociation_cfi.py b/SimCalorimetry/HGCalAssociatorProducers/python/MCToCPAssociation_cfi.py new file mode 100644 index 0000000000000..7e82345bfa585 --- /dev/null +++ b/SimCalorimetry/HGCalAssociatorProducers/python/MCToCPAssociation_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +multiClusterCaloParticleAssociation = cms.EDProducer("MCToCPAssociatorEDProducer", + associator = cms.InputTag('mcAssocByEnergyScoreProducer'), + label_cp = cms.InputTag("mix","MergedCaloTruth"), + label_mcl = cms.InputTag("ticlMultiClustersFromTrackstersMerge") +) + +from Configuration.ProcessModifiers.premix_stage2_cff import premix_stage2 +premix_stage2.toModify(multiClusterCaloParticleAssociation, + label_cp = "mixData:MergedCaloTruth" +) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index 328596ce06101..82dee6171edf2 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -78,9 +78,14 @@ class HcalTriggerPrimitiveAlgo { HcalTrigPrimDigiCollection& result); void setPeakFinderAlgorithm(int algo); void setWeightsQIE11(const edm::ParameterSet& weightsQIE11); + void setWeightQIE11(int aieta, double weight); void setNCTScaleShift(int); void setRCTScaleShift(int); + void setNumFilterPresamplesHBQIE11(int presamples) { numberOfFilterPresamplesHBQIE11_ = presamples; } + + void setNumFilterPresamplesHEQIE11(int presamples) { numberOfFilterPresamplesHEQIE11_ = presamples; } + void setUpgradeFlags(bool hb, bool he, bool hf); void overrideParameters(const edm::ParameterSet& ps); diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index dd989342c8b2d..d37381344ebfd 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -866,6 +866,12 @@ void HcalTriggerPrimitiveAlgo::setWeightsQIE11(const edm::ParameterSet& weightsQ } } +void HcalTriggerPrimitiveAlgo::setWeightQIE11(int aieta, double weight) { + // Simple map of |ieta| in HBHE to weight + // Only one weight for SOI-1 TS + weightsQIE11_[aieta] = {{weight, 1.0}}; +} + void HcalTriggerPrimitiveAlgo::setPeakFinderAlgorithm(int algo) { if (algo <= 0 || algo > 2) throw cms::Exception("ERROR: Only algo 1 & 2 are supported.") << std::endl; diff --git a/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cff.py b/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cff.py index c35df1b9383a4..5d6a02561e738 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cff.py +++ b/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cff.py @@ -17,8 +17,10 @@ linearLUTs = cms.bool(False), contain1TSHB = cms.bool(False), contain1TSHE = cms.bool(False), - containPhaseNSHE = cms.double(-999.0), - containPhaseNSHB = cms.double(-999.0), + containPhaseNSHE = cms.double(6.0), + containPhaseNSHB = cms.double(6.0), + overrideDBweightsAndFilterHB = cms.bool(False), + overrideDBweightsAndFilterHE = cms.bool(False), tpScales = tpScales, MaskBit = cms.int32(0x8000), FG_HF_thresholds = cms.vuint32(17, 255), diff --git a/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py b/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py index 75d87b5ea569e..b23674110dea7 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py +++ b/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py @@ -81,6 +81,8 @@ cms.InputTag('simHcalUnsuppressedDigis:HBHEQIE11DigiCollection'), cms.InputTag('simHcalUnsuppressedDigis:HFQIE10DigiCollection')), InputTagFEDRaw = cms.InputTag("rawDataCollector"), + overrideDBweightsAndFilterHB = cms.bool(False), + overrideDBweightsAndFilterHE = cms.bool(False), RunZS = cms.bool(False), FrontEndFormatError = cms.bool(False), # Front End Format Error, for real data only PeakFinderAlgorithm = cms.int32(2), diff --git a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc index 9091c938acfa5..6a8f6c2cfdf38 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc +++ b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc @@ -10,7 +10,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "CalibFormats/CaloTPG/interface/HcalTPGCompressor.h" -#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" +#include "CondFormats/HcalObjects/interface/HcalTPChannelParameters.h" #include @@ -40,12 +40,16 @@ HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps) upgrade_ = std::any_of(std::begin(upgrades), std::end(upgrades), [](bool a) { return a; }); legacy_ = std::any_of(std::begin(upgrades), std::end(upgrades), [](bool a) { return !a; }); + overrideDBweightsAndFilterHE_ = ps.getParameter("overrideDBweightsAndFilterHE"); + overrideDBweightsAndFilterHB_ = ps.getParameter("overrideDBweightsAndFilterHB"); + + theAlgo_.setWeightsQIE11(ps.getParameter("weightsQIE11")); + if (ps.exists("parameters")) { auto pset = ps.getUntrackedParameter("parameters"); theAlgo_.overrideParameters(pset); } theAlgo_.setUpgradeFlags(upgrades[0], upgrades[1], upgrades[2]); - theAlgo_.setWeightsQIE11(ps.getParameter("weightsQIE11")); HFEMB_ = false; if (ps.exists("LSConfig")) { @@ -61,6 +65,8 @@ HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps) tok_tpgTranscoder_ = esConsumes(); tok_lutMetadata_ = esConsumes(); tok_trigTowerGeom_ = esConsumes(); + tok_hcalTopo_ = esConsumes(); + // register for data access if (runFrontEndFormatError_) { tok_raw_ = consumes(inputTagFEDRaw_); @@ -76,6 +82,7 @@ HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps) tok_hf_up_ = consumes(inputUpgradeLabel_[1]); } tok_dbService_ = esConsumes(); + tok_dbService_beginRun_ = esConsumes(); produces(); theAlgo_.setPeakFinderAlgorithm(ps.getParameter("PeakFinderAlgorithm")); @@ -85,6 +92,92 @@ HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps) theAlgo_.setRCTScaleShift(hfSS.getParameter("RCTShift")); } +void HcalTrigPrimDigiProducer::beginRun(const edm::Run& run, const edm::EventSetup& eventSetup) { + edm::ESHandle db = eventSetup.getHandle(tok_dbService_beginRun_); + const HcalTopology* topo = &eventSetup.getData(tok_hcalTopo_); + + const HcalElectronicsMap* emap = db->getHcalMapping(); + + int lastHERing = topo->lastHERing(); + int lastHBRing = topo->lastHBRing(); + + // First, determine if we should configure for the filter scheme + // Check the tp version to make this determination + bool foundHB = false; + bool foundHE = false; + bool newHBtp = false; + bool newHEtp = false; + std::vector vIds = emap->allElectronicsIdTrigger(); + for (std::vector::const_iterator eId = vIds.begin(); eId != vIds.end(); eId++) { + // The first HB or HE id is enough to tell whether to use new scheme in HB or HE + if (foundHB and foundHE) + break; + + HcalTrigTowerDetId hcalTTDetId(emap->lookupTrigger(*eId)); + if (hcalTTDetId.null()) + continue; + + int aieta = abs(hcalTTDetId.ieta()); + int tp_version = hcalTTDetId.version(); + + if (aieta <= lastHBRing) { + foundHB = true; + if (tp_version > 1) + newHBtp = true; + } else if (aieta > lastHBRing and aieta < lastHERing) { + foundHE = true; + if (tp_version > 1) + newHEtp = true; + } + } + + std::vector eIds = emap->allElectronicsIdPrecision(); + for (std::vector::const_iterator eId = eIds.begin(); eId != eIds.end(); eId++) { + HcalGenericDetId gid(emap->lookup(*eId)); + if (gid.null() or (gid.genericSubdet() != HcalGenericDetId::HcalGenBarrel and + gid.genericSubdet() != HcalGenericDetId::HcalGenEndcap)) + continue; + + HcalDetId hcalDetId(emap->lookup(*eId)); + if (hcalDetId.null()) + continue; + + int aieta = abs(hcalDetId.ieta()); + + // Do not let ieta 29 in the map + // If the aieta already has a weight in the map, then move on + if (aieta < lastHERing) { + // Filter weight represented in fixed point 8 bit + int fixedPointWeight = db->getHcalTPChannelParameter(hcalDetId)->getauxi1(); + + if (aieta <= lastHBRing) { + // Fix number of filter presamples to one if we are using DB weights + // Size of filter is already known when using DB weights + // Weight from DB represented as 8-bit integer + if (!overrideDBweightsAndFilterHB_) { + if (newHBtp) { + theAlgo_.setNumFilterPresamplesHBQIE11(1); + theAlgo_.setWeightQIE11(aieta, -static_cast(fixedPointWeight) / 256.0); + } else { + theAlgo_.setNumFilterPresamplesHBQIE11(0); + theAlgo_.setWeightQIE11(aieta, 1.0); + } + } + } else if (aieta > lastHBRing) { + if (!overrideDBweightsAndFilterHE_) { + if (newHEtp) { + theAlgo_.setNumFilterPresamplesHEQIE11(1); + theAlgo_.setWeightQIE11(aieta, -static_cast(fixedPointWeight) / 256.0); + } else { + theAlgo_.setNumFilterPresamplesHEQIE11(0); + theAlgo_.setWeightQIE11(aieta, 1.0); + } + } + } + } + } +} + void HcalTrigPrimDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& eventSetup) { // Step A: get the conditions, for the decoding edm::ESHandle inputCoder = eventSetup.getHandle(tok_tpgCoder_); diff --git a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.h b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.h index d39951a5d3bd1..814aaea4ff824 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.h +++ b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.h @@ -18,6 +18,10 @@ #include "CondFormats/DataRecord/interface/HcalLutMetadataRcd.h" #include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" + #include class HcalTrigPrimDigiProducer : public edm::stream::EDProducer<> { @@ -26,6 +30,7 @@ class HcalTrigPrimDigiProducer : public edm::stream::EDProducer<> { ~HcalTrigPrimDigiProducer() override {} /**Produces the EDM products,*/ + void beginRun(const edm::Run& r, const edm::EventSetup& c) override; void produce(edm::Event& e, const edm::EventSetup& c) override; private: @@ -41,6 +46,9 @@ class HcalTrigPrimDigiProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT tok_hbhe_; edm::EDGetTokenT tok_hf_; + bool overrideDBweightsAndFilterHE_; + bool overrideDBweightsAndFilterHB_; + /// input tag for FEDRawDataCollection edm::InputTag inputTagFEDRaw_; edm::EDGetTokenT tok_raw_; @@ -59,7 +67,9 @@ class HcalTrigPrimDigiProducer : public edm::stream::EDProducer<> { edm::ESGetToken tok_tpgTranscoder_; edm::ESGetToken tok_lutMetadata_; edm::ESGetToken tok_trigTowerGeom_; + edm::ESGetToken tok_hcalTopo_; edm::ESGetToken tok_dbService_; + edm::ESGetToken tok_dbService_beginRun_; }; #endif diff --git a/SimDataFormats/Associations/BuildFile.xml b/SimDataFormats/Associations/BuildFile.xml index e37183b230928..f060052c1bfd0 100644 --- a/SimDataFormats/Associations/BuildFile.xml +++ b/SimDataFormats/Associations/BuildFile.xml @@ -1,6 +1,7 @@ + diff --git a/SimDataFormats/Associations/interface/L1TrackTruthPair.h b/SimDataFormats/Associations/interface/L1TrackTruthPair.h new file mode 100644 index 0000000000000..4f10fb23e347c --- /dev/null +++ b/SimDataFormats/Associations/interface/L1TrackTruthPair.h @@ -0,0 +1,11 @@ +#ifndef SimDataFormats_Associations_L1TrackTruthPair_h +#define SimDataFormats_Associations_L1TrackTruthPair_h + +#include "SimDataFormats/Associations/interface/TTTrackTruthPair.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include + +using L1TrackTruthPair = TTTrackTruthPair; +using L1TrackTruthPairCollection = std::vector; + +#endif diff --git a/SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociator.h b/SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociator.h new file mode 100644 index 0000000000000..6e9979ace3814 --- /dev/null +++ b/SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociator.h @@ -0,0 +1,50 @@ +#ifndef SimDataFormats_Associations_MultiClusterToCaloParticleAssociator_h +#define SimDataFormats_Associations_MultiClusterToCaloParticleAssociator_h +// Original Author: Leonardo Cristella + +// system include files +#include + +// user include files + +#include "SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociatorBaseImpl.h" + +// forward declarations + +namespace hgcal { + + class MultiClusterToCaloParticleAssociator { + public: + MultiClusterToCaloParticleAssociator(std::unique_ptr); + MultiClusterToCaloParticleAssociator() = default; + MultiClusterToCaloParticleAssociator(MultiClusterToCaloParticleAssociator &&) = default; + MultiClusterToCaloParticleAssociator &operator=(MultiClusterToCaloParticleAssociator &&) = default; + ~MultiClusterToCaloParticleAssociator() = default; + + // ---------- const member functions --------------------- + /// Associate a MultiCluster to CaloParticles + hgcal::RecoToSimCollectionWithMultiClusters associateRecoToSim( + const edm::Handle &cCCH, + const edm::Handle &cPCH) const { + return m_impl->associateRecoToSim(cCCH, cPCH); + }; + + /// Associate a CaloParticle to MultiClusters + hgcal::SimToRecoCollectionWithMultiClusters associateSimToReco( + const edm::Handle &cCCH, + const edm::Handle &cPCH) const { + return m_impl->associateSimToReco(cCCH, cPCH); + } + + private: + MultiClusterToCaloParticleAssociator(const MultiClusterToCaloParticleAssociator &) = delete; // stop default + + const MultiClusterToCaloParticleAssociator &operator=(const MultiClusterToCaloParticleAssociator &) = + delete; // stop default + + // ---------- member data -------------------------------- + std::unique_ptr m_impl; + }; +} // namespace hgcal + +#endif diff --git a/SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociatorBaseImpl.h b/SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociatorBaseImpl.h new file mode 100644 index 0000000000000..6d21a51cea9f3 --- /dev/null +++ b/SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociatorBaseImpl.h @@ -0,0 +1,47 @@ +#ifndef SimDataFormats_Associations_MultiClusterToCaloParticleAssociatorBaseImpl_h +#define SimDataFormats_Associations_MultiClusterToCaloParticleAssociatorBaseImpl_h + +/** \class MultiClusterToCaloParticleAssociatorBaseImpl + * + * Base class for MultiClusterToCaloParticleAssociators. Methods take as input + * the handle of MultiClusters and the CaloParticle collections and return an + * AssociationMap (oneToManyWithQuality) + * + * \author Leonardo Cristella + */ + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Common/interface/AssociationMap.h" +#include "DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h" + +#include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h" + +namespace hgcal { + + typedef edm::AssociationMap< + edm::OneToManyWithQualityGeneric>> + SimToRecoCollectionWithMultiClusters; + typedef edm::AssociationMap< + edm::OneToManyWithQualityGeneric> + RecoToSimCollectionWithMultiClusters; + + class MultiClusterToCaloParticleAssociatorBaseImpl { + public: + /// Constructor + MultiClusterToCaloParticleAssociatorBaseImpl(); + /// Destructor + virtual ~MultiClusterToCaloParticleAssociatorBaseImpl(); + + /// Associate a MultiCluster to CaloParticles + virtual hgcal::RecoToSimCollectionWithMultiClusters associateRecoToSim( + const edm::Handle &cCH, + const edm::Handle &cPCH) const; + + /// Associate a CaloParticle to MultiClusters + virtual hgcal::SimToRecoCollectionWithMultiClusters associateSimToReco( + const edm::Handle &cCH, + const edm::Handle &cPCH) const; + }; +} // namespace hgcal + +#endif diff --git a/SimDataFormats/Associations/interface/TTTrackTruthPair.h b/SimDataFormats/Associations/interface/TTTrackTruthPair.h new file mode 100644 index 0000000000000..21313a427e13e --- /dev/null +++ b/SimDataFormats/Associations/interface/TTTrackTruthPair.h @@ -0,0 +1,39 @@ +#ifndef SimDataFormats_Associations_TTrackTruthPair_h +#define SimDataFormats_Associations_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/SimDataFormats/Associations/plugins/BuildFile.xml b/SimDataFormats/Associations/plugins/BuildFile.xml index bd62ae6ee8f1b..e888567eb5723 100644 --- a/SimDataFormats/Associations/plugins/BuildFile.xml +++ b/SimDataFormats/Associations/plugins/BuildFile.xml @@ -1,5 +1,6 @@ + diff --git a/SimDataFormats/Associations/plugins/MCToCPAssociatorEDProducer.cc b/SimDataFormats/Associations/plugins/MCToCPAssociatorEDProducer.cc new file mode 100644 index 0000000000000..4cf5d8d3f79d8 --- /dev/null +++ b/SimDataFormats/Associations/plugins/MCToCPAssociatorEDProducer.cc @@ -0,0 +1,94 @@ +// +// Original Author: Leonardo Cristella +// Created: Tue Feb 2 10:52:11 CET 2021 +// +// + +// 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/MultiClusterToCaloParticleAssociator.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h" +#include "DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h" + +#include "FWCore/Utilities/interface/EDGetToken.h" + +// +// class decleration +// + +class MCToCPAssociatorEDProducer : public edm::global::EDProducer<> { +public: + explicit MCToCPAssociatorEDProducer(const edm::ParameterSet &); + ~MCToCPAssociatorEDProducer() override; + +private: + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; + + edm::EDGetTokenT CPCollectionToken_; + edm::EDGetTokenT MCCollectionToken_; + edm::EDGetTokenT associatorToken_; +}; + +MCToCPAssociatorEDProducer::MCToCPAssociatorEDProducer(const edm::ParameterSet &pset) { + produces(); + produces(); + + CPCollectionToken_ = consumes(pset.getParameter("label_cp")); + MCCollectionToken_ = consumes(pset.getParameter("label_mcl")); + associatorToken_ = + consumes(pset.getParameter("associator")); +} + +MCToCPAssociatorEDProducer::~MCToCPAssociatorEDProducer() {} + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void MCToCPAssociatorEDProducer::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 MCCollection; + iEvent.getByToken(MCCollectionToken_, MCCollection); + + // associate MutiCluster and CP + LogTrace("AssociatorValidator") << "Calling associateRecoToSim method" + << "\n"; + hgcal::RecoToSimCollectionWithMultiClusters recSimColl = + theAssociator->associateRecoToSim(MCCollection, CPCollection); + + LogTrace("AssociatorValidator") << "Calling associateSimToReco method" + << "\n"; + hgcal::SimToRecoCollectionWithMultiClusters simRecColl = + theAssociator->associateSimToReco(MCCollection, 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(MCToCPAssociatorEDProducer); diff --git a/SimDataFormats/Associations/src/MultiClusterToCaloParticleAssociator.cc b/SimDataFormats/Associations/src/MultiClusterToCaloParticleAssociator.cc new file mode 100644 index 0000000000000..5b13f8ef8a4ae --- /dev/null +++ b/SimDataFormats/Associations/src/MultiClusterToCaloParticleAssociator.cc @@ -0,0 +1,7 @@ +// Original Author: Leonardo Cristella + +#include "SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociator.h" + +hgcal::MultiClusterToCaloParticleAssociator::MultiClusterToCaloParticleAssociator( + std::unique_ptr ptr) + : m_impl(std::move(ptr)) {} diff --git a/SimDataFormats/Associations/src/MultiClusterToCaloParticleAssociatorBaseImpl.cc b/SimDataFormats/Associations/src/MultiClusterToCaloParticleAssociatorBaseImpl.cc new file mode 100644 index 0000000000000..3b9768beae315 --- /dev/null +++ b/SimDataFormats/Associations/src/MultiClusterToCaloParticleAssociatorBaseImpl.cc @@ -0,0 +1,21 @@ +// Original Author: Leonardo Cristella + +#include "SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociatorBaseImpl.h" + +namespace hgcal { + MultiClusterToCaloParticleAssociatorBaseImpl::MultiClusterToCaloParticleAssociatorBaseImpl(){}; + MultiClusterToCaloParticleAssociatorBaseImpl::~MultiClusterToCaloParticleAssociatorBaseImpl(){}; + + hgcal::RecoToSimCollectionWithMultiClusters MultiClusterToCaloParticleAssociatorBaseImpl::associateRecoToSim( + const edm::Handle &cCCH, + const edm::Handle &cPCH) const { + return hgcal::RecoToSimCollectionWithMultiClusters(); + } + + hgcal::SimToRecoCollectionWithMultiClusters MultiClusterToCaloParticleAssociatorBaseImpl::associateSimToReco( + const edm::Handle &cCCH, + const edm::Handle &cPCH) const { + return hgcal::SimToRecoCollectionWithMultiClusters(); + } + +} // namespace hgcal diff --git a/SimDataFormats/Associations/src/TTTrackTruthPair.cc b/SimDataFormats/Associations/src/TTTrackTruthPair.cc new file mode 100644 index 0000000000000..16726063a6d2f --- /dev/null +++ b/SimDataFormats/Associations/src/TTTrackTruthPair.cc @@ -0,0 +1 @@ +#include "SimDataFormats/Associations/interface/TTTrackTruthPair.h" diff --git a/SimDataFormats/Associations/src/classes.h b/SimDataFormats/Associations/src/classes.h index 6e12db392a0a9..27b28165ecd4f 100644 --- a/SimDataFormats/Associations/src/classes.h +++ b/SimDataFormats/Associations/src/classes.h @@ -8,6 +8,8 @@ #include "SimDataFormats/Associations/interface/VertexToTrackingVertexAssociator.h" #include "SimDataFormats/Associations/interface/LayerClusterToCaloParticleAssociator.h" #include "SimDataFormats/Associations/interface/LayerClusterToSimClusterAssociator.h" +#include "SimDataFormats/Associations/interface/MultiClusterToCaloParticleAssociator.h" +#include "SimDataFormats/Associations/interface/TTTrackTruthPair.h" namespace SimDataFormats_Associations { struct SimDataFormats_Associations { @@ -22,6 +24,8 @@ namespace SimDataFormats_Associations { edm::Wrapper dummy6; + edm::Wrapper dummy7; + 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 3c66509430337..d78328e1707ee 100644 --- a/SimDataFormats/Associations/src/classes_def.xml +++ b/SimDataFormats/Associations/src/classes_def.xml @@ -15,6 +15,9 @@ + + + @@ -24,6 +27,7 @@ + @@ -38,6 +42,7 @@ + @@ -49,4 +54,22 @@ + + + + + + + + + + + + + + + + + +
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/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/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/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/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/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 deleted file mode 100644 index 3d9db25dc4883..0000000000000 --- a/SimDataFormats/JetMatching/BuildFile.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/SimDataFormats/JetMatching/src/classes.h b/SimDataFormats/JetMatching/src/classes.h deleted file mode 100644 index 81a47ad97108e..0000000000000 --- a/SimDataFormats/JetMatching/src/classes.h +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -#include "DataFormats/Common/interface/Wrapper.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" -#include "SimDataFormats/JetMatching/interface/MatchedPartons.h" -#include "SimDataFormats/JetMatching/interface/JetMatchedPartons.h" 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/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/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/CaloSD.cc b/SimG4CMS/Calo/src/CaloSD.cc index 56de27a218f80..e3ef252b27292 100644 --- a/SimG4CMS/Calo/src/CaloSD.cc +++ b/SimG4CMS/Calo/src/CaloSD.cc @@ -22,9 +22,9 @@ #include "G4VProcess.hh" #include "G4GFlashSpot.hh" #include "G4ParticleTable.hh" - #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" +#include "DD4hep/Filter.h" #include #include @@ -50,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; @@ -73,6 +75,8 @@ CaloSD::CaloSD(const std::string& name, 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); @@ -128,7 +132,8 @@ CaloSD::CaloSD(const std::string& name, G4LogicalVolume* lv = nullptr; 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; } diff --git a/SimG4CMS/Calo/src/CaloTrkProcessing.cc b/SimG4CMS/Calo/src/CaloTrkProcessing.cc index 16900a1e99f06..9aa88f201e7d6 100644 --- a/SimG4CMS/Calo/src/CaloTrkProcessing.cc +++ b/SimG4CMS/Calo/src/CaloTrkProcessing.cc @@ -17,6 +17,7 @@ #include "G4Step.hh" #include "G4Track.hh" #include "G4SystemOfUnits.hh" +#include "DD4hep/Filter.h" #include //#define EDM_ML_DEBUG @@ -28,6 +29,8 @@ 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; @@ -37,6 +40,8 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, 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: Initialised with TestBeam = " << testBeam_ << " Emin = " << eMin_ << " Flags " << putHistory_ << " (History), " << doFineCalo_ << " (Special Calorimeter)"; @@ -60,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]; @@ -69,7 +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") << " (" << 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; @@ -131,7 +138,8 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, G4LogicalVolume* lv = nullptr; 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; } @@ -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 " @@ -279,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(); @@ -418,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/HFFibre.cc b/SimG4CMS/Calo/src/HFFibre.cc index dde911db22e78..78ee32ea90403 100644 --- a/SimG4CMS/Calo/src/HFFibre.cc +++ b/SimG4CMS/Calo/src/HFFibre.cc @@ -18,7 +18,8 @@ HFFibre::HFFibre(const std::string& name, const HcalSimulationParameters* hps, edm::ParameterSet const& p) : hcalConstant_(hcons), hcalsimpar_(hps) { - edm::ParameterSet m_HF = p.getParameter("HFShower"); + edm::ParameterSet m_HF = + (p.getParameter("HFShower")).getParameter("HFShowerBlock"); cFibre = c_light * (m_HF.getParameter("CFibre")); edm::LogVerbatim("HFShower") << "HFFibre:: Speed of light in fibre " << cFibre << " m/ns"; diff --git a/SimG4CMS/Calo/src/HFShower.cc b/SimG4CMS/Calo/src/HFShower.cc index aaa2e0a6dff4e..729b035b56d2c 100644 --- a/SimG4CMS/Calo/src/HFShower.cc +++ b/SimG4CMS/Calo/src/HFShower.cc @@ -26,7 +26,8 @@ HFShower::HFShower(const std::string &name, : hcalConstant_(hcons), chkFibre_(chk) { edm::ParameterSet m_HF = p.getParameter("HFShower"); applyFidCut_ = m_HF.getParameter("ApplyFiducialCut"); - probMax_ = m_HF.getParameter("ProbMax"); + edm::ParameterSet m_HF2 = m_HF.getParameter("HFShowerBlock"); + probMax_ = m_HF2.getParameter("ProbMax"); edm::LogVerbatim("HFShower") << "HFShower:: Maximum probability cut off " << probMax_ << " Check flag " << chkFibre_; diff --git a/SimG4CMS/Calo/src/HFShowerLibrary.cc b/SimG4CMS/Calo/src/HFShowerLibrary.cc index 6226ea3d0ae4f..a4e5f18e14790 100644 --- a/SimG4CMS/Calo/src/HFShowerLibrary.cc +++ b/SimG4CMS/Calo/src/HFShowerLibrary.cc @@ -25,10 +25,12 @@ HFShowerLibrary::HFShowerLibrary(const std::string& name, const HcalSimulationParameters* hps, edm::ParameterSet const& p) : hcalConstant_(hcons), hf(nullptr), emBranch(nullptr), hadBranch(nullptr), npe(0) { - edm::ParameterSet m_HF = p.getParameter("HFShower"); + edm::ParameterSet m_HF = + (p.getParameter("HFShower")).getParameter("HFShowerBlock"); probMax = m_HF.getParameter("ProbMax"); - edm::ParameterSet m_HS = p.getParameter("HFShowerLibrary"); + edm::ParameterSet m_HS = + (p.getParameter("HFShowerLibrary")).getParameter("HFLibraryFileBlock"); edm::FileInPath fp = m_HS.getParameter("FileName"); std::string pTreeName = fp.fullPath(); backProb = m_HS.getParameter("BackProbability"); diff --git a/SimG4CMS/Calo/src/HFShowerParam.cc b/SimG4CMS/Calo/src/HFShowerParam.cc index 22a6a56062076..debb8bc48500e 100644 --- a/SimG4CMS/Calo/src/HFShowerParam.cc +++ b/SimG4CMS/Calo/src/HFShowerParam.cc @@ -32,12 +32,13 @@ HFShowerParam::HFShowerParam(const std::string& name, edm::ParameterSet const& p) : hcalConstants_(hcons), fillHisto_(false) { edm::ParameterSet m_HF = p.getParameter("HFShower"); + edm::ParameterSet m_HF2 = m_HF.getParameter("HFShowerBlock"); pePerGeV_ = m_HF.getParameter("PEPerGeV"); trackEM_ = m_HF.getParameter("TrackEM"); bool useShowerLibrary = m_HF.getParameter("UseShowerLibrary"); bool useGflash = m_HF.getParameter("UseHFGflash"); edMin_ = m_HF.getParameter("EminLibrary"); - onlyLong_ = m_HF.getParameter("OnlyLong"); + onlyLong_ = m_HF2.getParameter("OnlyLong"); ref_index_ = m_HF.getParameter("RefIndex"); double lambdaMean = m_HF.getParameter("LambdaMean"); aperture_ = cos(asin(m_HF.getParameter("Aperture"))); 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 335a93d13c736..12f5efa797906 100644 --- a/SimG4CMS/Calo/src/HGCalNumberingScheme.cc +++ b/SimG4CMS/Calo/src/HGCalNumberingScheme.cc @@ -77,7 +77,7 @@ uint32_t HGCalNumberingScheme::getUnitID(int layer, int module, int cell, int iz std::array id = hgcons_.assignCellTrap(pos.x(), pos.y(), pos.z(), layer, false); if (id[2] >= 0) { std::pair typm = hgcons_.tileType(layer, id[0], 0); - HGCScintillatorDetId detId(id[2], layer, iz * id[0], id[1]); + HGCScintillatorDetId detId(id[2], layer, iz * id[0], id[1], false, 0); if (typm.first >= 0) { detId.setType(typm.first); detId.setSiPM(typm.second); diff --git a/SimG4CMS/Calo/test/python/runEta13_cfg.py b/SimG4CMS/Calo/test/python/runEta13_cfg.py index b38e9a74d2611..e13ca581818d1 100644 --- a/SimG4CMS/Calo/test/python/runEta13_cfg.py +++ b/SimG4CMS/Calo/test/python/runEta13_cfg.py @@ -1,17 +1,23 @@ 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.G4cerr=dict() @@ -21,10 +27,6 @@ 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 580ef363633fa..2c3fc7cd51a15 100644 --- a/SimG4CMS/Calo/test/python/runEta2_cfg.py +++ b/SimG4CMS/Calo/test/python/runEta2_cfg.py @@ -1,21 +1,24 @@ 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.G4cerr=dict() diff --git a/SimG4CMS/Calo/test/python/runEta37_cfg.py b/SimG4CMS/Calo/test/python/runEta37_cfg.py new file mode 100644 index 0000000000000..7d8c8477aa75b --- /dev/null +++ b/SimG4CMS/Calo/test/python/runEta37_cfg.py @@ -0,0 +1,78 @@ +import FWCore.ParameterSet.Config as cms + +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("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', '') + +process.MessageLogger.cerr.FwkReport.reportEvery = 5 +if hasattr(process,'MessageLogger'): + process.MessageLogger.G4cerr=dict() + process.MessageLogger.HcalSim=dict() + process.MessageLogger.HFShower=dict() + +process.load("IOMC.RandomEngine.IOMC_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 456789 +process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 +process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(5) +) + +process.source = cms.Source("EmptySource") + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(211), + MinEta = cms.double(4.25), + MaxEta = cms.double(4.25), + MinPhi = cms.double(-3.14159265359), + MaxPhi = cms.double(3.14159265359), + MinE = cms.double(30.0), + MaxE = cms.double(30.0) + ), + Verbosity = cms.untracked.int32(0), + AddAntiParticle = cms.bool(False), + firstRun = cms.untracked.uint32(1) +) + +process.output = cms.OutputModule("PoolOutputModule", + process.FEVTSIMEventContent, + fileName = cms.untracked.string('simevent030eta37.root') +) + +process.Timing = cms.Service("Timing") + +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.out_step = cms.EndPath(process.output) + +process.g4SimHits.Physics.type = 'SimG4Core/Physics/FTFP_BERT_EMM' +#process.g4SimHits.G4Commands = ['/tracking/verbose 1'] + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step, + process.simulation_step, + process.out_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/Calo/test/python/runEta7_cfg.py b/SimG4CMS/Calo/test/python/runEta7_cfg.py index 61e8dd4ef147c..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.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/runHGC4_cfg.py b/SimG4CMS/Calo/test/python/runHGC4_cfg.py index d5c0196538979..3fa07935f620c 100644 --- a/SimG4CMS/Calo/test/python/runHGC4_cfg.py +++ b/SimG4CMS/Calo/test/python/runHGC4_cfg.py @@ -4,12 +4,13 @@ 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'] @@ -18,6 +19,7 @@ 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") @@ -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,6 +63,7 @@ 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' @@ -73,10 +78,12 @@ process.g4SimHits.CaloSD.EminFineTrack = 1000.0 process.g4SimHits.CaloTrkProcessing.EminFineTrack = 1000.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/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/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/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/SimG4Core/Application/interface/TrackingAction.h b/SimG4Core/Application/interface/TrackingAction.h index fdbbe613c7c34..e65176435570d 100644 --- a/SimG4Core/Application/interface/TrackingAction.h +++ b/SimG4Core/Application/interface/TrackingAction.h @@ -36,6 +36,7 @@ class TrackingAction : public G4UserTrackingAction { const G4Track* g4Track_; bool checkTrack_; bool doFineCalo_; + bool saveCaloBoundaryInformation_; double eMinFine_; }; diff --git a/SimG4Core/Application/python/g4SimHits_cfi.py b/SimG4Core/Application/python/g4SimHits_cfi.py index b54b28eaae131..c820f25a472fb 100644 --- a/SimG4Core/Application/python/g4SimHits_cfi.py +++ b/SimG4Core/Application/python/g4SimHits_cfi.py @@ -5,6 +5,9 @@ ## HF Raddam Dose Class in /SimG4CMS/Calo from SimG4CMS.Calo.HFDarkeningParams_cff import * +## HF shower parameters +from Geometry.HcalSimData.HFParameters_cff import * + ## This object is used to customise g4SimHits for different running scenarios common_heavy_suppression = cms.PSet( @@ -37,15 +40,16 @@ ) 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'), + FineCaloNames = cms.vstring('ECAL', 'HCal', 'HGCal', 'HFNoseVol', 'VCAL'), FineCaloLevels = cms.vint32(4, 4, 8, 3, 3), UseFineCalo = cms.vint32(2, 3), ) @@ -56,6 +60,12 @@ 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), @@ -387,14 +397,11 @@ HFShower = cms.PSet( common_UsePMT, common_UseHF, - ProbMax = cms.double(1.0), - CFibre = cms.double(0.5), PEPerGeV = cms.double(0.31), TrackEM = cms.bool(False), UseShowerLibrary = cms.bool(True), UseHFGflash = cms.bool(False), EminLibrary = cms.double(0.0), - OnlyLong = cms.bool(True), LambdaMean = cms.double(350.0), ApplyFiducialCut = cms.bool(True), RefIndex = cms.double(1.459), @@ -402,18 +409,11 @@ ApertureTrapped = cms.double(0.22), CosApertureTrapped= cms.double(0.5), SinPsiMax = cms.untracked.double(0.5), - ParametrizeLast = cms.untracked.bool(False) + ParametrizeLast = cms.untracked.bool(False), + HFShowerBlock = cms.PSet(refToPSet_ = cms.string("HFShowerBlock")) ), HFShowerLibrary = cms.PSet( - FileName = cms.FileInPath('SimG4CMS/Calo/data/HFShowerLibrary_oldpmt_noatt_eta4_16en_v3.root'), - BackProbability = cms.double(0.2), - TreeEMID = cms.string('emParticles'), - TreeHadID = cms.string('hadParticles'), - Verbosity = cms.untracked.bool(False), - ApplyFiducialCut= cms.bool(True), - BranchPost = cms.untracked.string(''), - BranchEvt = cms.untracked.string(''), - BranchPre = cms.untracked.string('') + HFLibraryFileBlock = cms.PSet(refToPSet_ = cms.string("HFLibraryFileBlock")) ), HFShowerPMT = cms.PSet( common_UsePMT, @@ -597,8 +597,6 @@ ## Change the HFShowerLibrary file from Run 2 ## from Configuration.Eras.Modifier_run2_common_cff import run2_common -run2_common.toModify( g4SimHits.HFShowerLibrary, FileName = 'SimG4CMS/Calo/data/HFShowerLibrary_npmt_noatt_eta4_16en_v4.root' ) -run2_common.toModify( g4SimHits.HFShower, ProbMax = 0.5) ## ## Change HCAL numbering scheme in 2017 diff --git a/SimG4Core/Application/src/RunManagerMTWorker.cc b/SimG4Core/Application/src/RunManagerMTWorker.cc index 2d6ce2256c013..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" @@ -68,6 +67,7 @@ #include #include #include +#include "tbb/task_arena.h" static std::once_flag applyOnce; thread_local bool RunManagerMTWorker::dumpMF = false; @@ -196,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; diff --git a/SimG4Core/Application/src/TrackingAction.cc b/SimG4Core/Application/src/TrackingAction.cc index 249585d2d27bd..174a256d2b15a 100644 --- a/SimG4Core/Application/src/TrackingAction.cc +++ b/SimG4Core/Application/src/TrackingAction.cc @@ -23,6 +23,7 @@ TrackingAction::TrackingAction(EventAction* e, const edm::ParameterSet& p, CMSSt g4Track_(nullptr), checkTrack_(p.getUntrackedParameter("CheckTrack", false)), doFineCalo_(p.getParameter("DoFineCalo")), + saveCaloBoundaryInformation_(p.getParameter("SaveCaloBoundaryInformation")), eMinFine_(p.getParameter("EminFineTrack") * CLHEP::MeV) {} TrackingAction::~TrackingAction() {} @@ -103,7 +104,12 @@ void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) { } } - if (extractor_(aTrack).storeTrack() || currentTrack_->saved()) { + 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(); eventAction_->addTkCaloStateInfo(id, p); diff --git a/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc b/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc index 06d7bd67d3974..f7024f6a5023f 100644 --- a/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc +++ b/SimG4Core/Geometry/src/DD4hep_DDG4Builder.cc @@ -46,13 +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::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 4088757965a6f..fe3c068f84a31 100644 --- a/SimG4Core/Geometry/src/DDG4ProductionCuts.cc +++ b/SimG4Core/Geometry/src/DDG4ProductionCuts.cc @@ -11,6 +11,7 @@ #include "G4RegionStore.hh" #include "G4Region.hh" #include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" #include @@ -112,7 +113,10 @@ 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) { const std::string_view selection = dd4hep::dd::noNamespace(dd4hep::dd::realTopName(pit)); @@ -121,10 +125,15 @@ void DDG4ProductionCuts::dd4hepInitialize() { ? 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); @@ -132,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"; diff --git a/SimG4Core/Notification/interface/SimActivityRegistry.h b/SimG4Core/Notification/interface/SimActivityRegistry.h index 66ff4bda24291..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" diff --git a/SimG4Core/Notification/interface/SimActivityRegistryEnroller.h b/SimG4Core/Notification/interface/SimActivityRegistryEnroller.h index 6c74b3f3611e7..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,47 +29,36 @@ 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); + static void enroll(SimActivityRegistry& iReg, T* 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); - } - }; + 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); } // stop default 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/PrintGeomInfo/interface/PrintGeomInfoAction.h b/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h index 813305158f308..769c384d34321 100644 --- a/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h +++ b/SimG4Core/PrintGeomInfo/interface/PrintGeomInfoAction.h @@ -39,10 +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(); @@ -53,7 +54,7 @@ class PrintGeomInfoAction : public SimWatcher, public Observer names_; G4VPhysicalVolume* theTopPV_; G4NavigationHistory fHistory_; diff --git a/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc b/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc index f0094127037a1..cd93c2609d491 100644 --- a/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc +++ b/SimG4Core/PrintGeomInfo/src/PrintGeomInfoAction.cc @@ -16,7 +16,8 @@ #include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" -#include +#include "DD4hep/DD4hepUnits.h" +#include "DD4hep/Filter.h" #include "G4Run.hh" #include "G4PhysicalVolumeStore.hh" @@ -30,9 +31,11 @@ #include "G4UserLimits.hh" #include "G4TransportationManager.hh" +#include #include -#include #include +#include +#include using angle_units::operators::convertRadToDeg; @@ -58,6 +61,7 @@ PrintGeomInfoAction::PrintGeomInfoAction(const edm::ParameterSet &p) { 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 " @@ -67,10 +71,9 @@ PrintGeomInfoAction::PrintGeomInfoAction(const edm::ParameterSet &p) { << "\n " << " Touchable " << dumpTouch_ << " for names (0-" << nchar_ << ") = " << name_ << "\n " - << " Sensitive " << dumpSense_ << " for " << names_.size() << " names:" - << "\n " - << " Files " << fileMat_ << ":" << fileSolid_ << ":" - << ":" << fileLV_ << ":" << filePV_; + << " 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; @@ -232,43 +235,6 @@ void PrintGeomInfoAction::dumpG4LVLeaf(G4LogicalVolume *lv, dumpG4LVLeaf((cite->first), leafDepth + 1, (cite->second), out); } -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(); - } - } -} - int PrintGeomInfoAction::countNoTouchables() { int nTouch = 0; G4LogicalVolume *lv = getTopLV(); @@ -424,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) @@ -455,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; @@ -464,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/python/g4OverlapCheck_cfg.py b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck_cfg.py index eb799cf182ada..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.HCalGeom=dict() +#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 cfcc41194b1db..a5b840de3c96d 100644 --- a/SimG4Core/PrintGeomInfo/test/python/runDD4HEP_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/runDD4HEP_cfg.py @@ -1,17 +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('Configuration.Geometry.GeometryDD4hepExtended2021_cff') -process.load('Geometry.CMSCommonData.cmsExtendedGeometry2021XML_cfi') -process.load('Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi') -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') -process.load("Geometry.MuonNumbering.muonGeometryConstants_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') from SimG4Core.PrintGeomInfo.g4PrintGeomInfo_cfi import * @@ -21,47 +16,26 @@ if hasattr(process,'MessageLogger'): process.MessageLogger.G4cerr=dict() process.MessageLogger.G4cout=dict() - - -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 = cms.VPSet(cms.PSet( DumpSummary = cms.untracked.bool(True), - DumpLVTree = cms.untracked.bool(True), + DumpLVTree = cms.untracked.bool(False), DumpMaterial = cms.untracked.bool(False), - DumpLVList = cms.untracked.bool(True), + DumpLVList = cms.untracked.bool(False), DumpLV = cms.untracked.bool(False), - DumpSolid = cms.untracked.bool(True), + 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(True), - DumpSense = cms.untracked.bool(True), + DumpTouch = cms.untracked.bool(False), + DumpSense = cms.untracked.bool(False), DD4Hep = cms.untracked.bool(True), - Name = cms.untracked.string('csc:ME11*'), - Names = cms.untracked.vstring('EcalHitsEB'), + 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') )) - -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) diff --git a/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py b/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py index 61d540483036f..18af92f3380bd 100644 --- a/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py +++ b/SimG4Core/PrintGeomInfo/test/python/runDDD_cfg.py @@ -1,8 +1,18 @@ import FWCore.ParameterSet.Config as cms -process = cms.Process("G4PrintGeometry") +#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') @@ -19,23 +29,24 @@ process.g4SimHits.g4GeometryDD4hepSource = cms.bool(False) process.g4SimHits.Watchers = cms.VPSet(cms.PSet( DumpSummary = cms.untracked.bool(True), - DumpLVTree = cms.untracked.bool(True), + DumpLVTree = cms.untracked.bool(False), DumpMaterial = cms.untracked.bool(False), - DumpLVList = cms.untracked.bool(True), + DumpLVList = cms.untracked.bool(False), DumpLV = cms.untracked.bool(False), - DumpSolid = cms.untracked.bool(True), + 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(True), - DumpSense = cms.untracked.bool(True), + DumpTouch = cms.untracked.bool(False), + DumpSense = cms.untracked.bool(False), DD4Hep = cms.untracked.bool(False), - Name = cms.untracked.string('ME11*'), - Names = cms.untracked.vstring('EcalHitsEB'), + 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/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/MixingModule/python/caloTruthProducer_cfi.py b/SimGeneral/MixingModule/python/caloTruthProducer_cfi.py index d257b553e3f92..0696591ad7b32 100644 --- a/SimGeneral/MixingModule/python/caloTruthProducer_cfi.py +++ b/SimGeneral/MixingModule/python/caloTruthProducer_cfi.py @@ -35,14 +35,14 @@ from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1 premix_stage1.toModify(caloParticles, premixStage1 = True) -#from Configuration.Eras.Modifier_phase2_hfnose_cff import phase2_hfnose -#phase2_hfnose.toModify( -# caloParticles, -# simHitCollections = dict( -# hgc = caloParticles.simHitCollections.hgc + [cms.InputTag('g4SimHits','HFNoseHits')], +from Configuration.Eras.Modifier_phase2_hfnose_cff import phase2_hfnose +phase2_hfnose.toModify( + caloParticles, + simHitCollections = dict( + hgc = caloParticles.simHitCollections.hgc + [cms.InputTag('g4SimHits','HFNoseHits')], # hcal = cms.VInputTag(cms.InputTag('g4SimHits','HcalHits')) -# ) -#) + ) +) from Configuration.ProcessModifiers.run3_ecalclustering_cff import run3_ecalclustering run3_ecalclustering.toModify( 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/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/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/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 637a74d0afb0c..c652a2c295e37 100644 --- a/SimPPS/PPSPixelDigiProducer/BuildFile.xml +++ b/SimPPS/PPSPixelDigiProducer/BuildFile.xml @@ -1,7 +1,6 @@ - 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 35f2e7dc18ddf..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,6 +14,7 @@ #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigi.h" #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigiCollection.h" +#include "CondFormats/PPSObjects/interface/PPSPixelTopology.h" #include "SimPPS/PPSPixelDigiProducer/interface/RPixPileUpSignals.h" @@ -32,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(); @@ -47,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 4160a4a936a07..350919310f643 100644 --- a/SimPPS/PPSPixelDigiProducer/interface/RPixDummyROCSimulator.h +++ b/SimPPS/PPSPixelDigiProducer/interface/RPixDummyROCSimulator.h @@ -31,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/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 cd565ed49ea1c..88fd33fe8b5ce 100644 --- a/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiProducer.cc +++ b/SimPPS/PPSPixelDigiProducer/plugins/PPSPixelDigiProducer.cc @@ -52,6 +52,8 @@ #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h" #include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.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" @@ -97,10 +99,11 @@ class CTPPSPixelDigiProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT> tokenCrossingFramePPSPixel; edm::ESGetToken gainCalibESToken_; + edm::ESGetToken thePixelTopologyToken_; }; CTPPSPixelDigiProducer::CTPPSPixelDigiProducer(const edm::ParameterSet& conf) - : conf_(conf), gainCalibESToken_(esConsumes()) { + : 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" @@ -180,6 +177,7 @@ void CTPPSPixelDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup& // get calibration DB 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,15 +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.at(it->first)->run( - SimHitMap[it->first], input_links, digi_collector.data, output_digi_links, &gainCalibration); + SimHitMap[it->first], input_links, digi_collector.data, output_digi_links, &gainCalibration, &thePixelTopology); if (!digi_collector.data.empty()) { theDigiVector.push_back(digi_collector); @@ -246,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/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/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 f9d58d2e5d99f..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.TEST = dict() - -## 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 0c499d1b45e8d..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.TopGenEvent=dict() - -## 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 8b0e4a1136fd3..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.TtSemiLeptonicEvent=dict() -process.MessageLogger.TtSemiLepKinFitter=dict() - -## 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 ddaada8ddcf6d..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.TEST = dict() - -## 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 88ea370dfb33d..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.TEST = dict() - -## 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 1d09ffdb97b1a..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.TEST = dict() - -## 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/runtestTqafExamples.cpp b/TopQuarkAnalysis/Examples/test/runtestTqafExamples.cpp deleted file mode 100644 index b2991bd18ae57..0000000000000 --- a/TopQuarkAnalysis/Examples/test/runtestTqafExamples.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "FWCore/Utilities/interface/TestHelper.h" - -RUNTEST() 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/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/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/AnalyticalJacobians/src/AnalyticalCurvilinearJacobianSSE.icc b/TrackingTools/AnalyticalJacobians/src/AnalyticalCurvilinearJacobianSSE.icc index 1564648ac495b..8a5562658ab9e 100644 --- a/TrackingTools/AnalyticalJacobians/src/AnalyticalCurvilinearJacobianSSE.icc +++ b/TrackingTools/AnalyticalJacobians/src/AnalyticalCurvilinearJacobianSSE.icc @@ -50,7 +50,7 @@ void AnalyticalCurvilinearJacobian::computeFullJacobian(const GlobalTrajectoryPa Vec4D tt = t * t; tt = mathSSE::sqrt(hadd(tt, tt)); -#ifdef CMS_USE_AVX +#ifdef CMS_USE_AVX2 const __m256d neg = _mm256_setr_pd(-0.0, 0.0, -0.0, 0.0); Vec4D res(_mm256_xor_pd(neg, _mm256_div_pd(_mm256_shuffle_pd(t.vec, t.vec, 5), tt.vec))); Vec2D u1(res.xy()); 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/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/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/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/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/cmssw_fix_interface.py b/Utilities/ReleaseScripts/scripts/cmssw_fix_interface.py new file mode 100755 index 0000000000000..52466a0ce8b32 --- /dev/null +++ b/Utilities/ReleaseScripts/scripts/cmssw_fix_interface.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +import os +import sys +import argparse + + +parser = argparse.ArgumentParser(description='Find includes only used in one non-interface directory.') +parser.add_argument('packageName', + help='name of package to check interface usage') +parser.add_argument('--fix', dest='shouldFix', action='store_true', + help='move file and fix includes if only used in 1 directory') +parser.add_argument('--remove', dest='removeUnused', action='store_true', + help='remove interface files that are not included anywhere') + +args = parser.parse_args() + +packageName = args.packageName +shouldFix = args.shouldFix +removeUnused = args.removeUnused + +interfaceDir = packageName+"/interface" +from os.path import isfile, join +onlyfiles = [join(interfaceDir,f) for f in os.listdir(interfaceDir) if isfile(join(interfaceDir, f))] + +for f in onlyfiles: + print("checking {filename}".format(filename=f)) + result = os.popen('git grep \'#include [",<]{filename}[",>]\' | awk -F\':\' \'{{print $1}}\' | sort -u'.format(filename=f)) + + filesUsing = [l[:-1] for l in result] + + if 0 == len(filesUsing): + print(" "+f+" is unused") + if removeUnused: + os.system('git rm {filename}'.format(filename=f)) + print(" "+f+" was removed") + continue + + #directories using + dirs = set( ( "/".join(name.split("/")[0:3]) for name in filesUsing) ) + if 1 == len(dirs): + onlyDir = dirs.pop() + if onlyDir.split("/")[2] != "interface": + print(" "+f+" is only used in "+onlyDir) + if shouldFix: + newFileName = onlyDir+"/"+f.split("/")[3] + mvCommand = "git mv {oldName} {newName}".format(oldName=f, newName=newFileName) + #print(mvCommand) + os.system(mvCommand) + sedCommand ="sed --in-place 's/{oldName}/{newName}/' {filesToChange}".format(oldName="\/".join(f.split("/")),newName="\/".join(newFileName.split("/")), filesToChange=" ".join( (n for n in filesUsing)) ) + #print(sedCommand) + os.system(sedCommand) + diff --git a/Utilities/ReleaseScripts/scripts/duplicateReflexLibrarySearch.py b/Utilities/ReleaseScripts/scripts/duplicateReflexLibrarySearch.py index a167a3c701509..c6d04c7f8fd4d 100755 --- a/Utilities/ReleaseScripts/scripts/duplicateReflexLibrarySearch.py +++ b/Utilities/ReleaseScripts/scripts/duplicateReflexLibrarySearch.py @@ -35,6 +35,7 @@ #Ordered List to search for matched packages equivDict = \ [ + {'Associations': ['TTTrackTruthPair']}, {'TrajectoryState' : ['TrajectoryStateOnSurface']}, {'TrackTriggerAssociation' : ['(TTClusterAssociationMap|TTStubAssociationMap|TTTrackAssociationMap|TrackingParticle).*Phase2TrackerDigi', '(TTStub|TTCluster|TTTrack).*Phase2TrackerDigi.*TrackingParticle']}, 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..d9aa18e8843d3 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(' %s::.*();' % 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/postprocess-scan-build.py b/Utilities/StaticAnalyzers/scripts/postprocess-scan-build.py index 452d7cd624ecd..adb999aa3f703 100755 --- a/Utilities/StaticAnalyzers/scripts/postprocess-scan-build.py +++ b/Utilities/StaticAnalyzers/scripts/postprocess-scan-build.py @@ -6,13 +6,23 @@ report_dir = os.path.dirname(url) page=open(url) soup=BeautifulSoup(page.read(),features="lxml") -seen=set() +seen=dict() tables=soup.find_all('table',recursive=True) -rows = tables[2].findChildren('tr') + +rowheader=tables[2].find('thead') +rowheaders=rowheader.find_all('tr') +htag = soup.new_tag('td') +htag.string='Num reports' +htag['class']='Q' +rowheaders[-1].insert(7,htag) + +rowsbody = tables[2].find('tbody') +rows=rowsbody.find_all('tr') for row in rows: - cells=row.findChildren('td') - key=str(cells[2])+str(cells[4])+str(cells[5]) - if key in seen: + cells=row.find_all('td') + key=str(cells[2])+str(cells[3])+str(cells[4]) + if key in seen.keys(): + seen[key]=seen[key]+1 href = cells[6].find('a',href=True) if href: report = href['href'].split("#")[0] @@ -21,5 +31,16 @@ os.remove(report_file) row.decompose() else: - seen.add(key) -print soup.prettify("latin1") + seen[key]=1 + + +rowsbody = tables[2].find('tbody') +rows=rowsbody.find_all('tr') +for row in rows: + cells=row.find_all('td') + key=str(cells[2])+str(cells[3])+str(cells[4]) + tag = soup.new_tag('td') + tag.string='{}'.format(seen[key]) + tag['class']='Q' + row.insert(3,tag) +print(soup.prettify("latin1")) 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..cdb3f73303864 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); @@ -53,13 +53,18 @@ namespace clangcms { QualType QT = (*I)->getType(); std::string qtname = QT.getAsString(); os << "' with argument of type '" << qtname; - PathDiagnosticLocation CELoc = PathDiagnosticLocation::createBegin(CE, BR.getSourceManager(), AC); - BugType *BT = new BugType(Checker, "EventSetupRecord::get function called", "ThreadSafety"); - std::unique_ptr R = std::make_unique(*BT, llvm::StringRef(os.str()), CELoc); - R->addRange(CE->getSourceRange()); - BR.emitReport(std::move(R)); } os << "'"; + os << ". Direct call of function EventSetupRecord::get(ESHandle&) is deprecated and should be replaced with a " + "call to EventSetup::getHandle(ESGetToken&). To use ESGetToken see " + "https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideHowToGetDataFromES#In_ED_module To get data with " + "the token see " + "https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideHowToGetDataFromES#Getting_data_from_EventSetup_wit"; + PathDiagnosticLocation CELoc = PathDiagnosticLocation::createBegin(CE, BR.getSourceManager(), AC); + BugType *BT = new BugType(Checker, "EventSetupRecord::get function called", "ThreadSafety"); + std::unique_ptr R = std::make_unique(*BT, llvm::StringRef(os.str()), CELoc); + R->addRange(CE->getSourceRange()); + BR.emitReport(std::move(R)); } } @@ -90,4 +95,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/plugins/CTPPSDirectProtonSimulation.cc b/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc index 7fe26214b17b6..fe7f9ccce70d9 100644 --- a/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc +++ b/Validation/CTPPS/plugins/CTPPSDirectProtonSimulation.cc @@ -42,7 +42,8 @@ #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" @@ -77,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, @@ -95,6 +97,7 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> { // conditions edm::ESGetToken tokenLHCInfo_; edm::ESGetToken tokenBeamParameters_; + edm::ESGetToken pixelTopologyToken_; edm::ESGetToken tokenOpticalFunctions_; edm::ESGetToken tokenGeometry_; edm::ESGetToken tokenDirectSimuData_; @@ -149,6 +152,7 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> { CTPPSDirectProtonSimulation::CTPPSDirectProtonSimulation(const edm::ParameterSet &iConfig) : tokenLHCInfo_(esConsumes(edm::ESInputTag{"", iConfig.getParameter("lhcInfoLabel")})), tokenBeamParameters_(esConsumes()), + pixelTopologyToken_(esConsumes()), tokenOpticalFunctions_(esConsumes(edm::ESInputTag{"", iConfig.getParameter("opticsLabel")})), tokenGeometry_(esConsumes()), tokenDirectSimuData_(esConsumes()), @@ -246,6 +250,7 @@ void CTPPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSe // get conditions 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_); @@ -304,6 +309,7 @@ void CTPPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSe geometry, lhcInfo, beamParameters, + ppt, opticalFunctions, engine, *pTracks, @@ -338,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, @@ -648,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_) { diff --git a/Validation/CTPPS/python/simu_config/base_cff.py b/Validation/CTPPS/python/simu_config/base_cff.py index d304b0578f7da..f3ae25ba7903f 100644 --- a/Validation/CTPPS/python/simu_config/base_cff.py +++ b/Validation/CTPPS/python/simu_config/base_cff.py @@ -109,13 +109,15 @@ 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 diff --git a/Validation/CTPPS/python/simu_config/year_2016_cff.py b/Validation/CTPPS/python/simu_config/year_2016_cff.py index 6e2e956e92a94..83df3e7ecb492 100644 --- a/Validation/CTPPS/python/simu_config/year_2016_cff.py +++ b/Validation/CTPPS/python/simu_config/year_2016_cff.py @@ -10,11 +10,11 @@ ) # geometry (using 2017 here is OK) -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import totemGeomXMLFiles, ctppsDiamondGeomXMLFiles, ctppsUFSDGeomXMLFiles, ctppsPixelGeomXMLFiles -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import XMLIdealGeometryESSource_CTPPS -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import ctppsGeometryESModule as _geom -ctppsCompositeESSource.compactViewTag = _geom.compactViewTag -ctppsCompositeESSource.isRun2 = _geom.isRun2 +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 diff --git a/Validation/CTPPS/python/simu_config/year_2017_cff.py b/Validation/CTPPS/python/simu_config/year_2017_cff.py index b25acd1d8b332..b9759119a9855 100644 --- a/Validation/CTPPS/python/simu_config/year_2017_cff.py +++ b/Validation/CTPPS/python/simu_config/year_2017_cff.py @@ -29,11 +29,10 @@ ) # geometry -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import totemGeomXMLFiles, ctppsDiamondGeomXMLFiles, ctppsUFSDGeomXMLFiles, ctppsPixelGeomXMLFiles -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import XMLIdealGeometryESSource_CTPPS -from Geometry.VeryForwardGeometry.geometryRPFromDD_2017_cfi import ctppsGeometryESModule as _geom -ctppsCompositeESSource.compactViewTag = _geom.compactViewTag -ctppsCompositeESSource.isRun2 = _geom.isRun2 +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 diff --git a/Validation/CTPPS/python/simu_config/year_2018_cff.py b/Validation/CTPPS/python/simu_config/year_2018_cff.py index 321d6e047c1ff..461551db4081b 100644 --- a/Validation/CTPPS/python/simu_config/year_2018_cff.py +++ b/Validation/CTPPS/python/simu_config/year_2018_cff.py @@ -34,11 +34,10 @@ ) # geometry -from Geometry.VeryForwardGeometry.geometryRPFromDD_2018_cfi import totemGeomXMLFiles, ctppsDiamondGeomXMLFiles, ctppsUFSDGeomXMLFiles, ctppsPixelGeomXMLFiles -from Geometry.VeryForwardGeometry.geometryRPFromDD_2018_cfi import XMLIdealGeometryESSource_CTPPS -from Geometry.VeryForwardGeometry.geometryRPFromDD_2018_cfi import ctppsGeometryESModule as _geom -ctppsCompositeESSource.compactViewTag = _geom.compactViewTag -ctppsCompositeESSource.isRun2 = _geom.isRun2 +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 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 b43f8ee22e3a4..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 ) diff --git a/Validation/Configuration/python/hgcalSimValid_cff.py b/Validation/Configuration/python/hgcalSimValid_cff.py index 4a3128e97816d..2fc76100faa36 100644 --- a/Validation/Configuration/python/hgcalSimValid_cff.py +++ b/Validation/Configuration/python/hgcalSimValid_cff.py @@ -3,6 +3,8 @@ 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 SimCalorimetry.HGCalAssociatorProducers.LCToCPAssociation_cfi import layerClusterCaloParticleAssociationHFNose as layerClusterCaloParticleAssociationProducerHFNose +from SimCalorimetry.HGCalAssociatorProducers.LCToSCAssociation_cfi import layerClusterSimClusterAssociationHFNose as layerClusterSimClusterAssociationProducerHFNose from Validation.HGCalValidation.simhitValidation_cff import * from Validation.HGCalValidation.digiValidation_cff import * @@ -37,3 +39,6 @@ + hgcalValidatorSequence + hgcalTiclPFValidation + hgcalPFJetValidation) + +_hfnose_hgcalAssociatorsTask = hgcalAssociators.copy() +_hfnose_hgcalAssociatorsTask.add(layerClusterCaloParticleAssociationProducerHFNose, layerClusterSimClusterAssociationProducerHFNose) diff --git a/Validation/Configuration/python/mtdSimValid_cff.py b/Validation/Configuration/python/mtdSimValid_cff.py index 34aa1ca875322..8c902769e92a4 100644 --- a/Validation/Configuration/python/mtdSimValid_cff.py +++ b/Validation/Configuration/python/mtdSimValid_cff.py @@ -7,8 +7,8 @@ from Validation.MtdValidation.etlLocalReco_cfi import etlLocalReco from Validation.MtdValidation.etlSimHits_cfi import etlSimHits from Validation.MtdValidation.etlDigiHits_cfi import etlDigiHits -from Validation.MtdValidation.globalReco_cfi import globalReco +from Validation.MtdValidation.mtdTracks_cfi import mtdTracks mtdSimValid = cms.Sequence(btlSimHits + etlSimHits ) mtdDigiValid = cms.Sequence(btlDigiHits + etlDigiHits) -mtdRecoValid = cms.Sequence(btlLocalReco + etlLocalReco + globalReco) +mtdRecoValid = cms.Sequence(btlLocalReco + etlLocalReco + mtdTracks) diff --git a/Validation/Configuration/python/postValidation_cff.py b/Validation/Configuration/python/postValidation_cff.py index 8468943e81b04..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 ) 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/runP_HCAL_Debug_dd4hep_cfg.py b/Validation/Geometry/test/runP_HCAL_Debug_dd4hep_cfg.py index 4e36ea2a61065..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") @@ -21,18 +22,6 @@ 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/HGCalValidation/BuildFile.xml b/Validation/HGCalValidation/BuildFile.xml index fd0cf03a579e5..b2857c10c1dd0 100644 --- a/Validation/HGCalValidation/BuildFile.xml +++ b/Validation/HGCalValidation/BuildFile.xml @@ -7,6 +7,7 @@ + diff --git a/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h b/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h index 30d74e9549974..a25a1f0d4eb64 100644 --- a/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h +++ b/Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h @@ -212,12 +212,21 @@ class HGVHistoProducerAlgo { unsigned int layers, std::vector thicknesses); - void bookClusterHistos(DQMStore::IBooker& ibook, - Histograms& histograms, - unsigned int layers, - std::vector thicknesses, - std::string pathtomatbudfile); + 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, diff --git a/Validation/HGCalValidation/interface/ValidHit.h b/Validation/HGCalValidation/interface/ValidHit.h new file mode 100644 index 0000000000000..46b72f65f554a --- /dev/null +++ b/Validation/HGCalValidation/interface/ValidHit.h @@ -0,0 +1,43 @@ +#ifndef Validation_HGCalBValidation_ValidHit_h +#define Validation_HGCalBValidation_ValidHit_h + +#include "TObject.h" +#include +#include + +class ValidHit { +public: + ValidHit() : energy_(0), time_(0), timeError_(0), id_(0), flagBits_(0), son_(0) {} + ValidHit(float energy, float time, float timeError, uint32_t id, uint32_t flagBits, uint8_t son) + : energy_(energy), time_(time), timeError_(timeError), id_(id), flagBits_(flagBits), son_(son) {} + ValidHit(const ValidHit &other) { + energy_ = other.energy_; + time_ = other.time_; + timeError_ = other.timeError_; + id_ = other.id_; + flagBits_ = other.flagBits_; + son_ = other.son_; + } + + virtual ~ValidHit() {} + + float energy() { return energy_; } + float time() { return time_; } + float timeError() { return timeError_; } + uint32_t id() { return id_; } + uint32_t flagBits() { return flagBits_; } + uint8_t son() { return son_; } + + float energy_; //calibrated energy of the rechit + float time_; //time jitter of the UncalibRecHit + float timeError_; //time resolution + uint32_t id_; //rechit detId + uint32_t flagBits_; //rechit flags describing its status (DataFormats/HGCRecHit/interface/HGCRecHit.h) + uint8_t son_; //signal over noise + + ClassDef(ValidHit, 1) +}; + +typedef std::vector ValidHitCollection; + +#endif //Validation_HGCalBValidation_ValidHit_h diff --git a/Validation/HGCalValidation/plugins/BuildFile.xml b/Validation/HGCalValidation/plugins/BuildFile.xml index fe5803d840494..2b68d43e229db 100644 --- a/Validation/HGCalValidation/plugins/BuildFile.xml +++ b/Validation/HGCalValidation/plugins/BuildFile.xml @@ -8,16 +8,19 @@ + - - + - + + + + @@ -29,9 +32,11 @@ + + diff --git a/Validation/HGCalValidation/plugins/HGCalValidator.cc b/Validation/HGCalValidation/plugins/HGCalValidator.cc index 361ff02650850..f8be28e864cc2 100644 --- a/Validation/HGCalValidation/plugins/HGCalValidator.cc +++ b/Validation/HGCalValidation/plugins/HGCalValidator.cc @@ -56,10 +56,10 @@ HGCalValidator::HGCalValidator(const edm::ParameterSet& pset) pset.getParameter("ptMaxCP"), pset.getParameter("minRapidityCP"), pset.getParameter("maxRapidityCP"), + pset.getParameter("lipCP"), + pset.getParameter("tipCP"), pset.getParameter("minHitCP"), pset.getParameter("maxSimClustersCP"), - pset.getParameter("tipCP"), - pset.getParameter("lipCP"), pset.getParameter("signalOnlyCP"), pset.getParameter("intimeOnlyCP"), pset.getParameter("chargedOnlyCP"), @@ -150,12 +150,21 @@ void HGCalValidator::bookHistograms(DQMStore::IBooker& ibook, //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 diff --git a/Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.cc b/Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.cc new file mode 100644 index 0000000000000..004c5a2a657a2 --- /dev/null +++ b/Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.cc @@ -0,0 +1,87 @@ +#include "Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.h" + +HeterogeneousHGCalRecHitsValidator::HeterogeneousHGCalRecHitsValidator(const edm::ParameterSet &ps) + : tokens_({{{{consumes(ps.getParameter("cpuRecHitsEEToken")), + consumes(ps.getParameter("gpuRecHitsEEToken"))}}, + {{consumes(ps.getParameter("cpuRecHitsHSiToken")), + consumes(ps.getParameter("gpuRecHitsHSiToken"))}}, + {{consumes(ps.getParameter("cpuRecHitsHSciToken")), + consumes(ps.getParameter("gpuRecHitsHSciToken"))}}}}), + treenames_({{"CEE", "CHSi", "CHSci"}}) { + usesResource(TFileService::kSharedResource); + edm::Service fs; + for (unsigned i(0); i < nsubdetectors; ++i) { + trees_[i] = fs->make(treenames_[i].c_str(), treenames_[i].c_str()); + trees_[i]->Branch("cpu", "ValidHitCollection", &cpuValidRecHits[i]); + trees_[i]->Branch("gpu", "ValidHitCollection", &gpuValidRecHits[i]); + trees_[i]->Branch("diffs", "ValidHitCollection", &diffsValidRecHits[i]); + } +} + +HeterogeneousHGCalRecHitsValidator::~HeterogeneousHGCalRecHitsValidator() {} + +void HeterogeneousHGCalRecHitsValidator::endJob() {} + +void HeterogeneousHGCalRecHitsValidator::set_geometry_(const edm::EventSetup &setup, const unsigned &detidx) { + edm::ESHandle handle; + setup.get().get(handles_str_[detidx], handle); +} + +void HeterogeneousHGCalRecHitsValidator::analyze(const edm::Event &event, const edm::EventSetup &setup) { + edm::ESHandle baseGeom; + setup.get().get(baseGeom); + recHitTools_.setGeometry(*baseGeom); + + //future subdetector loop + for (size_t idet = 0; idet < nsubdetectors; ++idet) { + set_geometry_(setup, idet); + + //get hits produced with the CPU + const auto &cpuhits = event.get(tokens_[idet][0]); + + //get hits produced with the GPU + const auto &gpuhits = event.get(tokens_[idet][1]); + + size_t nhits = cpuhits.size(); + std::cout << nhits << ", " << gpuhits.size() << std::endl; + assert(nhits == gpuhits.size()); + //float sum_cpu = 0.f, sum_gpu = 0.f, sum_son_cpu = 0.f, sum_son_gpu = 0.f; + for (unsigned i(0); i < nhits; i++) { + const HGCRecHit &cpuHit = cpuhits[i]; + const HGCRecHit &gpuHit = gpuhits[i]; + + const float cpuEn = cpuHit.energy(); + const float gpuEn = gpuHit.energy(); + //sum_cpu += cpuEn; sum_gpu += gpuEn; + + const float cpuTime = cpuHit.time(); + const float gpuTime = gpuHit.time(); + const float cpuTimeErr = cpuHit.timeError(); + const float gpuTimeErr = gpuHit.timeError(); + const HGCalDetId cpuDetId = cpuHit.detid(); + const HGCalDetId gpuDetId = gpuHit.detid(); + const float cpuFB = cpuHit.flagBits(); + const float gpuFB = gpuHit.flagBits(); + const float cpuSoN = cpuHit.signalOverSigmaNoise(); + const float gpuSoN = gpuHit.signalOverSigmaNoise(); + //sum_son_cpu += cpuSoN; sum_son_gpu += gpuSoN; + + ValidHit vCPU(cpuEn, cpuTime, cpuTimeErr, cpuDetId, cpuFB, cpuSoN); + ValidHit vGPU(gpuEn, gpuTime, gpuTimeErr, gpuDetId, gpuFB, gpuSoN); + ValidHit vDiffs(cpuEn - gpuEn, + cpuTime - gpuTime, + cpuTimeErr - gpuTimeErr, + cpuDetId - gpuDetId, + cpuFB - gpuFB, + cpuSoN - gpuSoN); + + cpuValidRecHits[idet].push_back(vCPU); + gpuValidRecHits[idet].push_back(vGPU); + diffsValidRecHits[idet].push_back(vDiffs); + } + trees_[idet]->Fill(); + } +} + +//define this as a plug-in +DEFINE_FWK_MODULE(HeterogeneousHGCalRecHitsValidator); diff --git a/Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.h b/Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.h new file mode 100644 index 0000000000000..01435ff6fc271 --- /dev/null +++ b/Validation/HGCalValidation/plugins/HeterogeneousHGCalRecHitsValidator.h @@ -0,0 +1,56 @@ +#ifndef _HGCalMaskResolutionAna_h_ +#define _HGCalMaskResolutionAna_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/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHit.h" +#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" +#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h" +#include "Validation/HGCalValidation/interface/ValidHit.h" + +#include "TTree.h" +#include "TH1F.h" + +#include +#include + +struct ValidRecHits { + std::vector energy; + std::vector time; + std::vector timeError; + std::vector detid; + std::vector flagBits; + std::vector son; +}; + +class HeterogeneousHGCalRecHitsValidator : public edm::one::EDAnalyzer { +public: + explicit HeterogeneousHGCalRecHitsValidator(const edm::ParameterSet&); + ~HeterogeneousHGCalRecHitsValidator() override; + void analyze(const edm::Event&, const edm::EventSetup&) override; + void endJob() override; + +private: + static const unsigned nsubdetectors = 3; //ce-e, ce-h-fine, ce-h-coarse + static const unsigned ncomputingdevices = 2; //cpu, gpu + //cpu amd gpu tokens and handles for the 3 subdetectors, cpu and gpu + std::array, ncomputingdevices>, nsubdetectors> tokens_; + std::array handles_str_ = { + {"HGCalEESensitive", "HGCalHESiliconSensitive", "HGCalHEScintillatorSensitive"}}; + hgcal::RecHitTools recHitTools_; + + std::array trees_; + std::array treenames_; + std::array cpuValidRecHits, gpuValidRecHits, diffsValidRecHits; + //std::vector< TH1F* > zhist; + + void set_geometry_(const edm::EventSetup&, const unsigned&); +}; + +#endif diff --git a/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py b/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py index 0e9ae846a4fde..e55fb59fdff28 100644 --- a/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py +++ b/Validation/HGCalValidation/python/CaloParticleSelectionForEfficiency_cfi.py @@ -11,7 +11,8 @@ 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, 311), + #311: K0, 130: K0_short, 310: K0_long + pdgIdCP = cms.vint32(11, -11, 13, -13, 22, 111, 211, -211, 321, -321, 311, 130, 310), #--signal only means no PU particles signalOnlyCP = cms.bool(True), #--intime only means no OOT PU particles diff --git a/Validation/HGCalValidation/python/HGCalValidator_cfi.py b/Validation/HGCalValidation/python/HGCalValidator_cfi.py index db07bc9da6be0..8a6925bcb1f6d 100644 --- a/Validation/HGCalValidation/python/HGCalValidator_cfi.py +++ b/Validation/HGCalValidation/python/HGCalValidator_cfi.py @@ -19,6 +19,7 @@ label_lcl = layerClusterCaloParticleAssociation.label_lc, label_mcl = cms.VInputTag( cms.InputTag("ticlMultiClustersFromTrackstersTrk"), + cms.InputTag("ticlMultiClustersFromTrackstersTrkEM"), cms.InputTag("ticlMultiClustersFromTrackstersEM"), cms.InputTag("ticlMultiClustersFromTrackstersHAD"), cms.InputTag("ticlMultiClustersFromTrackstersMerge")), diff --git a/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py b/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py index 13b22915688c9..495e05e91d9a9 100644 --- a/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py +++ b/Validation/HGCalValidation/python/PostProcessorHGCAL_cfi.py @@ -15,7 +15,7 @@ eff_layers.extend(["merge_phi_layer{:02d} 'LayerCluster Merge Rate vs #phi Layer{:02d} in z-' NumMerge_LayerCluster_Phi_perlayer{:02d} Denom_LayerCluster_Phi_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 e4d9a20c50aa1..3f7eaa6bef211 100755 --- a/Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py +++ b/Validation/HGCalValidation/scripts/makeHGCalValidationPlots.py @@ -9,7 +9,7 @@ import Validation.HGCalValidation.hgcalPlots as hgcalPlots import Validation.RecoTrack.plotting.plotting as plotting -simClustersIters = ["ClusterLevel","ticlTrackstersTrkEM","ticlTrackstersEM","ticlTrackstersTrk","ticlTrackstersHAD","ticlTrackstersMerge"] +simClustersIters = ["ClusterLevel","ticlTrackstersTrkEM","ticlTrackstersEM","ticlTrackstersTrk","ticlTrackstersHAD"] trackstersIters = ["ticlMultiClustersFromTrackstersMerge", "ticlMultiClustersFromTrackstersMIP", "ticlMultiClustersFromTrackstersTrk","ticlMultiClustersFromTrackstersTrkEM", @@ -78,6 +78,7 @@ def main(opts): particletypes = {"pion-":"-211", "pion+":"211", "pion0": "111", "muon-": "-13", "muon+":"13", "electron-": "-11", "electron+": "11", "photon": "22", + "kaon0L": "310", "kaon0S": "130", "kaon-": "-321", "kaon+": "321"} hgcaloPart = [hgcalPlots.hgcalCaloParticlesPlotter] for i_part, i_partID in particletypes.iteritems() : @@ -94,11 +95,12 @@ def main(opts): 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", + "kaon0L": "310", "kaon0S": "130", "kaon-": "-321", "kaon+": "321"} hgcaloPart = [hgcalPlots.hgcalCaloParticlesPlotter] for i_part, i_partID in particletypes.iteritems() : diff --git a/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc b/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc index adf674d3c298d..35500a2cb63ee 100644 --- a/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc +++ b/Validation/HGCalValidation/src/HGVHistoProducerAlgo.cc @@ -17,7 +17,7 @@ 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; +const double ScoreCutCPtoMCLEffDup_ = 0.2; HGVHistoProducerAlgo::HGVHistoProducerAlgo(const edm::ParameterSet& pset) : //parameters for eta @@ -591,11 +591,11 @@ void HGVHistoProducerAlgo::bookSimClusterAssociationHistos(DQMStore::IBooker& ib histograms.h_sharedenergy_simcluster2layercl_vs_phi_perlayer.push_back( std::move(sharedenergy_simcluster2layercl_vs_phi_perlayer)); } -void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, - Histograms& histograms, - unsigned int layers, - std::vector thicknesses, - std::string pathtomatbudfile) { +void HGVHistoProducerAlgo::bookClusterHistos_ClusterLevel(DQMStore::IBooker& ibook, + Histograms& histograms, + unsigned int layers, + std::vector 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_)); @@ -674,6 +674,37 @@ void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, nintEneClperlay_, minEneClperlay_, maxEneClperlay_); + } + + //--------------------------------------------------------------------------------------------------------------------------- + for (std::vector::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, @@ -820,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 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)"); @@ -827,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::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::iterator it = thicknesses.begin(); it != thicknesses.end(); ++it) { for (unsigned ilayer = 0; ilayer < 2 * layers; ++ilayer) { @@ -915,8 +960,8 @@ void HGVHistoProducerAlgo::bookClusterHistos(DQMStore::IBooker& ibook, maxClEneperthickperlayer_); } } - //--------------------------------------------------------------------------------------------------------------------------- } +//---------------------------------------------------------------------------------------------------------------------------- void HGVHistoProducerAlgo::bookMultiClusterHistos(DQMStore::IBooker& ibook, Histograms& histograms, @@ -2758,7 +2803,7 @@ void HGVHistoProducerAlgo::multiClusters_to_CaloParticles(const Histograms& hist mclsharedenergyfrac[cpId][mclId]); } //end of loop through multiclusters - auto is_assoc = [&](const auto& v) -> bool { return v < ScoreCutCPtoMCLDup_; }; + auto is_assoc = [&](const auto& v) -> bool { return v < ScoreCutCPtoMCLEffDup_; }; auto assocDup = std::count_if(std::begin(score3d[cpId]), std::end(score3d[cpId]), is_assoc); diff --git a/Validation/HGCalValidation/src/classes.h b/Validation/HGCalValidation/src/classes.h new file mode 100644 index 0000000000000..9b815cbc4917f --- /dev/null +++ b/Validation/HGCalValidation/src/classes.h @@ -0,0 +1,16 @@ +#ifdef __CINT_ +#pragma link off all globals; +#pragma link off all classes; +#pragma link off all functions; +#pragma link C++ nestedclasses; +#pragma link C++ class ValidHit + ; +#pragma link C++ class vector < ValidHit> + ; +#endif /* __CINT__ */ + +#include "Validation/HGCalValidation/interface/ValidHit.h" +#include "DataFormats/Common/interface/AssociationVector.h" +#include "DataFormats/Common/interface/AssociationMap.h" + +ValidHit vh; +std::vector vvh; +edm::Wrapper > wvvh; diff --git a/Validation/HGCalValidation/src/classes_def.xml b/Validation/HGCalValidation/src/classes_def.xml new file mode 100644 index 0000000000000..07d8e516a9afd --- /dev/null +++ b/Validation/HGCalValidation/src/classes_def.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Validation/HGCalValidation/test/HeterogeneousHGCalRecHitsValidator_cfg.py b/Validation/HGCalValidation/test/HeterogeneousHGCalRecHitsValidator_cfg.py new file mode 100644 index 0000000000000..7b4a2eacebcfa --- /dev/null +++ b/Validation/HGCalValidation/test/HeterogeneousHGCalRecHitsValidator_cfg.py @@ -0,0 +1,101 @@ +import os, sys, glob +import FWCore.ParameterSet.Config as cms +from Configuration.StandardSequences.Eras import eras +from Configuration.ProcessModifiers.gpu_cff import gpu +from RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi import HGCalRecHit + +def getHeterogeneousRecHitsSource(pu): + indir = '/eos/user/b/bfontana/Samples/' #indir = '/home/bfontana/' + filename_suff = 'step3_ttbar_PU' + str(pu) #filename_suff = 'hadd_out_PU' + str(pu) + fNames = [ 'file:' + x for x in glob.glob(os.path.join(indir, filename_suff + '*.root')) ] + print(indir, filename_suff, pu, fNames) + for _ in range(4): + fNames.extend(fNames) + if len(fNames)==0: + print('Used globbing: ', glob.glob(os.path.join(indir, filename_suff + '*.root'))) + raise ValueError('No input files!') + + keep = 'keep *' + drop1 = 'drop CSCDetIdCSCALCTPreTriggerDigiMuonDigiCollection_simCscTriggerPrimitiveDigis__HLT' + drop2 = 'drop HGCRecHitsSorted_HGCalRecHit_HGC*E*RecHits_*' + return cms.Source("PoolSource", + fileNames = cms.untracked.vstring(fNames), + inputCommands = cms.untracked.vstring(keep, drop1, drop2), + duplicateCheckMode = cms.untracked.string("noDuplicateCheck")) + +#arguments parsing +from FWCore.ParameterSet.VarParsing import VarParsing +F = VarParsing('analysis') +F.register('PU', + 1, + F.multiplicity.singleton, + F.varType.int, + "Pileup to consider.") +F.parseArguments() + +#package loading +process = cms.Process("gpuValidation", gpu) +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('Configuration.StandardSequences.MagneticField_cff') +#process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') +process.load('HeterogeneousCore.CUDAServices.CUDAService_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi') +process.load('SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi') + +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') + +#TFileService + +dirName = '/eos/user/b/bfontana/Samples/' +fileName = 'validation' + str(F.PU) + '.root' +process.TFileService = cms.Service("TFileService", + fileName = cms.string( os.path.join(dirName,fileName) ), + closeFileFast = cms.untracked.bool(True) + ) + +process.source = getHeterogeneousRecHitsSource(F.PU) +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10) ) +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool( False )) #add option for edmStreams + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousEERecHitFromSoA_cfi') + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEFRecHitFromSoA_cfi') + +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitGPU_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitGPUtoSoA_cfi') +process.load('RecoLocalCalo.HGCalRecProducers.HeterogeneousHEBRecHitFromSoA_cfi') + +process.HGCalRecHits = HGCalRecHit.clone() + +process.valid = cms.EDAnalyzer( 'HeterogeneousHGCalRecHitsValidator', + cpuRecHitsEEToken = cms.InputTag('HGCalRecHits', 'HGCEERecHits'), + gpuRecHitsEEToken = cms.InputTag('EERecHitFromSoAProd'), + cpuRecHitsHSiToken = cms.InputTag('HGCalRecHits', 'HGCHEFRecHits'), + gpuRecHitsHSiToken = cms.InputTag('HEFRecHitFromSoAProd'), + cpuRecHitsHSciToken = cms.InputTag('HGCalRecHits', 'HGCHEBRecHits'), + gpuRecHitsHSciToken = cms.InputTag('HEBRecHitFromSoAProd') +) + +process.ee_t = cms.Task( process.EERecHitGPUProd, process.EERecHitGPUtoSoAProd, process.EERecHitFromSoAProd ) +process.hef_t = cms.Task( process.HEFRecHitGPUProd, process.HEFRecHitGPUtoSoAProd, process.HEFRecHitFromSoAProd ) +process.heb_t = cms.Task( process.HEBRecHitGPUProd, process.HEBRecHitGPUtoSoAProd, process.HEBRecHitFromSoAProd ) +process.gpu_t = cms.Task( process.ee_t, process.hef_t, process.heb_t ) +process.cpu_t = cms.Task( process.HGCalRecHits ) +process.path = cms.Path( process.valid, process.gpu_t, process.cpu_t ) + + +process.out = cms.OutputModule( "PoolOutputModule", + fileName = cms.untracked.string( os.path.join(dirName, 'out.root') ), + outputCommands = cms.untracked.vstring('drop *') ) + +process.outpath = cms.EndPath(process.out) diff --git a/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc b/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc index 09b5f11dd3cf9..de9b19ec186ba 100644 --- a/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc +++ b/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc @@ -50,6 +50,7 @@ class BtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; + const bool LocalPosDebug_; edm::EDGetTokenT btlDigiHitsToken_; @@ -62,6 +63,12 @@ class BtlDigiHitsValidation : public DQMEDAnalyzer { MonitorElement* meOccupancy_[2]; + //local position monitoring + MonitorElement* meLocalOccupancy_[2]; + MonitorElement* meHitXlocal_[2]; + MonitorElement* meHitYlocal_[2]; + MonitorElement* meHitZlocal_[2]; + MonitorElement* meHitX_[2]; MonitorElement* meHitY_[2]; MonitorElement* meHitZ_[2]; @@ -79,7 +86,8 @@ class BtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- BtlDigiHitsValidation::BtlDigiHitsValidation(const edm::ParameterSet& iConfig) - : folder_(iConfig.getParameter("folder")) { + : folder_(iConfig.getParameter("folder")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { btlDigiHitsToken_ = consumes(iConfig.getParameter("inputTag")); } @@ -132,6 +140,13 @@ void BtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe meOccupancy_[iside]->Fill(global_point.z(), global_point.phi()); + if (LocalPosDebug_) { + meLocalOccupancy_[iside]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[iside]->Fill(local_point.x()); + meHitYlocal_[iside]->Fill(local_point.y()); + meHitZlocal_[iside]->Fill(local_point.z()); + } + meHitX_[iside]->Fill(global_point.x()); meHitY_[iside]->Fill(global_point.y()); meHitZ_[iside]->Fill(global_point.z()); @@ -163,7 +178,6 @@ void BtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { ibook.setCurrentFolder(folder_); - // --- histograms booking meNhits_[0] = ibook.book1D("BtlNhitsL", "Number of BTL DIGI hits (L);log_{10}(N_{DIGI})", 100, 0., 5.25); @@ -173,7 +187,6 @@ void BtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, meHitCharge_[1] = ibook.book1D("BtlHitChargeR", "BTL DIGI hits charge (R);Q_{DIGI} [ADC counts]", 100, 0., 1024.); meHitTime_[0] = ibook.book1D("BtlHitTimeL", "BTL DIGI hits ToA (L);ToA_{DIGI} [TDC counts]", 100, 0., 1024.); meHitTime_[1] = ibook.book1D("BtlHitTimeR", "BTL DIGI hits ToA (R);ToA_{DIGI} [TDC counts]", 100, 0., 1024.); - meOccupancy_[0] = ibook.book2D("BtlOccupancyL", "BTL DIGI hits occupancy (L);Z_{DIGI} [cm]; #phi_{DIGI} [rad]", 65, @@ -190,6 +203,24 @@ void BtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, 126, -3.15, 3.15); + if (LocalPosDebug_) { + meLocalOccupancy_[0] = ibook.book2D("BtlLocalOccupancyL", + "BTL DIGI hits local occupancy (L);X_{DIGI} [cm]; Y_{DIGI} [cm]", + 100, + -10., + 10, + 60, + -3., + 3.); + meLocalOccupancy_[1] = ibook.book2D( + "BtlLocalOccupancyR", "BTL DIGI hits occupancy (R);X_{DIGI} [cm]; Y_{DIGI} [cm]", 100, -10., 10., 60, -3., 3.); + meHitXlocal_[0] = ibook.book1D("BtlHitXlocalL", "BTL DIGI local X (L);X_{DIGI}^{LOC} [cm]", 100, -10., 10.); + meHitXlocal_[1] = ibook.book1D("BtlHitXlocalR", "BTL DIGI local X (R);X_{DIGI}^{LOC} [cm]", 100, -10., 10.); + meHitYlocal_[0] = ibook.book1D("BtlHitYlocalL", "BTL DIGI local Y (L);Y_{DIGI}^{LOC} [cm]", 60, -3., 3.); + meHitYlocal_[1] = ibook.book1D("BtlHitYlocalR", "BTL DIGI local Y (R);Y_{DIGI}^{LOC} [cm]", 60, -3., 3.); + meHitZlocal_[0] = ibook.book1D("BtlHitZlocalL", "BTL DIGI local z (L);z_{DIGI}^{LOC} [cm]", 10, -1, 1); + meHitZlocal_[1] = ibook.book1D("BtlHitZlocalR", "BTL DIGI local z (R);z_{DIGI}^{LOC} [cm]", 10, -1, 1); + } meHitX_[0] = ibook.book1D("BtlHitXL", "BTL DIGI hits X (L);X_{DIGI} [cm]", 60, -120., 120.); meHitX_[1] = ibook.book1D("BtlHitXR", "BTL DIGI hits X (R);X_{DIGI} [cm]", 60, -120., 120.); @@ -258,6 +289,7 @@ void BtlDigiHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& des desc.add("folder", "MTD/BTL/DigiHits"); desc.add("inputTag", edm::InputTag("mix", "FTLBarrel")); + desc.add("LocalPositionDebug", false); descriptions.add("btlDigiHitsDefault", desc); } diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index 244cb029326b5..aa39b29fd4662 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -64,7 +64,8 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; - const float hitMinEnergy_; + const double hitMinEnergy_; + const bool LocalPosDebug_; edm::EDGetTokenT btlRecHitsToken_; edm::EDGetTokenT > btlSimHitsToken_; @@ -76,9 +77,16 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meHitEnergy_; MonitorElement* meHitTime_; + MonitorElement* meHitTimeError_; MonitorElement* meOccupancy_; + //local position monitoring + MonitorElement* meLocalOccupancy_; + MonitorElement* meHitXlocal_; + MonitorElement* meHitYlocal_; + MonitorElement* meHitZlocal_; + MonitorElement* meHitX_; MonitorElement* meHitY_; MonitorElement* meHitZ_; @@ -97,10 +105,16 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meTimeRes_; MonitorElement* meEnergyRes_; - MonitorElement* meTresvsE_; - MonitorElement* meEresvsE_; + + MonitorElement* meLongPosPull_; + MonitorElement* meLongPosPullvsE_; + MonitorElement* meLongPosPullvsEta_; + + MonitorElement* meTPullvsE_; + MonitorElement* meTPullvsEta_; MonitorElement* meCluTime_; + MonitorElement* meCluTimeError_; MonitorElement* meCluEnergy_; MonitorElement* meCluPhi_; MonitorElement* meCluEta_; @@ -111,7 +125,8 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- BtlLocalRecoValidation::BtlLocalRecoValidation(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")), - hitMinEnergy_(iConfig.getParameter("hitMinimumEnergy")) { + hitMinEnergy_(iConfig.getParameter("hitMinimumEnergy")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { btlRecHitsToken_ = consumes(iConfig.getParameter("recHitsTag")); btlSimHitsToken_ = consumes >(iConfig.getParameter("simHitsTag")); btlRecCluToken_ = consumes(iConfig.getParameter("recCluTag")); @@ -183,11 +198,18 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitEnergy_->Fill(recHit.energy()); meHitTime_->Fill(recHit.time()); + meHitTimeError_->Fill(recHit.timeError()); meHitLongPos_->Fill(recHit.position()); meHitLongPosErr_->Fill(recHit.positionError()); meOccupancy_->Fill(global_point.z(), global_point.phi()); + if (LocalPosDebug_) { + meLocalOccupancy_->Fill(local_point.x() + recHit.position(), local_point.y()); + meHitXlocal_->Fill(local_point.x()); + meHitYlocal_->Fill(local_point.y()); + meHitZlocal_->Fill(local_point.z()); + } meHitX_->Fill(global_point.x()); meHitY_->Fill(global_point.y()); meHitZ_->Fill(global_point.z()); @@ -204,14 +226,26 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS // Resolution histograms if (m_btlSimHits.count(detId.rawId()) == 1 && m_btlSimHits[detId.rawId()].energy > hitMinEnergy_) { + float longpos_res = recHit.position() - convertMmToCm(m_btlSimHits[detId.rawId()].x_local); float time_res = recHit.time() - m_btlSimHits[detId.rawId()].time; float energy_res = recHit.energy() - m_btlSimHits[detId.rawId()].energy; + Local3DPoint local_point_sim(m_btlSimHits[detId.rawId()].x_local, + m_btlSimHits[detId.rawId()].y_local, + m_btlSimHits[detId.rawId()].z_local); + local_point_sim = + topo.pixelToModuleLocalPoint(local_point_sim, detId.row(topo.nrows()), detId.column(topo.nrows())); + const auto& global_point_sim = thedet->toGlobal(local_point_sim); + meTimeRes_->Fill(time_res); meEnergyRes_->Fill(energy_res); - meTresvsE_->Fill(m_btlSimHits[detId.rawId()].energy, time_res); - meEresvsE_->Fill(m_btlSimHits[detId.rawId()].energy, energy_res); + meLongPosPull_->Fill(longpos_res / recHit.positionError()); + meLongPosPullvsEta_->Fill(std::abs(global_point_sim.eta()), longpos_res / recHit.positionError()); + meLongPosPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, longpos_res / recHit.positionError()); + + meTPullvsEta_->Fill(std::abs(global_point_sim.eta()), time_res / recHit.timeError()); + meTPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, time_res / recHit.timeError()); } n_reco_btl++; @@ -237,12 +271,13 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS const ProxyMTDTopology& topoproxy = static_cast(genericDet->topology()); const RectangularMTDTopology& topo = static_cast(topoproxy.specificTopology()); - Local3DPoint local_point(cluster.x() * 5.7, cluster.y() * 0.3, 0.); + Local3DPoint local_point(cluster.x() * topo.pitch().first, cluster.y() * topo.pitch().second, 0.); local_point = topo.pixelToModuleLocalPoint(local_point, cluId.row(topo.nrows()), cluId.column(topo.ncolumns())); const auto& global_point = genericDet->toGlobal(local_point); meCluEnergy_->Fill(cluster.energy()); meCluTime_->Fill(cluster.time()); + meCluTimeError_->Fill(cluster.timeError()); meCluPhi_->Fill(global_point.phi()); meCluEta_->Fill(global_point.eta()); meCluZvsPhi_->Fill(global_point.z(), global_point.phi()); @@ -263,16 +298,21 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEnergy_ = ibook.book1D("BtlHitEnergy", "BTL RECO hits energy;E_{RECO} [MeV]", 100, 0., 20.); meHitTime_ = ibook.book1D("BtlHitTime", "BTL RECO hits ToA;ToA_{RECO} [ns]", 100, 0., 25.); - + meHitTimeError_ = ibook.book1D("BtlHitTimeError", "BTL RECO hits ToA error;#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1); meOccupancy_ = ibook.book2D( "BtlOccupancy", "BTL RECO hits occupancy;Z_{RECO} [cm]; #phi_{RECO} [rad]", 65, -260., 260., 126, -3.2, 3.2); - + if (LocalPosDebug_) { + meLocalOccupancy_ = ibook.book2D( + "BtlLocalOccupancy", "BTL RECO hits local occupancy;X_{RECO} [cm]; Y_{RECO} [cm]", 100, 10., 10., 60, -3., 3.); + meHitXlocal_ = ibook.book1D("BtlHitXlocal", "BTL RECO local X;X_{RECO}^{LOC} [cm]", 100, -10., 10.); + meHitYlocal_ = ibook.book1D("BtlHitYlocal", "BTL RECO local Y;Y_{RECO}^{LOC} [cm]", 60, -3, 3); + meHitZlocal_ = ibook.book1D("BtlHitZlocal", "BTL RECO local z;z_{RECO}^{LOC} [cm]", 10, -1, 1); + } meHitX_ = ibook.book1D("BtlHitX", "BTL RECO hits X;X_{RECO} [cm]", 60, -120., 120.); meHitY_ = ibook.book1D("BtlHitY", "BTL RECO hits Y;Y_{RECO} [cm]", 60, -120., 120.); meHitZ_ = ibook.book1D("BtlHitZ", "BTL RECO hits Z;Z_{RECO} [cm]", 100, -260., 260.); meHitPhi_ = ibook.book1D("BtlHitPhi", "BTL RECO hits #phi;#phi_{RECO} [rad]", 126, -3.2, 3.2); meHitEta_ = ibook.book1D("BtlHitEta", "BTL RECO hits #eta;#eta_{RECO}", 100, -1.55, 1.55); - meHitTvsE_ = ibook.bookProfile("BtlHitTvsE", "BTL RECO ToA vs energy;E_{RECO} [MeV];ToA_{RECO} [ns]", 50, 0., 20., 0., 100.); meHitEvsPhi_ = ibook.bookProfile( @@ -290,18 +330,46 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitLongPos_ = ibook.book1D("BtlLongPos", "BTL RECO hits longitudinal position;long. pos._{RECO}", 100, -10, 10); meHitLongPosErr_ = ibook.book1D("BtlLongPosErr", "BTL RECO hits longitudinal position error; long. pos. error_{RECO}", 100, -1, 1); - - meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO} - T_{SIM} [ns]", 100, -0.5, 0.5); - meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO} - E_{SIM} [MeV]", 100, -0.5, 0.5); - - meTresvsE_ = ibook.bookProfile( - "BtlTresvsE", "BTL time resolution vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM} [ns]", 50, 0., 20., 0., 100.); - meEresvsE_ = ibook.bookProfile( - "BtlEresvsE", "BTL energy resolution vs E;E_{SIM} [MeV];E_{RECO}-E_{SIM} [MeV]", 50, 0., 20., 0., 100.); + meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5); + meLongPosPull_ = ibook.book1D("BtlLongPosPull", + "BTL longitudinal position pull;X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", + 100, + -5., + 5.); + meLongPosPullvsE_ = ibook.bookProfile( + "BtlLongposPullvsE", + "BTL longitudinal position pull vs E;E_{SIM} [MeV];X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", + 20, + 0., + 20., + -5., + 5., + "S"); + meLongPosPullvsEta_ = ibook.bookProfile( + "BtlLongposPullvsEta", + "BTL longitudinal position pull vs #eta;|#eta_{RECO}|;X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", + 32, + 0, + 1.55, + -5., + 5., + "S"); + meTPullvsE_ = ibook.bookProfile( + "BtlTPullvsE", "BTL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", 20, 0., 20., -5., 5., "S"); + meTPullvsEta_ = ibook.bookProfile("BtlTPullvsEta", + "BTL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", + 32, + 0, + 1.55, + -5., + 5., + "S"); meCluTime_ = ibook.book1D("BtlCluTime", "BTL cluster time ToA;ToA [ns]", 250, 0, 25); + meCluTimeError_ = ibook.book1D("BtlCluTimeError", "BTL cluster time error;#sigma_{t} [ns]", 100, 0, 0.1); meCluEnergy_ = ibook.book1D("BtlCluEnergy", "BTL cluster energy;E_{RECO} [MeV]", 100, 0, 20); meCluPhi_ = ibook.book1D("BtlCluPhi", "BTL cluster #phi;#phi_{RECO} [rad]", 144, -3.2, 3.2); - meCluEta_ = ibook.book1D("BtlCluEta", "BTL cluster #eta;#eta_{RECO}", 100, -1.6, 1.6); + meCluEta_ = ibook.book1D("BtlCluEta", "BTL cluster #eta;#eta_{RECO}", 100, -1.55, 1.55); meCluHits_ = ibook.book1D("BtlCluHitNumber", "BTL hits per cluster; Cluster size", 10, 0, 10); meCluZvsPhi_ = ibook.book2D( "BtlOccupancy", "BTL cluster Z vs #phi;Z_{RECO} [cm]; #phi_{RECO} [rad]", 144, -260., 260., 50, -3.2, 3.2); @@ -316,6 +384,7 @@ void BtlLocalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsBarrel")); desc.add("recCluTag", edm::InputTag("mtdClusters", "FTLBarrel")); desc.add("hitMinimumEnergy", 1.); // [MeV] + desc.add("LocalPositionDebug", false); descriptions.add("btlLocalReco", desc); } diff --git a/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc b/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc index 492a1e454b557..3a31ea77dbceb 100644 --- a/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc +++ b/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc @@ -46,6 +46,7 @@ class EtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; + const bool LocalPosDebug_; edm::EDGetTokenT etlDigiHitsToken_; @@ -58,6 +59,10 @@ class EtlDigiHitsValidation : public DQMEDAnalyzer { MonitorElement* meOccupancy_[4]; + MonitorElement* meLocalOccupancy_[2]; //folding the two ETL discs + MonitorElement* meHitXlocal_[2]; + MonitorElement* meHitYlocal_[2]; + MonitorElement* meHitX_[4]; MonitorElement* meHitY_[4]; MonitorElement* meHitZ_[4]; @@ -73,7 +78,8 @@ class EtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- EtlDigiHitsValidation::EtlDigiHitsValidation(const edm::ParameterSet& iConfig) - : folder_(iConfig.getParameter("folder")) { + : folder_(iConfig.getParameter("folder")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { etlDigiHitsToken_ = consumes(iConfig.getParameter("inputTag")); } @@ -158,6 +164,19 @@ void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe meHitTime_[idet]->Fill(sample.toa()); meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); + if (LocalPosDebug_) { + if ((idet == 0) || (idet == 1)) { + meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[0]->Fill(local_point.x()); + meHitYlocal_[0]->Fill(local_point.y()); + + } else if ((idet == 2) || (idet == 3)) { + meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[1]->Fill(local_point.x()); + meHitYlocal_[1]->Fill(local_point.y()); + } + } + meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); meHitZ_[idet]->Fill(global_point.z()); @@ -272,7 +291,28 @@ void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, 135, -135., 135.); - + if (LocalPosDebug_) { + meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg", + "ETL DIGI hits local occupancy (-Z);X_{DIGI} [cm];Y_{DIGI} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos", + "ETL DIGI hits local occupancy (+Z);X_{DIGI} [cm];Y_{DIGI} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL DIGI local X (-Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2); + meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL DIGI local X (+Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2); + meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1); + meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1); + } meHitX_[0] = ibook.book1D( "EtlHitXZnegD1", "ETL DIGI hits X (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.); meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL DIGI hits X (-Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.); @@ -312,7 +352,6 @@ void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEta_[2] = ibook.book1D( "EtlHitEtaZposD1", "ETL DIGI hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, 1.56, 3.2); meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL DIGI hits #eta (+Z, Second disk);#eta_{DIGI}", 100, 1.56, 3.2); - meHitTvsQ_[0] = ibook.bookProfile( "EtlHitTvsQZnegD1", "ETL DIGI ToA vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]", @@ -477,6 +516,7 @@ void EtlDigiHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& des desc.add("folder", "MTD/ETL/DigiHits"); desc.add("inputTag", edm::InputTag("mix", "FTLEndcap")); + desc.add("LocalPositionDebug", false); descriptions.add("etlDigiHitsDefault", desc); } diff --git a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc index 2da37e10d6df5..9d69904cf54ee 100644 --- a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc @@ -22,16 +22,29 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/Common/interface/ValidHandle.h" +#include "DataFormats/Math/interface/GeantUnits.h" #include "DataFormats/ForwardDetId/interface/ETLDetId.h" #include "DataFormats/FTLRecHit/interface/FTLRecHitCollections.h" #include "DataFormats/FTLRecHit/interface/FTLClusterCollections.h" +#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" +#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" +#include "SimDataFormats/TrackingHit/interface/PSimHit.h" + #include "Geometry/Records/interface/MTDDigiGeometryRecord.h" #include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" #include "Geometry/MTDCommonData/interface/MTDTopologyMode.h" +struct MTDHit { + float energy; + float time; + float x_local; + float y_local; + float z_local; +}; + class EtlLocalRecoValidation : public DQMEDAnalyzer { public: explicit EtlLocalRecoValidation(const edm::ParameterSet&); @@ -49,8 +62,10 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { const std::string folder_; const float hitMinEnergy1Dis_; const float hitMinEnergy2Dis_; + const bool LocalPosDebug_; edm::EDGetTokenT etlRecHitsToken_; + edm::EDGetTokenT > etlSimHitsToken_; edm::EDGetTokenT etlRecCluToken_; // --- histograms declaration @@ -58,9 +73,14 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meNhits_[4]; MonitorElement* meHitEnergy_[4]; MonitorElement* meHitTime_[4]; + MonitorElement* meHitTimeError_[4]; MonitorElement* meOccupancy_[4]; + MonitorElement* meLocalOccupancy_[2]; + MonitorElement* meHitXlocal_[2]; + MonitorElement* meHitYlocal_[2]; + MonitorElement* meHitX_[4]; MonitorElement* meHitY_[4]; MonitorElement* meHitZ_[4]; @@ -74,19 +94,27 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meHitTvsEta_[4]; MonitorElement* meCluTime_[4]; + MonitorElement* meCluTimeError_[4]; MonitorElement* meCluEnergy_[4]; MonitorElement* meCluPhi_[4]; MonitorElement* meCluEta_[4]; MonitorElement* meCluHits_[4]; MonitorElement* meCluOccupancy_[4]; + + MonitorElement* meTimeRes_; + MonitorElement* meEnergyRes_; + MonitorElement* meTPullvsE_; + MonitorElement* meTPullvsEta_; }; // ------------ constructor and destructor -------------- EtlLocalRecoValidation::EtlLocalRecoValidation(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")), hitMinEnergy1Dis_(iConfig.getParameter("hitMinimumEnergy1Dis")), - hitMinEnergy2Dis_(iConfig.getParameter("hitMinimumEnergy2Dis")) { + hitMinEnergy2Dis_(iConfig.getParameter("hitMinimumEnergy2Dis")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { etlRecHitsToken_ = consumes(iConfig.getParameter("recHitsTag")); + etlSimHitsToken_ = consumes >(iConfig.getParameter("simHitsTag")); etlRecCluToken_ = consumes(iConfig.getParameter("recCluTag")); } @@ -96,6 +124,8 @@ EtlLocalRecoValidation::~EtlLocalRecoValidation() {} void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; using namespace std; + using namespace geant_units::operators; + edm::ESHandle topologyHandle; iSetup.get().get(topologyHandle); const MTDTopology* topology = topologyHandle.product(); @@ -114,10 +144,50 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS const MTDGeometry* geom = geometryHandle.product(); auto etlRecHitsHandle = makeValid(iEvent.getHandle(etlRecHitsToken_)); + auto etlSimHitsHandle = makeValid(iEvent.getHandle(etlSimHitsToken_)); auto etlRecCluHandle = makeValid(iEvent.getHandle(etlRecCluToken_)); + MixCollection etlSimHits(etlSimHitsHandle.product()); + + // --- Loop over the ETL SIM hits + std::unordered_map m_etlSimHits[4]; + for (auto const& simHit : etlSimHits) { + // --- Use only hits compatible with the in-time bunch-crossing + if (simHit.tof() < 0 || simHit.tof() > 25.) + continue; + + ETLDetId id = simHit.detUnitId(); + + int idet = -1; + + if ((id.zside() == -1) && (id.nDisc() == 1)) + idet = 0; + else if ((id.zside() == -1) && (id.nDisc() == 2)) + idet = 1; + else if ((id.zside() == 1) && (id.nDisc() == 1)) + idet = 2; + else if ((id.zside() == 1) && (id.nDisc() == 2)) + idet = 3; + else + continue; + + auto simHitIt = m_etlSimHits[idet].emplace(id.rawId(), MTDHit()).first; + + // --- Accumulate the energy (in MeV) of SIM hits in the same detector cell + (simHitIt->second).energy += convertUnitsTo(0.001_MeV, simHit.energyLoss()); + + // --- Get the time of the first SIM hit in the cell + if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) { + (simHitIt->second).time = simHit.tof(); + + auto hit_pos = simHit.entryPoint(); + (simHitIt->second).x_local = hit_pos.x(); + (simHitIt->second).y_local = hit_pos.y(); + (simHitIt->second).z_local = hit_pos.z(); + } - // --- Loop over the ELT RECO hits + } // simHit loop + // --- Loop over the ELT RECO hits unsigned int n_reco_etl[4] = {0, 0, 0, 0}; for (const auto& recHit : *etlRecHitsHandle) { double weight = 1.0; @@ -165,8 +235,22 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitEnergy_[idet]->Fill(recHit.energy()); meHitTime_[idet]->Fill(recHit.time()); + meHitTimeError_[idet]->Fill(recHit.timeError()); meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); + + if (LocalPosDebug_) { + if ((idet == 0) || (idet == 1)) { + meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[0]->Fill(local_point.x()); + meHitYlocal_[0]->Fill(local_point.y()); + } + if ((idet == 2) || (idet == 3)) { + meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[1]->Fill(local_point.x()); + meHitYlocal_[1]->Fill(local_point.y()); + } + } meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); meHitZ_[idet]->Fill(global_point.z()); @@ -178,6 +262,21 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitTvsPhi_[idet]->Fill(global_point.phi(), recHit.time()); meHitTvsEta_[idet]->Fill(global_point.eta(), recHit.time()); + // Resolution histograms + if (m_etlSimHits[idet].count(detId.rawId()) == 1) { + if ((topo1Dis && m_etlSimHits[idet][detId.rawId()].energy > hitMinEnergy1Dis_) || + (topo2Dis && m_etlSimHits[idet][detId.rawId()].energy > hitMinEnergy2Dis_)) { + float time_res = recHit.time() - m_etlSimHits[idet][detId.rawId()].time; + float energy_res = recHit.energy() - m_etlSimHits[idet][detId.rawId()].energy; + + meTimeRes_->Fill(time_res); + meEnergyRes_->Fill(energy_res); + + meTPullvsEta_->Fill(std::abs(global_point.eta()), time_res / recHit.timeError()); + meTPullvsE_->Fill(m_etlSimHits[idet][detId.rawId()].energy, time_res / recHit.timeError()); + } + } + n_reco_etl[idet]++; } // recHit loop @@ -248,6 +347,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meCluEnergy_[idet]->Fill(cluster.energy()); meCluTime_[idet]->Fill(cluster.time()); + meCluTimeError_[idet]->Fill(cluster.timeError()); meCluPhi_[idet]->Fill(global_point.phi()); meCluEta_[idet]->Fill(global_point.eta()); meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); @@ -284,6 +384,22 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitTime_[2] = ibook.book1D( "EtlHitTimeZposD1", "ETL RECO hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.); meHitTime_[3] = ibook.book1D("EtlHitTimeZposD2", "ETL RECO hits ToA (+Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.); + meHitTimeError_[0] = + ibook.book1D("EtlHitTimeErrorZnegD1", + "ETL RECO hits ToA error (-Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]", + 50, + 0., + 0.1); + meHitTimeError_[1] = ibook.book1D( + "EtlHitTimeErrorZnegD2", "ETL RECO hits ToA error(-Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1); + meHitTimeError_[2] = + ibook.book1D("EtlHitTimeErrorZposD1", + "ETL RECO hits ToA error (+Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]", + 50, + 0., + 0.1); + meHitTimeError_[3] = ibook.book1D( + "EtlHitTimeErrorZposD2", "ETL RECO hits ToA error(+Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1); meOccupancy_[0] = ibook.book2D("EtlOccupancyZnegD1", @@ -319,7 +435,28 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 135, -135., 135.); - + if (LocalPosDebug_) { + meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg", + "ETL RECO hits local occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos", + "ETL RECO hits local occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL RECO local X (-Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2); + meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL RECO local X (+Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2); + meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1); + meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1); + } meHitX_[0] = ibook.book1D( "EtlHitXZnegD1", "ETL RECO hits X (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.); meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL RECO hits X (-Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.); @@ -352,7 +489,8 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEta_[2] = ibook.book1D( "EtlHitEtaZposD1", "ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2); meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2); - + meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5); meHitTvsE_[0] = ibook.bookProfile( "EtlHitTvsEZnegD1", "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]", @@ -503,12 +641,36 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 3.2, 0., 100.); + meTPullvsE_ = ibook.bookProfile( + "EtlTPullvsE", "ETL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", 20, 0., 2., -5., 5., "S"); + meTPullvsEta_ = ibook.bookProfile("EtlTPullvsEta", + "ETL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", + 26, + 1.65, + 3.0, + -5., + 5., + "S"); meCluTime_[0] = ibook.book1D("EtlCluTimeZnegD1", "ETL cluster ToA (-Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25); meCluTime_[1] = ibook.book1D("EtlCluTimeZnegD2", "ETL cluster ToA (-Z, Second Disk);ToA [ns]", 250, 0, 25); meCluTime_[2] = ibook.book1D("EtlCluTimeZposD1", "ETL cluster ToA (+Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25); meCluTime_[3] = ibook.book1D("EtlCluTimeZposD2", "ETL cluster ToA (+Z, Second Disk);ToA [ns]", 250, 0, 25); + meCluTimeError_[0] = ibook.book1D("EtlCluTimeErrosZnegD1", + "ETL cluster time error (-Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]", + 100, + 0, + 0.1); + meCluTimeError_[1] = + ibook.book1D("EtlCluTimeErrorZnegD2", "ETL cluster time error (-Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1); + meCluTimeError_[2] = ibook.book1D("EtlCluTimeErrorZposD1", + "ETL cluster time error (+Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]", + 100, + 0, + 0.1); + meCluTimeError_[3] = + ibook.book1D("EtlCluTimeErrorZposD2", "ETL cluster time error (+Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1); meCluEnergy_[0] = ibook.book1D( "EtlCluEnergyZnegD1", "ETL cluster energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 100, 0, 10); meCluEnergy_[1] = @@ -581,9 +743,11 @@ void EtlLocalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("folder", "MTD/ETL/LocalReco"); desc.add("recHitsTag", edm::InputTag("mtdRecHits", "FTLEndcap")); + desc.add("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsEndcap")); desc.add("recCluTag", edm::InputTag("mtdClusters", "FTLEndcap")); desc.add("hitMinimumEnergy1Dis", 1.); // [MeV] desc.add("hitMinimumEnergy2Dis", 0.001); // [MeV] + desc.add("LocalPositionDebug", false); descriptions.add("etlLocalReco", desc); } diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc b/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc deleted file mode 100644 index 57b0a3b830559..0000000000000 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc +++ /dev/null @@ -1,261 +0,0 @@ -#include - -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DQMServices/Core/interface/DQMEDHarvester.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "DataFormats/ForwardDetId/interface/ETLDetId.h" - -class MtdGlobalRecoHarvester : public DQMEDHarvester { -public: - explicit MtdGlobalRecoHarvester(const edm::ParameterSet& iConfig); - ~MtdGlobalRecoHarvester() override; - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - -protected: - void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; - -private: - const std::string folder_; - - // --- Histograms - MonitorElement* meBtlEtaEff_; - MonitorElement* meBtlPhiEff_; - MonitorElement* meBtlPtEff_; - MonitorElement* meEtlEtaEff_[2]; - MonitorElement* meEtlPhiEff_[2]; - MonitorElement* meEtlPtEff_[2]; -}; - -// ------------ constructor and destructor -------------- -MtdGlobalRecoHarvester::MtdGlobalRecoHarvester(const edm::ParameterSet& iConfig) - : folder_(iConfig.getParameter("folder")) {} - -MtdGlobalRecoHarvester::~MtdGlobalRecoHarvester() {} - -// ------------ endjob tasks ---------------------------- -void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) { - // --- Get the monitoring histograms - MonitorElement* meBTLTrackEffEtaTot = igetter.get(folder_ + "TrackBTLEffEtaTot"); - MonitorElement* meBTLTrackEffPhiTot = igetter.get(folder_ + "TrackBTLEffPhiTot"); - MonitorElement* meBTLTrackEffPtTot = igetter.get(folder_ + "TrackBTLEffPtTot"); - MonitorElement* meBTLTrackEffEtaMtd = igetter.get(folder_ + "TrackBTLEffEtaMtd"); - MonitorElement* meBTLTrackEffPhiMtd = igetter.get(folder_ + "TrackBTLEffPhiMtd"); - MonitorElement* meBTLTrackEffPtMtd = igetter.get(folder_ + "TrackBTLEffPtMtd"); - MonitorElement* meETLTrackEffEtaTotZneg = igetter.get(folder_ + "TrackETLEffEtaTotZneg"); - MonitorElement* meETLTrackEffPhiTotZneg = igetter.get(folder_ + "TrackETLEffPhiTotZneg"); - MonitorElement* meETLTrackEffPtTotZneg = igetter.get(folder_ + "TrackETLEffPtTotZneg"); - 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* 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 || !meETLTrackEffEtaMtdZneg || !meETLTrackEffPhiMtdZneg || !meETLTrackEffPtMtdZneg || - !meETLTrackEffEtaTotZpos || !meETLTrackEffPhiTotZpos || !meETLTrackEffPtTotZpos || !meETLTrackEffEtaMtdZpos || - !meETLTrackEffPhiMtdZpos || !meETLTrackEffPtMtdZpos) { - edm::LogError("MtdGlobalRecoHarvester") << "Monitoring histograms not found!" << std::endl; - return; - } - - // --- Book histograms - ibook.cd(folder_); - meBtlEtaEff_ = ibook.book1D("BtlEtaEff", - " Track Efficiency VS Eta;#eta;Efficiency", - meBTLTrackEffEtaTot->getNbinsX(), - meBTLTrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(), - meBTLTrackEffEtaTot->getTH1()->GetXaxis()->GetXmax()); - meBtlPhiEff_ = ibook.book1D("BtlPhiEff", - "Track Efficiency VS Phi;#phi [rad];Efficiency", - meBTLTrackEffPhiTot->getNbinsX(), - meBTLTrackEffPhiTot->getTH1()->GetXaxis()->GetXmin(), - meBTLTrackEffPhiTot->getTH1()->GetXaxis()->GetXmax()); - meBtlPtEff_ = ibook.book1D("BtlPtEff", - "Track Efficiency VS Pt;Pt [GeV];Efficiency", - meBTLTrackEffPtTot->getNbinsX(), - meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmin(), - meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmax()); - meEtlEtaEff_[0] = ibook.book1D("EtlEtaEffZneg", - " Track Efficiency VS Eta (-Z);#eta;Efficiency", - meETLTrackEffEtaTotZneg->getNbinsX(), - meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax()); - 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("EtlPtEffZneg", - "Track Efficiency VS Pt (-Z);Pt [GeV];Efficiency", - meETLTrackEffPtTotZneg->getNbinsX(), - meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax()); - meEtlEtaEff_[1] = ibook.book1D("EtlEtaEffZpos", - " Track Efficiency VS Eta (+Z);#eta;Efficiency", - meETLTrackEffEtaTotZpos->getNbinsX(), - meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax()); - meEtlPhiEff_[1] = ibook.book1D("EtlPhiEffZpos", - "Track Efficiency VS Phi (+Z);#phi [rad];Efficiency", - meETLTrackEffPhiTotZpos->getNbinsX(), - meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(), - meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax()); - 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 < 2; i++) { - meEtlEtaEff_[i]->getTH1()->SetMinimum(0.); - meEtlPhiEff_[i]->getTH1()->SetMinimum(0.); - meEtlPtEff_[i]->getTH1()->SetMinimum(0.); - } - - // --- Calculate efficiency BTL - for (int ibin = 1; ibin <= meBTLTrackEffEtaTot->getNbinsX(); ibin++) { - double eff = meBTLTrackEffEtaMtd->getBinContent(ibin) / meBTLTrackEffEtaTot->getBinContent(ibin); - double bin_err = sqrt((meBTLTrackEffEtaMtd->getBinContent(ibin) * - (meBTLTrackEffEtaTot->getBinContent(ibin) - meBTLTrackEffEtaMtd->getBinContent(ibin))) / - pow(meBTLTrackEffEtaTot->getBinContent(ibin), 3)); - if (meBTLTrackEffEtaTot->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meBtlEtaEff_->setBinContent(ibin, eff); - meBtlEtaEff_->setBinError(ibin, bin_err); - } - for (int ibin = 1; ibin <= meBTLTrackEffPhiTot->getNbinsX(); ibin++) { - double eff = meBTLTrackEffPhiMtd->getBinContent(ibin) / meBTLTrackEffPhiTot->getBinContent(ibin); - double bin_err = sqrt((meBTLTrackEffPhiMtd->getBinContent(ibin) * - (meBTLTrackEffPhiTot->getBinContent(ibin) - meBTLTrackEffPhiMtd->getBinContent(ibin))) / - pow(meBTLTrackEffPhiTot->getBinContent(ibin), 3)); - if (meBTLTrackEffPhiTot->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meBtlPhiEff_->setBinContent(ibin, eff); - meBtlPhiEff_->setBinError(ibin, bin_err); - } - for (int ibin = 1; ibin <= meBTLTrackEffPtTot->getNbinsX(); ibin++) { - double eff = meBTLTrackEffPtMtd->getBinContent(ibin) / meBTLTrackEffPtTot->getBinContent(ibin); - double bin_err = sqrt((meBTLTrackEffPtMtd->getBinContent(ibin) * - (meBTLTrackEffPtTot->getBinContent(ibin) - meBTLTrackEffPtMtd->getBinContent(ibin))) / - pow(meBTLTrackEffPtTot->getBinContent(ibin), 3)); - if (meBTLTrackEffPtTot->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meBtlPtEff_->setBinContent(ibin, eff); - meBtlPtEff_->setBinError(ibin, bin_err); - } - // --- Calculate efficiency ETL - for (int ibin = 1; ibin <= meETLTrackEffEtaTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffEtaMtdZneg->getBinContent(ibin) / meETLTrackEffEtaTotZneg->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffEtaMtdZneg->getBinContent(ibin) * - (meETLTrackEffEtaTotZneg->getBinContent(ibin) - meETLTrackEffEtaMtdZneg->getBinContent(ibin))) / - pow(meETLTrackEffEtaTotZneg->getBinContent(ibin), 3)); - if (meETLTrackEffEtaTotZneg->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlEtaEff_[0]->setBinContent(ibin, eff); - meEtlEtaEff_[0]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffEtaTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffEtaMtdZpos->getBinContent(ibin) / meETLTrackEffEtaTotZpos->getBinContent(ibin); - double bin_err = - 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_[1]->setBinContent(ibin, eff); - meEtlEtaEff_[1]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffPhiTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffPhiMtdZneg->getBinContent(ibin) / meETLTrackEffPhiTotZneg->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffPhiMtdZneg->getBinContent(ibin) * - (meETLTrackEffPhiTotZneg->getBinContent(ibin) - meETLTrackEffPhiMtdZneg->getBinContent(ibin))) / - pow(meETLTrackEffPhiTotZneg->getBinContent(ibin), 3)); - if (meETLTrackEffPhiTotZneg->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlPhiEff_[0]->setBinContent(ibin, eff); - meEtlPhiEff_[0]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffPhiTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffPhiMtdZpos->getBinContent(ibin) / meETLTrackEffPhiTotZpos->getBinContent(ibin); - double bin_err = - 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_[1]->setBinContent(ibin, eff); - meEtlPhiEff_[1]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffPtTotZneg->getNbinsX(); ibin++) { - double eff = meETLTrackEffPtMtdZneg->getBinContent(ibin) / meETLTrackEffPtTotZneg->getBinContent(ibin); - double bin_err = - sqrt((meETLTrackEffPtMtdZneg->getBinContent(ibin) * - (meETLTrackEffPtTotZneg->getBinContent(ibin) - meETLTrackEffPtMtdZneg->getBinContent(ibin))) / - pow(meETLTrackEffPtTotZneg->getBinContent(ibin), 3)); - if (meETLTrackEffPtTotZneg->getBinContent(ibin) == 0) { - eff = 0; - bin_err = 0; - } - meEtlPtEff_[0]->setBinContent(ibin, eff); - meEtlPtEff_[0]->setBinError(ibin, bin_err); - } - - for (int ibin = 1; ibin <= meETLTrackEffPtTotZpos->getNbinsX(); ibin++) { - double eff = meETLTrackEffPtMtdZpos->getBinContent(ibin) / meETLTrackEffPtTotZpos->getBinContent(ibin); - double bin_err = - 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_[1]->setBinContent(ibin, eff); - meEtlPtEff_[1]->setBinError(ibin, bin_err); - } -} - -// ------------ method fills 'descriptions' with the allowed parameters for the module ---------- -void MtdGlobalRecoHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - - desc.add("folder", "MTD/GlobalReco/"); - - descriptions.add("MtdGlobalRecoPostProcessor", desc); -} - -DEFINE_FWK_MODULE(MtdGlobalRecoHarvester); diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc b/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc deleted file mode 100644 index 62675608c0b9f..0000000000000 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc +++ /dev/null @@ -1,311 +0,0 @@ -#include - -#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/DQMEDAnalyzer.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "DataFormats/Common/interface/ValidHandle.h" -#include "DataFormats/Math/interface/GeantUnits.h" -#include "DataFormats/ForwardDetId/interface/ETLDetId.h" -#include "DataFormats/ForwardDetId/interface/BTLDetId.h" - -#include "DataFormats/Common/interface/Ptr.h" -#include "DataFormats/Common/interface/PtrVector.h" -#include "DataFormats/Common/interface/RefProd.h" -#include "DataFormats/Common/interface/Ref.h" -#include "DataFormats/Common/interface/RefVector.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/VertexReco/interface/Vertex.h" - -#include "Geometry/Records/interface/MTDDigiGeometryRecord.h" -#include "Geometry/Records/interface/MTDTopologyRcd.h" -#include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" -#include "Geometry/MTDCommonData/interface/MTDTopologyMode.h" -#include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h" -#include "Geometry/MTDGeometryBuilder/interface/ProxyMTDTopology.h" -#include "Geometry/MTDGeometryBuilder/interface/RectangularMTDTopology.h" - -class MtdGlobalRecoValidation : public DQMEDAnalyzer { -public: - explicit MtdGlobalRecoValidation(const edm::ParameterSet&); - ~MtdGlobalRecoValidation() override; - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - -private: - void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; - - void analyze(const edm::Event&, const edm::EventSetup&) override; - - // ------------ member data ------------ - - const std::string folder_; - const float trackMinEnergy_; - const float trackMinEta_; - const float trackMaxEta_; - - edm::EDGetTokenT RecTrackToken_; - edm::EDGetTokenT> RecVertexToken_; - - MonitorElement* meBTLTrackRPTime_; - MonitorElement* meBTLTrackEffEtaTot_; - MonitorElement* meBTLTrackEffPhiTot_; - MonitorElement* meBTLTrackEffPtTot_; - MonitorElement* meBTLTrackEffEtaMtd_; - MonitorElement* meBTLTrackEffPhiMtd_; - MonitorElement* meBTLTrackEffPtMtd_; - - MonitorElement* meETLTrackRPTime_[4]; - MonitorElement* meETLTrackNumHits_[4]; - MonitorElement* meETLTrackEffEtaTot_[2]; - MonitorElement* meETLTrackEffPhiTot_[2]; - MonitorElement* meETLTrackEffPtTot_[2]; - MonitorElement* meETLTrackEffEtaMtd_[2]; - MonitorElement* meETLTrackEffPhiMtd_[2]; - MonitorElement* meETLTrackEffPtMtd_[2]; - - MonitorElement* meTrackNumHits_; - - MonitorElement* meVerNumber_; - MonitorElement* meVerZ_; - MonitorElement* meVerTime_; -}; - -// ------------ constructor and destructor -------------- -MtdGlobalRecoValidation::MtdGlobalRecoValidation(const edm::ParameterSet& iConfig) - : folder_(iConfig.getParameter("folder")), - trackMinEnergy_(iConfig.getParameter("trackMinimumEnergy")), - trackMinEta_(iConfig.getParameter("trackMinimumEta")), - trackMaxEta_(iConfig.getParameter("trackMaximumEta")) { - RecTrackToken_ = consumes(iConfig.getParameter("inputTagT")); - RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); -} - -MtdGlobalRecoValidation::~MtdGlobalRecoValidation() {} - -// ------------ method called for each event ------------ -void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace geant_units::operators; - using namespace std; - - edm::ESHandle topologyHandle; - iSetup.get().get(topologyHandle); - const MTDTopology* topology = topologyHandle.product(); - - bool topo1Dis = false; - bool topo2Dis = false; - if (topology->getMTDTopologyMode() <= static_cast(MTDTopologyMode::Mode::barphiflat)) { - topo1Dis = true; - } - if (topology->getMTDTopologyMode() > static_cast(MTDTopologyMode::Mode::barphiflat)) { - topo2Dis = true; - } - - auto RecTrackHandle = makeValid(iEvent.getHandle(RecTrackToken_)); - auto RecVertexHandle = makeValid(iEvent.getHandle(RecVertexToken_)); - - // --- Loop over all RECO tracks --- - for (const auto& track : *RecTrackHandle) { - if (track.pt() < trackMinEnergy_) - continue; - - if (fabs(track.eta()) < trackMinEta_) { - // --- all BTL tracks (with and without hit in MTD) --- - meBTLTrackEffEtaTot_->Fill(track.eta()); - meBTLTrackEffPhiTot_->Fill(track.phi()); - meBTLTrackEffPtTot_->Fill(track.pt()); - - bool MTDBtl = false; - int numMTDBtlvalidhits = 0; - for (const auto hit : track.recHits()) { - if (hit->isValid() == false) - continue; - MTDDetId Hit = hit->geographicalId(); - if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) { - MTDBtl = true; - numMTDBtlvalidhits++; - } - } - meTrackNumHits_->Fill(numMTDBtlvalidhits); - - // --- keeping only tracks with last hit in MTD --- - if (MTDBtl == true) { - meBTLTrackEffEtaMtd_->Fill(track.eta()); - meBTLTrackEffPhiMtd_->Fill(track.phi()); - meBTLTrackEffPtMtd_->Fill(track.pt()); - meBTLTrackRPTime_->Fill(track.t0()); - } - } - - else { - // --- all ETL tracks (with and without hit in MTD) --- - if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - meETLTrackEffEtaTot_[0]->Fill(track.eta()); - meETLTrackEffPhiTot_[0]->Fill(track.phi()); - meETLTrackEffPtTot_[0]->Fill(track.pt()); - } - - if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - meETLTrackEffEtaTot_[1]->Fill(track.eta()); - meETLTrackEffPhiTot_[1]->Fill(track.phi()); - meETLTrackEffPtTot_[1]->Fill(track.pt()); - } - - bool MTDEtlZnegD1 = false; - bool MTDEtlZnegD2 = false; - bool MTDEtlZposD1 = false; - bool MTDEtlZposD2 = false; - int numMTDEtlvalidhits = 0; - for (const auto hit : track.recHits()) { - if (hit->isValid() == false) - continue; - MTDDetId Hit = hit->geographicalId(); - if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2)) { - ETLDetId ETLHit = hit->geographicalId(); - - 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++; - } - } - - 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++; - } - } - } - } - meTrackNumHits_->Fill(-numMTDEtlvalidhits); - - // --- keeping only tracks with last hit in MTD --- - if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { - meETLTrackEffEtaMtd_[0]->Fill(track.eta()); - meETLTrackEffPhiMtd_[0]->Fill(track.phi()); - meETLTrackEffPtMtd_[0]->Fill(track.pt()); - } - } - 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()); - } - } - } - } //RECO tracks loop - - // --- Loop over the RECO vertices --- - int nv = 0; - for (const auto& v : *RecVertexHandle) { - if (v.isValid()) { - meVerZ_->Fill(v.z()); - meVerTime_->Fill(v.t()); - nv++; - } else - cout << "The vertex is not valid" << endl; - } - meVerNumber_->Fill(nv); -} - -// ------------ method for histogram booking ------------ -void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, - edm::Run const& run, - edm::EventSetup const& iSetup) { - ibook.setCurrentFolder(folder_); - - // histogram booking - meBTLTrackRPTime_ = ibook.book1D("TrackBTLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); - meBTLTrackEffEtaTot_ = ibook.book1D("TrackBTLEffEtaTot", "Track efficiency vs eta (Tot);#eta_{RECO}", 100, -1.6, 1.6); - meBTLTrackEffPhiTot_ = - ibook.book1D("TrackBTLEffPhiTot", "Track efficiency vs phi (Tot);#phi_{RECO} [rad]", 100, -3.2, 3.2); - meBTLTrackEffPtTot_ = ibook.book1D("TrackBTLEffPtTot", "Track efficiency vs pt (Tot);pt_{RECO} [GeV]", 50, 0, 10); - meBTLTrackEffEtaMtd_ = ibook.book1D("TrackBTLEffEtaMtd", "Track efficiency vs eta (Mtd);#eta_{RECO}", 100, -1.6, 1.6); - meBTLTrackEffPhiMtd_ = - 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, 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] = - ibook.book1D("TrackETLRPTimeZposD1", "Track t0 with respect to R.P. (+Z, First Disk);t0 [ns]", 100, -1, 3); - meETLTrackRPTime_[3] = - ibook.book1D("TrackETLRPTimeZposD2", "Track t0 with respect to R.P. (+Z, Second Disk);t0 [ns]", 100, -1, 3); - meETLTrackEffEtaTot_[0] = - ibook.book1D("TrackETLEffEtaTotZneg", "Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4); - meETLTrackEffEtaTot_[1] = - ibook.book1D("TrackETLEffEtaTotZpos", "Track efficiency vs eta (Tot) (+Z);#eta_{RECO}", 100, 1.4, 3.2); - meETLTrackEffPhiTot_[0] = - ibook.book1D("TrackETLEffPhiTotZneg", "Track efficiency vs phi (Tot) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); - meETLTrackEffPhiTot_[1] = - ibook.book1D("TrackETLEffPhiTotZpos", "Track efficiency vs phi (Tot) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); - meETLTrackEffPtTot_[0] = - ibook.book1D("TrackETLEffPtTotZneg", "Track efficiency vs pt (Tot) (-Z);pt_{RECO} [GeV]", 50, 0, 10); - meETLTrackEffPtTot_[1] = - ibook.book1D("TrackETLEffPtTotZpos", "Track efficiency vs pt (Tot) (+Z);pt_{RECO} [GeV]", 50, 0, 10); - meETLTrackEffEtaMtd_[0] = - 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("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("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); - meVerNumber_ = ibook.book1D("VerNumber", "RECO Vertex Number: Number of vertices", 100, 0, 500); -} - -// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ - -void MtdGlobalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - - desc.add("folder", "MTD/GlobalReco"); - desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); - desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D", "")); - desc.add("trackMinimumEnergy", 1.0); // [GeV] - desc.add("trackMinimumEta", 1.5); - desc.add("trackMaximumEta", 3.2); - - descriptions.add("globalReco", desc); -} - -DEFINE_FWK_MODULE(MtdGlobalRecoValidation); diff --git a/Validation/MtdValidation/plugins/MtdTracksHarvester.cc b/Validation/MtdValidation/plugins/MtdTracksHarvester.cc new file mode 100644 index 0000000000000..112f5bd263980 --- /dev/null +++ b/Validation/MtdValidation/plugins/MtdTracksHarvester.cc @@ -0,0 +1,261 @@ +#include + +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DQMServices/Core/interface/DQMEDHarvester.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/ForwardDetId/interface/ETLDetId.h" + +class MtdTracksHarvester : public DQMEDHarvester { +public: + explicit MtdTracksHarvester(const edm::ParameterSet& iConfig); + ~MtdTracksHarvester() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +protected: + void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; + +private: + const std::string folder_; + + // --- Histograms + MonitorElement* meBtlEtaEff_; + MonitorElement* meBtlPhiEff_; + MonitorElement* meBtlPtEff_; + MonitorElement* meEtlEtaEff_[2]; + MonitorElement* meEtlPhiEff_[2]; + MonitorElement* meEtlPtEff_[2]; +}; + +// ------------ constructor and destructor -------------- +MtdTracksHarvester::MtdTracksHarvester(const edm::ParameterSet& iConfig) + : folder_(iConfig.getParameter("folder")) {} + +MtdTracksHarvester::~MtdTracksHarvester() {} + +// ------------ endjob tasks ---------------------------- +void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) { + // --- Get the monitoring histograms + MonitorElement* meBTLTrackEffEtaTot = igetter.get(folder_ + "TrackBTLEffEtaTot"); + MonitorElement* meBTLTrackEffPhiTot = igetter.get(folder_ + "TrackBTLEffPhiTot"); + MonitorElement* meBTLTrackEffPtTot = igetter.get(folder_ + "TrackBTLEffPtTot"); + MonitorElement* meBTLTrackEffEtaMtd = igetter.get(folder_ + "TrackBTLEffEtaMtd"); + MonitorElement* meBTLTrackEffPhiMtd = igetter.get(folder_ + "TrackBTLEffPhiMtd"); + MonitorElement* meBTLTrackEffPtMtd = igetter.get(folder_ + "TrackBTLEffPtMtd"); + MonitorElement* meETLTrackEffEtaTotZneg = igetter.get(folder_ + "TrackETLEffEtaTotZneg"); + MonitorElement* meETLTrackEffPhiTotZneg = igetter.get(folder_ + "TrackETLEffPhiTotZneg"); + MonitorElement* meETLTrackEffPtTotZneg = igetter.get(folder_ + "TrackETLEffPtTotZneg"); + 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* 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 || !meETLTrackEffEtaMtdZneg || !meETLTrackEffPhiMtdZneg || !meETLTrackEffPtMtdZneg || + !meETLTrackEffEtaTotZpos || !meETLTrackEffPhiTotZpos || !meETLTrackEffPtTotZpos || !meETLTrackEffEtaMtdZpos || + !meETLTrackEffPhiMtdZpos || !meETLTrackEffPtMtdZpos) { + edm::LogError("MtdTracksHarvester") << "Monitoring histograms not found!" << std::endl; + return; + } + + // --- Book histograms + ibook.cd(folder_); + meBtlEtaEff_ = ibook.book1D("BtlEtaEff", + " Track Efficiency VS Eta;#eta;Efficiency", + meBTLTrackEffEtaTot->getNbinsX(), + meBTLTrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(), + meBTLTrackEffEtaTot->getTH1()->GetXaxis()->GetXmax()); + meBtlPhiEff_ = ibook.book1D("BtlPhiEff", + "Track Efficiency VS Phi;#phi [rad];Efficiency", + meBTLTrackEffPhiTot->getNbinsX(), + meBTLTrackEffPhiTot->getTH1()->GetXaxis()->GetXmin(), + meBTLTrackEffPhiTot->getTH1()->GetXaxis()->GetXmax()); + meBtlPtEff_ = ibook.book1D("BtlPtEff", + "Track Efficiency VS Pt;Pt [GeV];Efficiency", + meBTLTrackEffPtTot->getNbinsX(), + meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmin(), + meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmax()); + meEtlEtaEff_[0] = ibook.book1D("EtlEtaEffZneg", + " Track Efficiency VS Eta (-Z);#eta;Efficiency", + meETLTrackEffEtaTotZneg->getNbinsX(), + meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(), + meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax()); + 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("EtlPtEffZneg", + "Track Efficiency VS Pt (-Z);Pt [GeV];Efficiency", + meETLTrackEffPtTotZneg->getNbinsX(), + meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(), + meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax()); + meEtlEtaEff_[1] = ibook.book1D("EtlEtaEffZpos", + " Track Efficiency VS Eta (+Z);#eta;Efficiency", + meETLTrackEffEtaTotZpos->getNbinsX(), + meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(), + meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax()); + meEtlPhiEff_[1] = ibook.book1D("EtlPhiEffZpos", + "Track Efficiency VS Phi (+Z);#phi [rad];Efficiency", + meETLTrackEffPhiTotZpos->getNbinsX(), + meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(), + meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax()); + 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 < 2; i++) { + meEtlEtaEff_[i]->getTH1()->SetMinimum(0.); + meEtlPhiEff_[i]->getTH1()->SetMinimum(0.); + meEtlPtEff_[i]->getTH1()->SetMinimum(0.); + } + + // --- Calculate efficiency BTL + for (int ibin = 1; ibin <= meBTLTrackEffEtaTot->getNbinsX(); ibin++) { + double eff = meBTLTrackEffEtaMtd->getBinContent(ibin) / meBTLTrackEffEtaTot->getBinContent(ibin); + double bin_err = sqrt((meBTLTrackEffEtaMtd->getBinContent(ibin) * + (meBTLTrackEffEtaTot->getBinContent(ibin) - meBTLTrackEffEtaMtd->getBinContent(ibin))) / + pow(meBTLTrackEffEtaTot->getBinContent(ibin), 3)); + if (meBTLTrackEffEtaTot->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meBtlEtaEff_->setBinContent(ibin, eff); + meBtlEtaEff_->setBinError(ibin, bin_err); + } + for (int ibin = 1; ibin <= meBTLTrackEffPhiTot->getNbinsX(); ibin++) { + double eff = meBTLTrackEffPhiMtd->getBinContent(ibin) / meBTLTrackEffPhiTot->getBinContent(ibin); + double bin_err = sqrt((meBTLTrackEffPhiMtd->getBinContent(ibin) * + (meBTLTrackEffPhiTot->getBinContent(ibin) - meBTLTrackEffPhiMtd->getBinContent(ibin))) / + pow(meBTLTrackEffPhiTot->getBinContent(ibin), 3)); + if (meBTLTrackEffPhiTot->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meBtlPhiEff_->setBinContent(ibin, eff); + meBtlPhiEff_->setBinError(ibin, bin_err); + } + for (int ibin = 1; ibin <= meBTLTrackEffPtTot->getNbinsX(); ibin++) { + double eff = meBTLTrackEffPtMtd->getBinContent(ibin) / meBTLTrackEffPtTot->getBinContent(ibin); + double bin_err = sqrt((meBTLTrackEffPtMtd->getBinContent(ibin) * + (meBTLTrackEffPtTot->getBinContent(ibin) - meBTLTrackEffPtMtd->getBinContent(ibin))) / + pow(meBTLTrackEffPtTot->getBinContent(ibin), 3)); + if (meBTLTrackEffPtTot->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meBtlPtEff_->setBinContent(ibin, eff); + meBtlPtEff_->setBinError(ibin, bin_err); + } + // --- Calculate efficiency ETL + for (int ibin = 1; ibin <= meETLTrackEffEtaTotZneg->getNbinsX(); ibin++) { + double eff = meETLTrackEffEtaMtdZneg->getBinContent(ibin) / meETLTrackEffEtaTotZneg->getBinContent(ibin); + double bin_err = + sqrt((meETLTrackEffEtaMtdZneg->getBinContent(ibin) * + (meETLTrackEffEtaTotZneg->getBinContent(ibin) - meETLTrackEffEtaMtdZneg->getBinContent(ibin))) / + pow(meETLTrackEffEtaTotZneg->getBinContent(ibin), 3)); + if (meETLTrackEffEtaTotZneg->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlEtaEff_[0]->setBinContent(ibin, eff); + meEtlEtaEff_[0]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meETLTrackEffEtaTotZpos->getNbinsX(); ibin++) { + double eff = meETLTrackEffEtaMtdZpos->getBinContent(ibin) / meETLTrackEffEtaTotZpos->getBinContent(ibin); + double bin_err = + 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_[1]->setBinContent(ibin, eff); + meEtlEtaEff_[1]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meETLTrackEffPhiTotZneg->getNbinsX(); ibin++) { + double eff = meETLTrackEffPhiMtdZneg->getBinContent(ibin) / meETLTrackEffPhiTotZneg->getBinContent(ibin); + double bin_err = + sqrt((meETLTrackEffPhiMtdZneg->getBinContent(ibin) * + (meETLTrackEffPhiTotZneg->getBinContent(ibin) - meETLTrackEffPhiMtdZneg->getBinContent(ibin))) / + pow(meETLTrackEffPhiTotZneg->getBinContent(ibin), 3)); + if (meETLTrackEffPhiTotZneg->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlPhiEff_[0]->setBinContent(ibin, eff); + meEtlPhiEff_[0]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meETLTrackEffPhiTotZpos->getNbinsX(); ibin++) { + double eff = meETLTrackEffPhiMtdZpos->getBinContent(ibin) / meETLTrackEffPhiTotZpos->getBinContent(ibin); + double bin_err = + 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_[1]->setBinContent(ibin, eff); + meEtlPhiEff_[1]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meETLTrackEffPtTotZneg->getNbinsX(); ibin++) { + double eff = meETLTrackEffPtMtdZneg->getBinContent(ibin) / meETLTrackEffPtTotZneg->getBinContent(ibin); + double bin_err = + sqrt((meETLTrackEffPtMtdZneg->getBinContent(ibin) * + (meETLTrackEffPtTotZneg->getBinContent(ibin) - meETLTrackEffPtMtdZneg->getBinContent(ibin))) / + pow(meETLTrackEffPtTotZneg->getBinContent(ibin), 3)); + if (meETLTrackEffPtTotZneg->getBinContent(ibin) == 0) { + eff = 0; + bin_err = 0; + } + meEtlPtEff_[0]->setBinContent(ibin, eff); + meEtlPtEff_[0]->setBinError(ibin, bin_err); + } + + for (int ibin = 1; ibin <= meETLTrackEffPtTotZpos->getNbinsX(); ibin++) { + double eff = meETLTrackEffPtMtdZpos->getBinContent(ibin) / meETLTrackEffPtTotZpos->getBinContent(ibin); + double bin_err = + 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_[1]->setBinContent(ibin, eff); + meEtlPtEff_[1]->setBinError(ibin, bin_err); + } +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ---------- +void MtdTracksHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("folder", "MTD/Tracks/"); + + descriptions.add("MtdTracksPostProcessor", desc); +} + +DEFINE_FWK_MODULE(MtdTracksHarvester); diff --git a/Validation/MtdValidation/plugins/MtdTracksValidation.cc b/Validation/MtdValidation/plugins/MtdTracksValidation.cc new file mode 100644 index 0000000000000..875cdac29d667 --- /dev/null +++ b/Validation/MtdValidation/plugins/MtdTracksValidation.cc @@ -0,0 +1,417 @@ +#include + +#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 "DataFormats/Common/interface/ValueMap.h" + +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/Common/interface/ValidHandle.h" +#include "DataFormats/Math/interface/GeantUnits.h" +#include "DataFormats/ForwardDetId/interface/ETLDetId.h" +#include "DataFormats/ForwardDetId/interface/BTLDetId.h" + +#include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/Common/interface/PtrVector.h" +#include "DataFormats/Common/interface/RefProd.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" + +#include "Geometry/Records/interface/MTDDigiGeometryRecord.h" +#include "Geometry/Records/interface/MTDTopologyRcd.h" +#include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" +#include "Geometry/MTDCommonData/interface/MTDTopologyMode.h" +#include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h" +#include "Geometry/MTDGeometryBuilder/interface/ProxyMTDTopology.h" +#include "Geometry/MTDGeometryBuilder/interface/RectangularMTDTopology.h" + +class MtdTracksValidation : public DQMEDAnalyzer { +public: + explicit MtdTracksValidation(const edm::ParameterSet&); + ~MtdTracksValidation() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + + void analyze(const edm::Event&, const edm::EventSetup&) override; + + // ------------ member data ------------ + + const std::string folder_; + const float trackMinPt_; + const float trackMinEta_; + const float trackMaxEta_; + + edm::EDGetTokenT GenRecTrackToken_; + edm::EDGetTokenT RecTrackToken_; + edm::EDGetTokenT> RecVertexToken_; + + edm::EDGetTokenT> trackAssocToken_; + edm::EDGetTokenT> pathLengthToken_; + + edm::EDGetTokenT> tmtdToken_; + edm::EDGetTokenT> SigmatmtdToken_; + edm::EDGetTokenT> t0SrcToken_; + edm::EDGetTokenT> Sigmat0SrcToken_; + edm::EDGetTokenT> t0PidToken_; + edm::EDGetTokenT> Sigmat0PidToken_; + edm::EDGetTokenT> t0SafePidToken_; + edm::EDGetTokenT> Sigmat0SafePidToken_; + edm::EDGetTokenT> trackMVAQualToken_; + + MonitorElement* meBTLTrackRPTime_; + MonitorElement* meBTLTrackEffEtaTot_; + MonitorElement* meBTLTrackEffPhiTot_; + MonitorElement* meBTLTrackEffPtTot_; + MonitorElement* meBTLTrackEffEtaMtd_; + MonitorElement* meBTLTrackEffPhiMtd_; + MonitorElement* meBTLTrackEffPtMtd_; + MonitorElement* meBTLTrackPtRes_; + + MonitorElement* meETLTrackRPTime_; + MonitorElement* meETLTrackEffEtaTot_[2]; + MonitorElement* meETLTrackEffPhiTot_[2]; + MonitorElement* meETLTrackEffPtTot_[2]; + MonitorElement* meETLTrackEffEtaMtd_[2]; + MonitorElement* meETLTrackEffPhiMtd_[2]; + MonitorElement* meETLTrackEffPtMtd_[2]; + MonitorElement* meETLTrackPtRes_; + + MonitorElement* meTracktmtd_; + MonitorElement* meTrackt0Src_; + MonitorElement* meTrackSigmat0Src_; + MonitorElement* meTrackt0Pid_; + MonitorElement* meTrackSigmat0Pid_; + MonitorElement* meTrackt0SafePid_; + MonitorElement* meTrackSigmat0SafePid_; + MonitorElement* meTrackNumHits_; + MonitorElement* meTrackMVAQual_; + MonitorElement* meTrackPathLenghtvsEta_; + + MonitorElement* meVerNumber_; + MonitorElement* meVerZ_; + MonitorElement* meVerTime_; +}; + +// ------------ constructor and destructor -------------- +MtdTracksValidation::MtdTracksValidation(const edm::ParameterSet& iConfig) + : folder_(iConfig.getParameter("folder")), + trackMinPt_(iConfig.getParameter("trackMinimumPt")), + trackMinEta_(iConfig.getParameter("trackMinimumEta")), + trackMaxEta_(iConfig.getParameter("trackMaximumEta")) { + GenRecTrackToken_ = consumes(iConfig.getParameter("inputTagG")); + RecTrackToken_ = consumes(iConfig.getParameter("inputTagT")); + RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); + trackAssocToken_ = consumes>(iConfig.getParameter("trackAssocSrc")); + pathLengthToken_ = consumes>(iConfig.getParameter("pathLengthSrc")); + tmtdToken_ = consumes>(iConfig.getParameter("tmtd")); + SigmatmtdToken_ = consumes>(iConfig.getParameter("sigmatmtd")); + t0SrcToken_ = consumes>(iConfig.getParameter("t0Src")); + Sigmat0SrcToken_ = consumes>(iConfig.getParameter("sigmat0Src")); + t0PidToken_ = consumes>(iConfig.getParameter("t0PID")); + Sigmat0PidToken_ = consumes>(iConfig.getParameter("sigmat0PID")); + t0SafePidToken_ = consumes>(iConfig.getParameter("t0SafePID")); + Sigmat0SafePidToken_ = consumes>(iConfig.getParameter("sigmat0SafePID")); + trackMVAQualToken_ = consumes>(iConfig.getParameter("trackMVAQual")); +} + +MtdTracksValidation::~MtdTracksValidation() {} + +// ------------ method called for each event ------------ +void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + using namespace geant_units::operators; + using namespace std; + + edm::ESHandle topologyHandle; + iSetup.get().get(topologyHandle); + const MTDTopology* topology = topologyHandle.product(); + + bool topo1Dis = false; + bool topo2Dis = false; + if (topology->getMTDTopologyMode() <= static_cast(MTDTopologyMode::Mode::barphiflat)) { + topo1Dis = true; + } + if (topology->getMTDTopologyMode() > static_cast(MTDTopologyMode::Mode::barphiflat)) { + topo2Dis = true; + } + + auto GenRecTrackHandle = makeValid(iEvent.getHandle(GenRecTrackToken_)); + auto RecVertexHandle = makeValid(iEvent.getHandle(RecVertexToken_)); + + const auto& tMtd = iEvent.get(tmtdToken_); + const auto& SigmatMtd = iEvent.get(SigmatmtdToken_); + const auto& t0Src = iEvent.get(t0SrcToken_); + const auto& Sigmat0Src = iEvent.get(Sigmat0SrcToken_); + const auto& t0Pid = iEvent.get(t0PidToken_); + const auto& Sigmat0Pid = iEvent.get(Sigmat0PidToken_); + const auto& t0Safe = iEvent.get(t0SafePidToken_); + const auto& Sigmat0Safe = iEvent.get(Sigmat0SafePidToken_); + const auto& mtdQualMVA = iEvent.get(trackMVAQualToken_); + const auto& trackAssoc = iEvent.get(trackAssocToken_); + const auto& pathLength = iEvent.get(pathLengthToken_); + + unsigned int index = 0; + // --- Loop over all RECO tracks --- + for (const auto& trackGen : *GenRecTrackHandle) { + const reco::TrackRef trackref(iEvent.getHandle(GenRecTrackToken_), index); + index++; + + if (trackAssoc[trackref] == -1) { + LogWarning("mtdTracks") << "Extended track not associated"; + continue; + } + + const reco::TrackRef mtdTrackref = reco::TrackRef(iEvent.getHandle(RecTrackToken_), trackAssoc[trackref]); + const reco::Track track = *mtdTrackref; + + if (track.pt() < trackMinPt_) + continue; + + meTracktmtd_->Fill(tMtd[mtdTrackref]); + if (std::round(SigmatMtd[mtdTrackref] - Sigmat0Pid[trackref]) != 0) { + LogWarning("mtdTracks") << "TimeError associated to refitted track is different from TimeError stored in tofPID " + "sigmat0 ValueMap: this should not happen"; + } + + meTrackt0Src_->Fill(t0Src[trackref]); + meTrackSigmat0Src_->Fill(Sigmat0Src[trackref]); + + meTrackt0Pid_->Fill(t0Pid[trackref]); + meTrackSigmat0Pid_->Fill(Sigmat0Pid[trackref]); + meTrackt0SafePid_->Fill(t0Safe[trackref]); + meTrackSigmat0SafePid_->Fill(Sigmat0Safe[trackref]); + meTrackMVAQual_->Fill(mtdQualMVA[trackref]); + + meTrackPathLenghtvsEta_->Fill(std::abs(track.eta()), pathLength[mtdTrackref]); + + if (std::abs(track.eta()) < trackMinEta_) { + // --- all BTL tracks (with and without hit in MTD) --- + meBTLTrackEffEtaTot_->Fill(track.eta()); + meBTLTrackEffPhiTot_->Fill(track.phi()); + meBTLTrackEffPtTot_->Fill(track.pt()); + + bool MTDBtl = false; + int numMTDBtlvalidhits = 0; + for (const auto hit : track.recHits()) { + if (hit->isValid() == false) + continue; + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) { + MTDBtl = true; + numMTDBtlvalidhits++; + } + } + meTrackNumHits_->Fill(numMTDBtlvalidhits); + + // --- keeping only tracks with last hit in MTD --- + if (MTDBtl == true) { + meBTLTrackEffEtaMtd_->Fill(track.eta()); + meBTLTrackEffPhiMtd_->Fill(track.phi()); + meBTLTrackEffPtMtd_->Fill(track.pt()); + meBTLTrackRPTime_->Fill(track.t0()); + meBTLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + } + } //loop over (geometrical) BTL tracks + + else { + // --- all ETL tracks (with and without hit in MTD) --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + meETLTrackEffEtaTot_[0]->Fill(track.eta()); + meETLTrackEffPhiTot_[0]->Fill(track.phi()); + meETLTrackEffPtTot_[0]->Fill(track.pt()); + } + + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + meETLTrackEffEtaTot_[1]->Fill(track.eta()); + meETLTrackEffPhiTot_[1]->Fill(track.phi()); + meETLTrackEffPtTot_[1]->Fill(track.pt()); + } + + bool MTDEtlZnegD1 = false; + bool MTDEtlZnegD2 = false; + bool MTDEtlZposD1 = false; + bool MTDEtlZposD2 = false; + int numMTDEtlvalidhits = 0; + for (const auto hit : track.recHits()) { + if (hit->isValid() == false) + continue; + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2)) { + ETLDetId ETLHit = hit->geographicalId(); + + if (topo2Dis) { + if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { + MTDEtlZnegD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { + MTDEtlZnegD2 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { + MTDEtlZposD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { + MTDEtlZposD2 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + } + + if (topo1Dis) { + if (ETLHit.zside() == -1) { + MTDEtlZnegD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + numMTDEtlvalidhits++; + } + if (ETLHit.zside() == 1) { + MTDEtlZposD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + numMTDEtlvalidhits++; + } + } + } + } + meTrackNumHits_->Fill(-numMTDEtlvalidhits); + + // --- keeping only tracks with last hit in MTD --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { + meETLTrackEffEtaMtd_[0]->Fill(track.eta()); + meETLTrackEffPhiMtd_[0]->Fill(track.phi()); + meETLTrackEffPtMtd_[0]->Fill(track.pt()); + } + } + 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()); + } + } + } + } //RECO tracks loop + + // --- Loop over the RECO vertices --- + int nv = 0; + for (const auto& v : *RecVertexHandle) { + if (v.isValid()) { + meVerZ_->Fill(v.z()); + meVerTime_->Fill(v.t()); + nv++; + } else + cout << "The vertex is not valid" << endl; + } + meVerNumber_->Fill(nv); +} + +// ------------ method for histogram booking ------------ +void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { + ibook.setCurrentFolder(folder_); + + // histogram booking + meBTLTrackRPTime_ = ibook.book1D("TrackBTLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); + meBTLTrackEffEtaTot_ = ibook.book1D("TrackBTLEffEtaTot", "Track efficiency vs eta (Tot);#eta_{RECO}", 100, -1.6, 1.6); + meBTLTrackEffPhiTot_ = + ibook.book1D("TrackBTLEffPhiTot", "Track efficiency vs phi (Tot);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meBTLTrackEffPtTot_ = ibook.book1D("TrackBTLEffPtTot", "Track efficiency vs pt (Tot);pt_{RECO} [GeV]", 50, 0, 10); + meBTLTrackEffEtaMtd_ = ibook.book1D("TrackBTLEffEtaMtd", "Track efficiency vs eta (Mtd);#eta_{RECO}", 100, -1.6, 1.6); + meBTLTrackEffPhiMtd_ = + 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); + meBTLTrackPtRes_ = + ibook.book1D("TrackBTLPtRes", "Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meETLTrackRPTime_ = ibook.book1D("TrackETLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); + meETLTrackEffEtaTot_[0] = + ibook.book1D("TrackETLEffEtaTotZneg", "Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4); + meETLTrackEffEtaTot_[1] = + ibook.book1D("TrackETLEffEtaTotZpos", "Track efficiency vs eta (Tot) (+Z);#eta_{RECO}", 100, 1.4, 3.2); + meETLTrackEffPhiTot_[0] = + ibook.book1D("TrackETLEffPhiTotZneg", "Track efficiency vs phi (Tot) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meETLTrackEffPhiTot_[1] = + ibook.book1D("TrackETLEffPhiTotZpos", "Track efficiency vs phi (Tot) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2); + meETLTrackEffPtTot_[0] = + ibook.book1D("TrackETLEffPtTotZneg", "Track efficiency vs pt (Tot) (-Z);pt_{RECO} [GeV]", 50, 0, 10); + meETLTrackEffPtTot_[1] = + ibook.book1D("TrackETLEffPtTotZpos", "Track efficiency vs pt (Tot) (+Z);pt_{RECO} [GeV]", 50, 0, 10); + meETLTrackEffEtaMtd_[0] = + 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("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("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); + meETLTrackPtRes_ = + ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + + meTracktmtd_ = ibook.book1D("Tracktmtd", "Track time from TrackExtenderWithMTD;tmtd [ns]", 150, 1, 16); + meTrackt0Src_ = ibook.book1D("Trackt0Src", "Track time from TrackExtenderWithMTD;t0Src [ns]", 100, -1.5, 1.5); + meTrackSigmat0Src_ = + ibook.book1D("TrackSigmat0Src", "Time Error from TrackExtenderWithMTD; #sigma_{t0Src} [ns]", 100, 0, 0.1); + + meTrackt0Pid_ = ibook.book1D("Trackt0Pid", "Track t0 as stored in TofPid;t0 [ns]", 100, -1, 1); + meTrackSigmat0Pid_ = ibook.book1D("TrackSigmat0Pid", "Sigmat0 as stored in TofPid; #sigma_{t0} [ns]", 100, 0, 0.1); + meTrackt0SafePid_ = ibook.book1D("Trackt0SafePID", "Track t0 Safe as stored in TofPid;t0 [ns]", 100, -1, 1); + meTrackSigmat0SafePid_ = + ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, 0, 0.1); + meTrackNumHits_ = ibook.book1D("TrackNumHits", "Number of valid MTD hits per track ; Number of hits", 10, -5, 5); + meTrackMVAQual_ = ibook.book1D("TrackMVAQual", "Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1); + meTrackPathLenghtvsEta_ = ibook.bookProfile( + "TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); + 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); + meVerNumber_ = ibook.book1D("VerNumber", "RECO Vertex Number: Number of vertices", 100, 0, 500); +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ + +void MtdTracksValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("folder", "MTD/Tracks"); + desc.add("inputTagG", edm::InputTag("generalTracks")); + desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD")); + desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D")); + desc.add("tmtd", edm::InputTag("trackExtenderWithMTD:tmtd")); + desc.add("sigmatmtd", edm::InputTag("trackExtenderWithMTD:sigmatmtd")); + desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0")); + desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0")); + desc.add("trackAssocSrc", edm::InputTag("trackExtenderWithMTD:generalTrackassoc")) + ->setComment("Association between General and MTD Extended tracks"); + desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD:pathLength")); + desc.add("t0SafePID", edm::InputTag("tofPID:t0safe")); + desc.add("sigmat0SafePID", edm::InputTag("tofPID:sigmat0safe")); + desc.add("sigmat0PID", edm::InputTag("tofPID:sigmat0")); + desc.add("t0PID", edm::InputTag("tofPID:t0")); + desc.add("trackMVAQual", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA")); + desc.add("trackMinimumPt", 1.0); // [GeV] + desc.add("trackMinimumEta", 1.5); + desc.add("trackMaximumEta", 3.2); + + descriptions.add("mtdTracks", desc); +} + +DEFINE_FWK_MODULE(MtdTracksValidation); diff --git a/Validation/MtdValidation/python/MtdPostProcessor_cff.py b/Validation/MtdValidation/python/MtdPostProcessor_cff.py index 5b1046b957722..5baa321ddbd52 100644 --- a/Validation/MtdValidation/python/MtdPostProcessor_cff.py +++ b/Validation/MtdValidation/python/MtdPostProcessor_cff.py @@ -1,6 +1,6 @@ import FWCore.ParameterSet.Config as cms from Validation.MtdValidation.btlSimHitsPostProcessor_cfi import btlSimHitsPostProcessor -from Validation.MtdValidation.MtdGlobalRecoPostProcessor_cfi import MtdGlobalRecoPostProcessor +from Validation.MtdValidation.MtdTracksPostProcessor_cfi import MtdTracksPostProcessor -mtdValidationPostProcessor = cms.Sequence(btlSimHitsPostProcessor + MtdGlobalRecoPostProcessor) +mtdValidationPostProcessor = cms.Sequence(btlSimHitsPostProcessor + MtdTracksPostProcessor) diff --git a/Validation/MtdValidation/test/mtdValidation_cfg.py b/Validation/MtdValidation/test/mtdValidation_cfg.py index 000cd3fa30394..1a84ec60b0cc0 100644 --- a/Validation/MtdValidation/test/mtdValidation_cfg.py +++ b/Validation/MtdValidation/test/mtdValidation_cfg.py @@ -51,7 +51,7 @@ etlValidation = cms.Sequence(process.etlSimHits + process.etlDigiHits + process.etlLocalReco) # --- Global Validation -process.load("Validation.MtdValidation.globalReco_cfi") +process.load("Validation.MtdValidation.mtdTracks_cfi") process.DQMStore = cms.Service("DQMStore") 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 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 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 theStripDigi_Token_; + edm::EDGetTokenT strips_Token_; edm::EDGetTokenT 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 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 +#include +#include + +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() { return cscStubMatcher_; } + void setCSCStubMatcher(std::shared_ptr s) { cscStubMatcher_ = s; } + +private: + bool isSimTrackGood(const SimTrack &t); + + edm::EDGetTokenT alcts_Token_; + edm::EDGetTokenT clcts_Token_; + edm::EDGetTokenT lcts_Token_; + edm::InputTag inputTag_; + + std::shared_ptr 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 simVertexInput_; + edm::EDGetTokenT simTrackInput_; + double simTrackMinPt_; + double simTrackMinEta_; + double simTrackMaxEta_; + + std::vector etaMins_; + std::vector 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 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 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 @@ + 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 #include @@ -16,20 +17,17 @@ CSCDigiValidation::CSCDigiValidation(const edm::ParameterSet &ps) theWireDigiValidation(nullptr), theComparatorDigiValidation(nullptr), theALCTDigiValidation(nullptr), - theCLCTDigiValidation(nullptr) { - theStripDigiValidation = - std::make_unique(ps.getParameter("stripDigiTag"), consumesCollector()); - theWireDigiValidation = std::make_unique( - ps.getParameter("wireDigiTag"), consumesCollector(), doSim_); - theComparatorDigiValidation = - std::make_unique(ps.getParameter("comparatorDigiTag"), - ps.getParameter("stripDigiTag"), - consumesCollector()); - theALCTDigiValidation = - std::make_unique(ps.getParameter("alctDigiTag"), consumesCollector()); - theCLCTDigiValidation = - std::make_unique(ps.getParameter("clctDigiTag"), consumesCollector()); + theCLCTDigiValidation(nullptr), + theStubEfficiencyValidation(nullptr) { + // instantiatethe validation modules + theStripDigiValidation = std::make_unique(ps, consumesCollector()); + theWireDigiValidation = std::make_unique(ps, consumesCollector()); + theComparatorDigiValidation = std::make_unique(ps, consumesCollector()); + theALCTDigiValidation = std::make_unique(ps, consumesCollector()); + theCLCTDigiValidation = std::make_unique(ps, consumesCollector()); + theStubEfficiencyValidation = std::make_unique(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 theStripDigiValidation; std::unique_ptr theWireDigiValidation; std::unique_ptr theComparatorDigiValidation; std::unique_ptr theALCTDigiValidation; std::unique_ptr theCLCTDigiValidation; + std::unique_ptr theStubEfficiencyValidation; + // geometry edm::ESGetToken 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(inputTag); +CSCALCTDigiValidation::CSCALCTDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerChamberPlots() { + const auto &pset = ps.getParameterSet("cscALCT"); + inputTag_ = pset.getParameter("inputTag"); + alcts_Token_ = iC.consumes(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 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::const_iterator beginDigi = (*j).second.first; - std::vector::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::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("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(inputTag); +CSCCLCTDigiValidation::CSCCLCTDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerChamberPlots() { + const auto &pset = ps.getParameterSet("cscCLCT"); + inputTag_ = pset.getParameter("inputTag"); + clcts_Token_ = iC.consumes(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 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::const_iterator beginDigi = (*j).second.first; - std::vector::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::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(stripDigiInputTag)), - theTimeBinPlots(), - theNDigisPerLayerPlots(), - theStripDigiPlots(), - the3StripPlots() { - comparators_Token_ = iC.consumes(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("inputTag"); + comparators_Token_ = iC.consumes(inputTagComp_); + + const auto &strips = ps.getParameterSet("cscStripDigi"); + inputTagStrip_ = strips.getParameter("inputTag"); + strips_Token_ = iC.consumes(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::const_iterator digiItr = (*j).second.first; - std::vector::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::const_iterator stripItr = stripRange.first; stripItr != stripRange.second; - ++stripItr) { + for (auto stripItr = stripRange.first; stripItr != stripRange.second; ++stripItr) { if (stripItr->getStrip() == strip) { std::vector 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(inputTag); + const auto &pset = ps.getParameterSet("cscStripDigi"); + inputTag_ = pset.getParameter("inputTag"); + strips_Token_ = iC.consumes(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 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::const_iterator digiItr = (*j).second.first; - std::vector::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("simVertex"); + simVertexInput_ = iC.consumes(simVertex.getParameter("inputTag")); + const auto& simTrack = pset.getParameter("simTrack"); + simTrackInput_ = iC.consumes(simTrack.getParameter("inputTag")); + simTrackMinPt_ = simTrack.getParameter("minPt"); + simTrackMinEta_ = simTrack.getParameter("minEta"); + simTrackMaxEta_ = simTrack.getParameter("maxEta"); + + // all CSC TPs have the same label + const auto& stubConfig = pset.getParameterSet("cscALCT"); + inputTag_ = stubConfig.getParameter("inputTag"); + alcts_Token_ = iC.consumes(inputTag_); + clcts_Token_ = iC.consumes(inputTag_); + lcts_Token_ = iC.consumes(inputTag_); + + // Initialize stub matcher + cscStubMatcher_.reset(new CSCStubMatcher(pset, std::move(iC))); + + // get the eta ranges + etaMins_ = pset.getParameter>("etaMins"); + etaMaxs_ = pset.getParameter>("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 sim_tracks; + edm::Handle sim_vertices; + edm::Handle alcts; + edm::Handle clcts; + edm::Handle 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 hitALCT(10); + std::vector hitCLCT(10); + std::vector 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("useGEMs"); + const auto& cscCLCT = pSet.getParameter("cscCLCT"); minBXCLCT_ = cscCLCT.getParameter("minBX"); maxBXCLCT_ = cscCLCT.getParameter("maxBX"); @@ -30,7 +32,8 @@ CSCStubMatcher::CSCStubMatcher(const edm::ParameterSet& pSet, edm::ConsumesColle verboseMPLCT_ = cscMPLCT.getParameter("verbose"); minNHitsChamberMPLCT_ = cscMPLCT.getParameter("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(cscCLCT.getParameter("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(inputTag); +CSCWireDigiValidation::CSCWireDigiValidation(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC) + : CSCBaseValidation(ps), theTimeBinPlots(), theNDigisPerLayerPlots() { + const auto &pset = ps.getParameterSet("cscWireDigi"); + inputTag_ = pset.getParameter("inputTag"); + wires_Token_ = iC.consumes(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::const_iterator beginDigi = (*j).second.first; - std::vector::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::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 -// 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 -#include "TString.h" -#include "TH1.h" -#include "TH2.h" -#include "TProfile.h" -#include "TPostScript.h" -#include "TText.h" -#include "TCanvas.h" -#include - -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="<>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/GEMPadDigiClusterValidation.cc b/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc index 3a6da1c0c5b62..64fde1839ace2 100644 --- a/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMPadDigiClusterValidation.cc @@ -197,7 +197,7 @@ 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); @@ -235,7 +235,7 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev 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, roll_id); + 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); @@ -283,7 +283,7 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev 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}; @@ -319,7 +319,7 @@ void GEMPadDigiClusterValidation::analyze(const edm::Event& event, const edm::Ev 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, roll_id); + me_detail_pad_cluster_occ_det_[key2]->Fill(bin_x, ieta); } break; } diff --git a/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc b/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc index 15dccb4fb0a0d..49b75e18f0e19 100644 --- a/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMPadDigiValidation.cc @@ -179,7 +179,7 @@ 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); @@ -211,7 +211,7 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu 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, roll_id); + me_detail_occ_det_[key2]->Fill(bin_x, ieta); me_detail_bx_[key3]->Fill(bx); } // if detail_plot } // digi loop @@ -256,7 +256,7 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu 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}; @@ -292,7 +292,7 @@ void GEMPadDigiValidation::analyze(const edm::Event& event, const edm::EventSetu 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, roll_id); + me_detail_pad_occ_det_[key2]->Fill(bin_x, ieta); } break; } diff --git a/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc b/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc index 08ef3715a7772..5f16dae976aff 100644 --- a/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc +++ b/Validation/MuonGEMDigis/plugins/GEMStripDigiValidation.cc @@ -193,7 +193,7 @@ 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}; @@ -228,7 +228,7 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe if (detail_plot_) { me_detail_occ_zr_[region_id]->Fill(digi_g_abs_z, digi_g_r); - me_detail_occ_det_[key2]->Fill(bin_x, roll_id); + 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); } @@ -259,7 +259,7 @@ 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}; @@ -292,7 +292,7 @@ void GEMStripDigiValidation::analyze(const edm::Event& event, const edm::EventSe 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, roll_id); + me_detail_strip_occ_det_[key2]->Fill(bin_x, ieta); } } break; 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& 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& gemDigisSL = *gemDigisSLH_.product(); matchDigisSLToSimTrack(gemDigisSL); + } matchDigisToSimTrack(gemDigis); matchPadsToSimTrack(gemPads); matchClustersToSimTrack(gemClusters); diff --git a/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc b/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc index f872dd3813364..082f1d28d3e07 100644 --- a/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc +++ b/Validation/MuonGEMHits/plugins/GEMSimHitValidation.cc @@ -205,7 +205,7 @@ 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}; @@ -247,13 +247,13 @@ void GEMSimHitValidation::analyze(const edm::Event& event, const edm::EventSetup 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, roll_id); + 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, roll_id); + me_detail_occ_det_mu_[key2]->Fill(bin_x, ieta); } } // detail_plot diff --git a/Validation/MuonGEMHits/src/GEMValidationUtils.cc b/Validation/MuonGEMHits/src/GEMValidationUtils.cc index 4085f55709328..110274560f80e 100644 --- a/Validation/MuonGEMHits/src/GEMValidationUtils.cc +++ b/Validation/MuonGEMHits/src/GEMValidationUtils.cc @@ -13,7 +13,7 @@ TString GEMUtils::getSuffixName(Int_t region_id, Int_t station_id, Int_t layer_i } TString GEMUtils::getSuffixName(Int_t region_id, Int_t station_id, Int_t layer_id, Int_t roll_id) { - return TString::Format("_GE%+.2d_L%d_R%d", region_id * (station_id * 10 + 1), 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) { @@ -42,7 +42,7 @@ TString GEMUtils::getSuffixTitle(Int_t region_id, Int_t station_id, Int_t layer_ } TString GEMUtils::getSuffixTitle(Int_t region_id, Int_t station_id, Int_t layer_id, Int_t roll_id) { - return TString::Format(" GE%+.2d Layer %d Roll %d", region_id * (station_id * 10 + 1), 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/MuonGEMRecHits/plugins/GEMRecHitValidation.cc b/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc index 194fc3cec6f09..8c3bc0525a7d1 100644 --- a/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc +++ b/Validation/MuonGEMRecHits/plugins/GEMRecHitValidation.cc @@ -36,10 +36,10 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con 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 roll_id = roll->id().roll(); - ME2IdsKey key{station_id, roll_id}; - me_cls_roll_[key] = booker.book1D(Form("cls_GE%d1_R%d", station_id, roll_id), - Form("Cluster Size Distribution : GE%d1 Roll %d", station_id, roll_id), + 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); @@ -62,8 +62,8 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con Int_t layer_id = chamber->id().layer(); for (const auto& roll : chamber->etaPartitions()) { - Int_t roll_id = roll->id().roll(); - ME4IdsKey key4{region_id, station_id, layer_id, roll_id}; + 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 @@ -79,26 +79,24 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con 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 roll_id = roll->id().roll(); - ME2IdsKey key{station_id, roll_id}; - - me_residual_x_[key] = - booker.book1D(Form("residual_x_GE%d1_R%d", station_id, roll_id), - Form("Residual in X : GE%d1 Roll %d; Residual in X [cm]", station_id, roll_id), - 60, - -2, - 2); - - me_residual_y_[key] = - booker.book1D(Form("residual_y_GE%d1_R%d", station_id, roll_id), - Form("Residual in Y : GE%d1 Roll %d; Residual in Y [cm]", station_id, roll_id), - 60, - -15, - 15); + 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_R%d", station_id, roll_id), - Form("Residual in R #times #phi : GE%d1 Roll %d; Residual in r #times #phi [cm]", station_id, roll_id), + 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); @@ -118,8 +116,8 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con Int_t layer_id = chamber->id().layer(); for (const auto& roll : chamber->etaPartitions()) { - Int_t roll_id = roll->id().roll(); - ME4IdsKey key4{region_id, station_id, layer_id, roll_id}; + 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]"); @@ -149,17 +147,17 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con 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 roll_id = roll->id().roll(); - ME2IdsKey key{station_id, roll_id}; + Int_t ieta = roll->id().ieta(); + ME2IdsKey key{station_id, ieta}; - me_detail_pull_x_[key] = booker.book1D(Form("pull_x_GE%d1_R%d", station_id, roll_id), - Form("Pull in X : GE%d1 Roll %d", station_id, roll_id), + 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_R%d", station_id, roll_id), - Form("Pull in Y : GE%d1 Roll %d", station_id, roll_id), + 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); @@ -178,8 +176,8 @@ void GEMRecHitValidation::bookHistograms(DQMStore::IBooker& booker, edm::Run con Int_t layer_id = chamber->id().layer(); for (const auto& roll : chamber->etaPartitions()) { - Int_t roll_id = roll->id().roll(); - ME4IdsKey key4{region_id, station_id, layer_id, roll_id}; + Int_t ieta = roll->id().ieta(); + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; me_detail_pull_x_la_[key4] = bookHist1D(booker, key4, "pull_x", "Pull in x", 60, -3, 3); @@ -295,10 +293,10 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup Int_t region_id = gem_id.region(); Int_t station_id = gem_id.station(); Int_t layer_id = gem_id.layer(); - Int_t roll_id = gem_id.roll(); - ME4IdsKey key4{region_id, station_id, layer_id, roll_id}; + Int_t ieta = gem_id.ieta(); + ME4IdsKey key4{region_id, station_id, layer_id, ieta}; - ME2IdsKey key{station_id, roll_id}; + ME2IdsKey key{station_id, ieta}; ME2IdsKey key2{region_id, station_id}; ME3IdsKey key3{region_id, station_id, layer_id}; @@ -316,7 +314,7 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup cls = cls > 10 ? 10 : cls; me_cls_roll_[key]->Fill(cls); - me_occ_ieta_[key3]->Fill(roll_id); + me_occ_ieta_[key3]->Fill(ieta); me_occ_phi_[key3]->Fill(rechit_g_phi); total_rechit[key3]++; @@ -375,13 +373,13 @@ 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, roll_id}; + 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, roll_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); @@ -438,7 +436,7 @@ void GEMRecHitValidation::analyze(const edm::Event& event, const edm::EventSetup me_rechit_occ_phi_[key3]->Fill(simhit_g_phi); if (detail_plot_) { - me_detail_rechit_occ_det_[key2]->Fill(det_occ_bin_x, roll_id); + 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); diff --git a/Validation/RecoB/plugins/BTagPerformanceAnalyzerMC.h b/Validation/RecoB/plugins/BTagPerformanceAnalyzerMC.h index 98296f0166497..bcfb30c5f9900 100644 --- a/Validation/RecoB/plugins/BTagPerformanceAnalyzerMC.h +++ b/Validation/RecoB/plugins/BTagPerformanceAnalyzerMC.h @@ -14,10 +14,10 @@ #include "FWCore/Framework/interface/Frameworkfwd.h" #include "JetMETCorrections/JetCorrector/interface/JetCorrector.h" #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" -#include "SimDataFormats/JetMatching/interface/JetFlavour.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfo.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourInfoMatching.h" -#include "SimDataFormats/JetMatching/interface/JetFlavourMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavour.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfo.h" +#include "DataFormats/JetMatching/interface/JetFlavourInfoMatching.h" +#include "DataFormats/JetMatching/interface/JetFlavourMatching.h" /** \class BTagPerformanceAnalyzerMC * * Top level steering routine for b tag performance analysis. 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("maxRPCHit"); nintRPCHit = muonHistoParameters.getParameter("nintRPCHit"); // + + minNTracks = muonHistoParameters.getParameter("minNTracks"); + maxNTracks = muonHistoParameters.getParameter("maxNTracks"); + nintNTracks = muonHistoParameters.getParameter("nintNTracks"); + minFTracks = muonHistoParameters.getParameter("minFTracks"); + maxFTracks = muonHistoParameters.getParameter("maxFTracks"); + nintFTracks = muonHistoParameters.getParameter("nintFTracks"); minLayers = muonHistoParameters.getParameter("minLayers"); maxLayers = muonHistoParameters.getParameter("maxLayers"); nintLayers = muonHistoParameters.getParameter("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/RecoTrack/interface/MultiTrackValidator.h b/Validation/RecoTrack/interface/MultiTrackValidator.h index 2a3f9cef90421..607ae67e7b90a 100644 --- a/Validation/RecoTrack/interface/MultiTrackValidator.h +++ b/Validation/RecoTrack/interface/MultiTrackValidator.h @@ -20,6 +20,7 @@ #include "CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h" #include "SimTracker/Common/interface/TrackingParticleSelector.h" #include "CommonTools/RecoAlgos/interface/RecoTrackSelectorBase.h" +#include "SimTracker/Records/interface/TrackAssociatorRecord.h" #include "SimTracker/TrackAssociation/interface/ParametersDefinerForTP.h" #include "CommonTools/Utils/interface/DynArray.h" #include "DataFormats/Common/interface/ValueMap.h" @@ -52,6 +53,13 @@ class MultiTrackValidator : public DQMGlobalEDAnalyzer tTopoEsToken; + + std::string parametersDefiner; + const edm::ESGetToken tpDefinerEsToken; + const bool parametersDefinerIsCosmic_; + //these are used by MTVGenPs // MTV-specific data members std::vector associators; @@ -72,9 +80,6 @@ class MultiTrackValidator : public DQMGlobalEDAnalyzer> m_dEdx1Tag; edm::EDGetTokenT> m_dEdx2Tag; - std::string parametersDefiner; - - const bool parametersDefinerIsCosmic_; const bool ignoremissingtkcollection_; const bool useAssociators_; const bool calculateDrSingleCollection_; diff --git a/Validation/RecoTrack/interface/SiPixelTrackingRecHitsValid.h b/Validation/RecoTrack/interface/SiPixelTrackingRecHitsValid.h index 8fafefc7c241d..6dd774542b1d0 100644 --- a/Validation/RecoTrack/interface/SiPixelTrackingRecHitsValid.h +++ b/Validation/RecoTrack/interface/SiPixelTrackingRecHitsValid.h @@ -79,6 +79,9 @@ class SiPixelTrackingRecHitsValid : public DQMOneEDAnalyzer<> { const BoundPlane& plane); private: + const edm::ESGetToken tTopoEsToken_; + const edm::ESGetToken tGeomEsToken_; + TrackerHitAssociator::Config trackerHitAssociatorConfig_; //TrackLocalAngle *anglefinder_; DQMStore* dbe_; diff --git a/Validation/RecoTrack/interface/SiStripTrackingRecHitsValid.h b/Validation/RecoTrack/interface/SiStripTrackingRecHitsValid.h index ad3a5db515de5..d061e88ca66c6 100644 --- a/Validation/RecoTrack/interface/SiStripTrackingRecHitsValid.h +++ b/Validation/RecoTrack/interface/SiStripTrackingRecHitsValid.h @@ -32,6 +32,7 @@ #include "TrackingTools/TrackFitters/interface/KFTrajectoryFitter.h" #include "TrackingTools/TrackFitters/interface/KFTrajectorySmoother.h" #include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" +#include "RecoLocalTracker/Records/interface/TkStripCPERecord.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -45,6 +46,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" //--- for SimHit association @@ -246,9 +248,15 @@ class SiStripTrackingRecHitsValid : public DQMEDAnalyzer { protected: void analyze(const edm::Event& e, const edm::EventSetup& c) override; void bookHistograms(DQMStore::IBooker& ibooker, const edm::Run& run, const edm::EventSetup& es) override; - const MagneticField* magfield2_; private: + const edm::ESGetToken m_geomToken; + const edm::ESGetToken m_topoToken, m_topoTokenBR; + const edm::ESGetToken m_SiStripDetCablingToken; + const edm::ESGetToken m_stripCPEToken; + + edm::ESWatcher watchSiStripDetCablingRcd_; + DQMStore* dbe_; bool runStandalone; bool outputMEsInRootFile; @@ -385,9 +393,6 @@ class SiStripTrackingRecHitsValid : public DQMEDAnalyzer { std::map StereoAndMatchedMEsMap; std::map > LayerDetMap; std::map > StereoAndMatchedDetMap; - - edm::ESHandle SiStripDetCabling_; - std::pair projectHit(const PSimHit& hit, const StripGeomDetUnit* stripDet, const BoundPlane& plane); @@ -429,7 +434,6 @@ class SiStripTrackingRecHitsValid : public DQMEDAnalyzer { edm::ParameterSet conf_; TrackerHitAssociator::Config trackerHitAssociatorConfig_; - unsigned long long m_cacheID_; edm::ParameterSet Parameters; RecHitProperties rechitpro; @@ -437,7 +441,7 @@ class SiStripTrackingRecHitsValid : public DQMEDAnalyzer { void rechitanalysis(LocalVector ldir, const TrackingRecHit* rechit, const StripGeomDetUnit* stripdet, - edm::ESHandle stripcpe, + const StripClusterParameterEstimator* stripcpe, TrackerHitAssociator& associate, bool simplehit1or2D); @@ -446,7 +450,7 @@ class SiStripTrackingRecHitsValid : public DQMEDAnalyzer { const TrackingRecHit* rechit, const GluedGeomDet* gluedDet, TrackerHitAssociator& associate, - edm::ESHandle stripcpe, + const StripClusterParameterEstimator* stripcpe, const MatchStatus matchedmonorstereo); float track_rapidity; diff --git a/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc b/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc index a0f366c42b493..78c6bba3566ee 100644 --- a/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc +++ b/Validation/RecoTrack/plugins/JetCoreMCtruthSeedGenerator.cc @@ -23,8 +23,8 @@ #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/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" @@ -96,10 +96,10 @@ class JetCoreMCtruthSeedGenerator : public edm::one::EDProducer magfield_; + const edm::ESGetToken geomEsToken_; + const edm::ESGetToken pixelCPEEsToken_; + const edm::ESGetToken tTopoEsToken_; edm::ESHandle geometry_; - edm::ESHandle propagator_; edm::EDGetTokenT> vertices_; edm::EDGetTokenT> pixelClusters_; @@ -114,7 +114,6 @@ class JetCoreMCtruthSeedGenerator : public edm::one::EDProducer> findIntersection(const GlobalVector&, const reco::Candidate::Point&, @@ -158,8 +157,9 @@ class JetCoreMCtruthSeedGenerator : public edm::one::EDProducer("pixelCPE")))), + tTopoEsToken_(esConsumes()), vertices_(consumes(iConfig.getParameter("vertices"))), pixelClusters_( consumes>(iConfig.getParameter("pixelClusters"))), @@ -170,10 +170,7 @@ JetCoreMCtruthSeedGenerator::JetCoreMCtruthSeedGenerator(const edm::ParameterSet ptMin_(iConfig.getParameter("ptMin")), deltaR_(iConfig.getParameter("deltaR")), chargeFracMin_(iConfig.getParameter("chargeFractionMin")), - centralMIPCharge_(iConfig.getParameter("centralMIPCharge")), - pixelCPE_(iConfig.getParameter("pixelCPE")) - -{ + centralMIPCharge_(iConfig.getParameter("centralMIPCharge")) { produces(); produces(); } @@ -187,9 +184,7 @@ void JetCoreMCtruthSeedGenerator::produce(edm::Event& iEvent, const edm::EventSe using namespace edm; using namespace reco; - iSetup.get().get(magfield_); - iSetup.get().get(geometry_); - iSetup.get().get("AnalyticalPropagator", propagator_); + geometry_ = iSetup.getHandle(geomEsToken_); const auto& inputPixelClusters_ = iEvent.get(pixelClusters_); const auto& simtracksVector = iEvent.get(simtracksToken_); @@ -198,14 +193,8 @@ void JetCoreMCtruthSeedGenerator::produce(edm::Event& iEvent, const edm::EventSe 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(); - - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const PixelClusterParameterEstimator* pixelCPE = &iSetup.getData(pixelCPEEsToken_); + const TrackerTopology* const tTopo = &iSetup.getData(tTopoEsToken_); auto output = std::make_unique>(); @@ -338,7 +327,7 @@ const GeomDet* JetCoreMCtruthSeedGenerator::DetectorSelector(int llay, std::set, trkNumCompare> track4detSet; double minDist = 0.0; - GeomDet* output = (GeomDet*)nullptr; + const GeomDet* output = nullptr; for (const auto& detset : clusters) { auto aClusterID = detset.id(); if (DetId(aClusterID).subdetId() != 1) @@ -355,7 +344,7 @@ const GeomDet* JetCoreMCtruthSeedGenerator::DetectorSelector(int llay, 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; + output = det; } } //detset return output; diff --git a/Validation/RecoTrack/plugins/MultiTrackValidator.cc b/Validation/RecoTrack/plugins/MultiTrackValidator.cc index 9d1e404908fee..5a97863518ba3 100644 --- a/Validation/RecoTrack/plugins/MultiTrackValidator.cc +++ b/Validation/RecoTrack/plugins/MultiTrackValidator.cc @@ -47,10 +47,12 @@ namespace { } // namespace MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset) - : associators(pset.getUntrackedParameter>("associators")), - label(pset.getParameter>("label")), + : tTopoEsToken(esConsumes()), parametersDefiner(pset.getParameter("parametersDefiner")), + tpDefinerEsToken(esConsumes(edm::ESInputTag("", parametersDefiner))), parametersDefinerIsCosmic_(parametersDefiner == "CosmicParametersDefinerForTP"), + associators(pset.getUntrackedParameter>("associators")), + label(pset.getParameter>("label")), ignoremissingtkcollection_(pset.getUntrackedParameter("ignoremissingtrackcollection", false)), useAssociators_(pset.getParameter("UseAssociators")), calculateDrSingleCollection_(pset.getUntrackedParameter("calculateDrSingleCollection")), @@ -586,14 +588,11 @@ void MultiTrackValidator::dqmAnalyze(const edm::Event& event, << "====================================================\n" << "\n"; - edm::ESHandle parametersDefinerTPHandle; - setup.get().get(parametersDefiner, parametersDefinerTPHandle); + const auto& parametersDefinerTPHandle = setup.getHandle(tpDefinerEsToken); //Since we modify the object, we must clone it auto parametersDefinerTP = parametersDefinerTPHandle->clone(); - edm::ESHandle httopo; - setup.get().get(httopo); - const TrackerTopology& ttopo = *httopo; + const TrackerTopology& ttopo = setup.getData(tTopoEsToken); // FIXME: we really need to move to edm::View for reading the // TrackingParticles... Unfortunately it has non-trivial diff --git a/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc b/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc index db5e03b574a36..733b8324270bf 100644 --- a/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc +++ b/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc @@ -74,12 +74,8 @@ void MultiTrackValidatorGenPs::dqmAnalyze(const edm::Event& event, << "====================================================\n" << "\n"; - edm::ESHandle parametersDefinerTP; - setup.get().get(parametersDefiner, parametersDefinerTP); - - edm::ESHandle httopo; - setup.get().get(httopo); - const TrackerTopology& ttopo = *httopo; + const auto& parametersDefinerTP = &setup.getData(tpDefinerEsToken); + const TrackerTopology& ttopo = setup.getData(tTopoEsToken); edm::Handle TPCollectionHeff; event.getByToken(label_tp_effic, TPCollectionHeff); diff --git a/Validation/RecoTrack/plugins/SiPixelTrackingRecHitsValid.cc b/Validation/RecoTrack/plugins/SiPixelTrackingRecHitsValid.cc index 720e92f12bcec..2849ed83c983c 100644 --- a/Validation/RecoTrack/plugins/SiPixelTrackingRecHitsValid.cc +++ b/Validation/RecoTrack/plugins/SiPixelTrackingRecHitsValid.cc @@ -105,7 +105,12 @@ void SiPixelTrackingRecHitsValid::beginJob() { } SiPixelTrackingRecHitsValid::SiPixelTrackingRecHitsValid(const edm::ParameterSet& ps) - : trackerHitAssociatorConfig_(ps, consumesCollector()), dbe_(nullptr), tfile_(nullptr), t_(nullptr) { + : tTopoEsToken_(esConsumes()), + tGeomEsToken_(esConsumes()), + trackerHitAssociatorConfig_(ps, consumesCollector()), + dbe_(nullptr), + tfile_(nullptr), + t_(nullptr) { //Read config file MTCCtrack_ = ps.getParameter("MTCCtrack"); runStandalone = ps.getParameter("runStandalone"); @@ -1103,8 +1108,7 @@ SiPixelTrackingRecHitsValid::~SiPixelTrackingRecHitsValid() { // Functions that gets called by framework every event void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es) { //Retrieve tracker topology from geometry - edm::ESHandle tTopo; - es.get().get(tTopo); + const auto& tTopo = &es.getData(tTopoEsToken_); run = e.id().run(); evt = e.id().event(); @@ -1124,9 +1128,7 @@ void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventS std::vector matched; TrackerHitAssociator associate(e, trackerHitAssociatorConfig_); - edm::ESHandle pDD; - es.get().get(pDD); - const TrackerGeometry* tracker = &(*pDD); + const TrackerGeometry* tracker = &es.getData(tGeomEsToken_); if (!MTCCtrack_) { // --------------------------------------- all hits ----------------------------------------------------------- @@ -1139,8 +1141,8 @@ void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventS // << " Pixel RecHits" << std::endl; //-----Iterate over detunits - for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) { - DetId detId = ((*it)->geographicalId()); + for (const auto& it : tracker->dets()) { + DetId detId = it->geographicalId(); unsigned int subid = detId.subdetId(); if (!((subid == 1) || (subid == 2))) @@ -1162,7 +1164,7 @@ void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventS float rechitx = lp.x(); float rechity = lp.y(); - detId = (*it)->geographicalId(); + detId = it->geographicalId(); subdetId = (int)detId.subdetId(); if ((int)detId.subdetId() == (int)PixelSubdetector::PixelBarrel) { mePosxBarrel_all_hits->Fill(rechitx); diff --git a/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc b/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc index e5627e2811db7..aa3cfca3fb9f6 100644 --- a/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc +++ b/Validation/RecoTrack/plugins/TrackFromSeedProducer.cc @@ -60,8 +60,10 @@ class TrackFromSeedProducer : public edm::global::EDProducer<> { // ----------member data --------------------------- edm::EDGetTokenT > seedsToken; edm::EDGetTokenT beamSpotToken; - std::string tTRHBuilderName; const edm::ESGetToken geoToken_; + const edm::ESGetToken tTopoToken_; + const edm::ESGetToken mfToken_; + const edm::ESGetToken ttrhToken_; }; // @@ -76,7 +78,10 @@ class TrackFromSeedProducer : public edm::global::EDProducer<> { // constructors and destructor // TrackFromSeedProducer::TrackFromSeedProducer(const edm::ParameterSet& iConfig) - : geoToken_(esConsumes()) { + : geoToken_(esConsumes()), + tTopoToken_(esConsumes()), + mfToken_(esConsumes()), + ttrhToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter("TTRHBuilder")))) { //register your products produces(); produces(); @@ -85,7 +90,6 @@ TrackFromSeedProducer::TrackFromSeedProducer(const edm::ParameterSet& iConfig) // read parametes edm::InputTag seedsTag(iConfig.getParameter("src")); edm::InputTag beamSpotTag(iConfig.getParameter("beamSpot")); - tTRHBuilderName = iConfig.getParameter("TTRHBuilder"); //consumes seedsToken = consumes >(seedsTag); @@ -121,16 +125,9 @@ void TrackFromSeedProducer::produce(edm::StreamID, edm::Event& iEvent, const edm // some objects to build to tracks TSCBLBuilderNoMaterial tscblBuilder; - edm::ESHandle tTRHBuilder; - iSetup.get().get(tTRHBuilderName, tTRHBuilder); - - edm::ESHandle theMF; - iSetup.get().get(theMF); - - edm::ESHandle httopo; - iSetup.get().get(httopo); - const TrackerTopology& ttopo = *httopo; - + const auto& tTRHBuilder = &iSetup.getData(ttrhToken_); + const auto& theMF = &iSetup.getData(mfToken_); + const TrackerTopology& ttopo = iSetup.getData(tTopoToken_); const GlobalTrackingGeometry* const geometry_ = &iSetup.getData(geoToken_); // create tracks from seeds @@ -141,10 +138,10 @@ void TrackFromSeedProducer::produce(edm::StreamID, edm::Event& iEvent, const edm 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()); + state = trajectoryStateTransform::transientState(seed.startingState(), deepCore_sruface, theMF); } else { TransientTrackingRecHit::RecHitPointer lastRecHit = tTRHBuilder->build(&*(seed.recHits().end() - 1)); - state = trajectoryStateTransform::transientState(seed.startingState(), lastRecHit->surface(), theMF.product()); + state = trajectoryStateTransform::transientState(seed.startingState(), lastRecHit->surface(), theMF); } TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(), *beamSpot); //as in TrackProducerAlgorithm diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc index 8a56a2fc25245..3d6fad17b49aa 100644 --- a/Validation/RecoTrack/plugins/TrackingNtuple.cc +++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc @@ -626,6 +626,12 @@ class TrackingNtuple : public edm::one::EDAnalyzer { HitType hitType); // ----------member data --------------------------- + const edm::ESGetToken mfToken_; + const edm::ESGetToken ttrhToken_; + const edm::ESGetToken tTopoToken_; + const edm::ESGetToken tGeomToken_; + const edm::ESGetToken paramsDefineToken_; + std::vector>> seedTokens_; std::vector>> seedStopInfoTokens_; edm::EDGetTokenT> trackToken_; @@ -651,8 +657,6 @@ class TrackingNtuple : public edm::one::EDAnalyzer { edm::EDGetTokenT> tpNLayersToken_; edm::EDGetTokenT> tpNPixelLayersToken_; edm::EDGetTokenT> tpNStripStereoLayersToken_; - std::string builderName_; - std::string parametersDefinerName_; const bool includeSeeds_; const bool includeAllHits_; const bool includeMVA_; @@ -1255,7 +1259,13 @@ class TrackingNtuple : public edm::one::EDAnalyzer { // constructors and destructor // TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) - : trackToken_(consumes>(iConfig.getUntrackedParameter("tracks"))), + : mfToken_(esConsumes()), + ttrhToken_(esConsumes(edm::ESInputTag("", iConfig.getUntrackedParameter("TTRHBuilder")))), + tTopoToken_(esConsumes()), + tGeomToken_(esConsumes()), + paramsDefineToken_( + esConsumes(edm::ESInputTag("", iConfig.getUntrackedParameter("parametersDefiner")))), + trackToken_(consumes>(iConfig.getUntrackedParameter("tracks"))), clusterTPMapToken_(consumes(iConfig.getUntrackedParameter("clusterTPMap"))), simHitTPMapToken_(consumes( iConfig.getUntrackedParameter("simHitTPMap"))), @@ -1289,8 +1299,6 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) iConfig.getUntrackedParameter("trackingParticleNpixellayers"))), tpNStripStereoLayersToken_(consumes>( iConfig.getUntrackedParameter("trackingParticleNstripstereolayers"))), - builderName_(iConfig.getUntrackedParameter("TTRHBuilder")), - parametersDefinerName_(iConfig.getUntrackedParameter("parametersDefiner")), includeSeeds_(iConfig.getUntrackedParameter("includeSeeds")), includeAllHits_(iConfig.getUntrackedParameter("includeAllHits")), includeMVA_(iConfig.getUntrackedParameter("includeMVA")), @@ -1985,20 +1993,10 @@ void TrackingNtuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iS using namespace reco; using namespace std; - edm::ESHandle mfHandle; - iSetup.get().get(mfHandle); - const auto& mf = *mfHandle; - - edm::ESHandle theTTRHBuilder; - iSetup.get().get(builderName_, theTTRHBuilder); - - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology& tTopo = *tTopoHandle; - - edm::ESHandle geometryHandle; - iSetup.get().get(geometryHandle); - const TrackerGeometry& tracker = *geometryHandle; + const auto& mf = iSetup.getData(mfToken_); + const auto& theTTRHBuilder = &iSetup.getData(ttrhToken_); + const TrackerTopology& tTopo = iSetup.getData(tTopoToken_); + const TrackerGeometry& tracker = iSetup.getData(tGeomToken_); edm::Handle theAssociator; iEvent.getByToken(trackAssociatorToken_, theAssociator); @@ -3387,9 +3385,7 @@ void TrackingNtuple::fillTrackingParticles(const edm::Event& iEvent, const reco::TrackToTrackingParticleAssociator& associatorByHits, const std::vector& tpHitList, const TrackingParticleRefKeyToCount& tpKeyToClusterCount) { - edm::ESHandle parametersDefinerH; - iSetup.get().get(parametersDefinerName_, parametersDefinerH); - const ParametersDefinerForTP* parametersDefiner = parametersDefinerH.product(); + const ParametersDefinerForTP* parametersDefiner = &iSetup.getData(paramsDefineToken_); // Number of 3D layers for TPs edm::Handle> tpNLayersH; diff --git a/Validation/RecoTrack/python/plotting/plotting.py b/Validation/RecoTrack/python/plotting/plotting.py index f53098a6d2a14..db39adce17885 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 = [] @@ -1180,8 +1182,8 @@ def create(self, tdirectory): # Plot styles -_plotStylesColor = [4, 2, ROOT.kBlack, ROOT.kOrange+7, ROOT.kMagenta-3] -_plotStylesMarker = [21, 20, 22, 34, 33] +_plotStylesColor = [4, 2, ROOT.kBlack, ROOT.kOrange+7, ROOT.kMagenta-3, ROOT.kGreen+2] +_plotStylesMarker = [21, 20, 22, 34, 33, 23] def _drawFrame(pad, bounds, zmax=None, xbinlabels=None, xbinlabelsize=None, xbinlabeloption=None, ybinlabels=None, suffix=""): """Function to draw a frame @@ -2205,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: @@ -2915,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/src/SiStripTrackingRecHitsValid.cc b/Validation/RecoTrack/src/SiStripTrackingRecHitsValid.cc index 6e37eef4f6d43..876e210240e71 100644 --- a/Validation/RecoTrack/src/SiStripTrackingRecHitsValid.cc +++ b/Validation/RecoTrack/src/SiStripTrackingRecHitsValid.cc @@ -42,10 +42,14 @@ class TFile; //Constructor SiStripTrackingRecHitsValid::SiStripTrackingRecHitsValid(const edm::ParameterSet &ps) - : dbe_(edm::Service().operator->()), + : m_geomToken(esConsumes()), + m_topoToken(esConsumes()), + m_topoTokenBR(esConsumes()), + m_SiStripDetCablingToken(esConsumes()), + m_stripCPEToken(esConsumes(edm::ESInputTag("", "SimpleStripCPE"))), + dbe_(edm::Service().operator->()), conf_(ps), - trackerHitAssociatorConfig_(ps, consumesCollector()), - m_cacheID_(0) + trackerHitAssociatorConfig_(ps, consumesCollector()) // trajectoryInput_( ps.getParameter("trajectoryInput") ) { topFolderName_ = conf_.getParameter("TopFolderName"); @@ -537,9 +541,7 @@ SiStripTrackingRecHitsValid::~SiStripTrackingRecHitsValid() {} void SiStripTrackingRecHitsValid::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es) { - unsigned long long cacheID = es.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; + if (watchSiStripDetCablingRcd_.check(es)) { edm::LogInfo("SiStripRecHitsValid") << "SiStripRecHitsValid::beginRun: " << " Creating MEs for new Cabling "; @@ -562,27 +564,9 @@ void SiStripTrackingRecHitsValid::analyze(const edm::Event &e, const edm::EventS TrackerHitAssociator associate(e, trackerHitAssociatorConfig_); //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); - - edm::ESHandle pDD; - es.get().get(pDD); - const TrackerGeometry &tracker(*pDD); - - const TrackerGeometry *tracker2; - edm::ESHandle estracker; - es.get().get(estracker); - tracker2 = &(*estracker); - - edm::ESHandle magfield; - es.get().get(magfield); - - const MagneticField &magfield_(*magfield); - magfield2_ = &magfield_; - - edm::ESHandle stripcpe; - es.get().get("SimpleStripCPE", stripcpe); + const TrackerTopology *const tTopo = &es.getData(m_topoToken); + const TrackerGeometry &tracker = es.getData(m_geomToken); + const auto &stripcpe = &es.getData(m_stripCPEToken); // Mangano's @@ -676,7 +660,7 @@ void SiStripTrackingRecHitsValid::analyze(const edm::Event &e, const edm::EventS auto hm = matchedhit->monoHit(); const SiStripRecHit2D *monohit = &hm; // const GeomDetUnit * monodet=gdet->monoDet(); - GluedGeomDet *gdet = (GluedGeomDet *)tracker2->idToDet(matchedhit->geographicalId()); + GluedGeomDet *gdet = (GluedGeomDet *)tracker.idToDet(matchedhit->geographicalId()); if (monohit) { isrechitrphi = 1; @@ -1076,7 +1060,7 @@ void SiStripTrackingRecHitsValid::rechitanalysis_matched(LocalVector ldir, const TrackingRecHit *rechit, const GluedGeomDet *gluedDet, TrackerHitAssociator &associate, - edm::ESHandle stripcpe, + const StripClusterParameterEstimator *stripcpe, const MatchStatus matchedmonorstereo) { rechitpro.resx = -999999.; rechitpro.resy = -999999.; @@ -1233,6 +1217,10 @@ void SiStripTrackingRecHitsValid::rechitanalysis_matched(LocalVector ldir, closest = &m; } } + + if (!closest) + return; + float closestX = closest->localPosition().x(); rechitpro.resx = rechitpro.x - closestX; rechitpro.resxMF = Mposition.x() - (topol.measurementPosition(closest->localPosition())).x(); @@ -1248,6 +1236,10 @@ void SiStripTrackingRecHitsValid::rechitanalysis_matched(LocalVector ldir, closest = &m; } } + + if (!closest) + return; + float closestX = closest->localPosition().x(); rechitpro.resx = rechitpro.x - closestX; rechitpro.resxMF = Mposition.x() - (topol.measurementPosition(closest->localPosition())).x(); @@ -1260,7 +1252,7 @@ void SiStripTrackingRecHitsValid::rechitanalysis_matched(LocalVector ldir, void SiStripTrackingRecHitsValid::rechitanalysis(LocalVector ldir, const TrackingRecHit *rechit, const StripGeomDetUnit *stripdet, - edm::ESHandle stripcpe, + const StripClusterParameterEstimator *stripcpe, TrackerHitAssociator &associate, bool simplehit1or2D) { rechitpro.resx = -999999.; @@ -1349,6 +1341,10 @@ void SiStripTrackingRecHitsValid::rechitanalysis(LocalVector ldir, closest = &m; } } + + if (!closest) + return; + float closestX = closest->localPosition().x(); rechitpro.resx = rechitpro.x - closestX; rechitpro.resxMF = Mposition.x() - (topol.measurementPosition(closest->localPosition())).x(); @@ -1365,6 +1361,10 @@ void SiStripTrackingRecHitsValid::rechitanalysis(LocalVector ldir, closest = &m; } } + + if (!closest) + return; + float closestX = closest->localPosition().x(); rechitpro.resx = rechitpro.x - closestX; rechitpro.resxMF = Mposition.x() - (topol.measurementPosition(closest->localPosition())).x(); @@ -1376,12 +1376,10 @@ void SiStripTrackingRecHitsValid::rechitanalysis(LocalVector ldir, //-------------------------------------------------------------------------------------------- void SiStripTrackingRecHitsValid::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 TrackerTopology *const tTopo = &es.getData(m_topoTokenBR); // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on - es.get().get(SiStripDetCabling_); + const auto &SiStripDetCabling_ = &es.getData(m_SiStripDetCablingToken); // get list of active detectors from SiStripDetCabling std::vector activeDets; diff --git a/Validation/RecoVertex/interface/TrackParameterAnalyzer.h b/Validation/RecoVertex/interface/TrackParameterAnalyzer.h index 18947f804db36..d4eebb2829be9 100644 --- a/Validation/RecoVertex/interface/TrackParameterAnalyzer.h +++ b/Validation/RecoVertex/interface/TrackParameterAnalyzer.h @@ -21,7 +21,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/ParameterSet/interface/ParameterSet.h" // simulated vertex @@ -43,7 +43,7 @@ class TH2; // typedef reco::TrackBase::ParameterVector ParameterVector; -class TrackParameterAnalyzer : public edm::EDAnalyzer { +class TrackParameterAnalyzer : public edm::one::EDAnalyzer<> { public: explicit TrackParameterAnalyzer(const edm::ParameterSet&); ~TrackParameterAnalyzer() override; diff --git a/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc b/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc index 1436c3fcba2c3..7f610e7b3d68e 100644 --- a/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc +++ b/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc @@ -27,7 +27,7 @@ #include #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Run.h" @@ -47,7 +47,7 @@ // class decleration // -class AnotherPrimaryVertexAnalyzer : public edm::EDAnalyzer { +class AnotherPrimaryVertexAnalyzer : public edm::one::EDAnalyzer { public: explicit AnotherPrimaryVertexAnalyzer(const edm::ParameterSet&); ~AnotherPrimaryVertexAnalyzer() override; @@ -89,9 +89,8 @@ AnotherPrimaryVertexAnalyzer::AnotherPrimaryVertexAnalyzer(const edm::ParameterS iConfig.getParameter("prescaleWeightProviderPSet"), consumesCollector(), *this) : nullptr) { //now do what ever initialization is needed - + usesResource(TFileService::kSharedResource); // - _vhm.book(); } diff --git a/Validation/RecoVertex/src/BSvsPVAnalyzer.cc b/Validation/RecoVertex/src/BSvsPVAnalyzer.cc index 3a9955bab5046..b4658c00a3cc8 100644 --- a/Validation/RecoVertex/src/BSvsPVAnalyzer.cc +++ b/Validation/RecoVertex/src/BSvsPVAnalyzer.cc @@ -27,7 +27,7 @@ #include #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/Run.h" @@ -46,7 +46,7 @@ // class decleration // -class BSvsPVAnalyzer : public edm::EDAnalyzer { +class BSvsPVAnalyzer : public edm::one::EDAnalyzer { public: explicit BSvsPVAnalyzer(const edm::ParameterSet&); ~BSvsPVAnalyzer() override; @@ -83,7 +83,7 @@ BSvsPVAnalyzer::BSvsPVAnalyzer(const edm::ParameterSet& iConfig) _recoBeamSpotToken(consumes(iConfig.getParameter("bsCollection"))), _firstOnly(iConfig.getUntrackedParameter("firstOnly", false)) { //now do what ever initialization is needed - + usesResource(TFileService::kSharedResource); // _bspvhm.book(); diff --git a/Validation/RecoVertex/src/BeamSpotAnalyzer.cc b/Validation/RecoVertex/src/BeamSpotAnalyzer.cc index a0b54ac5cc40e..243224c6ec05c 100644 --- a/Validation/RecoVertex/src/BeamSpotAnalyzer.cc +++ b/Validation/RecoVertex/src/BeamSpotAnalyzer.cc @@ -26,7 +26,7 @@ #include #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/Run.h" @@ -43,7 +43,7 @@ // class decleration // -class AnotherBeamSpotAnalyzer : public edm::EDAnalyzer { +class AnotherBeamSpotAnalyzer : public edm::one::EDAnalyzer { public: explicit AnotherBeamSpotAnalyzer(const edm::ParameterSet&); ~AnotherBeamSpotAnalyzer() override; @@ -76,7 +76,7 @@ AnotherBeamSpotAnalyzer::AnotherBeamSpotAnalyzer(const edm::ParameterSet& iConfi : _bshm(iConfig.getParameter("bsHistogramMakerPSet"), consumesCollector()), _recoBeamSpotToken(consumes(iConfig.getParameter("bsCollection"))) { //now do what ever initialization is needed - + usesResource(TFileService::kSharedResource); // _bshm.book(); diff --git a/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc b/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc index c3d55425b1c67..5ea45d79414cd 100644 --- a/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc +++ b/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc @@ -20,11 +20,13 @@ BeamSpotHistogramMaker::~BeamSpotHistogramMaker() { delete _currdir; } void BeamSpotHistogramMaker::book(const std::string dirname) { edm::Service tfserv; - TFileDirectory* currdir = &(tfserv->tFileDirectory()); + TFileDirectory* currdir; if (!dirname.empty()) { currdir = new TFileDirectory(tfserv->mkdir(dirname)); _currdir = currdir; + } else { + currdir = &(tfserv->tFileDirectory()); } edm::LogInfo("HistogramBooking") << "BeamSpot histogram booking in directory " << dirname; diff --git a/Validation/RecoVertex/src/V0Validator.cc b/Validation/RecoVertex/src/V0Validator.cc index 2d8e0eb41dda8..d9d3c8df5b304 100644 --- a/Validation/RecoVertex/src/V0Validator.cc +++ b/Validation/RecoVertex/src/V0Validator.cc @@ -385,12 +385,6 @@ void V0Validator::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu using namespace edm; using namespace std; - // Get event setup info, B-field and tracker geometry - ESHandle bFieldHandle; - iSetup.get().get(bFieldHandle); - ESHandle globTkGeomHandle; - iSetup.get().get(globTkGeomHandle); - // Make matching collections Handle recotosimCollectionH; iEvent.getByToken(recoRecoToSimCollectionToken_, recotosimCollectionH); 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 sigma_pt1; - std::vector error_pt1; - std::vector sigma_pt2; - std::vector error_pt2; - std::vector sigma_pt3; - std::vector error_pt3; - std::vector sigma_eta; - std::vector error_eta; - std::vector sigma_phi; - std::vector error_phi; - std::vector sigma_VtxZ; - std::vector error_VtxZ; - std::vector sigma_d0; - std::vector 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 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 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 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 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 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 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 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/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.cc b/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.cc index 420c30848ef36..fc9dc92ad0cd6 100644 --- a/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.cc +++ b/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.cc @@ -38,7 +38,7 @@ // constructors and destructor // OuterTrackerMonitorTrackingParticles::OuterTrackerMonitorTrackingParticles(const edm::ParameterSet &iConfig) - : conf_(iConfig) { + : m_topoToken(esConsumes()), conf_(iConfig) { topFolderName_ = conf_.getParameter("TopFolderName"); trackingParticleToken_ = consumes>(conf_.getParameter("trackingParticleToken")); @@ -80,9 +80,7 @@ void OuterTrackerMonitorTrackingParticles::analyze(const edm::Event &iEvent, con iEvent.getByToken(ttStubMCTruthToken_, MCTruthTTStubHandle); // Geometries - edm::ESHandle tTopoHandle; - iSetup.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); + const TrackerTopology *const tTopo = &iSetup.getData(m_topoToken); // Loop over tracking particles int this_tp = 0; diff --git a/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.h b/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.h index e4c402c56a114..dde2474ccdd23 100644 --- a/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.h +++ b/Validation/SiOuterTrackerV/plugins/OuterTrackerMonitorTrackingParticles.h @@ -97,6 +97,7 @@ class OuterTrackerMonitorTrackingParticles : public DQMEDAnalyzer { MonitorElement *resd0_eta2to2p4 = nullptr; private: + const edm::ESGetToken m_topoToken; edm::ParameterSet conf_; edm::EDGetTokenT> trackingParticleToken_; edm::EDGetTokenT> 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("name", "Delta_X_Pixel"); - psd0.add("title", "#Delta X;Cluster resolution X dimension"); + psd0.add("title", "#Delta X;Cluster resolution X coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); - psd0.add("xmin", -5.0); + psd0.add("xmax", 250.); + psd0.add("xmin", -250.); psd0.add("NxBins", 100); desc.add("Delta_X_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_Pixel"); - psd0.add("title", "#Delta Y ;Cluster resolution Y dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta Y ;Cluster resolution Y coordinate [#mum]"); + psd0.add("xmin", -250.); + psd0.add("xmax", 250.); psd0.add("switch", true); - psd0.add("xmax", 5.0); psd0.add("NxBins", 100); desc.add("Delta_Y_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_X_Pixel_Primary"); - psd0.add("title", "#Delta X ;cluster resolution X dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta X ;cluster resolution X coordinate [#mum]"); + psd0.add("xmin", -250.); + psd0.add("xmax", 250.); psd0.add("switch", true); - psd0.add("xmax", 5.0); psd0.add("NxBins", 100); desc.add("Delta_X_Pixel_Primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_Pixel_Primary"); - psd0.add("title", "#Delta Y ;cluster resolution Y dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta Y ;cluster resolution Y coordinate [#mum]"); + psd0.add("xmin", -250.); + psd0.add("xmax", 250.); psd0.add("switch", true); - psd0.add("xmax", 5.0); psd0.add("NxBins", 100); desc.add("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("name", "Delta_X"); - psd0.add("title", "Delta_X;RecHit resolution X dimension"); - psd0.add("xmin", -0.2); + psd0.add("title", "Delta_X;RecHit resolution X coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 0.2); + psd0.add("xmin", -100.0); + psd0.add("xmax", 100.0); psd0.add("NxBins", 100); desc.add("DeltaX", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y"); - psd0.add("title", "Delta_Y;RecHit resolution Y dimension;"); - psd0.add("xmin", -0.2); + psd0.add("title", "Delta_Y;RecHit resolution Y coordinate [#mum];"); psd0.add("switch", true); - psd0.add("xmax", 0.2); + psd0.add("xmin", -100.0); + psd0.add("xmax", 100.0); psd0.add("NxBins", 100); desc.add("DeltaY", psd0); } @@ -350,25 +350,25 @@ void Phase2ITValidateRecHit::fillDescriptions(edm::ConfigurationDescriptions& de { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_X_vs_Eta"); - psd0.add("title", "Delta_X_vs_Eta;#eta;#Delta x"); - psd0.add("ymax", 0.02); + psd0.add("title", "Delta_X_vs_Eta;#eta;#Delta x [#mum]"); + psd0.add("ymin", -100.0); + psd0.add("ymax", 100.0); psd0.add("NxBins", 82); psd0.add("switch", true); psd0.add("xmax", 4.1); psd0.add("xmin", -4.1); - psd0.add("ymin", -0.02); desc.add("DeltaX_eta", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_vs_Eta"); - psd0.add("title", "Delta_Y_vs_Eta;#eta;#Delta y"); - psd0.add("ymax", 0.02); + psd0.add("title", "Delta_Y_vs_Eta;#eta;#Delta y [#mum]"); + psd0.add("ymin", -100.0); + psd0.add("ymax", 100.0); psd0.add("NxBins", 82); psd0.add("switch", true); psd0.add("xmax", 4.1); psd0.add("xmin", -4.1); - psd0.add("ymin", -0.02); desc.add("DeltaY_eta", psd0); } { @@ -409,20 +409,20 @@ void Phase2ITValidateRecHit::fillDescriptions(edm::ConfigurationDescriptions& de { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_X_SimHitPrimary"); - psd0.add("title", "Delta_X_SimHitPrimary;#delta x;"); - psd0.add("xmin", -0.2); + psd0.add("title", "Delta_X_SimHitPrimary;#delta x [#mum];"); + psd0.add("xmin", -100.0); psd0.add("switch", true); - psd0.add("xmax", 0.2); + psd0.add("xmax", 100.0); psd0.add("NxBins", 100); desc.add("DeltaX_primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_SimHitPrimary"); - psd0.add("title", "Delta_Y_SimHitPrimary;#Delta y;"); - psd0.add("xmin", -0.2); + psd0.add("title", "Delta_Y_SimHitPrimary;#Delta y [#mum];"); + psd0.add("xmin", -100.0); psd0.add("switch", true); - psd0.add("xmax", 0.2); + psd0.add("xmax", 100.0); psd0.add("NxBins", 100); desc.add("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("name", "Delta_X_Pixel"); - psd0.add("title", "#Delta X " + mptag + ";Cluster resolution X dimension"); + psd0.add("title", "#Delta X " + mptag + ";Cluster resolution X coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); - psd0.add("xmin", -5.0); + psd0.add("xmax", 250); + psd0.add("xmin", -250); psd0.add("NxBins", 100); desc.add("Delta_X_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_Pixel"); - psd0.add("title", "#Delta Y " + mptag + ";Cluster resolution Y dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta Y " + mptag + ";Cluster resolution Y coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); + psd0.add("xmin", -1500); + psd0.add("xmax", 1500); psd0.add("NxBins", 100); desc.add("Delta_Y_Pixel", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_X_Pixel_Primary"); - psd0.add("title", "#Delta X " + mptag + ";cluster resolution X dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta X " + mptag + ";cluster resolution X coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); + psd0.add("xmin", -250); + psd0.add("xmax", 250); psd0.add("NxBins", 100); desc.add("Delta_X_Pixel_Primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_Pixel_Primary"); - psd0.add("title", "#Delta Y " + mptag + ";cluster resolution Y dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta Y " + mptag + ";cluster resolution Y coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); + psd0.add("xmin", -500); + psd0.add("xmax", 500); psd0.add("NxBins", 100); desc.add("Delta_Y_Pixel_Primary", psd0); } @@ -393,17 +396,17 @@ void Phase2OTValidateCluster::fillDescriptions(edm::ConfigurationDescriptions& d { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_X_Strip"); - psd0.add("title", "#Delta X " + striptag + ";Cluster resolution X dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); + psd0.add("xmin", -250); + psd0.add("xmax", 250); psd0.add("NxBins", 100); desc.add("Delta_X_Strip", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_Strip"); - psd0.add("title", "#Delta Y " + striptag + ";Cluster resolution Y dimension"); + psd0.add("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]"); psd0.add("xmin", -5.0); psd0.add("switch", true); psd0.add("xmax", 5.0); @@ -413,17 +416,17 @@ void Phase2OTValidateCluster::fillDescriptions(edm::ConfigurationDescriptions& d { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_X_Strip_Primary"); - psd0.add("title", "#Delta X " + striptag + ";Cluster resolution X dimension"); - psd0.add("xmin", -5.0); + psd0.add("title", "#Delta X " + striptag + ";Cluster resolution X coordinate [#mum]"); psd0.add("switch", true); - psd0.add("xmax", 5.0); + psd0.add("xmin", -250); + psd0.add("xmax", 250); psd0.add("NxBins", 100); desc.add("Delta_X_Strip_Primary", psd0); } { edm::ParameterSetDescription psd0; psd0.add("name", "Delta_Y_Strip_Primary"); - psd0.add("title", "#Delta Y " + striptag + ";Cluster resolution Y dimension"); + psd0.add("title", "#Delta Y " + striptag + ";Cluster resolution Y coordinate [cm]"); psd0.add("xmin", -5.0); psd0.add("switch", true); psd0.add("xmax", 5.0); diff --git a/Validation/TrackerDigis/plugins/SiPixelDigiValid.cc b/Validation/TrackerDigis/plugins/SiPixelDigiValid.cc index dbd1bdf27bff5..42665a7756930 100644 --- a/Validation/TrackerDigis/plugins/SiPixelDigiValid.cc +++ b/Validation/TrackerDigis/plugins/SiPixelDigiValid.cc @@ -15,7 +15,6 @@ #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/TrackerGeometryBuilder/interface/RectangularPixelTopology.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" #include "SiPixelDigiValid.h" @@ -23,7 +22,9 @@ // using namespace edm; SiPixelDigiValid::SiPixelDigiValid(const edm::ParameterSet &ps) - : outputFile_(ps.getUntrackedParameter("outputFile", "pixeldigihisto.root")), + : m_geomToken(esConsumes()), + m_topoToken(esConsumes()), + outputFile_(ps.getUntrackedParameter("outputFile", "pixeldigihisto.root")), runStandalone(ps.getParameter("runStandalone")), dbe_(nullptr), edmDetSetVector_PixelDigi_Token_(consumes>(ps.getParameter("src"))) {} @@ -32,7 +33,7 @@ SiPixelDigiValid::~SiPixelDigiValid() {} void SiPixelDigiValid::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es) { dbe_ = edm::Service().operator->(); - es.get().get(tracker); + tracker = &es.getData(m_geomToken); if (dbe_) { ibooker.setCurrentFolder("TrackerDigisV/TrackerDigis/Pixel"); @@ -274,9 +275,7 @@ void SiPixelDigiValid::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run void SiPixelDigiValid::analyze(const edm::Event &e, const edm::EventSetup &c) { // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - c.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); + const TrackerTopology *const tTopo = &c.getData(m_topoToken); // Number of blades and ladders. // TODO: other Geometry-Dependent quantities, e.g. num layers. int nblades = tracker->posPixelForwardLayers()[0]->components().size(); @@ -332,9 +331,6 @@ void SiPixelDigiValid::analyze(const edm::Event &e, const edm::EventSetup &c) { // LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << // e.id().event(); - edm::ESHandle tracker; - c.get().get(tracker); - // string digiProducer = "siPixelDigis"; edm::Handle> pixelDigis; e.getByToken(edmDetSetVector_PixelDigi_Token_, pixelDigis); diff --git a/Validation/TrackerDigis/plugins/SiPixelDigiValid.h b/Validation/TrackerDigis/plugins/SiPixelDigiValid.h index ced20c48615ea..b47fc01552b15 100644 --- a/Validation/TrackerDigis/plugins/SiPixelDigiValid.h +++ b/Validation/TrackerDigis/plugins/SiPixelDigiValid.h @@ -5,6 +5,7 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Frameworkfwd.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" #include "DQMServices/Core/interface/DQMStore.h" @@ -27,6 +28,9 @@ class SiPixelDigiValid : public DQMEDAnalyzer { void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es) override; private: + const edm::ESGetToken m_geomToken; + const edm::ESGetToken m_topoToken; + std::string outputFile_; bool runStandalone; @@ -259,6 +263,6 @@ class SiPixelDigiValid : public DQMEDAnalyzer { DQMStore *dbe_; edm::EDGetTokenT> edmDetSetVector_PixelDigi_Token_; - edm::ESHandle tracker; + const GeometricSearchTracker *tracker; }; #endif diff --git a/Validation/TrackerDigis/plugins/SiStripDigiValid.cc b/Validation/TrackerDigis/plugins/SiStripDigiValid.cc index 9478462379347..d3d479c7da05e 100644 --- a/Validation/TrackerDigis/plugins/SiStripDigiValid.cc +++ b/Validation/TrackerDigis/plugins/SiStripDigiValid.cc @@ -21,7 +21,8 @@ #include "SiStripDigiValid.h" SiStripDigiValid::SiStripDigiValid(const edm::ParameterSet &ps) - : dbe_(nullptr), + : m_topoToken(esConsumes()), + dbe_(nullptr), runStandalone(ps.getParameter("runStandalone")), outputFile_(ps.getUntrackedParameter("outputFile", "stripdigihisto.root")), edmDetSetVector_SiStripDigi_Token_( @@ -325,9 +326,7 @@ void SiStripDigiValid::bookHistograms(DQMStore::IBooker &ibooker, const edm::Run void SiStripDigiValid::analyze(const edm::Event &e, const edm::EventSetup &c) { // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - c.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); + const TrackerTopology *const tTopo = &c.getData(m_topoToken); int ndigilayertibzp[4]; int ndigilayertibzm[4]; @@ -363,8 +362,6 @@ void SiStripDigiValid::analyze(const edm::Event &e, const edm::EventSetup &c) { // LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << // e.id().event(); - edm::ESHandle tracker; - c.get().get(tracker); std::string digiProducer = "siStripDigis"; edm::Handle> stripDigis; diff --git a/Validation/TrackerDigis/plugins/SiStripDigiValid.h b/Validation/TrackerDigis/plugins/SiStripDigiValid.h index 5e914422d2161..ecc203ea17e4b 100644 --- a/Validation/TrackerDigis/plugins/SiStripDigiValid.h +++ b/Validation/TrackerDigis/plugins/SiStripDigiValid.h @@ -24,6 +24,7 @@ class SiStripDigiValid : public DQMEDAnalyzer { void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es) override; private: + const edm::ESGetToken m_topoToken; // TIB ADC MonitorElement *meAdcTIBLayer1Extzp_[3]; MonitorElement *meAdcTIBLayer2Extzp_[3]; diff --git a/Validation/TrackerHits/interface/TrackerHitAnalyzer.h b/Validation/TrackerHits/interface/TrackerHitAnalyzer.h index a863923cc072b..fefb4b1ab4283 100644 --- a/Validation/TrackerHits/interface/TrackerHitAnalyzer.h +++ b/Validation/TrackerHits/interface/TrackerHitAnalyzer.h @@ -11,12 +11,15 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "SimDataFormats/Track/interface/SimTrackContainer.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" + #include class TrackerHitAnalyzer : public DQMEDAnalyzer { @@ -36,6 +39,7 @@ class TrackerHitAnalyzer : public DQMEDAnalyzer { // void BookTestHistos(Char_t sname, int nbin, float *xmin, float *xmax); private: + const edm::ESGetToken tGeomEsToken_; bool verbose_; edm::EDGetTokenT edmPSimHitContainer_pxlBrlLow_Token_, edmPSimHitContainer_pxlBrlHigh_Token_; diff --git a/Validation/TrackerHits/interface/TrackerHitProducer.h b/Validation/TrackerHits/interface/TrackerHitProducer.h index 18b63edb04240..c2078aeb6ce5f 100644 --- a/Validation/TrackerHits/interface/TrackerHitProducer.h +++ b/Validation/TrackerHits/interface/TrackerHitProducer.h @@ -2,7 +2,7 @@ #define TrackerHitProducer_h // framework & common header files -#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/one/EDProducer.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -18,7 +18,7 @@ namespace edm { } class PTrackerSimHit; -class TrackerHitProducer : public edm::EDProducer { +class TrackerHitProducer : public edm::one::EDProducer<> { public: typedef std::vector FloatVector; typedef std::vector IntegerVector; diff --git a/Validation/TrackerHits/src/TrackerHitAnalyzer.cc b/Validation/TrackerHits/src/TrackerHitAnalyzer.cc index 41c1f36180a81..97fdd5885b7cc 100644 --- a/Validation/TrackerHits/src/TrackerHitAnalyzer.cc +++ b/Validation/TrackerHits/src/TrackerHitAnalyzer.cc @@ -17,8 +17,6 @@ #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" // data in edm::event #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" @@ -38,7 +36,8 @@ #include TrackerHitAnalyzer::TrackerHitAnalyzer(const edm::ParameterSet &ps) - : verbose_(ps.getUntrackedParameter("Verbosity", false)), + : tGeomEsToken_(esConsumes()), + verbose_(ps.getUntrackedParameter("Verbosity", false)), edmPSimHitContainer_pxlBrlLow_Token_( consumes(ps.getParameter("PxlBrlLowSrc"))), edmPSimHitContainer_pxlBrlHigh_Token_( @@ -457,9 +456,7 @@ void TrackerHitAnalyzer::analyze(const edm::Event &e, const edm::EventSetup &c) } // Get geometry information - - edm::ESHandle tracker; - c.get().get(tracker); + const auto &tracker = &c.getData(tGeomEsToken_); int ir = -100; edm::SimTrackContainer::const_iterator itTrk; diff --git a/Validation/TrackerRecHits/interface/SiPixelRecHitsValid.h b/Validation/TrackerRecHits/interface/SiPixelRecHitsValid.h index 62e8a486f117b..6e6a9f18ea012 100644 --- a/Validation/TrackerRecHits/interface/SiPixelRecHitsValid.h +++ b/Validation/TrackerRecHits/interface/SiPixelRecHitsValid.h @@ -15,6 +15,8 @@ #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h" #include "DQMServices/Core/interface/DQMStore.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include @@ -23,6 +25,7 @@ class PSimHit; class PixelGeomDetUnit; class SiPixelRecHit; class TrackerTopology; +class TrackerGeometry; class SiPixelRecHitsValid : public DQMEDAnalyzer { public: @@ -40,6 +43,10 @@ class SiPixelRecHitsValid : public DQMEDAnalyzer { void fillBarrel(const SiPixelRecHit&, const PSimHit&, DetId, const PixelGeomDetUnit*, const TrackerTopology* tTopo); void fillForward(const SiPixelRecHit&, const PSimHit&, DetId, const PixelGeomDetUnit*, const TrackerTopology* tTopo); + // Es Tokens + const edm::ESGetToken tTopoEsToken; + const edm::ESGetToken tGeomEsToken; + //Clusters BPIX MonitorElement* clustYSizeModule[8]; MonitorElement* clustXSizeLayer[3]; diff --git a/Validation/TrackerRecHits/interface/SiStripRecHitsValid.h b/Validation/TrackerRecHits/interface/SiStripRecHitsValid.h index 1fc27374f0698..d0bae5290eff3 100644 --- a/Validation/TrackerRecHits/interface/SiStripRecHitsValid.h +++ b/Validation/TrackerRecHits/interface/SiStripRecHitsValid.h @@ -7,6 +7,7 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Framework/interface/ESWatcher.h" //only mine #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -34,6 +35,12 @@ #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h" +// -- for es tokens +#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 #include //For RecHit @@ -123,6 +130,12 @@ class SiStripRecHitsValid : public DQMEDAnalyzer { void bookHistograms(DQMStore::IBooker& ibooker, const edm::Run& run, const edm::EventSetup& es) override; private: + const edm::ESGetToken m_geomToken; + const edm::ESGetToken m_topoToken, m_topoTokenBR; + const edm::ESGetToken m_SiStripDetCablingToken; + + edm::ESWatcher watchSiStripDetCablingRcd_; + TotalMEs totalMEs; bool switchNumTotrphi; @@ -210,7 +223,6 @@ class SiStripRecHitsValid : public DQMEDAnalyzer { edm::ParameterSet conf_; TrackerHitAssociator::Config trackerHitAssociatorConfig_; - unsigned long long m_cacheID_; //const StripTopology* topol; /* static const int MAXHIT = 1000; */ diff --git a/Validation/TrackerRecHits/src/SiPixelRecHitsValid.cc b/Validation/TrackerRecHits/src/SiPixelRecHitsValid.cc index 48a80414b803d..ab1e48a8245f8 100644 --- a/Validation/TrackerRecHits/src/SiPixelRecHitsValid.cc +++ b/Validation/TrackerRecHits/src/SiPixelRecHitsValid.cc @@ -33,8 +33,6 @@ #include "Geometry/CommonDetUnit/interface/GeomDetType.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.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" @@ -46,7 +44,9 @@ #include SiPixelRecHitsValid::SiPixelRecHitsValid(const edm::ParameterSet& ps) - : trackerHitAssociatorConfig_(ps, consumesCollector()), + : tTopoEsToken(esConsumes()), + tGeomEsToken(esConsumes()), + trackerHitAssociatorConfig_(ps, consumesCollector()), siPixelRecHitCollectionToken_(consumes(ps.getParameter("src"))) {} SiPixelRecHitsValid::~SiPixelRecHitsValid() {} @@ -274,9 +274,7 @@ void SiPixelRecHitsValid::bookHistograms(DQMStore::IBooker& ibooker, const edm:: void SiPixelRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHand; - es.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &es.getData(tTopoEsToken); edm::LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event(); if (e.id().event() % 1000 == 0) @@ -287,21 +285,20 @@ void SiPixelRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es e.getByToken(siPixelRecHitCollectionToken_, recHitColl); //Get event setup - edm::ESHandle geom; - es.get().get(geom); - const TrackerGeometry& theTracker(*geom); + const TrackerGeometry* theTracker = &es.getData(tGeomEsToken); TrackerHitAssociator associate(e, trackerHitAssociatorConfig_); //iterate over detunits - for (TrackerGeometry::DetContainer::const_iterator it = geom->dets().begin(); it != geom->dets().end(); it++) { - DetId detId = ((*it)->geographicalId()); + //for (TrackerGeometry::DetContainer::const_iterator it = geom->dets().begin(); it != geom->dets().end(); it++) { + for (const auto& it : theTracker->dets()) { + DetId detId = it->geographicalId(); unsigned int subid = detId.subdetId(); if (!((subid == 1) || (subid == 2))) continue; - const PixelGeomDetUnit* theGeomDet = dynamic_cast(theTracker.idToDet(detId)); + const PixelGeomDetUnit* theGeomDet = dynamic_cast(theTracker->idToDet(detId)); SiPixelRecHitCollection::const_iterator pixeldet = recHitColl->find(detId); if (pixeldet == recHitColl->end()) diff --git a/Validation/TrackerRecHits/src/SiStripRecHitsValid.cc b/Validation/TrackerRecHits/src/SiStripRecHitsValid.cc index 7e006d2258baf..d5f045867ae84 100644 --- a/Validation/TrackerRecHits/src/SiStripRecHitsValid.cc +++ b/Validation/TrackerRecHits/src/SiStripRecHitsValid.cc @@ -1,17 +1,13 @@ #include "Validation/TrackerRecHits/interface/SiStripRecHitsValid.h" //needed for the geometry: -#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" -#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" #include "DataFormats/TrackerCommon/interface/SiStripSubStructure.h" #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DQM/SiStripCommon/interface/SiStripHistoId.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" //--- for RecHit #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" @@ -26,9 +22,12 @@ using namespace edm; //Constructor SiStripRecHitsValid::SiStripRecHitsValid(const ParameterSet& ps) - : conf_(ps), - trackerHitAssociatorConfig_(ps, consumesCollector()), - m_cacheID_(0) + : m_geomToken(esConsumes()), + m_topoToken(esConsumes()), + m_topoTokenBR(esConsumes()), + m_SiStripDetCablingToken(esConsumes()), + conf_(ps), + trackerHitAssociatorConfig_(ps, consumesCollector()) // matchedRecHits_( ps.getParameter("matchedRecHits") ), // rphiRecHits_( ps.getParameter("rphiRecHits") ), // stereoRecHits_( ps.getParameter("stereoRecHits") ) @@ -162,9 +161,7 @@ SiStripRecHitsValid::~SiStripRecHitsValid() {} //-------------------------------------------------------------------------------------------- void SiStripRecHitsValid::bookHistograms(DQMStore::IBooker& ibooker, const edm::Run& run, const edm::EventSetup& es) { - unsigned long long cacheID = es.get().cacheIdentifier(); - if (m_cacheID_ != cacheID) { - m_cacheID_ = cacheID; + if (watchSiStripDetCablingRcd_.check(es)) { edm::LogInfo("SiStripRecHitsValid") << "SiStripRecHitsValid::beginRun: " << " Creating MEs for new Cabling "; @@ -176,9 +173,7 @@ void SiStripRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event(); //Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - es.get().get(tTopoHandle); - const TrackerTopology* const tTopo = tTopoHandle.product(); + const TrackerTopology* const tTopo = &es.getData(m_topoToken); // Step A: Get Inputs edm::Handle rechitsmatched; @@ -198,9 +193,7 @@ void SiStripRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es TrackerHitAssociator associate(e, trackerHitAssociatorConfig_); - edm::ESHandle pDD; - es.get().get(pDD); - const TrackerGeometry& tracker(*pDD); + const TrackerGeometry& tracker = es.getData(m_geomToken); SiStripHistoId hidmanager; SiStripFolderOrganizer fold_organ; @@ -406,6 +399,10 @@ void SiStripRecHitsValid::rechitanalysis(SiStripRecHit2D const rechit, closest = &m; } } + + if (!closest) + return; + rechitpro.bunch = closest->eventId().bunchCrossing(); rechitpro.event = closest->eventId().event(); rechitpro.resx = rechitpro.x - closest->localPosition().x(); @@ -516,12 +513,10 @@ void SiStripRecHitsValid::rechitanalysis_matched(SiStripMatchedRecHit2D const re //-------------------------------------------------------------------------------------------- void SiStripRecHitsValid::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 TrackerTopology* const tTopo = &es.getData(m_topoTokenBR); // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on - es.get().get(SiStripDetCabling_); + const auto& SiStripDetCabling_ = &es.getData(m_SiStripDetCablingToken); // get list of active detectors from SiStripDetCabling std::vector activeDets;