Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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