39 #include "CLHEP/Matrix/SymMatrix.h" 56 #include "TDirectory.h" 77 bool checkModuleIds(
const unsigned int,
const std::vector<unsigned int>&)
const;
106 resultFile_(iConfig.getParameter<
std::
string>(
"resultFile")),
107 trackerTreeFile_(iConfig.getParameter<
std::
string>(
"trackerTreeFile")),
121 edm::LogError(
"SectorBuilder") <<
"TrackerTreeFile not found";
124 TTree* tkTree(
nullptr);
125 tkTreeFile->GetObject(
"TrackerTreeGenerator/TrackerTree/TrackerTree", tkTree);
129 edm::LogError(
"SectorBuilder") <<
"TrackerTree not found in file";
133 unsigned int rawId(999), subdetId(999),
layer(999), side(999), half(999), rod(999),
ring(999), petal(999), blade(999),
135 bool isDoubleSide(
false), isRPhi(
false), isStereo(
false);
136 int uDirection(999), vDirection(999), wDirection(999);
137 float posR(999.
F), posPhi(999.
F), posEta(999.
F),
posX(999.
F),
posY(999.
F), posZ(999.
F);
139 tkTree->SetBranchAddress(
"RawId", &rawId);
140 tkTree->SetBranchAddress(
"SubdetId", &subdetId);
141 tkTree->SetBranchAddress(
"Layer", &
layer);
142 tkTree->SetBranchAddress(
"Side", &side);
143 tkTree->SetBranchAddress(
"Half", &half);
144 tkTree->SetBranchAddress(
"Rod", &rod);
145 tkTree->SetBranchAddress(
"Ring", &
ring);
146 tkTree->SetBranchAddress(
"Petal", &petal);
147 tkTree->SetBranchAddress(
"Blade", &blade);
148 tkTree->SetBranchAddress(
"Panel", &panel);
149 tkTree->SetBranchAddress(
"OuterInner", &outerInner);
150 tkTree->SetBranchAddress(
"Module", &
module);
151 tkTree->SetBranchAddress(
"NStrips", &
nStrips);
152 tkTree->SetBranchAddress(
"IsDoubleSide", &isDoubleSide);
153 tkTree->SetBranchAddress(
"IsRPhi", &isRPhi);
154 tkTree->SetBranchAddress(
"IsStereo", &isStereo);
155 tkTree->SetBranchAddress(
"UDirection", &uDirection);
156 tkTree->SetBranchAddress(
"VDirection", &vDirection);
157 tkTree->SetBranchAddress(
"WDirection", &wDirection);
158 tkTree->SetBranchAddress(
"PosR", &posR);
159 tkTree->SetBranchAddress(
"PosPhi", &posPhi);
160 tkTree->SetBranchAddress(
"PosEta", &posEta);
161 tkTree->SetBranchAddress(
"PosX", &
posX);
162 tkTree->SetBranchAddress(
"PosY", &
posY);
163 tkTree->SetBranchAddress(
"PosZ", &posZ);
165 int nModules(tkTree->GetEntries());
169 unsigned int sectorCounter(0);
170 std::vector<edm::ParameterSet> v_sectorDef(
sectors_);
171 edm::LogInfo(
"SectorBuilder") <<
"There are " << v_sectorDef.size() <<
" Sectors defined";
173 for (
auto const& parSet : v_sectorDef) {
176 std::vector<unsigned int> v_rawId(parSet.getParameter<std::vector<unsigned int>>(
"rawId")),
177 v_subdetId(parSet.getParameter<std::vector<unsigned int>>(
"subdetId")),
178 v_layer(parSet.getParameter<std::vector<unsigned int>>(
"layer")),
179 v_side(parSet.getParameter<std::vector<unsigned int>>(
"side")),
180 v_half(parSet.getParameter<std::vector<unsigned int>>(
"half")),
181 v_rod(parSet.getParameter<std::vector<unsigned int>>(
"rod")),
182 v_ring(parSet.getParameter<std::vector<unsigned int>>(
"ring")),
183 v_petal(parSet.getParameter<std::vector<unsigned int>>(
"petal")),
184 v_blade(parSet.getParameter<std::vector<unsigned int>>(
"blade")),
185 v_panel(parSet.getParameter<std::vector<unsigned int>>(
"panel")),
186 v_outerInner(parSet.getParameter<std::vector<unsigned int>>(
"outerInner")),
187 v_module(parSet.getParameter<std::vector<unsigned int>>(
"module")),
188 v_nStrips(parSet.getParameter<std::vector<unsigned int>>(
"nStrips")),
189 v_isDoubleSide(parSet.getParameter<std::vector<unsigned int>>(
"isDoubleSide")),
190 v_isRPhi(parSet.getParameter<std::vector<unsigned int>>(
"isRPhi")),
191 v_isStereo(parSet.getParameter<std::vector<unsigned int>>(
"isStereo"));
192 std::vector<int> v_uDirection(parSet.getParameter<std::vector<int>>(
"uDirection")),
193 v_vDirection(parSet.getParameter<std::vector<int>>(
"vDirection")),
194 v_wDirection(parSet.getParameter<std::vector<int>>(
"wDirection"));
195 std::vector<double> v_posR(parSet.getParameter<std::vector<double>>(
"posR")),
196 v_posPhi(parSet.getParameter<std::vector<double>>(
"posPhi")),
197 v_posEta(parSet.getParameter<std::vector<double>>(
"posEta")),
198 v_posX(parSet.getParameter<std::vector<double>>(
"posX")),
199 v_posY(parSet.getParameter<std::vector<double>>(
"posY")),
200 v_posZ(parSet.getParameter<std::vector<double>>(
"posZ"));
212 tkSector.
name = sectorName;
220 if (sectorCounter == 1) {
280 tkSector.
v_rawId.push_back(rawId);
281 bool moduleSelected(
false);
282 for (
auto const& i_rawId : allSectors.v_rawId) {
283 if (rawId == i_rawId)
284 moduleSelected =
true;
287 allSectors.v_rawId.push_back(rawId);
293 for (
auto const& i_rawId : tkSector.
v_rawId) {
310 <<
"Incorrect Sector Definition: there are pixel and strip modules within one sector" 311 <<
"\n... sector selection is not applied, sector " << sectorCounter <<
" is not built";
317 edm::LogInfo(
"SectorBuilder") <<
"There are " << tkSector.
v_rawId.size() <<
" Modules in Sector " << sectorCounter;
325 const std::vector<double>& v_id)
const {
328 if (v_id.size() % 2 == 1) {
330 <<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)" 331 <<
"\n... sector selection is not applied, sector " << sectorCounter <<
" is not built";
335 double intervalBegin(999.);
336 for (
auto const& i_id : v_id) {
339 intervalBegin = i_id;
340 if (
entry % 2 == 0 && intervalBegin > i_id) {
341 edm::LogError(
"SectorBuilder") <<
"Incorrect Sector Definition (Position Vector Intervals): \t" << intervalBegin
342 <<
" is bigger than " << i_id <<
" but is expected to be smaller" 343 <<
"\n... sector selection is not applied, sector " << sectorCounter
354 for (
auto const& i_id : v_id) {
364 for (
auto const& i_id : v_id) {
367 if (2 == i_id && !
id)
376 for (
auto const& i_id : v_id) {
387 double intervalBegin(999.);
388 for (
auto const& i_id : v_id) {
391 intervalBegin = i_id;
392 if (
entry % 2 == 0 &&
id >= intervalBegin &&
id < i_id)
407 TFile* defaultFile =
new TFile(defaultFileName.c_str(),
"RECREATE");
410 TTree* defaultTreeX(
nullptr);
411 TTree* defaultTreeY(
nullptr);
412 defaultFile->GetObject(
"iterTreeX;1", defaultTreeX);
413 defaultFile->GetObject(
"iterTreeY;1", defaultTreeY);
415 TTree* sectorNameTree(
nullptr);
416 defaultFile->GetObject(
"nameTree;1", sectorNameTree);
418 edm::LogInfo(
"DefaultAPETree") <<
"APE Tree is being created";
419 defaultTreeX =
new TTree(
"iterTreeX",
"Tree for default APE x values from GT");
420 defaultTreeY =
new TTree(
"iterTreeY",
"Tree for default APE y values from GT");
421 sectorNameTree =
new TTree(
"nameTree",
"Tree with names of sectors");
424 std::vector<double*> a_defaultSectorX;
425 std::vector<double*> a_defaultSectorY;
427 std::vector<std::string*> a_sectorName;
429 const unsigned int iSector(i_sector.first);
430 const bool pixelSector(i_sector.second.isPixel);
432 a_defaultSectorX.push_back(
new double(-99.));
433 a_defaultSectorY.push_back(
new double(-99.));
434 a_sectorName.push_back(
new std::string(i_sector.second.name));
436 std::stringstream ss_sector;
437 std::stringstream ss_sectorSuffixed;
438 ss_sector <<
"Ape_Sector_" << iSector;
440 ss_sectorSuffixed << ss_sector.str() <<
"/D";
441 defaultTreeX->Branch(ss_sector.str().c_str(), &(*a_defaultSectorX[iSector - 1]), ss_sectorSuffixed.str().c_str());
444 defaultTreeY->Branch(ss_sector.str().c_str(), &(*a_defaultSectorY[iSector - 1]), ss_sectorSuffixed.str().c_str());
446 sectorNameTree->Branch(ss_sector.str().c_str(), &(*a_sectorName[iSector - 1]), 32000, 00);
452 double defaultApeX(0.);
453 double defaultApeY(0.);
454 unsigned int nModules(0);
455 for (
auto const& i_rawId : i_sector.second.v_rawId) {
456 std::vector<AlignTransformErrorExtended> alignErrors = alignmentErrors->
m_alignError;
457 for (
auto const& i_alignError : alignErrors) {
458 if (i_rawId == i_alignError.rawId()) {
459 CLHEP::HepSymMatrix errMatrix = i_alignError.matrix();
460 defaultApeX += errMatrix[0][0];
461 defaultApeY += errMatrix[1][1];
466 *a_defaultSectorX[i_sector.first - 1] = defaultApeX / nModules;
467 *a_defaultSectorY[i_sector.first - 1] = defaultApeY / nModules;
470 sectorNameTree->Fill();
471 sectorNameTree->Write(
"nameTree");
472 defaultTreeX->Fill();
473 defaultTreeX->Write(
"iterTreeX");
474 defaultTreeY->Fill();
475 defaultTreeY->Write(
"iterTreeY");
477 defaultFile->Close();
479 for (
unsigned int i = 0;
i < a_defaultSectorX.size();
i++) {
480 delete a_defaultSectorX[
i];
481 delete a_defaultSectorY[
i];
482 delete a_sectorName[
i];
496 std::vector<unsigned> emptyUnsignedIntVector;
497 std::vector<int> emptyIntVector;
498 std::vector<double> emptyDoubleVector;
500 sector.add<std::vector<unsigned>>(
"rawId", emptyUnsignedIntVector);
501 sector.add<std::vector<unsigned>>(
"subdetId", emptyUnsignedIntVector);
502 sector.add<std::vector<unsigned>>(
"layer", emptyUnsignedIntVector);
503 sector.add<std::vector<unsigned>>(
"side", emptyUnsignedIntVector);
504 sector.add<std::vector<unsigned>>(
"half", emptyUnsignedIntVector);
505 sector.add<std::vector<unsigned>>(
"rod", emptyUnsignedIntVector);
506 sector.add<std::vector<unsigned>>(
"ring", emptyUnsignedIntVector);
507 sector.add<std::vector<unsigned>>(
"petal", emptyUnsignedIntVector);
508 sector.add<std::vector<unsigned>>(
"blade", emptyUnsignedIntVector);
509 sector.add<std::vector<unsigned>>(
"panel", emptyUnsignedIntVector);
510 sector.add<std::vector<unsigned>>(
"outerInner", emptyUnsignedIntVector);
511 sector.add<std::vector<unsigned>>(
"module", emptyUnsignedIntVector);
512 sector.add<std::vector<unsigned>>(
"nStrips", emptyUnsignedIntVector);
513 sector.add<std::vector<unsigned>>(
"isDoubleSide", emptyUnsignedIntVector);
514 sector.add<std::vector<unsigned>>(
"isRPhi", emptyUnsignedIntVector);
515 sector.add<std::vector<unsigned>>(
"isStereo", emptyUnsignedIntVector);
516 sector.add<std::vector<int>>(
"uDirection", emptyIntVector);
517 sector.add<std::vector<int>>(
"vDirection", emptyIntVector);
518 sector.add<std::vector<int>>(
"wDirection", emptyIntVector);
519 sector.add<std::vector<double>>(
"posR", emptyDoubleVector);
520 sector.add<std::vector<double>>(
"posPhi", emptyDoubleVector);
521 sector.add<std::vector<double>>(
"posEta", emptyDoubleVector);
522 sector.add<std::vector<double>>(
"posX", emptyDoubleVector);
523 sector.add<std::vector<double>>(
"posY", emptyDoubleVector);
524 sector.add<std::vector<double>>(
"posZ", emptyDoubleVector);
530 descriptions.
add(
"apeTreeCreateDefault",
desc);
static constexpr auto TEC
ApeTreeCreateDefault(const edm::ParameterSet &)
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
const std::vector< edm::ParameterSet > sectors_
std::map< unsigned int, ReducedTrackerTreeVariables > m_tkTreeVar_
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
Log< level::Error, false > LogError
nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
bool checkModuleDirections(const int, const std::vector< int > &) const
const std::string trackerTreeFile_
#define DEFINE_FWK_MODULE(type)
const edm::ESGetToken< AlignmentErrorsExtended, TrackerAlignmentErrorExtendedRcd > alignmentErrorToken_
static constexpr auto TOB
bool checkIntervalsForSectors(const unsigned int sectorCounter, const std::vector< double > &) const
~ApeTreeCreateDefault() override
Log< level::Info, false > LogInfo
static constexpr auto TIB
std::vector< AlignTransformErrorExtended > m_alignError
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const std::string resultFile_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool checkModuleBools(const bool, const std::vector< unsigned int > &) const
bool isPixel(HitType hitType)
bool checkModuleIds(const unsigned int, const std::vector< unsigned int > &) const
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
void analyze(const edm::Event &, const edm::EventSetup &) override
bool checkModulePositions(const float, const std::vector< double > &) const
static constexpr auto TID
std::vector< unsigned int > v_rawId