85 if (mFrontFaceCenterR.size() > 0) {
88 mFrontFaceCenterTheta.resize(mNCrystalModulesZ + mNSamplingModulesZ);
89 mFrontFaceZatMinR.resize(mNCrystalModulesZ + mNSamplingModulesZ);
90 mFrontFaceCenterR.resize(mNCrystalModulesZ + mNSamplingModulesZ);
91 mFrontFaceCenterZ.resize(mNCrystalModulesZ + mNSamplingModulesZ);
92 mTanBeta.resize(mNCrystalModulesZ + mNSamplingModulesZ);
93 mFrontFaceCenterSamplingPhi.resize(mNSuperModules * mNSamplingModulesPhi);
94 mFrontFaceCenterCrystalPhi.resize(mNSuperModules * mNCrystalModulesPhi);
96 double superModuleDeltaPhi = TwoPI / mNSuperModules;
101 for (
int ism = 0; ism < mNSuperModules; ism++) {
103 for (
int i = 0;
i < mNCrystalModulesPhi;
i++) {
104 double phi0 = superModuleDeltaPhi * ism + crystalPhiMin + crystalDeltaPhi *
i;
105 mFrontFaceCenterCrystalPhi[ism * mNCrystalModulesPhi +
i] = phi0;
108 for (
int i = 0;
i < mNSamplingModulesPhi;
i++) {
109 double phi0 = superModuleDeltaPhi * ism + samplingPhiMin + samplingDeltaPhi *
i;
110 mFrontFaceCenterSamplingPhi[ism * mNSamplingModulesPhi +
i] = phi0;
114 double theta0 = PIHalf - mCrystalAlpha;
115 double zAtMinR = mCrystalModW * std::cos(mCrystalAlpha);
117 for (
int m = 0;
m < mNCrystalModulesZ;
m++) {
118 mTanBeta[
m] = std::sin(theta0 - mCrystalAlpha) * mCrystalModW / 2 / mRMin;
119 ROOT::Math::Polar2DVector vMid21(mCrystalModW / 2., PIHalf + theta0);
120 ROOT::Math::XYPoint pAtMinR(zAtMinR, mRMin);
121 ROOT::Math::XYPoint pc = pAtMinR + vMid21;
122 mFrontFaceZatMinR[
m] = zAtMinR;
123 mFrontFaceCenterZ[
m] = pc.x();
124 mFrontFaceCenterR[
m] = pc.y();
125 mFrontFaceCenterTheta[
m] = theta0;
126 theta0 -= 2 * mCrystalAlpha;
127 zAtMinR += mCrystalModW * std::cos(mCrystalAlpha) / std::sin(theta0 + mCrystalAlpha);
130 theta0 = mFrontFaceCenterTheta[mNCrystalModulesZ - 1] - mCrystalAlpha - mSamplingAlpha;
131 zAtMinR = mFrontFaceZatMinR[mNCrystalModulesZ - 1];
132 zAtMinR += mSamplingModW * std::cos(mSamplingAlpha) / std::sin(theta0 + mSamplingAlpha);
133 zAtMinR += mMarginCrystalToSampling;
135 for (
int m = 0;
m < mNSamplingModulesZ;
m++) {
136 int i =
m + mNCrystalModulesZ;
137 mTanBeta[
i] = std::sin(theta0 - mSamplingAlpha) * mSamplingModW / 2 / mRMin;
138 ROOT::Math::Polar2DVector vMid21(mSamplingModW / 2., PIHalf + theta0);
139 ROOT::Math::XYPoint pAtMinR(zAtMinR, mRMin);
140 ROOT::Math::XYPoint pc = pAtMinR + vMid21;
141 mFrontFaceZatMinR[
i] = zAtMinR;
142 mFrontFaceCenterZ[
i] = pc.x();
143 mFrontFaceCenterR[
i] = pc.y();
144 mFrontFaceCenterTheta[
i] = theta0;
145 theta0 -= 2 * mSamplingAlpha;
146 zAtMinR += mSamplingModW * std::cos(mSamplingAlpha) / std::sin(theta0 + mSamplingAlpha);
154 if (moduleId % 2 == 0) {
155 cellID = sectorId * mNModulesZ + moduleId / 2 + mNSamplingModulesZ + mNCrystalModulesZ;
157 cellID = sectorId * mNModulesZ - moduleId / 2 + mNSamplingModulesZ + mNCrystalModulesZ - 1;
160 if (sectorId % 2 == 0) {
161 cellID = sectorId / 2 * mNModulesZ + moduleId + mNSamplingModulesZ + mNCrystalModulesZ * 2;
163 cellID = sectorId / 2 * mNModulesZ - moduleId + mNSamplingModulesZ - 1;
214 int chamber, sector, iphi, iz;
217 if (iz < mNSamplingModulesZ + mNCrystalModulesZ) {
218 z = -mFrontFaceCenterZ[mNSamplingModulesZ + mNCrystalModulesZ - iz - 1];
219 r = mFrontFaceCenterR[mNSamplingModulesZ + mNCrystalModulesZ - iz - 1];
221 z = mFrontFaceCenterZ[iz % (mNSamplingModulesZ + mNCrystalModulesZ)];
222 r = mFrontFaceCenterR[iz % (mNSamplingModulesZ + mNCrystalModulesZ)];
224 double phi = chamber == 1 ? mFrontFaceCenterCrystalPhi[iphi] : mFrontFaceCenterSamplingPhi[iphi];
225 x =
r * std::cos(phi);
226 y =
r * std::sin(phi);
232 int ch1, sector1, iphi1, iz1;
233 int ch2, sector2, iphi2, iz2;
236 if (sector1 != sector2 || ch1 != ch2) {
239 if (std::abs(iphi1 - iphi2) <= 1 && std::abs(iz1 - iz2) <= 1) {
251 }
else if (
col == mNSamplingModulesZ) {
253 }
else if (
col == mNSamplingModulesZ - 1) {
255 }
else if (
col == mNSamplingModulesZ + 2 * mNCrystalModulesZ) {
257 }
else if (
col == mNSamplingModulesZ + 2 * mNCrystalModulesZ - 1) {
259 }
else if (
col == mNModulesZ - 1) {
262 for (
int m = 0;
m <= mNSuperModules;
m++) {
264 if (
row ==
m * mNCrystalModulesPhi) {
266 }
else if (
row ==
m * mNCrystalModulesPhi - 1) {
270 if (
row ==
m * mNSamplingModulesPhi) {
272 }
else if (
row ==
m * mNSamplingModulesPhi - 1) {