Skip to content

Commit

Permalink
modernize MuonAnalysis/MomentumScaleCalibration
Browse files Browse the repository at this point in the history
  • Loading branch information
mmusich committed Dec 14, 2021
1 parent ed67ffc commit d9ac203
Show file tree
Hide file tree
Showing 19 changed files with 599 additions and 866 deletions.
88 changes: 68 additions & 20 deletions MuonAnalysis/MomentumScaleCalibration/plugins/DBReader.cc
Original file line number Diff line number Diff line change
@@ -1,44 +1,92 @@
// #include "CondFormats/PhysicsToolsObjects/interface/Histogram2D.h"
#include "CondFormats/RecoMuonObjects/interface/MuScleFitDBobject.h"
// system include files
#include <cstdio>
#include <iostream>
#include <string>
#include <sys/time.h>
#include <vector>

// user include files
#include "CondFormats/DataRecord/interface/MuScleFitDBobjectRcd.h"
#include "CondFormats/RecoMuonObjects/interface/MuScleFitDBobject.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/BackgroundFunction.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/MomentumScaleCorrector.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/ResolutionFunction.h"

#include "DBReader.h"
class DBReader : public edm::one::EDAnalyzer<> {
public:
explicit DBReader(const edm::ParameterSet&);
~DBReader() override;
void initialize(const edm::EventSetup& iSetup);
void analyze(const edm::Event&, const edm::EventSetup&) override;

#include <iostream>
#include <cstdio>
#include <sys/time.h>
#include <string>
private:
template <typename T>
void printParameters(const T& functionPtr) {
// Looping directly on it does not work, because it is returned by value
// and the iterator gets invalidated on the next line. Save it to a temporary object
// and iterate on it.
std::vector<double> parVecVec(functionPtr->parameters());
std::vector<double>::const_iterator parVec = parVecVec.begin();
std::vector<int> functionId(functionPtr->identifiers());
std::vector<int>::const_iterator id = functionId.begin();
edm::LogPrint("DBReader") << "total number of parameters read from database = parVecVec.size() = "
<< parVecVec.size() << std::endl;
int iFunc = 0;
for (; id != functionId.end(); ++id, ++iFunc) {
int parNum = functionPtr->function(iFunc)->parNum();
edm::LogPrint("DBReader") << "For function id = " << *id << ", with " << parNum << " parameters: " << std::endl;
for (int par = 0; par < parNum; ++par) {
edm::LogPrint("DBReader") << "par[" << par << "] = " << *parVec << std::endl;
++parVec;
}
}
}

DBReader::DBReader(const edm::ParameterSet& iConfig) : type_(iConfig.getUntrackedParameter<std::string>("Type")) {}
// uint32_t printdebug_;
const edm::ESGetToken<MuScleFitDBobject, MuScleFitDBobjectRcd> muToken_;
const std::string type_;
//std::unique_ptr<BaseFunction> corrector_;
std::shared_ptr<MomentumScaleCorrector> corrector_;
std::shared_ptr<ResolutionFunction> resolution_;
std::shared_ptr<BackgroundFunction> background_;
};

DBReader::DBReader(const edm::ParameterSet& iConfig)
: muToken_(esConsumes()), type_(iConfig.getUntrackedParameter<std::string>("Type")) {}

