Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DeDxCalibration as SiStrip gains and fixes to the APV gain payload inspector #46826

Merged
merged 2 commits into from
Nov 29, 2024
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
50 changes: 35 additions & 15 deletions CondCore/SiStripPlugins/plugins/SiStripApvGain_PayloadInspector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -682,8 +682,10 @@ namespace {
sumOfGains += payload->getApvGain(it, range);
} // loop over APVs
// fill the tracker map taking the average gain on a single DetId
store[d] = (sumOfGains / nAPVsPerModule);
tmap->fill(d, (sumOfGains / nAPVsPerModule));
if (nAPVsPerModule != 0.) {
store[d] = (sumOfGains / nAPVsPerModule);
tmap->fill(d, (sumOfGains / nAPVsPerModule));
}
} // loop over detIds

//=========================
Expand Down Expand Up @@ -1583,9 +1585,9 @@ namespace {
temp->SetMarkerSize(1.3);

if (part == "TEC")
scatters[part]->Draw("P");
scatters[part]->Draw("SCAT");
else
scatters[part]->Draw("Psame");
scatters[part]->Draw("SCATsame");

legend2.AddEntry(temp, part.c_str(), "P");
}
Expand Down Expand Up @@ -1896,16 +1898,14 @@ namespace {

TPad pad1("pad1", "pad1", 0, 0.3, 1, 1.0);
pad1.SetBottomMargin(0.02); // Upper and lower plot are joined
pad1.SetTopMargin(0.07);
pad1.SetTopMargin(0.1);
pad1.SetRightMargin(0.05);
pad1.SetLeftMargin(0.15);
pad1.Draw(); // Draw the upper pad: pad1
pad1.cd(); // pad1 becomes the current pad

auto h_firstGains =
std::make_shared<TH1F>("hFirstGains", "SiStrip APV gains values; APV Gains;n. APVs", 200, 0.2, 1.8);
auto h_lastGains =
std::make_shared<TH1F>("hLastGains", "SiStrip APV gains values; APV Gains;n. APVs", 200, 0.2, 1.8);
auto h_firstGains = std::make_shared<TH1F>("hFirstGains", ";SiStrip APV Gains;n. APVs", 200, 0.2, 1.8);
auto h_lastGains = std::make_shared<TH1F>("hLastGains", ";SiStrip APV Gains;n. APVs", 200, 0.2, 1.8);

for (const auto& item : firstmap) {
h_firstGains->Fill(item.second);
Expand All @@ -1929,24 +1929,44 @@ namespace {
h_firstGains->SetMarkerSize(1.);
h_lastGains->SetMarkerSize(1.);

h_firstGains->SetLineWidth(1);
h_lastGains->SetLineWidth(1);
h_firstGains->SetLineWidth(2);
h_lastGains->SetLineWidth(2);

h_firstGains->SetMarkerStyle(20);
h_lastGains->SetMarkerStyle(21);

h_firstGains->GetXaxis()->SetLabelOffset(2.);
h_lastGains->GetXaxis()->SetLabelOffset(2.);

float max = (h_firstGains->GetMaximum() > h_lastGains->GetMaximum()) ? h_firstGains->GetMaximum()
: h_lastGains->GetMaximum();

h_firstGains->GetYaxis()->SetRangeUser(0., std::max(0., max * 1.20));

h_firstGains->Draw("HIST");
h_lastGains->Draw("HISTsame");

TLegend legend = TLegend(0.70, 0.7, 0.95, 0.9);
legend.SetHeader("Gain Comparison", "C"); // option "C" allows to center the header
legend.AddEntry(h_firstGains.get(), ("IOV: " + std::to_string(std::get<0>(firstiov))).c_str(), "PL");
legend.AddEntry(h_lastGains.get(), ("IOV: " + std::to_string(std::get<0>(lastiov))).c_str(), "PL");
TLegend legend = TLegend(0.30, 0.78, 0.95, 0.9);
legend.SetHeader("#font[22]{SiStrip APV Gains Comparison}", "C"); // option "C" allows to center the header
legend.AddEntry(h_firstGains.get(), ("payload: #color[2]{" + std::get<1>(firstiov) + "}").c_str(), "F");
legend.AddEntry(h_lastGains.get(), ("payload: #color[4]{" + std::get<1>(lastiov) + "}").c_str(), "F");
legend.SetTextSize(0.025);
legend.Draw("same");

auto ltx = TLatex();
ltx.SetTextFont(62);
ltx.SetTextSize(0.037);
ltx.SetTextAlign(11);
std::string ltxText;
if (this->m_plotAnnotations.ntags == 2) {
ltxText = fmt::sprintf(
"#splitline{#color[2]{%s, %s} vs}{#color[4]{%s, %s}}", tagname1, firstIOVsince, tagname2, lastIOVsince);
} else {
ltxText = fmt::sprintf(
"#splitline{%s}{IOV: #color[2]{%s} vs IOV: #color[4]{%s}}", tagname1, firstIOVsince, lastIOVsince);
}
ltx.DrawLatexNDC(gPad->GetLeftMargin(), 1 - gPad->GetTopMargin() + 0.04, ltxText.c_str());

// lower plot will be in pad
canvas.cd(); // Go back to the main canvas before defining pad2
TPad pad2("pad2", "pad2", 0, 0.005, 1, 0.3);
Expand Down
107 changes: 107 additions & 0 deletions CondTools/SiStrip/plugins/SiStripApvGainFromDeDxCalibration.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
// system include files
#include <fstream>
#include <iostream>

// user include files
#include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
#include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
#include "CondFormats/SiStripObjects/interface/SiStripApvGain.h"
#include "CondFormats/PhysicsToolsObjects/interface/DeDxCalibration.h"
#include "CondFormats/DataRecord/interface/DeDxCalibrationRcd.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/FileInPath.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Utilities/interface/Exception.h"

class SiStripApvGainFromDeDxCalibration : public edm::one::EDAnalyzer<> {
public:
explicit SiStripApvGainFromDeDxCalibration(const edm::ParameterSet& iConfig);

~SiStripApvGainFromDeDxCalibration() override = default;

void analyze(const edm::Event&, const edm::EventSetup&) override;

static void fillDescriptions(edm::ConfigurationDescriptions&);

typedef std::pair<uint32_t, unsigned char> ChipId;

private:
const edm::ESGetToken<DeDxCalibration, DeDxCalibrationRcd> dedxCalibToken_;
const edm::FileInPath fp_;
const bool printdebug_;
};

SiStripApvGainFromDeDxCalibration::SiStripApvGainFromDeDxCalibration(const edm::ParameterSet& iConfig)
: dedxCalibToken_(esConsumes<DeDxCalibration, DeDxCalibrationRcd>()),
fp_(iConfig.getUntrackedParameter<edm::FileInPath>("file",
edm::FileInPath(SiStripDetInfoFileReader::kDefaultFile))),
printdebug_(iConfig.getUntrackedParameter<uint32_t>("printDebug", 1)) {}

void SiStripApvGainFromDeDxCalibration::analyze(const edm::Event& evt, const edm::EventSetup& iSetup) {
unsigned int run = evt.id().run();

edm::LogInfo("SiStripApvGainFromDeDxCalibration")
<< "... creating dummy SiStripApvGain Data for Run " << run << "\n " << std::endl;

SiStripApvGain obj;

const auto& reader = SiStripDetInfoFileReader::read(fp_.fullPath());
const auto& DetInfos = reader.getAllData();
const auto& dedxCalib = iSetup.getData(dedxCalibToken_);

int count = -1;
for (const auto& it : DetInfos) {
const auto& nAPVs = it.second.nApvs;
count++;
//Generate Gain for det detid
std::vector<float> theSiStripVector;
for (unsigned short j = 0; j < nAPVs; j++) {
const auto& chipId = ChipId(it.first, j);
const auto& g = dedxCalib.gain().find(chipId);

if (g == dedxCalib.gain().end())
continue;

if (count < printdebug_)
edm::LogInfo("SiStripApvGainFromDeDxCalibration") << "detid " << it.first << " \t"
<< " apv " << j << " \t" << g->second << " \t" << std::endl;
theSiStripVector.push_back(g->second);
}

SiStripApvGain::Range range(theSiStripVector.begin(), theSiStripVector.end());
if (!obj.put(it.first, range))
edm::LogError("SiStripApvGainFromDeDxCalibration")
<< "[SiStripApvGainFromDeDxCalibration::analyze] detid already exists" << std::endl;
}

//End now write sistripnoises data in DB
edm::Service<cond::service::PoolDBOutputService> mydbservice;

if (mydbservice.isAvailable()) {
if (mydbservice->isNewTagRequest("SiStripApvGainRcd")) {
mydbservice->createOneIOV<SiStripApvGain>(obj, mydbservice->beginOfTime(), "SiStripApvGainRcd");
} else {
mydbservice->appendOneIOV<SiStripApvGain>(obj, mydbservice->currentTime(), "SiStripApvGainRcd");
}
} else {
edm::LogError("SiStripApvGainFromDeDxCalibration") << "Service is unavailable" << std::endl;
}
}

void SiStripApvGainFromDeDxCalibration::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.addUntracked<edm::FileInPath>("file", edm::FileInPath(SiStripDetInfoFileReader::kDefaultFile));
desc.addUntracked<uint32_t>("printDebug", 1);
descriptions.addWithDefaultLabel(desc);
}

#include "FWCore/PluginManager/interface/ModuleDef.h"
#include "FWCore/Framework/interface/MakerMacros.h"

DEFINE_FWK_MODULE(SiStripApvGainFromDeDxCalibration);
65 changes: 65 additions & 0 deletions CondTools/SiStrip/test/SiStripApvGainFromDeDxCalibration_cfg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import FWCore.ParameterSet.Config as cms

process = cms.Process("ICALIB")
process.source = cms.Source("EmptyIOVSource",
firstValue = cms.uint64(1),
lastValue = cms.uint64(1),
timetype = cms.string('runnumber'),
interval = cms.uint64(1)
)

process.load('FWCore.MessageService.MessageLogger_cfi')
process.MessageLogger.cerr.enable = False
process.MessageLogger.SiStripApvGainFromDeDxCalibration=dict()
process.MessageLogger.cout = cms.untracked.PSet(
enable = cms.untracked.bool(True),
threshold = cms.untracked.string("DEBUG"),
default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
reportEvery = cms.untracked.int32(1000)
),
SiStripApvGainFromDeDxCalibration = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
enableStatistics = cms.untracked.bool(True)
)


process.load("Configuration.Geometry.GeometryExtended2024_cff")
process.load("Geometry.TrackerGeometryBuilder.trackerParameters_cfi")
process.TrackerTopologyEP = cms.ESProducer("TrackerTopologyEP")

#Setup the SiSTripFedCabling and the SiStripDetCabling
process.load("CondCore.CondDB.CondDB_cfi")
process.CondDB.connect='frontier://FrontierProd/CMS_CONDITIONS'

process.poolDBESSource = cms.ESSource('PoolDBESSource',
process.CondDB,
BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'),
toGet = cms.VPSet( cms.PSet(record = cms.string('DeDxCalibrationRcd'),
tag = cms.string('DeDxCalibration_HI_2024_prompt_v2')
)
)
)

process.maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(1)
)

