File indexing completed on 2024-04-06 12:14:24
0001 #ifndef Geometry_CSCGeometry_CSCChamberSpecs_H
0002 #define Geometry_CSCGeometry_CSCChamberSpecs_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
0028
0029 #include <cmath>
0030 #include <string>
0031 #include <vector>
0032
0033 class CSCGeometry;
0034 class CSCLayerGeometry;
0035 class CSCWireGroupPackage;
0036 class Topology;
0037 class TrapezoidalPlaneBounds;
0038
0039 class CSCChamberSpecs : public GeomDetType {
0040 public:
0041 typedef std::vector<float> CSCSpecsParcel;
0042
0043
0044 CSCChamberSpecs();
0045
0046
0047 CSCChamberSpecs(const CSCGeometry* geom,
0048 int iChamberType,
0049 const TrapezoidalPlaneBounds& mediaShape,
0050 const CSCSpecsParcel& fupar,
0051 const CSCWireGroupPackage& wg);
0052
0053
0054 ~CSCChamberSpecs() override;
0055
0056
0057 bool operator!=(const CSCChamberSpecs& specs) const;
0058 bool operator==(const CSCChamberSpecs& specs) const;
0059
0060
0061
0062
0063
0064 const Topology& topology() const override;
0065
0066
0067 const CSCLayerGeometry* oddLayerGeometry(int iendcap) const {
0068 return (iendcap == 1 ? poszOddLayerGeometry : negzOddLayerGeometry);
0069 }
0070 const CSCLayerGeometry* evenLayerGeometry(int iendcap) const {
0071 return (iendcap == 1 ? poszEvenLayerGeometry : negzEvenLayerGeometry);
0072 }
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084 int chamberType() const;
0085
0086
0087
0088
0089
0090 std::string chamberTypeName() const;
0091
0092
0093
0094
0095 float stripResolution() const { return specsValue(0); }
0096 float wireResolution() const { return specsValue(1); }
0097 float efficiency() const { return specsValue(2); }
0098 float timeWindow() const { return specsValue(3); }
0099
0100
0101
0102
0103 float neutronRate() const { return specsValue(4); }
0104
0105
0106
0107
0108 int nStrips() const { return nstrips; }
0109
0110
0111
0112
0113 int nNodes() const { return int(specsValue(6)); }
0114 int nWiresPerGroup() const { return int(specsValue(7)); }
0115 int nFloatingStrips() const { return int(specsValue(8)); }
0116
0117
0118
0119
0120 float stripPhiPitch() const { return 1.E-03 * stripDeltaPhi; }
0121
0122
0123
0124
0125
0126 float ctiOffset() const { return centreToIntersectionOffset; }
0127
0128
0129
0130
0131 float wireSpacing() const;
0132
0133
0134
0135
0136 float anodeCathodeSpacing() const { return specsValue(9); }
0137
0138 float gasGain() const;
0139
0140 float voltage() const { return specsValue(11); }
0141
0142 float calibrationError() const { return specsValue(13); }
0143
0144 float electronAttraction() const { return specsValue(14); }
0145
0146
0147
0148
0149 float fractionQS() const { return specsValue(15); }
0150
0151
0152
0153
0154 float chargePerCount() const;
0155
0156
0157
0158
0159 float wireRadius() const { return specsValue(17); }
0160
0161
0162
0163
0164 float shaperPeakingTime() const { return specsValue(18); }
0165
0166
0167
0168
0169 float constantNoise() const { return specsValue(22); }
0170
0171
0172
0173
0174 float e_pF() const { return specsValue(23); }
0175
0176
0177
0178
0179
0180
0181
0182 float wireNoise(float timeInterval) const {
0183 const float WIRE_CAPACITANCE = 8.;
0184 return (constantNoise() + nWiresPerGroup() * WIRE_CAPACITANCE) / sqrt(timeInterval / 100.);
0185 }
0186
0187 float stripNoise(float timeInterval) const;
0188
0189
0190
0191
0192
0193
0194
0195 bool gangedStrips() const { return gangedStrips_; }
0196
0197
0198
0199
0200
0201
0202 static int whatChamberType(int istation, int iring);
0203
0204 private:
0205
0206 float specsValue(int index) const { return theSpecsValues[index]; }
0207
0208
0209 CSCLayerGeometry* poszOddLayerGeometry;
0210 CSCLayerGeometry* poszEvenLayerGeometry;
0211 CSCLayerGeometry* negzOddLayerGeometry;
0212 CSCLayerGeometry* negzEvenLayerGeometry;
0213
0214
0215
0216
0217
0218
0219
0220
0221 int theChamberType;
0222
0223
0224
0225
0226
0227 CSCSpecsParcel theSpecsValues;
0228
0229 int nstrips;
0230 float stripDeltaPhi;
0231 float centreToIntersectionOffset;
0232
0233 bool gangedStrips_;
0234
0235
0236 static const std::string theName[10];
0237
0238
0239 static const std::string myName;
0240 };
0241
0242 #endif