void DBReader::initialize(const edm::EventSetup& iSetup) {
edm::ESHandle<MuScleFitDBobject> dbObject;
iSetup.get<MuScleFitDBobjectRcd>().get(dbObject);
const MuScleFitDBobject* dbObject = &iSetup.getData(muToken_);
edm::LogInfo("DBReader") << "[DBReader::analyze] End Reading MuScleFitDBobjectRcd" << std::endl;

std::cout << "identifiers size from dbObject = " << dbObject->identifiers.size() << std::endl;
std::cout << "parameters size from dbObject = " << dbObject->parameters.size() << std::endl;
;
edm::LogPrint("DBReader") << "identifiers size from dbObject = " << dbObject->identifiers.size() << std::endl;
edm::LogPrint("DBReader") << "parameters size from dbObject = " << dbObject->parameters.size() << std::endl;

// This string is one of: scale, resolution, background.
// Create the corrector and set the parameters
if (type_ == "scale")
corrector_.reset(new MomentumScaleCorrector(dbObject.product()));
corrector_.reset(new MomentumScaleCorrector(dbObject));
else if (type_ == "resolution")
resolution_.reset(new ResolutionFunction(dbObject.product()));
resolution_.reset(new ResolutionFunction(dbObject));
else if (type_ == "background")
background_.reset(new BackgroundFunction(dbObject.product()));
background_.reset(new BackgroundFunction(dbObject));
else {
std::cout << "Error: unrecognized type. Use one of those: 'scale', 'resolution', 'background'" << std::endl;
edm::LogPrint("DBReader") << "Error: unrecognized type. Use one of those: 'scale', 'resolution', 'background'"
<< std::endl;
exit(1);
}

// cout << "pointer = " << corrector_.get() << endl;
}

//: printdebug_(iConfig.getUntrackedParameter<uint32_t>("printDebug",1)){}

DBReader::~DBReader() {}
DBReader::~DBReader() = default;

