24 #include "CLHEP/Units/GlobalSystemOfUnits.h"
56 <<
"Can not proceed, no CSC parts found with the filter. The current node is: " << fv.
logicalPart().
toString();
59 int noOfAnonParams = 0;
60 std::vector<const DDsvalues_type*> spec = fv.
specifics();
61 std::vector<const DDsvalues_type*>::const_iterator spit = spec.begin();
62 std::vector<double> uparvals;
63 std::vector<double> fpar;
64 std::vector<double> dpar;
65 std::vector<double> gtran(3);
66 std::vector<double> grmat(9);
67 std::vector<double> trm(9);
84 LogTrace(
myName) <<
myName <<
": raw id for this detector is " <<
id <<
", octal " << std::oct <<
id <<
", hex "
88 int jendcap = detid.
endcap();
90 int jring = detid.
ring();
92 int jlayer = detid.
layer();
104 bool chSpecsAlreadyExist =
false;
112 LogDebug(
myName) <<
"already found a " << chamberType <<
" at index " << ct;
114 chSpecsAlreadyExist =
true;
116 for (; spit != spec.end(); spit++) {
117 DDsvalues_type::const_iterator it = (**spit).begin();
118 for (; it != (**spit).end(); it++) {
120 if (it->second.name() ==
"upar") {
121 uparvals.emplace_back(it->second.doubles().size());
122 for (
double i : it->second.doubles()) {
123 uparvals.emplace_back(
i);
127 }
else if (it->second.name() ==
"NoOfAnonParams") {
128 noOfAnonParams = static_cast<int>(it->second.doubles()[0]);
129 }
else if (it->second.name() ==
"NumWiresPerGrp") {
130 for (
double i : it->second.doubles()) {
134 }
else if (it->second.name() ==
"NumGroups") {
135 for (
double i : it->second.doubles()) {
138 }
else if (it->second.name() ==
"WireSpacing") {
140 }
else if (it->second.name() ==
"AlignmentPinToFirstWire") {
142 }
else if (it->second.name() ==
"TotNumWireGroups") {
144 }
else if (it->second.name() ==
"LengthOfFirstWire") {
146 }
else if (it->second.name() ==
"LengthOfLastWire") {
148 }
else if (it->second.name() ==
"RadialExtentOfWirePlane") {
169 for (CSCWireGroupPackage::Container::const_iterator it = wg.
wiresInEachGroup.begin();
172 uparvals.emplace_back(*it);
174 for (CSCWireGroupPackage::Container::const_iterator it = wg.
consecutiveGroups.begin();
177 uparvals.emplace_back(*it);
201 LogTrace(
myName) <<
myName <<
": dpars are... " << dpar[4] / cm <<
", " << dpar[8] / cm <<
", " << dpar[3] / cm
202 <<
", " << dpar[0] / cm;
204 fpar.emplace_back((dpar[4] / cm));
205 fpar.emplace_back((dpar[8] / cm));
206 fpar.emplace_back((dpar[3] / cm));
207 fpar.emplace_back((dpar[0] / cm));
215 LogTrace(
myName) <<
myName <<
": gtran[0]=" << gtran[0] <<
", gtran[1]=" << gtran[1] <<
", gtran[2]=" << gtran[2];
219 fv.
rotation().GetComponents(trm.begin(), trm.end());
221 for (
size_t i = 0;
i < 9; ++
i) {
222 grmat[
i] = (
float)1.0 * trm[rotindex];
223 rotindex = rotindex + 3;
224 if ((
i + 1) % 3 == 0) {
225 rotindex = (
i + 1) / 3;
251 LogTrace(
myName) <<
myName <<
":_z_ E" << jendcap <<
" S" << jstation <<
" R" << jring <<
" C" << jchamber <<
" L"
252 << jlayer <<
" gx=" << gtran[0] <<
", gy=" << gtran[1] <<
", gz=" << gtran[2]
253 <<
" thickness=" << fpar[2] * 2.;
257 LogTrace(
myName) <<
myName <<
":_z_ frame=" << uparvals[31] / 10. <<
" gap=" << uparvals[32] / 10.
258 <<
" panel=" << uparvals[33] / 10. <<
" offset=" << uparvals[34] / 10.;
260 if (jstation == 1 && jring == 1) {
266 std::transform(gtran.begin(), gtran.end(), gtran.begin(), [](
double i) ->
double {
269 std::transform(grmat.begin(), grmat.end(), grmat.begin(), [](
double i) ->
double {
275 rig.
insert(
id, gtran, grmat, fpar);
276 if (!chSpecsAlreadyExist) {
277 LogDebug(
myName) <<
" inserting chamber type " << chamberType << std::endl;
281 std::copy(uparvals.begin(), uparvals.end(), std::back_inserter(rdp.
pfupars));
288 const int kNoOfAnonParams = 35;
289 if (noOfAnonParams == 0) {
290 noOfAnonParams = kNoOfAnonParams;
295 uparvals.begin() + noOfAnonParams + 1, uparvals.begin() + (2 * noOfAnonParams) + 2, uparvals.begin() + 1);
299 std::transform(gtran.begin(), gtran.end(), gtran.begin(), [](
double i) ->
double {
302 std::transform(grmat.begin(), grmat.end(), grmat.begin(), [](
double i) ->
double {
308 rig.
insert(detid1a.rawId(), gtran, grmat, fpar);
318 LogDebug(
myName) <<
"found chamber type " << chtypeA <<
" so don't put it in! ";
324 std::copy(uparvals.begin(), uparvals.end(), std::back_inserter(rdp.
pfupars));
328 std::transform(gtran.begin(), gtran.end(), gtran.begin(), [](
double i) ->
double {
331 std::transform(grmat.begin(), grmat.end(), grmat.begin(), [](
double i) ->
double {
336 rig.
insert(
id, gtran, grmat, fpar);
337 if (!chSpecsAlreadyExist) {
342 std::copy(uparvals.begin(), uparvals.end(), std::back_inserter(rdp.
pfupars));
348 doSubDets = fv.
next();
364 int noOfAnonParams = 0;
366 std::vector<double> uparvals;
367 std::vector<double> fpar;
368 std::vector<double> dpar;
369 std::vector<double> gtran(3);
370 std::vector<double> grmat(9);
371 std::vector<double> trm(9);
378 int jendcap = detid.
endcap();
379 int jstation = detid.
station();
380 int jring = detid.
ring();
381 int jchamber = detid.
chamber();
382 int jlayer = detid.
layer();
392 bool chSpecsAlreadyExist =
false;
401 chSpecsAlreadyExist =
true;
403 std::string_view my_name_bis = fv.
name();
405 std::vector<std::string_view> namesInPath = mypar.names(
"//" + my_name_tris);
409 std::size_t
found = namesInPath[
i].find(my_string);
410 if (
found != std::string::npos)
415 auto it = uparvals.begin();
416 it = uparvals.insert(it, uparvals.size());
417 auto noofanonparams = fv.
get<
double>(
"NoOfAnonParams");
418 noOfAnonParams = static_cast<int>(noofanonparams);
428 auto wirespacing = fv.
get<
double>(
"WireSpacing");
431 auto alignmentpintofirstwire = fv.
get<
double>(
"AlignmentPinToFirstWire");
434 auto totnumwiregroups = fv.
get<
double>(
"TotNumWireGroups");
437 auto lengthoffirstwire = fv.
get<
double>(
"LengthOfFirstWire");
440 auto lengthoflastwire = fv.
get<
double>(
"LengthOfLastWire");
443 auto radialextentofwireplane = fv.
get<
double>(
"RadialExtentOfWirePlane");
454 for (CSCWireGroupPackage::Container::const_iterator it = wg.
wiresInEachGroup.begin();
457 uparvals.emplace_back(*it);
459 for (CSCWireGroupPackage::Container::const_iterator it = wg.
consecutiveGroups.begin();
462 uparvals.emplace_back(*it);
472 if (my_title ==
"Subtraction") {
474 auto solidA = mysolid.
solidA();
475 std::vector<double> dpar = solidA.dimensions();
480 fpar.emplace_back((dpar[1]));
481 fpar.emplace_back((dpar[2]));
482 fpar.emplace_back((dpar[3]));
483 fpar.emplace_back((dpar[4]));
490 fpar.emplace_back((dpar[0]));
491 fpar.emplace_back((dpar[1]));
492 fpar.emplace_back((dpar[2]));
493 fpar.emplace_back((dpar[3]));
496 gtran[0] = static_cast<float>(fv.
translation().X());
497 gtran[1] = static_cast<float>(fv.
translation().Y());
498 gtran[2] = static_cast<float>(fv.
translation().Z());
503 fv.
rotation().GetComponents(trm.begin(), trm.end());
505 for (
size_t i = 0;
i < 9; ++
i) {
506 grmat[
i] = static_cast<float>(trm[rotindex]);
507 rotindex = rotindex + 3;
508 if ((
i + 1) % 3 == 0) {
509 rotindex = (
i + 1) / 3;
522 if (jstation == 1 && jring == 1) {
523 std::transform(gtran.begin(), gtran.end(), gtran.begin(), [](
double i) ->
double {
527 std::transform(grmat.begin(), grmat.end(), grmat.begin(), [](
double i) ->
double {
534 rig.
insert(
id, gtran, grmat, fpar);
535 if (!chSpecsAlreadyExist) {
539 std::copy(uparvals.begin(), uparvals.end(), std::back_inserter(rdp.
pfupars));
546 const int kNoOfAnonParams = 35;
547 if (noOfAnonParams == 0) {
548 noOfAnonParams = kNoOfAnonParams;
553 uparvals.begin() + noOfAnonParams + 1, uparvals.begin() + (2 * noOfAnonParams) + 2, uparvals.begin() + 1);
557 std::transform(gtran.begin(), gtran.end(), gtran.begin(), [](
double i) ->
double {
561 std::transform(grmat.begin(), grmat.end(), grmat.begin(), [](
double i) ->
double {
568 rig.
insert(detid1a.rawId(), gtran, grmat, fpar);
578 LogTrace(
myName) <<
myName <<
" ct < rdp.pChamberType.size() && rdp.pChamberType[ct] == chtypeA ";
583 std::copy(uparvals.begin(), uparvals.end(), std::back_inserter(rdp.
pfupars));
587 std::transform(gtran.begin(), gtran.end(), gtran.begin(), [](
double i) ->
double {
591 std::transform(grmat.begin(), grmat.end(), grmat.begin(), [](
double i) ->
double {
598 rig.
insert(
id, gtran, grmat, fpar);
599 if (!chSpecsAlreadyExist) {
603 std::copy(uparvals.begin(), uparvals.end(), std::back_inserter(rdp.
pfupars));