40 #include "CLHEP/Matrix/SymMatrix.h"
57 #include "TDirectory.h"
78 bool checkModuleIds(
const unsigned int,
const std::vector<unsigned int>&)
const;
105 : resultFile_(iConfig.getParameter<
std::
string>(
"resultFile")),
106 trackerTreeFile_(iConfig.getParameter<
std::
string>(
"trackerTreeFile")),
120 edm::LogError(
"SectorBuilder") <<
"TrackerTreeFile not found";
123 TTree* tkTree(
nullptr);
124 tkTreeFile->GetObject(
"TrackerTreeGenerator/TrackerTree/TrackerTree", tkTree);
128 edm::LogError(
"SectorBuilder") <<
"TrackerTree not found in file";
132 unsigned int rawId(999), subdetId(999), layer(999), side(999), half(999), rod(999),
ring(999), petal(999), blade(999),
133 panel(999), outerInner(999), module(999),
nStrips(999);
134 bool isDoubleSide(
false), isRPhi(
false), isStereo(
false);
135 int uDirection(999), vDirection(999), wDirection(999);
136 float posR(999.
F), posPhi(999.
F), posEta(999.
F),
posX(999.
F),
posY(999.
F), posZ(999.
F);
138 tkTree->SetBranchAddress(
"RawId", &rawId);
139 tkTree->SetBranchAddress(
"SubdetId", &subdetId);
140 tkTree->SetBranchAddress(
"Layer", &layer);
141 tkTree->SetBranchAddress(
"Side", &side);
142 tkTree->SetBranchAddress(
"Half", &half);
143 tkTree->SetBranchAddress(
"Rod", &rod);
144 tkTree->SetBranchAddress(
"Ring", &
ring);
145 tkTree->SetBranchAddress(
"Petal", &petal);
146 tkTree->SetBranchAddress(
"Blade", &blade);
147 tkTree->SetBranchAddress(
"Panel", &panel);
148 tkTree->SetBranchAddress(
"OuterInner", &outerInner);
149 tkTree->SetBranchAddress(
"Module", &module);
150 tkTree->SetBranchAddress(
"NStrips", &
nStrips);
151 tkTree->SetBranchAddress(
"IsDoubleSide", &isDoubleSide);
152 tkTree->SetBranchAddress(
"IsRPhi", &isRPhi);
153 tkTree->SetBranchAddress(
"IsStereo", &isStereo);
154 tkTree->SetBranchAddress(
"UDirection", &uDirection);
155 tkTree->SetBranchAddress(
"VDirection", &vDirection);
156 tkTree->SetBranchAddress(
"WDirection", &wDirection);
157 tkTree->SetBranchAddress(
"PosR", &posR);
158 tkTree->SetBranchAddress(
"PosPhi", &posPhi);
159 tkTree->SetBranchAddress(
"PosEta", &posEta);
160 tkTree->SetBranchAddress(
"PosX", &
posX);
161 tkTree->SetBranchAddress(
"PosY", &
posY);
162 tkTree->SetBranchAddress(
"PosZ", &posZ);
164 int nModules(tkTree->GetEntries());
168 unsigned int sectorCounter(0);
169 std::vector<edm::ParameterSet> v_sectorDef(
sectors_);
170 edm::LogInfo(
"SectorBuilder") <<
"There are " << v_sectorDef.size() <<
" Sectors defined";
172 for (
auto const& parSet : v_sectorDef) {
175 std::vector<unsigned int> v_rawId(parSet.getParameter<std::vector<unsigned int>>(
"rawId")),
176 v_subdetId(parSet.getParameter<std::vector<unsigned int>>(
"subdetId")),
177 v_layer(parSet.getParameter<std::vector<unsigned int>>(
"layer")),
178 v_side(parSet.getParameter<std::vector<unsigned int>>(
"side")),
179 v_half(parSet.getParameter<std::vector<unsigned int>>(
"half")),
180 v_rod(parSet.getParameter<std::vector<unsigned int>>(
"rod")),
181 v_ring(parSet.getParameter<std::vector<unsigned int>>(
"ring")),
182 v_petal(parSet.getParameter<std::vector<unsigned int>>(
"petal")),
183 v_blade(parSet.getParameter<std::vector<unsigned int>>(
"blade")),
184 v_panel(parSet.getParameter<std::vector<unsigned int>>(
"panel")),
185 v_outerInner(parSet.getParameter<std::vector<unsigned int>>(
"outerInner")),
186 v_module(parSet.getParameter<std::vector<unsigned int>>(
"module")),
187 v_nStrips(parSet.getParameter<std::vector<unsigned int>>(
"nStrips")),
188 v_isDoubleSide(parSet.getParameter<std::vector<unsigned int>>(
"isDoubleSide")),
189 v_isRPhi(parSet.getParameter<std::vector<unsigned int>>(
"isRPhi")),
190 v_isStereo(parSet.getParameter<std::vector<unsigned int>>(
"isStereo"));
191 std::vector<int> v_uDirection(parSet.getParameter<std::vector<int>>(
"uDirection")),
192 v_vDirection(parSet.getParameter<std::vector<int>>(
"vDirection")),
193 v_wDirection(parSet.getParameter<std::vector<int>>(
"wDirection"));
194 std::vector<double> v_posR(parSet.getParameter<std::vector<double>>(
"posR")),
195 v_posPhi(parSet.getParameter<std::vector<double>>(
"posPhi")),
196 v_posEta(parSet.getParameter<std::vector<double>>(
"posEta")),
197 v_posX(parSet.getParameter<std::vector<double>>(
"posX")),
198 v_posY(parSet.getParameter<std::vector<double>>(
"posY")),
199 v_posZ(parSet.getParameter<std::vector<double>>(
"posZ"));
211 tkSector.
name = sectorName;
216 for (
int module = 0; module < nModules; ++module) {
217 tkTree->GetEntry(module);
219 if (sectorCounter == 1) {
279 tkSector.
v_rawId.push_back(rawId);
280 bool moduleSelected(
false);
281 for (
auto const& i_rawId : allSectors.v_rawId) {
282 if (rawId == i_rawId)
283 moduleSelected =
true;
286 allSectors.v_rawId.push_back(rawId);
292 for (
auto const& i_rawId : tkSector.
v_rawId) {
309 <<
"Incorrect Sector Definition: there are pixel and strip modules within one sector"
310 <<
"\n... sector selection is not applied, sector " << sectorCounter <<
" is not built";
316 edm::LogInfo(
"SectorBuilder") <<
"There are " << tkSector.
v_rawId.size() <<
" Modules in Sector " << sectorCounter;
324 const std::vector<double>& v_id)
const {
327 if (v_id.size() % 2 == 1) {
329 <<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)"
330 <<
"\n... sector selection is not applied, sector " << sectorCounter <<
" is not built";
334 double intervalBegin(999.);
335 for (
auto const& i_id : v_id) {
338 intervalBegin = i_id;
339 if (
entry % 2 == 0 && intervalBegin > i_id) {
340 edm::LogError(
"SectorBuilder") <<
"Incorrect Sector Definition (Position Vector Intervals): \t" << intervalBegin
341 <<
" is bigger than " << i_id <<
" but is expected to be smaller"
342 <<
"\n... sector selection is not applied, sector " << sectorCounter
353 for (
auto const& i_id : v_id) {
363 for (
auto const& i_id : v_id) {
366 if (2 == i_id && !
id)
375 for (
auto const& i_id : v_id) {
386 double intervalBegin(999.);
387 for (
auto const& i_id : v_id) {
390 intervalBegin = i_id;
391 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);
528 desc.addVPSet(
"sectors", sector);
530 descriptions.
add(
"apeTreeCreateDefault",
desc);