void DBReader::analyze(const edm::Event& e, const edm::EventSetup& iSetup) {
initialize(iSetup);
Expand Down
62 changes: 0 additions & 62 deletions MuonAnalysis/MomentumScaleCalibration/plugins/DBReader.h

This file was deleted.

38 changes: 22 additions & 16 deletions MuonAnalysis/MomentumScaleCalibration/plugins/DBWriter.cc
Original file line number Diff line number Diff line change
@@ -1,19 +1,29 @@
// system include files
#include <memory>
#include <string>

// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/EDAnalyzer.h"
#include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
#include "CondFormats/RecoMuonObjects/interface/MuScleFitDBobject.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

// Conditions database
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/BackgroundFunction.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/MomentumScaleCorrector.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/ResolutionFunction.h"

#include "DBWriter.h"
#include "CondFormats/RecoMuonObjects/interface/MuScleFitDBobject.h"
class DBWriter : public edm::one::EDAnalyzer<> {
public:
explicit DBWriter(const edm::ParameterSet&);
~DBWriter() override = default;

private:
void analyze(const edm::Event&, const edm::EventSetup&) override;
std::unique_ptr<BaseFunction> corrector_;
};

DBWriter::DBWriter(const edm::ParameterSet& ps) {
// This string is one of: scale, resolution, background.
Expand All @@ -27,16 +37,12 @@ DBWriter::DBWriter(const edm::ParameterSet& ps) {
else if (type == "background")
corrector_ = std::make_unique<BackgroundFunction>(ps.getUntrackedParameter<std::string>("CorrectionsIdentifier"));
else {
std::cout << "Error: unrecognized type. Use one of those: 'scale', 'resolution', 'background'" << std::endl;
edm::LogPrint("DBWriter") << "Error: unrecognized type. Use one of those: 'scale', 'resolution', 'background'"
<< std::endl;
exit(1);
}
}

DBWriter::~DBWriter() {
// do anything here that needs to be done at desctruction time
// (e.g. close files, deallocate resources etc.)
}

// ------------ method called to for each event ------------
void DBWriter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
MuScleFitDBobject dbObject;
Expand All @@ -45,18 +51,18 @@ void DBWriter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
dbObject.parameters = corrector_->parameters();

// if( dbObject->identifiers.size() != dbObject->parameters.size() ) {
// std::cout << "Error: size of parameters("<<dbObject->parameters.size()<<") and identifiers("<<dbObject->identifiers.size()<<") don't match" << std::endl;
// edm::LogPrint("DBWriter") << "Error: size of parameters("<<dbObject->parameters.size()<<") and identifiers("<<dbObject->identifiers.size()<<") don't match" << std::endl;
// exit(1);
// }

// std::vector<std::vector<double> >::const_iterator parVec = dbObject->parameters.begin();
// std::vector<int>::const_iterator id = dbObject->identifiers.begin();
// for( ; id != dbObject->identifiers.end(); ++id, ++parVec ) {
// std::cout << "id = " << *id << std::endl;
// edm::LogPrint("DBWriter") << "id = " << *id << std::endl;
// std::vector<double>::const_iterator par = parVec->begin();
// int i=0;
// for( ; par != parVec->end(); ++par, ++i ) {
// std::cout << "par["<<i<<"] = " << *par << std::endl;
// edm::LogPrint("DBWriter") << "par["<<i<<"] = " << *par << std::endl;
// }
// }

Expand Down
23 changes: 0 additions & 23 deletions MuonAnalysis/MomentumScaleCalibration/plugins/DBWriter.h

This file was deleted.

101 changes: 95 additions & 6 deletions MuonAnalysis/MomentumScaleCalibration/plugins/ErrorsAnalyzer.cc
Original file line number Diff line number Diff line change
@@ -1,7 +1,98 @@
#ifndef ERRORSANALYZER_CC
#define ERRORSANALYZER_CC

#include "ErrorsAnalyzer.h"
// -*- C++ -*-
//
// Package: ErrorsAnalyzer
// Class: ErrorsAnalyzer
//
/**\class ErrorsAnalyzer ErrorsAnalyzer.cc MuonAnalysis/MomentumScaleCalibration/plugins/ErrorsAnalyzer.cc
Description: <one line class summary>
Implementation:
<Notes on implementation>
*/
//
// Original Author: Marco De Mattia
// Created: Thu Sep 11 12:16:00 CEST 2008
//
//

// system include files
#include <memory>
#include <string>
#include <vector>

#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include <TH1D.h>
#include <TProfile.h>
#include <TString.h>
#include <TCanvas.h>
#include <TGraphAsymmErrors.h>
#include <TROOT.h>

#include "MuonAnalysis/MomentumScaleCalibration/interface/Functions.h"
#include "MuonAnalysis/MomentumScaleCalibration/interface/RootTreeHandler.h"
#include "MuScleFitUtils.h"

//
// class declaration
//

class ErrorsAnalyzer : public edm::one::EDAnalyzer<> {
public:
explicit ErrorsAnalyzer(const edm::ParameterSet&);
~ErrorsAnalyzer() override;

private:
void analyze(const edm::Event&, const edm::EventSetup&) override;
void fillHistograms();
void drawHistograms(const TProfile* histo,
const TProfile* histoPlusErr,
const TProfile* histoMinusErr,
const TString& type);
void fillValueError();
void endJob() override{};

TString treeFileName_;
int resolFitType_;
uint32_t maxEvents_;
TString outputFileName_;
int ptBins_;
double ptMin_;
double ptMax_;
int etaBins_;
double etaMin_;
double etaMax_;
bool debug_;

std::vector<double> parameters_;
std::vector<double> errors_;
std::vector<int> errorFactors_;

std::vector<double> valuePlusError_;
std::vector<double> valueMinusError_;

TProfile* sigmaPtVsEta_;
TProfile* sigmaPtVsEtaPlusErr_;
TProfile* sigmaPtVsEtaMinusErr_;

TProfile* sigmaPtVsPt_;
TProfile* sigmaPtVsPtPlusErr_;
TProfile* sigmaPtVsPtMinusErr_;

// Mass resolution
TProfile* sigmaMassVsEta_;
TProfile* sigmaMassVsEtaPlusErr_;
TProfile* sigmaMassVsEtaMinusErr_;

TProfile* sigmaMassVsPt_;
TProfile* sigmaMassVsPtPlusErr_;
TProfile* sigmaMassVsPtMinusErr_;
};

ErrorsAnalyzer::ErrorsAnalyzer(const edm::ParameterSet& iConfig)
: treeFileName_(iConfig.getParameter<std::string>("InputFileName")),
Expand Down Expand Up @@ -309,5 +400,3 @@ void ErrorsAnalyzer::fillHistograms() {

//define this as a plug-in
DEFINE_FWK_MODULE(ErrorsAnalyzer);

#endif
Loading

0 comments on commit d9ac203

Please sign in to comment.