diff --git a/Geometry/HGCalCommonData/interface/FastTimeDDDConstants.h b/Geometry/HGCalCommonData/interface/FastTimeDDDConstants.h index 0686377f214c2..e157e9ab49bdc 100644 --- a/Geometry/HGCalCommonData/interface/FastTimeDDDConstants.h +++ b/Geometry/HGCalCommonData/interface/FastTimeDDDConstants.h @@ -4,7 +4,7 @@ /** \class FastTimeDDDConstants * * this class reads the constant section of - * the shashlik-numbering xml-file + * the numbering xml-file for fast timer device * * $Date: 2014/03/20 00:06:50 $ * \author Sunanda Banerjee, SINP @@ -24,7 +24,6 @@ class FastTimeDDDConstants { public: - FastTimeDDDConstants(); FastTimeDDDConstants( const DDCompactView& cpv ); ~FastTimeDDDConstants(); @@ -33,19 +32,17 @@ class FastTimeDDDConstants { std::pair getXY(int copy) const; std::pair getXY(double x, double y) const; int getCells() const {return 4*nCells;} - void initialize(const DDCompactView& cpv); bool isValidXY(int ix, int iy) const; bool isValidCell(int copy) const; int quadrant(int ix, int iy) const; int quadrant(int copy) const; private: - void checkInitialized() const; + void initialize(const DDCompactView& cpv); void loadSpecPars(const DDFilteredView& fv); std::vector getDDDArray(const std::string &, const DDsvalues_type &) const; - bool tobeInitialized; int nCells, nCols, nRows, cellType; double rIn, rOut, cellSize; std::vector firstY, lastY, firstCell, lastCell; diff --git a/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc b/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc index 786bd4b8dbaa8..54fb402122135 100644 --- a/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/FastTimeDDDConstants.cc @@ -13,15 +13,7 @@ //#define DebugLog -FastTimeDDDConstants::FastTimeDDDConstants() : tobeInitialized(true),nCells(0){ - -#ifdef DebugLog - edm::LogInfo("HGCalGeom") << "FastTimeDDDConstants::FastTimeDDDConstants constructor"; -#endif - -} - -FastTimeDDDConstants::FastTimeDDDConstants(const DDCompactView& cpv) : tobeInitialized(true) { +FastTimeDDDConstants::FastTimeDDDConstants(const DDCompactView& cpv) { #ifdef DebugLog edm::LogInfo("HGCalGeom") << "FastTimeDDDConstants::FastTimeDDDConstants ( const DDCompactView& cpv ) constructor"; @@ -113,33 +105,6 @@ std::pair FastTimeDDDConstants::getXY(double x, double y) const { } } -void FastTimeDDDConstants::initialize(const DDCompactView& cpv) { - - if (tobeInitialized) { - tobeInitialized = false; - - std::string attribute = "Volume"; - std::string value = "SFBX"; - DDValue val(attribute, value, 0.0); - - DDSpecificsFilter filter; - filter.setCriteria(val, DDSpecificsFilter::equals); - DDFilteredView fv(cpv); - fv.addFilter(filter); - bool ok = fv.firstChild(); - - if (ok) { - loadSpecPars(fv); - - } else { - edm::LogError("HGCalGeom") << "FastTimeDDDConstants: cannot get filtered" - << " view for " << attribute - << " not matching " << value; - throw cms::Exception("DDException") << "FastTimeDDDConstants: cannot match " << attribute << " to " << value; - } - } -} - bool FastTimeDDDConstants::isValidXY(int ix, int iy) const { int iq = quadrant(ix,iy); if (iq != 0) { @@ -184,12 +149,27 @@ int FastTimeDDDConstants::quadrant(int copy) const { return iq; } -void FastTimeDDDConstants::checkInitialized() const { - if (tobeInitialized) { - edm::LogError("HGCalGeom") << "FastTimeDDDConstants : to be initialized correctly"; - throw cms::Exception("DDException") << "FastTimeDDDConstants: to be initialized"; +void FastTimeDDDConstants::initialize(const DDCompactView& cpv) { + + std::string attribute = "Volume"; + std::string value = "SFBX"; + DDValue val(attribute, value, 0.0); + + DDSpecificsFilter filter; + filter.setCriteria(val, DDSpecificsFilter::equals); + DDFilteredView fv(cpv); + fv.addFilter(filter); + bool ok = fv.firstChild(); + + if (ok) { + loadSpecPars(fv); + } else { + edm::LogError("HGCalGeom") << "FastTimeDDDConstants: cannot get filtered" + << " view for " << attribute + << " not matching " << value; + throw cms::Exception("DDException") << "FastTimeDDDConstants: cannot match " << attribute << " to " << value; } -} +} void FastTimeDDDConstants::loadSpecPars(const DDFilteredView& fv) { diff --git a/Validation/HcalHits/test/run_SimHitValidationHcal_cfg.py b/Validation/HcalHits/test/run_SimHitValidationHcal_cfg.py index 0fb2fe86ae209..0bfe1e1a7fa93 100644 --- a/Validation/HcalHits/test/run_SimHitValidationHcal_cfg.py +++ b/Validation/HcalHits/test/run_SimHitValidationHcal_cfg.py @@ -14,7 +14,7 @@ process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.EventContent.EventContent_cff') process.load('SimGeneral.MixingModule.mixNoPU_cfi') -process.load('Configuration.StandardSequences.GeometryDB_cff') +process.load('Configuration.StandardSequences.Geometry_cff') process.load('Configuration.StandardSequences.MagneticField_38T_cff') process.load('Configuration.StandardSequences.Generator_cff') process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic7TeV2011Collision_cfi') diff --git a/Validation/ShashlikValidation/plugins/BuildFile.xml b/Validation/ShashlikValidation/plugins/BuildFile.xml new file mode 100644 index 0000000000000..3b219fb28a8d0 --- /dev/null +++ b/Validation/ShashlikValidation/plugins/BuildFile.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Validation/ShashlikValidation/plugins/ShashlikSimHitValidation.cc b/Validation/ShashlikValidation/plugins/ShashlikSimHitValidation.cc new file mode 100644 index 0000000000000..509ff67c29c5d --- /dev/null +++ b/Validation/ShashlikValidation/plugins/ShashlikSimHitValidation.cc @@ -0,0 +1,247 @@ +// -*- C++ -*- +// +// Package: ShashlikSimHitValidation +// Class: ShashlikSimHitValidation +// +/**\class ShashlikSimHitValidation ShashlikSimHitValidation.cc Validation/ShashlikValidation/plugins/ShashlikSimHitValidation.cc + + Description: [one line class summary] + + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Shilpi Jain +// Created: Tue, 04 Mar 2014 14:17:25 GMT +// $Id$ +// +// + + +// 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/EventSetup.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" + +#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" +#include "DataFormats/EcalDetId/interface/EKDetId.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include +#include +#include +#include +#include + +// +// class declaration +// + +class ShashlikSimHitValidation : public edm::EDAnalyzer { + +public: + explicit ShashlikSimHitValidation(const edm::ParameterSet&); + ~ShashlikSimHitValidation(); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + virtual void beginJob() override; + virtual void analyze(const edm::Event&, const edm::EventSetup&) override; + virtual void endJob() override; + + /* + virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; + virtual void endRun(edm::Run const&, edm::EventSetup const&) override; + virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + */ + + // ----------member data --------------------------- + std::string caloHitSource_; + DQMStore *dbe_; + int verbosity_; + std::map histmap; + std::map histmap2d; +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +ShashlikSimHitValidation::ShashlikSimHitValidation(const edm::ParameterSet& iConfig) { + //now do what ever initialization is needed + dbe_ = edm::Service().operator->(); + caloHitSource_ = iConfig.getParameter("CaloHitSource"); + verbosity_ = iConfig.getUntrackedParameter("Verbosity",0); + if (verbosity_ > 0) std::cout << "Start SimHitValidation for PCaloHit at " + << caloHitSource_ << std::endl; +} + +ShashlikSimHitValidation::~ShashlikSimHitValidation() { + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) +} + + +// +// member functions +// + +// ------------ method called for each event ------------ +void ShashlikSimHitValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + + edm::Handle pcalohit; + iEvent.getByLabel("g4SimHits", caloHitSource_, pcalohit); + const edm::PCaloHitContainer* endcapHits = pcalohit.product(); + + double sumhitE = 0; + unsigned int kount(0); + for (edm::PCaloHitContainer::const_iterator erh = endcapHits->begin(); + erh != endcapHits->end(); erh++) { + + double time = erh->time(); + double energy = erh->energy(); + + uint32_t detidindex = erh->id(); + EKDetId detid(detidindex); + int ix = detid.ix(); + int iy = detid.iy(); + int iz = detid.zside(); + + sumhitE += energy; + if (dbe_) { + histmap["time"]->Fill(time); + histmap["timeEwei"]->Fill(time,energy); + histmap["energy"]->Fill(energy); + + histmap2d["iyVSix"]->Fill(ix,iy); + histmap2d["iyVSixEwei"]->Fill(ix,iy,energy); + + if (time>0 && time<100) { + histmap2d["iyVSixEwei_100"]->Fill(ix,iy,energy); + if (time>0 && time<25) { + histmap2d["iyVSixEwei_25"]->Fill(ix,iy,energy); + } + } + + if (iz==-1) { ///same for zside = -1 + histmap2d["iyVSix_zM"]->Fill(ix,iy); + histmap2d["iyVSixEwei_zM"]->Fill(ix,iy,energy); + + if (time>0 && time<100) { + histmap2d["iyVSixEwei_100_zM"]->Fill(ix,iy,energy); + if (time>0 && time<25) { + histmap2d["iyVSixEwei_25_zM"]->Fill(ix,iy,energy); + } + } + } else if (iz==1) { ///same for zside = +1 + histmap2d["iyVSix_zP"]->Fill(ix,iy); + histmap2d["iyVSixEwei_zP"]->Fill(ix,iy,energy); + + if (time>0 && time<100) { + histmap2d["iyVSixEwei_100_zP"]->Fill(ix,iy,energy); + if (time>0 && time<25) { + histmap2d["iyVSixEwei_25_zP"]->Fill(ix,iy,energy); + } + } + } + } + kount++; + } + if (dbe_) histmap["sumE"]->Fill(sumhitE); + if (verbosity_ > 1) std::cout << kount << " hits for " << caloHitSource_ + << " with total energy " << sumhitE << std::endl; +} + + +// ------------ method called once each job just before starting event loop ------------ +void ShashlikSimHitValidation::beginJob() { + + if (dbe_) { + histmap["time"] = dbe_->book1D("time","Time distribution of the hits",100,0.,530); + histmap["timeEwei"] = dbe_->book1D("timeEwei","Energy weighted time distribution of the hits",100,0,530); + histmap["energy"] = dbe_->book1D("energy","Energy distribution of the hits",100,0,3); + histmap["sumE"] = dbe_->book1D("sumE","Total energy distribution of the hits",500,0,100); + + histmap2d["iyVSix"] = dbe_->book2D("iyVSix","iy VS ix",301,0,301,301,0,301); + histmap2d["iyVSixEwei"] = dbe_->book2D("iyVSixEwei","iy VS ix (Energyweighted)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_25"] = dbe_->book2D("iyVSixEwei_25","iy VS ix (Energyweighted) in a time window of 0 to 25 ns",301,0,301,301,0,301); + histmap2d["iyVSixEwei_100"] = dbe_->book2D("iyVSixEwei_100","iy VS ix (Energyweighted) in a time window of 0 to 100 ns",301,0,301,301,0,301); + + //iz=-1 + histmap2d["iyVSix_zM"] = dbe_->book2D("iyVSix_zM","iy VS ix (-tive z)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_zM"] = dbe_->book2D("iyVSixEwei_zM","iy VS ix (Energyweighted)(-tive z)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_25_zM"] = dbe_->book2D("iyVSixEwei_25_zM","iy VS ix (Energyweighted) in a time window of 0 to 25 ns (-tive z)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_100_zM"] = dbe_->book2D("iyVSixEwei_100_zM","iy VS ix (Energyweighted) in a time window of 0 to 100 ns (-tive z)",301,0,301,301,0,301); + + //iz=+1 + histmap2d["iyVSix_zP"] = dbe_->book2D("iyVSix_zP","iy VS ix (+tive z)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_zP"] = dbe_->book2D("iyVSixEwei_zP","iy VS ix (Energyweighted)(+tive z)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_25_zP"] = dbe_->book2D("iyVSixEwei_25_zP","iy VS ix (Energyweighted) in a time window of 0 to 25 ns (+tive z)",301,0,301,301,0,301); + histmap2d["iyVSixEwei_100_zP"] = dbe_->book2D("iyVSixEwei_100_zP","iy VS ix (Energyweighted) in a time window of 0 to 100 ns (+tive z)",301,0,301,301,0,301); + + if (verbosity_>0) + std::cout << "ShashlikSimHitValidation:: Initialize histograms" << std::endl; + } +} + +// ------------ method called once each job just after ending the event loop ------------ +void ShashlikSimHitValidation::endJob() { +} + +// ------------ method called when starting to processes a run ------------ +/* +void ShashlikSimHitValidation::beginRun(edm::Run const&, edm::EventSetup const&) { +} +*/ + +// ------------ method called when ending the processing of a run ------------ +/* +void ShashlikSimHitValidation::endRun(edm::Run const&, edm::EventSetup const&) { +} +*/ + +// ------------ method called when starting to processes a luminosity block ------------ +/* +void ShashlikSimHitValidation::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) { +} +*/ + +// ------------ method called when ending the processing of a luminosity block ------------ +/* +void ShashlikSimHitValidation::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) { +} +*/ + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void ShashlikSimHitValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(ShashlikSimHitValidation); diff --git a/Validation/ShashlikValidation/python/simhitValidation_cfi.py b/Validation/ShashlikValidation/python/simhitValidation_cfi.py new file mode 100644 index 0000000000000..b6eecd73b50d3 --- /dev/null +++ b/Validation/ShashlikValidation/python/simhitValidation_cfi.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +shashlikSimHitValidation = cms.EDAnalyzer('ShashlikSimHitValidation', + CaloHitSource = cms.string("EcalHitsEK"), + Verbosity = cms.untracked.int32(1) +) diff --git a/Validation/ShashlikValidation/test/simHitValidation_cfg.py b/Validation/ShashlikValidation/test/simHitValidation_cfg.py new file mode 100644 index 0000000000000..2ae03aae512ba --- /dev/null +++ b/Validation/ShashlikValidation/test/simHitValidation_cfg.py @@ -0,0 +1,79 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("SIM") + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load("Configuration.StandardSequences.SimulationRandomNumberGeneratorSeeds_cff") +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2023SHCalNoTaperReco_cff') +process.load('Configuration.Geometry.GeometryExtended2023SHCalNoTaper_cff') +process.load('Configuration.StandardSequences.MagneticField_38T_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic8TeVCollision_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("DQMServices.Core.DQM_cfg") +process.DQM.collectorHost = '' +process.load("DQMServices.Components.MEtoEDMConverter_cfi") +process.load("Validation.ShashlikValidation.simhitValidation_cfi") + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(5) ) + +process.load("IOMC.RandomEngine.IOMC_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 456789 +process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 +process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 + +process.source = cms.Source("EmptySource", + firstRun = cms.untracked.uint32(1), + firstEvent = cms.untracked.uint32(1) +) + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(11), + MinEta = cms.double(1.75), + MaxEta = cms.double(2.50), + MinPhi = cms.double(-3.1415926), + MaxPhi = cms.double(3.1415926), + MinE = cms.double(100.00), + MaxE = cms.double(100.00) + ), + Verbosity = cms.untracked.int32(0), + AddAntiParticle = cms.bool(False) +) + +process.options = cms.untracked.PSet( + +) + +# Output definition + +process.ValidationOutput = cms.OutputModule("PoolOutputModule", + outputCommands = cms.untracked.vstring('drop *', 'keep *_MEtoEDMConverter_*_*'), + fileName = cms.untracked.string('output.root'), +) + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.autoCond import autoCond +process.GlobalTag.globaltag = autoCond['upgradePLS3'] + +process.generation_step = cms.Path(process.generator) +process.simulation_step = cms.Path(process.psim) +process.p1 = cms.Path(process.shashlikSimHitValidation) +process.p2 = cms.Path(process.MEtoEDMConverter) +process.output_step = cms.EndPath(process.ValidationOutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.simulation_step,process.p1,process.p2,process.output_step) +process.g4SimHits.Physics.type = 'SimG4Core/Physics/QGSP_FTFP_BERT_EML' +process.shashlikSimHitValidation.Verbosity = 1