-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
#ifndef SiPixelPhase1Barycenter_SiPixelPhase1Barycenter_h | ||
#define SiPixelPhase1Barycenter_SiPixelPhase1Barycenter_h | ||
// -*- C++ -*- | ||
// | ||
// Package: SiPixelPhase1Barycenter | ||
// Class : SiPixelPhase1Barycenter | ||
// | ||
/** | ||
Description: Barycenter plot generation for the Phase 1 pixel | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
dmeuser
Author
Contributor
|
||
Usage: | ||
<usage> | ||
*/ | ||
// | ||
// Original Author: Danilo Meuser | ||
// Created: 26th May 2021 | ||
// | ||
|
||
// user include files | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
|
||
#include "DQMServices/Core/interface/DQMStore.h" | ||
#include "DQMServices/Core/interface/DQMEDHarvester.h" | ||
|
||
#include "FWCore/Framework/interface/EventSetup.h" | ||
#include "FWCore/Framework/interface/LuminosityBlock.h" | ||
|
||
#include "CondFormats/AlignmentRecord/interface/TrackerAlignmentRcd.h" | ||
#include "CondFormats/AlignmentRecord/interface/GlobalPositionRcd.h" | ||
#include "CondFormats/Alignment/interface/Alignments.h" | ||
|
||
class SiPixelPhase1Barycenter : public DQMEDHarvester { | ||
public: | ||
explicit SiPixelPhase1Barycenter(const edm::ParameterSet& conf); | ||
~SiPixelPhase1Barycenter() override; | ||
|
||
protected: | ||
void beginRun(edm::Run const& run, edm::EventSetup const& eSetup) override; | ||
|
||
void dqmEndLuminosityBlock(DQMStore::IBooker& iBooker, | ||
DQMStore::IGetter& iGetter, | ||
edm::LuminosityBlock const& lumiSeg, | ||
edm::EventSetup const& c) override; | ||
void dqmEndJob(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter) override; | ||
|
||
private: | ||
std::map<std::string, MonitorElement*> barycenters_; | ||
|
||
//book the barycenter histograms | ||
void bookBarycenterHistograms(DQMStore::IBooker& iBooker); | ||
|
||
//fill the barycenter histograms | ||
void fillBarycenterHistograms(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter, const std::vector<AlignTransform>& input, const std::vector<AlignTransform>& GPR); | ||
|
||
}; | ||
|
||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
#ifndef SiPixelPhase1Barycenter_SiPixelPhase1BarycenterHelper_h | ||
#define SiPixelPhase1Barycenter_SiPixelPhase1BarycenterHelper_h | ||
This comment has been minimized.
Sorry, something went wrong. |
||
|
||
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include "CondFormats/Alignment/interface/Alignments.h" | ||
|
||
// Helper mainly based on https://github.com/cms-sw/cmssw/blob/master/CondCore/AlignmentPlugins/interface/AlignmentPayloadInspectorHelper.h | ||
|
||
namespace DQMBarycenter { | ||
|
||
enum coordinate { | ||
t_x = 1, | ||
t_y = 2, | ||
t_z = 3, | ||
rot_alpha = 4, | ||
rot_beta = 5, | ||
rot_gamma = 6, | ||
}; | ||
|
||
enum partitions { BPix = 1, FPix_p = 2, FPix_m = 3, }; | ||
|
||
enum class PARTITION { | ||
BPIX, // 0 Barrel Pixel | ||
FPIXp, // 1 Forward Pixel Plus | ||
FPIXm, // 2 Forward Pixel Minus | ||
LAST = FPIXm | ||
}; | ||
|
||
extern const PARTITION PARTITIONS[(int)PARTITION::LAST + 1]; | ||
const PARTITION PARTITIONS[] = {PARTITION::BPIX, | ||
PARTITION::FPIXp, | ||
PARTITION::FPIXm, | ||
}; | ||
|
||
|
||
struct TkAlBarycenters { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
dmeuser
Author
Contributor
|
||
std::map<DQMBarycenter::PARTITION, double> Xbarycenters; | ||
std::map<DQMBarycenter::PARTITION, double> Ybarycenters; | ||
std::map<DQMBarycenter::PARTITION, double> Zbarycenters; | ||
std::map<DQMBarycenter::PARTITION, double> nmodules; | ||
|
||
public: | ||
void init(); | ||
void computeBarycenters(const std::vector<AlignTransform>& input, | ||
const TrackerTopology& tTopo, | ||
const std::map<DQMBarycenter::coordinate, float>& GPR); | ||
|
||
|
||
/*--------------------------------------------------------------------*/ | ||
const std::array<double, 3> getX() | ||
/*--------------------------------------------------------------------*/ | ||
{ | ||
return {{Xbarycenters[PARTITION::BPIX], | ||
Xbarycenters[PARTITION::FPIXm], | ||
Xbarycenters[PARTITION::FPIXp] | ||
}}; | ||
}; | ||
|
||
/*--------------------------------------------------------------------*/ | ||
const std::array<double, 3> getY() | ||
/*--------------------------------------------------------------------*/ | ||
{ | ||
return {{Ybarycenters[PARTITION::BPIX], | ||
Ybarycenters[PARTITION::FPIXm], | ||
Ybarycenters[PARTITION::FPIXp] | ||
}}; | ||
}; | ||
|
||
/*--------------------------------------------------------------------*/ | ||
const std::array<double, 3> getZ() | ||
/*--------------------------------------------------------------------*/ | ||
{ | ||
return {{Zbarycenters[PARTITION::BPIX], | ||
Zbarycenters[PARTITION::FPIXm], | ||
Zbarycenters[PARTITION::FPIXp] | ||
}}; | ||
}; | ||
virtual ~TkAlBarycenters() {} | ||
}; | ||
|
||
/*--------------------------------------------------------------------*/ | ||
void TkAlBarycenters::computeBarycenters(const std::vector<AlignTransform>& input, | ||
const TrackerTopology& tTopo, | ||
const std::map<DQMBarycenter::coordinate, float>& GPR) | ||
/*--------------------------------------------------------------------*/ | ||
{ | ||
for (const auto& ali : input) { | ||
if (DetId(ali.rawId()).det() != DetId::Tracker) { | ||
edm::LogWarning("SiPixelPhase1Barycenters::computeBarycenters") | ||
<< "Encountered invalid Tracker DetId:" << ali.rawId() << " " << DetId(ali.rawId()).det() | ||
<< " is different from " << DetId::Tracker << " - terminating "; | ||
assert(DetId(ali.rawId()).det() != DetId::Tracker); | ||
} | ||
|
||
int subid = DetId(ali.rawId()).subdetId(); | ||
if (subid==PixelSubdetector::PixelBarrel || subid==PixelSubdetector::PixelEndcap) { // use only pixel | ||
switch (subid) { | ||
case PixelSubdetector::PixelBarrel: | ||
Xbarycenters[PARTITION::BPIX] += (ali.translation().x()); | ||
Ybarycenters[PARTITION::BPIX] += (ali.translation().y()); | ||
Zbarycenters[PARTITION::BPIX] += (ali.translation().z()); | ||
nmodules[PARTITION::BPIX]++; | ||
break; | ||
case PixelSubdetector::PixelEndcap: | ||
|
||
// minus side | ||
if (tTopo.pxfSide(DetId(ali.rawId())) == 1) { | ||
Xbarycenters[PARTITION::FPIXm] += (ali.translation().x()); | ||
Ybarycenters[PARTITION::FPIXm] += (ali.translation().y()); | ||
Zbarycenters[PARTITION::FPIXm] += (ali.translation().z()); | ||
nmodules[PARTITION::FPIXm]++; | ||
} // plus side | ||
else { | ||
Xbarycenters[PARTITION::FPIXp] += (ali.translation().x()); | ||
Ybarycenters[PARTITION::FPIXp] += (ali.translation().y()); | ||
Zbarycenters[PARTITION::FPIXp] += (ali.translation().z()); | ||
nmodules[PARTITION::FPIXp]++; | ||
} | ||
break; | ||
default: | ||
edm::LogError("PixelDQM") << "Unrecognized partition for barycenter computation " << subid << std::endl; | ||
break; | ||
} | ||
} | ||
} | ||
|
||
for (const auto& p : PARTITIONS) { | ||
Xbarycenters[p] /= nmodules[p]; | ||
Ybarycenters[p] /= nmodules[p]; | ||
Zbarycenters[p] /= nmodules[p]; | ||
|
||
Xbarycenters[p] += GPR.at(DQMBarycenter::t_x); | ||
Ybarycenters[p] += GPR.at(DQMBarycenter::t_y); | ||
Zbarycenters[p] += GPR.at(DQMBarycenter::t_z); | ||
|
||
} | ||
} | ||
} // namespace DQMBarycenter | ||
|
||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import FWCore.ParameterSet.Config as cms | ||
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester | ||
|
||
# | ||
# This object is used to make changes for different running scenarios | ||
# | ||
|
||
SiPixelPhase1BarycenterOffline = DQMEDHarvester("SiPixelPhase1Barycenter") |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
// -*- C++ -*- | ||
// | ||
// Package: SiPixelPhase1Barycenter | ||
// Class: SiPixelPhase1Barycenter | ||
// | ||
/**\class | ||
Description: Create the Phase 1 pixel barycenter plots | ||
Implementation: | ||
<Notes on implementation> | ||
*/ | ||
// | ||
// Original Author: Danilo Meuser | ||
// Created: 26th May 2021 | ||
// | ||
// | ||
#include "DQM/SiPixelPhase1Summary/interface/SiPixelPhase1Barycenter.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include "DQM/SiPixelPhase1Summary/interface/SiPixelPhase1BarycenterHelper.h" | ||
#include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h" | ||
|
||
#include <string> | ||
#include <iostream> | ||
|
||
using namespace std; | ||
using namespace edm; | ||
|
||
SiPixelPhase1Barycenter::SiPixelPhase1Barycenter(const edm::ParameterSet& iConfig) | ||
: DQMEDHarvester(iConfig) { | ||
LogInfo("PixelDQM") << "SiPixelPhase1Barycenter::SiPixelPhase1Barycenter: Got DQM BackEnd interface" << endl; | ||
|
||
} | ||
|
||
SiPixelPhase1Barycenter::~SiPixelPhase1Barycenter() { | ||
// do anything here that needs to be done at desctruction time | ||
// (e.g. close files, deallocate resources etc.) | ||
LogInfo("PixelDQM") << "SiPixelPhase1Barycenter::~SiPixelPhase1Barycenter: Destructor" << endl; | ||
} | ||
|
||
void SiPixelPhase1Barycenter::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) {} | ||
|
||
void SiPixelPhase1Barycenter::dqmEndJob(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter) {} | ||
|
||
void SiPixelPhase1Barycenter::dqmEndLuminosityBlock(DQMStore::IBooker& iBooker, | ||
DQMStore::IGetter& iGetter, | ||
const edm::LuminosityBlock& lumiSeg, | ||
edm::EventSetup const& c) { | ||
|
||
|
||
bookBarycenterHistograms(iBooker); | ||
|
||
edm::ESHandle<Alignments> alignment_Handle; | ||
c.get<TrackerAlignmentRcd>().get(alignment_Handle); | ||
This comment has been minimized.
Sorry, something went wrong. |
||
|
||
edm::ESHandle<Alignments> gpr_Handle; | ||
This comment has been minimized.
Sorry, something went wrong. |
||
c.get<GlobalPositionRcd>().get(gpr_Handle); | ||
|
||
fillBarycenterHistograms(iBooker, iGetter,alignment_Handle->m_align,gpr_Handle->m_align); | ||
|
||
} | ||
//------------------------------------------------------------------ | ||
// Used to book the barycenter histograms | ||
//------------------------------------------------------------------ | ||
void SiPixelPhase1Barycenter::bookBarycenterHistograms(DQMStore::IBooker& iBooker) { | ||
iBooker.cd(); | ||
|
||
iBooker.setCurrentFolder("PixelPhase1/Barycenter"); | ||
//Book one histogram for each subdetector | ||
for (std::string subdetector : {"BPIX", "FPIXm", "FPIXp"}) { | ||
barycenters_[subdetector] = | ||
iBooker.book1D("barycenters_" + subdetector, | ||
"Position of the barycenter for " + subdetector + ";Coordinate;Position [mm]", | ||
3, | ||
0.5, | ||
3.5); | ||
barycenters_[subdetector]->setBinLabel(1, "x"); | ||
barycenters_[subdetector]->setBinLabel(2, "y"); | ||
barycenters_[subdetector]->setBinLabel(3, "z"); | ||
} | ||
|
||
//Reset the iBooker | ||
iBooker.setCurrentFolder("PixelPhase1/"); | ||
} | ||
|
||
//------------------------------------------------------------------ | ||
// Fill the Barycenter histograms | ||
//------------------------------------------------------------------ | ||
void SiPixelPhase1Barycenter::fillBarycenterHistograms(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter, const std::vector<AlignTransform>& input, const std::vector<AlignTransform>& GPR) { | ||
|
||
const auto GPR_translation_pixel = GPR[0].translation(); | ||
const std::map<DQMBarycenter::coordinate, float> GPR_pixel = {{DQMBarycenter::t_x, GPR_translation_pixel.x()}, {DQMBarycenter::t_y, GPR_translation_pixel.y()}, {DQMBarycenter::t_z, GPR_translation_pixel.z()}}; | ||
|
||
DQMBarycenter::TkAlBarycenters barycenters; | ||
TrackerTopology tTopo = StandaloneTrackerTopology::fromTrackerParametersXMLFile(edm::FileInPath("Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml").fullPath()); | ||
This comment has been minimized.
Sorry, something went wrong.
mmusich
Contributor
|
||
barycenters.computeBarycenters(input, tTopo, GPR_pixel); | ||
|
||
auto Xbarycenters = barycenters.getX(); | ||
auto Ybarycenters = barycenters.getY(); | ||
auto Zbarycenters = barycenters.getZ(); | ||
|
||
//Fill histogram for each subdetector | ||
std::vector<std::string> subdetectors = {"BPIX", "FPIXm", "FPIXp"}; | ||
for(std::size_t i = 0; i < subdetectors.size(); ++i) { | ||
barycenters_[subdetectors[i]]->setBinContent(1,Xbarycenters[i]); | ||
barycenters_[subdetectors[i]]->setBinContent(2,Ybarycenters[i]); | ||
barycenters_[subdetectors[i]]->setBinContent(3,Zbarycenters[i]); | ||
} | ||
} | ||
|
||
//define this as a plug-in | ||
DEFINE_FWK_MODULE(SiPixelPhase1Barycenter); |
this doesn't necessarily apply only to phase1 though, right?