File indexing completed on 2024-04-06 12:15:28
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include <memory>
0018
0019
0020 #include "FWCore/Framework/interface/Frameworkfwd.h"
0021 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0022
0023 #include "FWCore/Framework/interface/Event.h"
0024 #include "FWCore/Framework/interface/EventSetup.h"
0025 #include "FWCore/Framework/interface/MakerMacros.h"
0026
0027 #include "FWCore/Utilities/interface/Exception.h"
0028
0029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0030 #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h"
0031 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0032 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0033 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0034 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0035 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0036 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h"
0037
0038 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0039 #include "DataFormats/GeometrySurface/interface/BoundSurface.h"
0040 #include "DataFormats/Math/interface/angle_units.h"
0041 #include "DataFormats/Math/interface/Rounding.h"
0042 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0043
0044 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
0045 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0046 #include "Geometry/TrackerNumberingBuilder/interface/CmsTrackerStringToEnum.h"
0047 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0048
0049
0050 #include <iostream>
0051 #include <fstream>
0052 #include <iomanip>
0053 #include <cmath>
0054 #include <bitset>
0055
0056 using namespace cms_rounding;
0057 using namespace geometric_det_ns;
0058 using namespace angle_units::operators;
0059
0060 typedef ROOT::Math::DisplacementVector3D<ROOT::Math::Cartesian3D<double> > Displ3DVec;
0061
0062 class ModuleInfo : public edm::one::EDAnalyzer<> {
0063 public:
0064 explicit ModuleInfo(const edm::ParameterSet&);
0065
0066 void analyze(edm::Event const& iEvent, edm::EventSetup const&) override;
0067
0068 private:
0069 bool fromDDD_;
0070 bool printDDD_;
0071 double tolerance_;
0072 edm::ESGetToken<GeometricDet, IdealGeometryRecord> rDDToken_;
0073 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> pDDToken_;
0074 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoToken_;
0075 };
0076
0077 ModuleInfo::ModuleInfo(const edm::ParameterSet& ps)
0078 : fromDDD_(ps.getParameter<bool>("fromDDD")),
0079 printDDD_(ps.getUntrackedParameter<bool>("printDDD", true)),
0080 tolerance_(ps.getUntrackedParameter<double>("tolerance", 1.e-23)),
0081 rDDToken_(esConsumes()),
0082 pDDToken_(esConsumes()),
0083 tTopoToken_(esConsumes()) {}
0084
0085
0086 void ModuleInfo::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0087 edm::LogInfo("ModuleInfo") << "begins";
0088
0089
0090 std::ofstream Output("ModuleInfo.log", std::ios::out);
0091
0092 std::ofstream TECOutput("TECLayout_CMSSW.dat", std::ios::out);
0093 TECOutput << std::fixed << std::setprecision(4);
0094
0095
0096 std::ofstream NumberingOutput("ModuleNumbering.dat", std::ios::out);
0097
0098
0099
0100 auto const& rDD = iSetup.getData(rDDToken_);
0101
0102 edm::LogInfo("ModuleInfo") << " Top node is " << &rDD << " " << rDD.name() << std::endl;
0103 edm::LogInfo("ModuleInfo") << " And Contains Daughters: " << rDD.deepComponents().size() << std::endl;
0104
0105
0106 auto const& pDD = iSetup.getData(pDDToken_);
0107 const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_);
0108
0109
0110
0111 unsigned int pxbN = 0;
0112 unsigned int pxb_fullN = 0;
0113 unsigned int pxb_halfN = 0;
0114 unsigned int pxfN = 0;
0115 unsigned int pxf_1x2N = 0;
0116 unsigned int pxf_1x5N = 0;
0117 unsigned int pxf_2x3N = 0;
0118 unsigned int pxf_2x4N = 0;
0119 unsigned int pxf_2x5N = 0;
0120 unsigned int tibN = 0;
0121 unsigned int tib_L12_rphiN = 0;
0122 unsigned int tib_L12_sterN = 0;
0123 unsigned int tib_L34_rphiN = 0;
0124 unsigned int tidN = 0;
0125 unsigned int tid_r1_rphiN = 0;
0126 unsigned int tid_r1_sterN = 0;
0127 unsigned int tid_r2_rphiN = 0;
0128 unsigned int tid_r2_sterN = 0;
0129 unsigned int tid_r3_rphiN = 0;
0130 unsigned int tobN = 0;
0131 unsigned int tob_L12_rphiN = 0;
0132 unsigned int tob_L12_sterN = 0;
0133 unsigned int tob_L34_rphiN = 0;
0134 unsigned int tob_L56_rphiN = 0;
0135 unsigned int tecN = 0;
0136 unsigned int tec_r1_rphiN = 0;
0137 unsigned int tec_r1_sterN = 0;
0138 unsigned int tec_r2_rphiN = 0;
0139 unsigned int tec_r2_sterN = 0;
0140 unsigned int tec_r3_rphiN = 0;
0141 unsigned int tec_r4_rphiN = 0;
0142 unsigned int tec_r5_rphiN = 0;
0143 unsigned int tec_r5_sterN = 0;
0144 unsigned int tec_r6_rphiN = 0;
0145 unsigned int tec_r7_rphiN = 0;
0146
0147 std::vector<const GeometricDet*> modules = rDD.deepComponents();
0148 Output << "************************ List of modules with positions ************************" << std::endl;
0149
0150 for (auto& module : modules) {
0151 unsigned int rawid = module->geographicalId().rawId();
0152 DetId id(rawid);
0153
0154 GeometricDet::NavRange detPos = module->navpos();
0155 Output << std::fixed << std::setprecision(6);
0156 std::bitset<32> binary_rawid(rawid);
0157 Output << " ******** raw Id = " << rawid << " (" << binary_rawid << ") ";
0158 if (fromDDD_ && printDDD_) {
0159 Output << "\t nav type = " << detPos;
0160 }
0161 Output << std::endl;
0162 int subdetid = module->geographicalId().subdetId();
0163 double thickness = module->bounds()->thickness() * 10000;
0164
0165 switch (subdetid) {
0166
0167 case PixelSubdetector::PixelBarrel: {
0168 pxbN++;
0169 const std::string& name = module->name();
0170 if (name == "PixelBarrelActiveFull")
0171 pxb_fullN++;
0172 if (name == "PixelBarrelActiveHalf")
0173 pxb_halfN++;
0174 unsigned int theLayer = tTopo->pxbLayer(id);
0175 unsigned int theLadder = tTopo->pxbLadder(id);
0176 unsigned int theModule = tTopo->pxbModule(id);
0177
0178 Output << " PXB"
0179 << "\t"
0180 << "Layer " << theLayer << " Ladder " << theLadder << "\t"
0181 << " module " << theModule << " " << name << "\t";
0182 break;
0183 }
0184
0185
0186 case PixelSubdetector::PixelEndcap: {
0187 pxfN++;
0188 const std::string& name = module->name();
0189 if (name == "PixelForwardActive1x2")
0190 pxf_1x2N++;
0191 if (name == "PixelForwardActive1x5")
0192 pxf_1x5N++;
0193 if (name == "PixelForwardActive2x3")
0194 pxf_2x3N++;
0195 if (name == "PixelForwardActive2x4")
0196 pxf_2x4N++;
0197 if (name == "PixelForwardActive2x5")
0198 pxf_2x5N++;
0199 unsigned int thePanel = tTopo->pxfPanel(id);
0200 unsigned int theDisk = tTopo->pxfDisk(id);
0201 unsigned int theBlade = tTopo->pxfBlade(id);
0202 unsigned int theModule = tTopo->pxfModule(id);
0203 std::string side;
0204 side = (tTopo->pxfSide(id) == 1) ? "-" : "+";
0205 Output << " PXF" << side << "\t"
0206 << "Disk " << theDisk << " Blade " << theBlade << " Panel " << thePanel << "\t"
0207 << " module " << theModule << "\t" << name << "\t";
0208 break;
0209 }
0210
0211
0212 case StripSubdetector::TIB: {
0213 tibN++;
0214 const std::string& name = module->name();
0215 if (name == "TIBActiveRphi0")
0216 tib_L12_rphiN++;
0217 if (name == "TIBActiveSter0")
0218 tib_L12_sterN++;
0219 if (name == "TIBActiveRphi2")
0220 tib_L34_rphiN++;
0221 unsigned int theLayer = tTopo->tibLayer(id);
0222 std::vector<unsigned int> theString = tTopo->tibStringInfo(id);
0223 unsigned int theModule = tTopo->tibModule(id);
0224 std::string side;
0225 std::string part;
0226 side = (theString[0] == 1) ? "-" : "+";
0227 part = (theString[1] == 1) ? "int" : "ext";
0228
0229 Output << " TIB" << side << "\t"
0230 << "Layer " << theLayer << " " << part << "\t"
0231 << "string " << theString[2] << "\t"
0232 << " module " << theModule << " " << name << "\t";
0233 Output << " " << module->translation().X() << " \t" << module->translation().Y() << " \t"
0234 << module->translation().Z() << std::endl;
0235 break;
0236 }
0237
0238
0239 case StripSubdetector::TID: {
0240 tidN++;
0241 const std::string& name = module->name();
0242 if (name == "TIDModule0RphiActive")
0243 tid_r1_rphiN++;
0244 if (name == "TIDModule0StereoActive")
0245 tid_r1_sterN++;
0246 if (name == "TIDModule1RphiActive")
0247 tid_r2_rphiN++;
0248 if (name == "TIDModule1StereoActive")
0249 tid_r2_sterN++;
0250 if (name == "TIDModule2RphiActive")
0251 tid_r3_rphiN++;
0252 unsigned int theDisk = tTopo->tidWheel(id);
0253 unsigned int theRing = tTopo->tidRing(id);
0254 std::string side;
0255 std::string part;
0256 side = (tTopo->tidSide(id) == 1) ? "-" : "+";
0257 part = (tTopo->tidOrder(id) == 1) ? "back" : "front";
0258 Output << " TID" << side << "\t"
0259 << "Disk " << theDisk << " Ring " << theRing << " " << part << "\t"
0260 << " module " << tTopo->tidModule(id) << "\t" << name << "\t";
0261 Output << " " << roundIfNear0(module->translation().X(), tolerance_) << " \t"
0262 << roundIfNear0(module->translation().Y(), tolerance_) << " \t"
0263 << roundIfNear0(module->translation().Z(), tolerance_) << std::endl;
0264 break;
0265 }
0266
0267
0268 case StripSubdetector::TOB: {
0269 tobN++;
0270 const std::string& name = module->name();
0271 if (name == "TOBActiveRphi0")
0272 tob_L12_rphiN++;
0273 if (name == "TOBActiveSter0")
0274 tob_L12_sterN++;
0275 if (name == "TOBActiveRphi2")
0276 tob_L34_rphiN++;
0277 if (name == "TOBActiveRphi4")
0278 tob_L56_rphiN++;
0279 unsigned int theLayer = tTopo->tobLayer(id);
0280 unsigned int theModule = tTopo->tobModule(id);
0281 std::string side;
0282 std::string part;
0283 side = (tTopo->tobSide(id) == 1) ? "-" : "+";
0284
0285 Output << " TOB" << side << "\t"
0286 << "Layer " << theLayer << "\t"
0287 << "rod " << tTopo->tobRod(id) << " module " << theModule << "\t" << name << "\t";
0288 Output << " " << module->translation().X() << " \t" << module->translation().Y() << " \t"
0289 << module->translation().Z() << std::endl;
0290 break;
0291 }
0292
0293
0294 case StripSubdetector::TEC: {
0295 tecN++;
0296 const std::string& name = module->name();
0297 if (name == "TECModule0RphiActive")
0298 tec_r1_rphiN++;
0299 if (name == "TECModule0StereoActive")
0300 tec_r1_sterN++;
0301 if (name == "TECModule1RphiActive")
0302 tec_r2_rphiN++;
0303 if (name == "TECModule1StereoActive")
0304 tec_r2_sterN++;
0305 if (name == "TECModule2RphiActive")
0306 tec_r3_rphiN++;
0307 if (name == "TECModule3RphiActive")
0308 tec_r4_rphiN++;
0309 if (name == "TECModule4RphiActive")
0310 tec_r5_rphiN++;
0311 if (name == "TECModule4StereoActive")
0312 tec_r5_sterN++;
0313 if (name == "TECModule5RphiActive")
0314 tec_r6_rphiN++;
0315 if (name == "TECModule6RphiActive")
0316 tec_r7_rphiN++;
0317 unsigned int theWheel = tTopo->tecWheel(id);
0318 unsigned int theModule = tTopo->tecModule(id);
0319 unsigned int theRing = tTopo->tecRing(id);
0320 std::string side;
0321 std::string petal;
0322 side = (tTopo->tecSide(id) == 1) ? "-" : "+";
0323 petal = (tTopo->tecOrder(id) == 1) ? "back" : "front";
0324 Output << " TEC" << side << "\t"
0325 << "Wheel " << theWheel << " Petal " << tTopo->tecPetalNumber(id) << " " << petal << " Ring " << theRing
0326 << "\t"
0327 << "\t"
0328 << " module " << theModule << "\t" << name << "\t";
0329 Output << " " << roundIfNear0(module->translation().X(), tolerance_) << " \t"
0330 << roundIfNear0(module->translation().Y(), tolerance_) << " \t"
0331 << roundIfNear0(module->translation().Z(), tolerance_) << std::endl;
0332
0333
0334 int out_side = (tTopo->tecSide(id) == 1) ? -1 : 1;
0335 unsigned int out_disk = tTopo->tecWheel(id);
0336 unsigned int out_sector = tTopo->tecPetalNumber(id);
0337 int out_petal = (tTopo->tecOrder(id) == 1) ? 1 : -1;
0338
0339 if (out_side == -1) {
0340
0341 if (out_petal == -1) {
0342 out_sector = (out_sector + 6) % 8 + 1;
0343 }
0344 }
0345 unsigned int out_ring = tTopo->tecRing(id);
0346 int out_sensor = 0;
0347 if (name == "TECModule0RphiActive")
0348 out_sensor = -1;
0349 if (name == "TECModule0StereoActive")
0350 out_sensor = 1;
0351 if (name == "TECModule1RphiActive")
0352 out_sensor = -1;
0353 if (name == "TECModule1StereoActive")
0354 out_sensor = 1;
0355 if (name == "TECModule2RphiActive")
0356 out_sensor = -1;
0357 if (name == "TECModule3RphiActive")
0358 out_sensor = -1;
0359 if (name == "TECModule4RphiActive")
0360 out_sensor = -1;
0361 if (name == "TECModule4StereoActive")
0362 out_sensor = 1;
0363 if (name == "TECModule5RphiActive")
0364 out_sensor = -1;
0365 if (name == "TECModule6RphiActive")
0366 out_sensor = -1;
0367 unsigned int out_module;
0368 if (out_ring == 1 || out_ring == 2 || out_ring == 5) {
0369
0370
0371 out_module = 2 * (tTopo->tecModule(id) - 1) + 1;
0372 if (out_sensor == 1) {
0373
0374 if (out_ring == 2)
0375 out_module += 1;
0376 } else
0377
0378 if (out_ring != 2)
0379 out_module += 1;
0380 } else {
0381 out_module = tTopo->tecModule(id);
0382 }
0383 double out_x = roundIfNear0(module->translation().X(), tolerance_);
0384 double out_y = roundIfNear0(module->translation().Y(), tolerance_);
0385 double out_z = module->translation().Z();
0386 double out_r = sqrt(module->translation().X() * module->translation().X() +
0387 module->translation().Y() * module->translation().Y());
0388 double out_phi_rad = roundIfNear0(atan2(module->translation().Y(), module->translation().X()), tolerance_);
0389 if (almostEqual(out_phi_rad, -1._pi, 10)) {
0390 out_phi_rad = 1._pi;
0391
0392 }
0393 TECOutput << out_side << " " << out_disk << " " << out_sector << " " << out_petal << " " << out_ring << " "
0394 << out_module << " " << out_sensor << " " << out_x << " " << out_y << " " << out_z << " " << out_r
0395 << " " << out_phi_rad << std::endl;
0396
0397 break;
0398 }
0399 default:
0400 Output << " WARNING no Silicon Strip detector, I got a " << rawid << std::endl;
0401 ;
0402 }
0403
0404
0405 const GeomDet* geomdet = pDD.idToDet(module->geographicalId());
0406
0407 LocalVector xLocal(1, 0, 0);
0408 LocalVector yLocal(0, 1, 0);
0409 LocalVector zLocal(0, 0, 1);
0410
0411 GlobalVector xGlobal = (geomdet->surface()).toGlobal(xLocal);
0412 GlobalVector yGlobal = (geomdet->surface()).toGlobal(yLocal);
0413 GlobalVector zGlobal = (geomdet->surface()).toGlobal(zLocal);
0414
0415
0416
0417
0418 Output << "\t"
0419 << "thickness " << std::fixed << std::setprecision(0) << thickness << " um \n";
0420 Output << "\tActive Area Center" << std::endl;
0421 Output << "\t O = (" << std::fixed << std::setprecision(4) << roundIfNear0(module->translation().X(), tolerance_)
0422 << "," << std::fixed << std::setprecision(4) << roundIfNear0(module->translation().Y(), tolerance_) << ","
0423 << std::fixed << std::setprecision(4) << roundIfNear0(module->translation().Z(), tolerance_) << ")"
0424 << std::endl;
0425
0426 double polarRadius = std::sqrt(module->translation().X() * module->translation().X() +
0427 module->translation().Y() * module->translation().Y());
0428 double phiRad = roundIfNear0(atan2(module->translation().Y(), module->translation().X()), tolerance_);
0429 if (almostEqual(phiRad, -1._pi, 10)) {
0430 phiRad = 1._pi;
0431
0432 }
0433 double phiDeg = convertRadToDeg(phiRad);
0434
0435 Output << "\t\t polar radius " << std::fixed << std::setprecision(4) << polarRadius << "\t"
0436 << "phi [deg] " << std::fixed << std::setprecision(4) << phiDeg << "\t"
0437 << "phi [rad] " << std::fixed << std::setprecision(4) << phiRad << std::endl;
0438
0439 Displ3DVec x, y, z;
0440 module->rotation().GetComponents(x, y, z);
0441 x = roundVecIfNear0(x, tolerance_);
0442 y = roundVecIfNear0(y, tolerance_);
0443 z = roundVecIfNear0(z, tolerance_);
0444 xGlobal = roundVecIfNear0(xGlobal, tolerance_);
0445 yGlobal = roundVecIfNear0(yGlobal, tolerance_);
0446 zGlobal = roundVecIfNear0(zGlobal, tolerance_);
0447 Output << "\tActive Area Rotation Matrix" << std::endl;
0448 Output << "\t z = n = (" << std::fixed << std::setprecision(4) << z.X() << "," << std::fixed << std::setprecision(4)
0449 << z.Y() << "," << std::fixed << std::setprecision(4) << z.Z() << ")" << std::endl
0450 << "\t [Rec] = (" << std::fixed << std::setprecision(4) << zGlobal.x() << "," << std::fixed
0451 << std::setprecision(4) << zGlobal.y() << "," << std::fixed << std::setprecision(4) << zGlobal.z() << ")"
0452 << std::endl
0453 << "\t x = t = (" << std::fixed << std::setprecision(4) << x.X() << "," << std::fixed << std::setprecision(4)
0454 << x.Y() << "," << std::fixed << std::setprecision(4) << x.Z() << ")" << std::endl
0455 << "\t [Rec] = (" << std::fixed << std::setprecision(4) << xGlobal.x() << "," << std::fixed
0456 << std::setprecision(4) << xGlobal.y() << "," << std::fixed << std::setprecision(4) << xGlobal.z() << ")"
0457 << std::endl
0458 << "\t y = k = (" << std::fixed << std::setprecision(4) << y.X() << "," << std::fixed << std::setprecision(4)
0459 << y.Y() << "," << std::fixed << std::setprecision(4) << y.Z() << ")" << std::endl
0460 << "\t [Rec] = (" << std::fixed << std::setprecision(4) << yGlobal.x() << "," << std::fixed
0461 << std::setprecision(4) << yGlobal.y() << "," << std::fixed << std::setprecision(4) << yGlobal.z() << ")"
0462 << std::endl;
0463
0464
0465 NumberingOutput << rawid;
0466 if (fromDDD_ && printDDD_) {
0467 NumberingOutput << " " << detPos;
0468 }
0469 NumberingOutput << " " << std::fixed << std::setprecision(4) << roundIfNear0(module->translation().X(), tolerance_)
0470 << " " << std::fixed << std::setprecision(4) << roundIfNear0(module->translation().Y(), tolerance_)
0471 << " " << std::fixed << std::setprecision(4) << roundIfNear0(module->translation().Z(), tolerance_)
0472 << " " << std::endl;
0473
0474 }
0475
0476
0477
0478 unsigned int chan_per_psi = 52 * 80;
0479 unsigned int psi_pxb = 16 * pxb_fullN + 8 * pxb_halfN;
0480 unsigned int chan_pxb = psi_pxb * chan_per_psi;
0481 unsigned int psi_pxf = 2 * pxf_1x2N + 5 * pxf_1x5N + 6 * pxf_2x3N + 8 * pxf_2x4N + 10 * pxf_2x5N;
0482 unsigned int chan_pxf = psi_pxf * chan_per_psi;
0483
0484 unsigned int chan_per_apv = 128;
0485 unsigned int apv_tib = 6 * (tib_L12_rphiN + tib_L12_sterN) + 4 * tib_L34_rphiN;
0486 unsigned int chan_tib = apv_tib * chan_per_apv;
0487 unsigned int apv_tid = 6 * (tid_r1_rphiN + tid_r1_sterN) + 6 * (tid_r2_rphiN + tid_r2_sterN) + 4 * tid_r3_rphiN;
0488 unsigned int chan_tid = apv_tid * chan_per_apv;
0489 unsigned int apv_tob = 4 * (tob_L12_rphiN + tob_L12_sterN) + 4 * tob_L34_rphiN + 6 * tob_L56_rphiN;
0490 unsigned int chan_tob = apv_tob * chan_per_apv;
0491 unsigned int apv_tec = 6 * (tec_r1_rphiN + tec_r1_sterN) + 6 * (tec_r2_rphiN + tec_r2_sterN) + 4 * tec_r3_rphiN +
0492 4 * tec_r4_rphiN + 6 * (tec_r5_rphiN + tec_r5_sterN) + 4 * tec_r6_rphiN + 4 * tec_r7_rphiN;
0493 unsigned int chan_tec = apv_tec * chan_per_apv;
0494 unsigned int psi_tot = psi_pxb + psi_pxf;
0495 unsigned int apv_tot = apv_tib + apv_tid + apv_tob + apv_tec;
0496 unsigned int chan_pixel = chan_pxb + chan_pxf;
0497 unsigned int chan_strip = chan_tib + chan_tid + chan_tob + chan_tec;
0498 unsigned int chan_tot = chan_pixel + chan_strip;
0499
0500
0501
0502 Output << "---------------------" << std::endl;
0503 Output << " Counters " << std::endl;
0504 Output << "---------------------" << std::endl;
0505 Output << " PXB = " << pxbN << std::endl;
0506 Output << " Full = " << pxb_fullN << std::endl;
0507 Output << " Half = " << pxb_halfN << std::endl;
0508 Output << " Active Silicon Detectors" << std::endl;
0509 Output << " PSI46s = " << psi_pxb << std::endl;
0510 Output << " channels = " << chan_pxb << std::endl;
0511 Output << " PXF = " << pxfN << std::endl;
0512 Output << " 1x2 = " << pxf_1x2N << std::endl;
0513 Output << " 1x5 = " << pxf_1x5N << std::endl;
0514 Output << " 2x3 = " << pxf_2x3N << std::endl;
0515 Output << " 2x4 = " << pxf_2x4N << std::endl;
0516 Output << " 2x5 = " << pxf_2x5N << std::endl;
0517 Output << " Active Silicon Detectors" << std::endl;
0518 Output << " PSI46s = " << psi_pxf << std::endl;
0519 Output << " channels = " << chan_pxf << std::endl;
0520 Output << " TIB = " << tibN << std::endl;
0521 Output << " L12 rphi = " << tib_L12_rphiN << std::endl;
0522 Output << " L12 stereo = " << tib_L12_sterN << std::endl;
0523 Output << " L34 = " << tib_L34_rphiN << std::endl;
0524 Output << " Active Silicon Detectors" << std::endl;
0525 Output << " APV25s = " << apv_tib << std::endl;
0526 Output << " channels = " << chan_tib << std::endl;
0527 Output << " TID = " << tidN << std::endl;
0528 Output << " r1 rphi = " << tid_r1_rphiN << std::endl;
0529 Output << " r1 stereo = " << tid_r1_sterN << std::endl;
0530 Output << " r2 rphi = " << tid_r2_rphiN << std::endl;
0531 Output << " r2 stereo = " << tid_r2_sterN << std::endl;
0532 Output << " r3 rphi = " << tid_r3_rphiN << std::endl;
0533 Output << " Active Silicon Detectors" << std::endl;
0534 Output << " APV25s = " << apv_tid << std::endl;
0535 Output << " channels = " << chan_tid << std::endl;
0536 Output << " TOB = " << tobN << std::endl;
0537 Output << " L12 rphi = " << tob_L12_rphiN << std::endl;
0538 Output << " L12 stereo = " << tob_L12_sterN << std::endl;
0539 Output << " L34 = " << tob_L34_rphiN << std::endl;
0540 Output << " L56 = " << tob_L56_rphiN << std::endl;
0541 Output << " Active Silicon Detectors" << std::endl;
0542 Output << " APV25s = " << apv_tob << std::endl;
0543 Output << " channels = " << chan_tob << std::endl;
0544 Output << " TEC = " << tecN << std::endl;
0545 Output << " r1 rphi = " << tec_r1_rphiN << std::endl;
0546 Output << " r1 stereo = " << tec_r1_sterN << std::endl;
0547 Output << " r2 rphi = " << tec_r2_rphiN << std::endl;
0548 Output << " r2 stereo = " << tec_r2_sterN << std::endl;
0549 Output << " r3 rphi = " << tec_r3_rphiN << std::endl;
0550 Output << " r4 rphi = " << tec_r4_rphiN << std::endl;
0551 Output << " r5 rphi = " << tec_r5_rphiN << std::endl;
0552 Output << " r5 stereo = " << tec_r5_sterN << std::endl;
0553 Output << " r6 rphi = " << tec_r6_rphiN << std::endl;
0554 Output << " r7 rphi = " << tec_r7_rphiN << std::endl;
0555 Output << " Active Silicon Detectors" << std::endl;
0556 Output << " APV25s = " << apv_tec << std::endl;
0557 Output << " channels = " << chan_tec << std::endl;
0558 Output << "---------------------" << std::endl;
0559 Output << " PSI46s = " << psi_tot << std::endl;
0560 Output << " APV25s = " << apv_tot << std::endl;
0561 Output << " pixel channels = " << chan_pixel << std::endl;
0562 Output << " strip channels = " << chan_strip << std::endl;
0563 Output << " total channels = " << chan_tot << std::endl;
0564
0565 }
0566
0567
0568 DEFINE_FWK_MODULE(ModuleInfo);