process.PoolDBOutputService = cms.Service("PoolDBOutputService",
BlobStreamerName = cms.untracked.string('TBufferBlobStreamingService'),
DBParameters = cms.PSet(
authenticationPath = cms.untracked.string('/afs/cern.ch/cms/DB/conddb')
),
timetype = cms.untracked.string('runnumber'),
connect = cms.string('sqlite_file:SiStripApvGainFromDeDxCalibration_HI_2024_prompt_v2.db'),
toPut = cms.VPSet(cms.PSet(
record = cms.string('SiStripApvGainRcd'),
tag = cms.string('SiStripApvGainFromDeDxCalibration_HI_2024_prompt_v2')
))
)

from CondTools.SiStrip.siStripApvGainFromDeDxCalibration_cfi import siStripApvGainFromDeDxCalibration
process.prod = siStripApvGainFromDeDxCalibration.clone(
file = cms.untracked.FileInPath('CalibTracker/SiStripCommon/data/SiStripDetInfo.dat'),
printDebug = cms.untracked.uint32(100)
Comment on lines +62 to +63
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be more correct:

Suggested change
file = cms.untracked.FileInPath('CalibTracker/SiStripCommon/data/SiStripDetInfo.dat'),
printDebug = cms.untracked.uint32(100)
file = 'CalibTracker/SiStripCommon/data/SiStripDetInfo.dat',
printDebug = 100

)
process.p = cms.Path(process.prod)