Belle II Software development
GeoCDCCreatorReducedCDCNoSL0SL1.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <cdc/geometry/GeoCDCCreatorReducedCDCNoSL0SL1.h>
10#include <cdc/dbobjects/CDCGeometry.h>
11
12#include <geometry/CreatorFactory.h>
13
14namespace Belle2 {
19
20 using namespace geometry;
21
22 namespace CDC {
23
27
29
31 double& rMinLeft, double& rMaxLeft, double& zBackLeft, double& zForLeft,
32 double& rMinMiddle, double& rMaxMiddle, double& zBackMiddle, double& zForMiddle,
33 double& rMinRight, double& rMaxRight, double& zBackRight, double& zForRight) const
34 {
35 const auto& endplate = geo.getEndPlate(iSLayer);
36 const int nEPLayer = endplate.getNEndPlateLayers();
37
38 if (iSLayer == 0) {
39 const auto& epLayerBwd = endplate.getEndPlateLayer(1);
40 const auto& epLayerFwd = endplate.getEndPlateLayer((nEPLayer / 2) + 1);
41 const auto& senseLayer = geo.getSenseLayer(iSLayer);
42 const auto& fieldLayer = geo.getFieldLayer(iSLayer);
43
44 rMinLeft = epLayerBwd.getRmax();
45 rMaxLeft = fieldLayer.getR();
46 zBackLeft = senseLayer.getZbwd();
47 zForLeft = epLayerBwd.getZfwd();
48
49 rMinMiddle = (geo.getInnerWall(0)).getRmax();
50 rMaxMiddle = fieldLayer.getR();
51 zBackMiddle = epLayerBwd.getZfwd();
52 zForMiddle = epLayerFwd.getZbwd();
53
54 rMinRight = epLayerFwd.getRmax();
55 rMaxRight = fieldLayer.getR();
56 zBackRight = epLayerFwd.getZbwd();
57 zForRight = senseLayer.getZfwd();
58 } else if (iSLayer >= 1 && iSLayer <= 4) {
59 const auto& epLayerBwd = endplate.getEndPlateLayer(1);
60 const auto& epLayerFwd = endplate.getEndPlateLayer(nEPLayer / 2);
61 const auto& senseLayer = geo.getSenseLayer(iSLayer);
62 const auto& fieldLayerIn = geo.getFieldLayer(iSLayer - 1);
63 const auto& fieldLayerOut = geo.getFieldLayer(iSLayer);
64
65 rMinLeft = epLayerBwd.getRmax();
66 rMaxLeft = fieldLayerOut.getR();
67 zBackLeft = senseLayer.getZbwd();
68 zForLeft = epLayerBwd.getZfwd();
69
70 rMinMiddle = fieldLayerIn.getR();
71 rMaxMiddle = fieldLayerOut.getR();
72 zBackMiddle = epLayerBwd.getZfwd();
73 zForMiddle = epLayerFwd.getZbwd();
74
75 rMinRight = epLayerFwd.getRmax();
76 rMaxRight = fieldLayerOut.getR();
77 zBackRight = epLayerFwd.getZbwd();
78 zForRight = senseLayer.getZfwd();
79 } else if (iSLayer >= 5 && iSLayer < 41) {
80 const auto& epLayerBwd = endplate.getEndPlateLayer(0);
81 const auto& epLayerFwd = endplate.getEndPlateLayer(nEPLayer / 2);
82 const auto& senseLayer = geo.getSenseLayer(iSLayer);
83 const auto& fieldLayerIn = geo.getFieldLayer(iSLayer - 1);
84 const auto& fieldLayerOut = geo.getFieldLayer(iSLayer);
85
86 rMinLeft = epLayerBwd.getRmax();
87 rMaxLeft = fieldLayerOut.getR();
88 zBackLeft = senseLayer.getZbwd();
89 zForLeft = epLayerBwd.getZfwd();
90
91 rMinMiddle = fieldLayerIn.getR();
92 rMaxMiddle = fieldLayerOut.getR();
93 zBackMiddle = epLayerBwd.getZfwd();
94 zForMiddle = epLayerFwd.getZbwd();
95
96 rMinRight = epLayerFwd.getRmax();
97 rMaxRight = fieldLayerOut.getR();
98 zBackRight = epLayerFwd.getZbwd();
99 zForRight = senseLayer.getZfwd();
100
101 } else if (iSLayer == 41) {
102
103 const auto& epLayerBwdIn = endplate.getEndPlateLayer(0);
104 const auto& epLayerBwdOut = endplate.getEndPlateLayer((nEPLayer / 2) - 1);
105 const auto& epLayerFwdIn = endplate.getEndPlateLayer(nEPLayer / 2);
106 const auto& epLayerFwdOut = endplate.getEndPlateLayer(nEPLayer - 1);
107 const auto& senseLayer = geo.getSenseLayer(iSLayer);
108
109 int iSLayerMinus1 = iSLayer - 1; //avoid cpp-check warning
110 const auto& fieldLayerIn = geo.getFieldLayer(iSLayerMinus1); //avoid cpp-check warning
111
112 rMinLeft = epLayerBwdIn.getRmax();
113 rMaxLeft = epLayerBwdOut.getRmax();
114 zBackLeft = senseLayer.getZbwd();
115 zForLeft = epLayerBwdIn.getZfwd();
116
117 rMinMiddle = fieldLayerIn.getR();
118 rMaxMiddle = (geo.getOuterWall(0)).getRmin();
119 zBackMiddle = epLayerBwdIn.getZfwd();
120 zForMiddle = epLayerFwdIn.getZbwd();
121
122 rMinRight = epLayerFwdIn.getRmax();
123 rMaxRight = epLayerFwdOut.getRmax();
124 zBackRight = epLayerFwdIn.getZbwd();
125 zForRight = senseLayer.getZfwd();
126
127 } else {
128 B2ERROR("Undefined sensitive layer : " << iSLayer);
129 return false;
130 }
131 return true;
132 }
133 }
135}
int getNEndPlateLayers() const
Get the number of endplate layers.
double getR() const
Get Radius.
double getZbwd() const
Get bwd z-position.
The Class for CDC geometry.
Definition CDCGeometry.h:27
FieldLayer getFieldLayer(int i) const
Get the i-th field layer.
OuterWall getOuterWall(int i) const
Get the i-th outer wall.
InnerWall getInnerWall(int i) const
Get the i-th inner wall.
EndPlate getEndPlate(int i) const
Get the i-th endplate.
SenseLayer getSenseLayer(int i) const
Get i-th sense layer.
virtual bool getEndplateInformation(const CDCGeometry &geo, const uint iSLayer, double &rMinLeft, double &rMaxLeft, double &zBackLeft, double &zForLeft, double &rMinMiddle, double &rMaxMiddle, double &zBackMiddle, double &zForMiddle, double &rMinRight, double &rMaxRight, double &zBackRight, double &zForRight) const override
Get endplate information.
geometry::CreatorFactory< GeoCDCCreatorReducedCDCNoSL0SL1 > GeoCDCFactoryReducedCDCNoSL0SL1("CDCCreatorReducedCDCNoSL0SL1")
Register the GeoCreator.
Common code concerning the geometry representation of the detector.
Definition CreatorBase.h:25
Abstract base class for different kinds of events.
Very simple class to provide an easy way to register creators with the CreatorManager.