Skip to content

Commit

Permalink
First commit for TkDQM barycenter plots
Browse files Browse the repository at this point in the history
  • Loading branch information
dmeuser committed Jun 1, 2021
1 parent 601fbc5 commit 45d54f9
Show file tree
Hide file tree
Showing 7 changed files with 324 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
+ SiPixelPhase1RawDataHarvester
+ RunQTests_offline
+ SiPixelPhase1SummaryOffline
+ SiPixelPhase1BarycenterOffline
)

siPixelPhase1OfflineDQM_harvesting_cosmics = siPixelPhase1OfflineDQM_harvesting.copyAndExclude([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
from DQM.SiPixelPhase1Common.SiPixelPhase1RawData_cfi import *
#Summary maps
from DQM.SiPixelPhase1Summary.SiPixelPhase1Summary_cfi import *
#Barycenter plots
from DQM.SiPixelPhase1Summary.SiPixelPhase1Barycenter_cfi import *

from RecoPixelVertexing.PixelLowPtUtilities.ClusterShapeHitFilterESProducer_cfi import *
from RecoLocalTracker.SiStripClusterizer.SiStripClusterChargeCut_cfi import *
Expand Down
1 change: 1 addition & 0 deletions DQM/SiPixelPhase1Summary/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
<use name="Geometry/CommonDetUnit"/>
<use name="Geometry/Records"/>
<use name="Geometry/TrackerGeometryBuilder"/>
<use name="CalibTracker/StandaloneTrackerTopology"/>
<use name="boost"/>
<flags EDM_PLUGIN="1"/>
59 changes: 59 additions & 0 deletions DQM/SiPixelPhase1Summary/interface/SiPixelPhase1Barycenter.h
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
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
141 changes: 141 additions & 0 deletions DQM/SiPixelPhase1Summary/interface/SiPixelPhase1BarycenterHelper.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
#ifndef SiPixelPhase1Barycenter_SiPixelPhase1BarycenterHelper_h
#define SiPixelPhase1Barycenter_SiPixelPhase1BarycenterHelper_h

#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 {
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")
112 changes: 112 additions & 0 deletions DQM/SiPixelPhase1Summary/src/SiPixelPhase1Barycenter.cc
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);

edm::ESHandle<Alignments> gpr_Handle;
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());
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);

0 comments on commit 45d54f9

Please sign in to comment.