Belle II Software development
CDCGeometryPar.h
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#pragma once
10
11#include <framework/gearbox/GearDir.h>
12#include <framework/database/DBArray.h>
13#include <framework/database/DBObjPtr.h>
14#include <framework/dbobjects/HardwareClockSettings.h>
15#include <framework/geometry/B2Vector3.h>
16
17#include <cdc/dataobjects/WireID.h>
18#include <cdc/dbobjects/CDCTimeZeros.h>
19#include <cdc/dbobjects/CDCBadWires.h>
20#include <cdc/dbobjects/CDCPropSpeeds.h>
21#include <cdc/dbobjects/CDCTimeWalks.h>
22#include <cdc/dbobjects/CDCXtRelations.h>
23#include <cdc/dbobjects/CDCSpaceResols.h>
24#include <cdc/dbobjects/CDCFudgeFactorsForSigma.h>
25#include <cdc/dbobjects/CDCChannelMap.h>
26#include <cdc/dbobjects/CDCDisplacement.h>
27#include <cdc/dbobjects/CDCAlignment.h>
28#include <cdc/dbobjects/CDCMisalignment.h>
29#include <cdc/dbobjects/CDCGeometry.h>
30#include <cdc/dbobjects/CDCEDepToADCConversions.h>
31
32#include <cdc/geometry/CDCGeometryParConstants.h>
33
34#include <vector>
35#include <string>
36#include <map>
37//#include <fstream>
38
39
40namespace Belle2 {
45 namespace CDC {
46
48
52
53 public:
54
56 enum EWirePosition {c_Base = 0, c_Misaligned, c_Aligned};
57
59 virtual ~CDCGeometryPar();
60
62
65 static CDCGeometryPar& Instance(const CDCGeometry* = nullptr);
66
68 void clear();
69
71 void Print() const;
72
74 void readFromDB(const CDCGeometry&);
75
76 // /**
77 // * Read z-corrections.
78 // * @param GearDir Gear Dir.
79 // */
80 // void readDeltaz(const GearDir);
81 //
82 // /**
83 // * Read z-corrections from DB.
84 // *
85 // */
86 // void readDeltaz(const CDCGeometry&);
87
88 // /**
89 // * Open a file
90 // * @param[in] ifs input file-stream
91 // * @param[in] fileName0 file-name on cdc/data directory
92 // */
93 // void openFile(std::ifstream& ifs, const std::string& fileName0) const;
94
100 // void readWirePositionParams(EWirePosition set, const CDCGeometry*, const GearDir);
101 void readWirePositionParams(EWirePosition set, const CDCGeometry* geom);
102
107
112
118 void readXT(const GearDir& gbxParams, int mode = 0);
119
125 void newReadXT(const GearDir& gbxParams, int mode = 0);
126
130 void setXT();
131
135 void setXtRel();
136
142 void readSigma(const GearDir& gbxParams, int mode = 0);
143
149 void newReadSigma(const GearDir& gbxParams, int mode = 0);
150
156 void readFFactor(const GearDir& gbxParams, int mode = 0);
157
161 void setSResol();
162
166 void setFFactor();
167
173 void readPropSpeed(const GearDir& gbxParams, int mode = 0);
174
178 void setPropSpeed();
179
185 void readT0(const GearDir& gbxParams, int mode = 0);
186
190 void setT0();
191
200 void calcMeanT0(double minT0 = 3800, double maxT0 = 5800, int maxIt = 10, double nStdv = 3, double epsi = 0.1);
201
202 // /**
203 // * Read bad-wires (from a file).
204 // * @param GearDir Gear Dir.
205 // * @param mode 0: read simulation file, 1: read reconstruction file.
206 // */
207 // void readBadWire(const GearDir, int mode = 0);
208
212 void setBadWire();
213
217 // void readChMap(const GearDir);
218 void readChMap();
219
223 void setChMap();
224
230 void readTW(const GearDir& gbxParams, int mode = 0);
231
237 void readEDepToADC(const GearDir& gbxParams, int mode = 0);
238
242 void setTW();
243
246
254 double getEDepToADCConvFactor(unsigned short layer, unsigned short cell, double edep, double dx, double costh);
255
256
262 double getEDepToADCMainFactor(unsigned short layer, unsigned short cell, double costh = 0)
263 {
264 return m_eDepToADCParams[layer][cell][0] + m_eDepToADCParams[layer][cell][4] * (costh - m_eDepToADCParams[layer][cell][5]);
265 };
266
271 double getEDepToADCSigma(unsigned short layer, unsigned short cell)
272 {
273 return m_eDepToADCParams[layer][cell][6];
274 };
275
277
280 void generateXML(const std::string& of);
281
283
286 std::string version() const;
287
289
292 double motherInnerR() const;
293
295
298 double motherOuterR() const;
299
301
304 double motherLength() const;
305
307
310 int momBound() const;
311
313
317 double momZ(int iBound) const;
318
320
324 double momRmin(int iBound) const;
325
327
332 unsigned cellId(unsigned layerId, const B2Vector3D& position) const;
333
335
338 double innerRadiusOuterWall() const;
339
341
344 double outerRadiusOuterWall() const;
345
347
350 double zOuterWall() const;
351
353
356 double zOffsetOuterWall() const;
357
359
362 double innerRadiusInnerWall() const;
363
365
368 double outerRadiusInnerWall() const;
369
371
374 double zInnerWall() const;
375
377
380 double zOffsetInnerWall() const;
381
383
386 double senseWireDiameter() const;
387
389
392 double fieldWireDiameter() const;
393
395
398 unsigned nWireLayers() const;
399
401
405 unsigned nWiresInLayer(int layerId) const;
406
408
411 const double* innerRadiusWireLayer() const;
412
414
417 const double* outerRadiusWireLayer() const;
418
420
423 const double* zForwardWireLayer() const;
424
426
429 const double* zBackwardWireLayer() const;
430
432
436 double zOffsetWireLayer(unsigned i) const;
437
439
442 double getMeanT0() const;
443
445
451 const B2Vector3D wireForwardPosition(uint layerId, int cellId, EWirePosition set = c_Base) const;
452
454 const B2Vector3D wireForwardPosition(const WireID& wireID, EWirePosition set = c_Base) const
455 {
456 return wireForwardPosition(wireID.getICLayer(), wireID.getIWire(), set);
457 }
458
460
467 const B2Vector3D wireForwardPosition(uint layerId, int cellId, double z, EWirePosition set = c_Base) const;
469 const B2Vector3D wireForwardPosition(const WireID& wireID, double z,
470 EWirePosition set = c_Base) const
471 {
472 return wireForwardPosition(wireID.getICLayer(), wireID.getIWire(), z, set);
473 }
474
476
482 const B2Vector3D wireBackwardPosition(uint layerId, int cellId, EWirePosition set = c_Base) const;
483
485 const B2Vector3D wireBackwardPosition(const WireID& wireID, EWirePosition set = c_Base) const
486 {
487 return wireBackwardPosition(wireID.getICLayer(), wireID.getIWire(), set);
488 }
489
491
498 const B2Vector3D wireBackwardPosition(uint layerId, int cellId, double z, EWirePosition set = c_Base) const;
500 const B2Vector3D wireBackwardPosition(const WireID& wireID, double z, EWirePosition set = c_Base) const
501 {
502 return wireBackwardPosition(wireID.getICLayer(), wireID.getIWire(), z, set);
503 }
504
506
512 double getWireSagCoef(EWirePosition set, uint layerId, int cellId) const;
513
514
516
520 {
522 }
523
525
528 double getMinTrackLength() const
529 {
530 return m_minTrackLength;
531 }
532
534
536 bool isWireSagOn() const
537 {
538 return m_wireSag;
539 }
540
542
545 {
546 return m_modLeftRightFlag;
547 }
548
549
551
555 float getT0(const WireID& wireID) const
556 {
557 // std::cout << wireID.getICLayer() <<" "<< wireID.getIWire() << std::endl;
558 unsigned int iclayer = wireID.getICLayer();
559 unsigned int iwire = wireID.getIWire();
560 if (iclayer >= c_maxNSenseLayers) iclayer = c_maxNSenseLayers - 1;
561 if (iwire >= c_maxNDriftCells) iwire = c_maxNDriftCells - 1;
562 return m_t0[iclayer][iwire];
563 }
564
566
570 unsigned short getBoardID(const WireID& wID) const
571 {
572 std::map<WireID, unsigned short>::const_iterator it = m_wireToBoard.find(wID);
573 unsigned short iret = (it != m_wireToBoard.end()) ? it->second : -999;
574 return iret;
575 }
576
578
582 unsigned short getChannelID(const WireID& wID) const
583 {
584 std::map<WireID, unsigned short>::const_iterator it = m_wireToChannel.find(wID);
585 unsigned short iret = (it != m_wireToChannel.end()) ? it->second : -999;
586 return iret;
587 }
588
590
595 const WireID getWireID(unsigned short bd, unsigned short ch) const
596 {
597 return WireID(m_boardAndChannelToWire[bd][ch]);
598 }
599
601
606 double getTimeWalk(const WireID& wID, unsigned short adcCount) const
607 {
608 std::map<WireID, unsigned short>::const_iterator it = m_wireToBoard.find(wID);
609 // std::cout <<"SL,L,W, bd#= " << wID.getISuperLayer() <<" "<< wID.getILayer() <<" "<< wID.getIWire() <<" "<< it->second << std::endl;
610 double tw = 0.;
611 if (it != m_wireToBoard.end() && adcCount > 0) {
612 if (m_twParamMode == 0) {
613 tw = m_timeWalkCoef[it->second][0] / sqrt(adcCount);
614 } else if (m_twParamMode == 1) {
615 double p0 = m_timeWalkCoef[it->second][0];
616 double p1 = m_timeWalkCoef[it->second][1];
617 tw = p0 * exp(-p1 * adcCount);
618 }
619 }
620 // std::cout <<"bd#,coef,adc,tw= " << it->second <<" "<< m_timeWalkCoef[it->second] <<" "<< adcCount <<" "<< tw << std::endl;
621 return tw;
622 }
623
625
628
630
634 signed short getShiftInSuperLayer(unsigned short iSuperLayer, unsigned short iLayer) const;
635
637
641 double senseWireR(int layerId) const;
642
644
648 double senseWireFZ(int layerId) const;
649
651
655 double senseWireBZ(int layerId) const;
656
658
662 double fieldWireR(int layerId) const;
663
665
669 double fieldWireFZ(int layerId) const;
670
672
676 double fieldWireBZ(int layerId) const;
677
679
683 int nShifts(int layerId) const;
684
690 double offset(int layerID) const;
691
693
697 void setSenseWireR(int layerId, double r);
698
700
704 void setSenseWireFZ(int layerId, double fz);
705
707
711 void setSenseWireBZ(int layerId, double bz);
712
717 inline unsigned short getTdcOffset() const
718 {
719 return m_tdcOffset;
720 }
721
726 inline double getTdcBinWidth() const
727 {
728 return m_tdcBinWidth;
729 }
730
736 inline double getNominalDriftV() const
737 {
738 return m_nominalDriftV;
739 }
740
746 inline double getNominalPropSpeed() const
747 {
748 return m_nominalPropSpeed;
749 }
750
756 inline double getNominalSpaceResol() const
757 {
758 return m_nominalSpaceResol;
759 }
760
771 inline int getMaterialDefinitionMode() const
772 {
774 }
775
784 inline int getSenseWireZposMode() const
785 {
786 return m_senseWireZposMode;
787 }
788
794 inline double getBwdDeltaZ(unsigned short layerID) const
795 {
796 return m_dzSBackwardLayer[layerID];
797 }
798
804 inline double getFwdDeltaZ(unsigned short layerID) const
805 {
806 return m_dzSForwardLayer[layerID];
807 }
808
815 inline void setNominalSpaceResol(double resol)
816 {
817 m_nominalSpaceResol = resol;
818 }
819
826 inline double getPropSpeedInv(const unsigned int layerID) const
827 {
828 return m_propSpeedInv[layerID];
829 }
830
834 inline bool isBadWire(const WireID& wid)
835 {
836 // std::map<unsigned short, float>::iterator it = m_badWire.find(wid.getEWire());
837 // bool torf = (it != m_badWire.end()) ? true : false;
838 // return torf;
839 bool torf = *m_badWireFromDB ? (*m_badWireFromDB)->isBadWire(wid) : false;
840 return torf;
841
842 }
843
847 inline bool isDeadWire(const WireID& wid, double& eff)
848 {
849 bool torf = *m_badWireFromDB ? (*m_badWireFromDB)->isDeadWire(wid, eff) : false;
850 return torf;
851 }
852
856 inline bool isHotWire(const WireID& wid)
857 {
858 bool torf = *m_badWireFromDB ? (*m_badWireFromDB)->isHotWire(wid) : false;
859 return torf;
860 }
861
875 void getWireSagEffect(EWirePosition set, unsigned layerID, unsigned cellID, double zw, double& ywb_sag, double& ywf_sag) const;
876
887 double getDriftV(double dt, unsigned short layer, unsigned short lr, double alpha = 0., double theta = 0.5 * M_PI) const;
888
900 double getDriftLength(double dt, unsigned short layer, unsigned short lr, double alpha = 0., double theta = 0.5 * M_PI,
901 bool calculateMinTime = true, double minTime = 0.) const;
902
911 double getDriftLength0(double dt, unsigned short layer, unsigned short lr, double alpha = 0., double theta = 0.5 * M_PI) const;
912
920 double getMinDriftTime(unsigned short layer, unsigned short lr, double alpha = 0., double theta = 0.5 * M_PI) const;
921
931 double getDriftTime(double dist, unsigned short layer, unsigned short lr, double alpha, double theta) const;
932
941 double getSigma(double dist, unsigned short layer, unsigned short lr, double alpha = 0., double theta = 0.5 * M_PI) const;
942
947 double getFudgeFactorForSigma(unsigned short target) const
948 {
949 return m_fudgeFactorForSigma[target];
950 }
951
958 unsigned short getOldLeftRight(const B2Vector3D& posOnWire, const B2Vector3D& posOnTrack, const B2Vector3D& momentum) const;
959
967 unsigned short getNewLeftRightRaw(const B2Vector3D& posOnWire, const B2Vector3D& posOnTrack, const B2Vector3D& momentum) const;
968
975 double getAlpha(const B2Vector3D& posOnWire, const B2Vector3D& momentum) const;
976
981 double getTheta(const B2Vector3D& momentum) const;
982
983
989 unsigned short getOutgoingLR(const unsigned short lr, const double alpha) const;
990
991
996 double getOutgoingAlpha(const double alpha) const;
997
998
1004 double getOutgoingTheta(const double alpha, const double theta) const;
1005
1006
1010 void getClosestAlphaPoints(const double alpha, double& wal, unsigned short points[2], unsigned short lrs[2]) const;
1011
1015 void getClosestAlphaPoints4Sgm(const double alpha, double& wal, unsigned short points[2], unsigned short lrs[2]) const;
1016
1020 void getClosestThetaPoints(const double alpha, const double theta, double& wth, unsigned short points[2]) const;
1021
1025 void getClosestThetaPoints4Sgm(const double alpha, const double theta, double& wth, unsigned short points[2]) const;
1026
1032 void setDesignWirParam(unsigned layerID, unsigned cellID);
1033
1039 void outputDesignWirParam(unsigned layerID, unsigned cellID) const;
1040
1044 void setDisplacement();
1045
1046
1050 ushort getNumberOfSenseWires() const { return m_nSenseWires;}
1051
1055 ushort getNumberOfFieldWires() const { return m_nFieldWires;}
1056
1061
1066
1071
1076
1081
1086
1087 private:
1089 CDCGeometryPar(const CDCGeometry* = nullptr);
1094
1095 bool m_debug;
1098 bool m_XTetc;
1107 std::string m_version;
1117 unsigned short m_nAlphaPoints;
1118 unsigned short m_nThetaPoints;
1119 unsigned short m_nAlphaPoints4Sgm;
1120 unsigned short m_nThetaPoints4Sgm;
1121 signed short m_shiftInSuperLayer[c_nSuperLayers][8];
1123 double m_rWall[4];
1124 double m_zWall[4][2];
1126 double m_rSLayer[c_maxNSenseLayers];
1127 double m_zSForwardLayer[c_maxNSenseLayers];
1128 double m_dzSForwardLayer[c_maxNSenseLayers];
1129 double m_zSBackwardLayer[c_maxNSenseLayers];
1130 double m_dzSBackwardLayer[c_maxNSenseLayers];
1131 double m_rFLayer[c_maxNFieldLayers];
1132 double m_zFForwardLayer[c_maxNFieldLayers];
1133 double m_zFBackwardLayer[c_maxNFieldLayers];
1134 double m_offSet[c_maxNSenseLayers];
1135 double m_cellSize[c_maxNSenseLayers];
1136 int m_nShifts[c_maxNSenseLayers];
1137 unsigned m_nWires[c_maxNSenseLayers];
1146 double m_momZ[7];
1147 double m_momRmin[7];
1149 // double m_bwdDz[c_maxNSenseLayers]; /*!< Tentative backward z-corrections.*/
1150 // double m_fwdDz[c_maxNSenseLayers]; /*!< Tentative forward z-corrections.*/
1151
1155 float m_FWirPos[c_maxNSenseLayers][c_maxNDriftCells][3];
1156 float m_BWirPos[c_maxNSenseLayers][c_maxNDriftCells][3];
1157 float m_WireSagCoef[c_maxNSenseLayers][c_maxNDriftCells];
1159 float m_FWirPosMisalign[c_maxNSenseLayers][c_maxNDriftCells][3];
1160 float m_BWirPosMisalign[c_maxNSenseLayers][c_maxNDriftCells][3];
1161 float m_WireSagCoefMisalign[c_maxNSenseLayers][c_maxNDriftCells];
1163 float m_FWirPosAlign[c_maxNSenseLayers][c_maxNDriftCells][3];
1164 float m_BWirPosAlign[c_maxNSenseLayers][c_maxNDriftCells][3];
1165 float m_WireSagCoefAlign[c_maxNSenseLayers][c_maxNDriftCells];
1166 float m_eDepToADCParams[c_maxNSenseLayers][c_maxNDriftCells][7] = {};
1168 float m_alphaPoints[c_maxNAlphaPoints];
1169 float m_thetaPoints[c_maxNThetaPoints];
1170 float m_alphaPoints4Sgm[c_maxNAlphaPoints];
1171 float m_thetaPoints4Sgm[c_maxNThetaPoints];
1173 float m_XT[c_maxNSenseLayers][2][c_maxNAlphaPoints][c_maxNThetaPoints][c_nXTParams];
1174 float m_Sigma[c_maxNSenseLayers][2][c_maxNAlphaPoints][c_maxNThetaPoints][c_nSigmaParams];
1175 float m_propSpeedInv[c_maxNSenseLayers];
1176 float m_t0[c_maxNSenseLayers][c_maxNDriftCells] = {};
1177 float m_timeWalkCoef[c_nBoards][2];
1179 // float m_meanT0; /*!< mean t0 over all wires. */
1180 double m_meanT0;
1182 std::map<WireID, unsigned short> m_wireToBoard;
1183 std::map<WireID, unsigned short> m_wireToChannel;
1184 unsigned short m_boardAndChannelToWire[c_nBoards][48];
1186 // std::map<unsigned short, float> m_badWire; /*!< list of bad-wires. */
1187
1188 unsigned short m_tdcOffset;
1215 ushort m_nSenseWires = c_nSenseWires;
1216 ushort m_nFieldWires = c_nFieldWires;
1217 ushort m_maxNSenseLayers = c_maxNSenseLayers;
1218 ushort m_maxNFieldLayers = c_maxNFieldLayers;
1219 ushort m_maxNSuperLayers = c_nSuperLayers;
1222 ushort m_maxNCellsPerLayer = c_maxNDriftCells;
1224 };
1225
1226//-----------------------------------------------------------------------------
1227// Inline functions
1228//-----------------------------------------------------------------------------
1229 inline std::string CDCGeometryPar::version() const
1230 {
1231 return m_version;
1232 }
1233
1234 inline double CDCGeometryPar::momZ(int iBound) const
1235 {
1236 return m_momZ[iBound];
1237 }
1238
1239 inline double CDCGeometryPar::momRmin(int iBound) const
1240 {
1241 return m_momRmin[iBound];
1242 }
1243
1244 inline int CDCGeometryPar::nShifts(int layerID) const
1245 {
1246 return m_nShifts[layerID];
1247 }
1248
1249 inline double CDCGeometryPar::offset(int layerID) const
1250 {
1251 return m_offSet[layerID];
1252 }
1253
1254 inline unsigned CDCGeometryPar::nWiresInLayer(int layerID) const
1255 {
1256 return m_nWires[layerID];
1257 }
1258
1259 inline void CDCGeometryPar::setSenseWireR(int layerId, double r)
1260 {
1261 m_rSLayer[layerId] = r;
1262 }
1263
1264 inline void CDCGeometryPar::setSenseWireFZ(int layerId, double fz)
1265 {
1266 m_zSForwardLayer[layerId] = fz;
1267 }
1268
1269 inline void CDCGeometryPar::setSenseWireBZ(int layerId, double bz)
1270 {
1271 m_zSBackwardLayer[layerId] = bz;
1272 }
1273
1274 inline double CDCGeometryPar::senseWireR(int layerID) const
1275 {
1276 return m_rSLayer[layerID];
1277 }
1278
1279 inline double CDCGeometryPar::senseWireFZ(int layerID) const
1280 {
1281 return m_zSForwardLayer[layerID];
1282 }
1283
1284 inline double CDCGeometryPar::senseWireBZ(int layerID) const
1285 {
1286 return m_zSBackwardLayer[layerID];
1287 }
1288
1289 inline double CDCGeometryPar::fieldWireR(int layerID) const
1290 {
1291 return m_rFLayer[layerID];
1292 }
1293
1294 inline double CDCGeometryPar::fieldWireFZ(int layerID) const
1295 {
1296 return m_zFForwardLayer[layerID];
1297 }
1298
1299 inline double CDCGeometryPar::fieldWireBZ(int layerID) const
1300 {
1301 return m_zFBackwardLayer[layerID];
1302 }
1303
1305 {
1306 return m_rWall[2];
1307 }
1308
1310 {
1311 return m_rWall[3];
1312 }
1313
1314 inline double CDCGeometryPar::zOuterWall() const
1315 {
1316 return (m_zWall[2][1] - m_zWall[2][0]);
1317 }
1318
1320 {
1321 return m_rWall[0];
1322 }
1323
1325 {
1326 return m_rWall[1];
1327 }
1328
1329 inline double CDCGeometryPar::zInnerWall() const
1330 {
1331 return (m_zWall[0][1] - m_zWall[0][0]);
1332 }
1333
1335 {
1336 return (m_zWall[2][0] + zOuterWall() / 2);
1337 }
1338
1340 {
1341 return (m_zWall[0][0] + zInnerWall() / 2);
1342 }
1343
1345 {
1346 return m_senseWireDiameter;
1347 }
1348
1350 {
1351 return m_fieldWireDiameter;
1352 }
1353
1354 inline unsigned CDCGeometryPar::nWireLayers() const
1355 {
1356 return c_maxNSenseLayers;
1357 }
1358
1359 inline const double* CDCGeometryPar::zForwardWireLayer() const
1360 {
1361 return m_zSForwardLayer;
1362 }
1363
1364 inline const double* CDCGeometryPar::zBackwardWireLayer() const
1365 {
1366 return m_zSBackwardLayer;
1367 }
1368
1369 inline double CDCGeometryPar::zOffsetWireLayer(unsigned i) const
1370 {
1371 return (m_zSBackwardLayer[i] + (m_zSForwardLayer[i] - m_zSBackwardLayer[i]) / 2);
1372 }
1373
1374 inline double CDCGeometryPar::getMeanT0() const
1375 {
1376 return m_meanT0;
1377 }
1378
1379 } // end of namespace CDC
1381} // end of namespace Belle2
The Class for CDC geometry.
Definition: CDCGeometry.h:27
The Class for CDC Geometry Parameters.
void outputDesignWirParam(unsigned layerID, unsigned cellID) const
Write the designed wire parameters to the alignment.dat (default).
std::map< WireID, unsigned short > m_wireToChannel
map relating wire-id and channel-id.
void setWirPosAlignParams()
Set wire alignment params.
int m_materialDefinitionMode
Control switch for gas and wire material definition.
unsigned short m_nAlphaPoints4Sgm
No.
double getTimeWalk(const WireID &wID, unsigned short adcCount) const
Returns time-walk.
void readSigma(const GearDir &gbxParams, int mode=0)
Read spatial resolution table.
void readTW(const GearDir &gbxParams, int mode=0)
Read time-walk parameter.
void setXtRel()
Set XT-relation table (from DB) (new).
double getNominalPropSpeed() const
Return the nominal propagation speed of the sense wire (default: 27.25 cm/nsec).
float m_BWirPosMisalign[c_maxNSenseLayers][c_maxNDriftCells][3]
Wire position incl.
DBObjPtr< CDCBadWires > * m_badWireFromDB
bad-wires retrieved from DB.
double getTheta(const B2Vector3D &momentum) const
Returns track incident angle (theta in rad.).
double motherLength() const
The method to get cdc mother volume length.
void readT0(const GearDir &gbxParams, int mode=0)
Read t0 parameters (from a file).
void setT0()
Set t0 parameters (from DB)
float m_alphaPoints4Sgm[c_maxNAlphaPoints]
alpha sampling points for sigma (rad)
virtual ~CDCGeometryPar()
Destructor.
double fieldWireDiameter() const
Returns diameter of the field wire.
ushort m_maxNSuperLayers
Maximum number of Super Layers.
double m_fudgeFactorForSigma[3]
Fuge factor for space resol.
double outerRadiusInnerWall() const
Returns the outer radius of the inner wall.
double zOuterWall() const
Returns the length of the outer wall in Z.
int m_sigmaParamMode
Mode for sigma parameterization.
bool m_alignment
Switch for alignment.
float m_alphaPoints[c_maxNAlphaPoints]
alpha sampling points for xt (rad)
void getClosestAlphaPoints(const double alpha, double &wal, unsigned short points[2], unsigned short lrs[2]) const
Returns the two closest alpha points for the input track incident angle (alpha).
void readEDepToADC(const GearDir &gbxParams, int mode=0)
Read spatial edep-to-adc conv.
const double * zBackwardWireLayer() const
Returns an array of backward z of wire layers.
double m_globalPhiRotation
Global ratation in phi (rad.); only for sence wires now.
unsigned short getBoardID(const WireID &wID) const
Returns frontend board id. corresponding to the wire id.
EWirePosition
Wire position set.
double innerRadiusOuterWall() const
Returns the inner radius of the outer wall.
unsigned cellId(unsigned layerId, const B2Vector3D &position) const
The method to get cell id based on given layer id and the position.
void newReadSigma(const GearDir &gbxParams, int mode=0)
Read spatial resolution table in new format.
void setEDepToADCConversions()
Set edep-to-ADC conversion params.
double m_nominalPropSpeed
Nominal propagation speed of the sense wire (27.25 cm/nsec).
void setNominalSpaceResol(double resol)
Set the nominal spacial resolution in the unit of um.
int nShifts(int layerId) const
Returns number shift.
float m_thetaPoints[c_maxNThetaPoints]
theta sampling points for xt (rad)
void setDesignWirParam(unsigned layerID, unsigned cellID)
Set the desizend wire parameters.
void getWireSagEffect(EWirePosition set, unsigned layerID, unsigned cellID, double zw, double &ywb_sag, double &ywf_sag) const
Compute effects of the sense wire sag.
DBArray< CDCDisplacement > * m_displacementFromDB
displacement params.
bool m_XTetc
Switch for reading x-t etc.
void setShiftInSuperLayer()
Calculates and saves shifts in super-layers (to be used in searching hits in neighboring cells)
int m_nShifts[c_maxNSenseLayers]
The array to store shifted cell number in each sense wire layer.
bool m_wireSag
Switch for sense wire sag.
bool m_XTetc4Recon
Switch for selecting xt etc.
double getFwdDeltaZ(unsigned short layerID) const
Return forward 'deltaZ'.
double motherInnerR() const
The method to get cdc mother volume inner R.
const double * zForwardWireLayer() const
Returns an array of forward z of wire layers.
double getDriftLength0(double dt, unsigned short layer, unsigned short lr, double alpha=0., double theta=0.5 *M_PI) const
Return the drift dength to the sense wire; tentative ver.
unsigned short m_boardAndChannelToWire[c_nBoards][48]
array relating board-channel-id and wire-id.
unsigned short m_nThetaPoints4Sgm
No.
float m_WireSagCoef[c_maxNSenseLayers][c_maxNDriftCells]
Wire sag coefficient for each cell; ibid.
void generateXML(const std::string &of)
Generate an xml file used in gearbox.
void getClosestAlphaPoints4Sgm(const double alpha, double &wal, unsigned short points[2], unsigned short lrs[2]) const
Returns the two closest alpha points for sigma for the input track incident angle (alpha).
DBObjPtr< HardwareClockSettings > m_clockSettings
hardware clock settings
double getNominalSpaceResol() const
Return the nominal spacial resolution.
float m_eDepToADCParams[c_maxNSenseLayers][c_maxNDriftCells][7]
edep-to-ADC conv.
double getThresholdEnerguDeposit() const
Returns threshold for energy deposit in one G4 step.
double m_minTrackLength
Minimum track length for G4 step.
double getAlpha(const B2Vector3D &posOnWire, const B2Vector3D &momentum) const
Returns track incident angle in rphi plane (alpha in rad.).
double fieldWireR(int layerId) const
Returns radius of field wire in each layer.
ushort getOffsetOfFirstLayer() const
Get the offset of the first layer.
float m_FWirPosMisalign[c_maxNSenseLayers][c_maxNDriftCells][3]
Wire position incl.
double getMinTrackLength() const
Returns the minimum track length required in one G4 step (only secondary particles which pass this cr...
const B2Vector3D wireForwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the forward position of the input sense wire.
bool isDeadWire(const WireID &wid, double &eff)
Inquire if the wire is dead.
unsigned m_nWires[c_maxNSenseLayers]
The array to store the wire number in each sense wire layre.
const WireID getWireID(unsigned short bd, unsigned short ch) const
Returns wire id. corresponding to the board-and-cannel ids.
double momRmin(int iBound) const
Returns inner radius of the CDC mother volume.
double getDriftV(double dt, unsigned short layer, unsigned short lr, double alpha=0., double theta=0.5 *M_PI) const
Get the realistic drift velocity.
double m_clockFreq4TDC
Clock frequency used for TDC (GHz).
bool isWireSagOn() const
Returns on/off for sense wire sag in FullSim.
const B2Vector3D wireForwardPosition(const WireID &wireID, double z, EWirePosition set=c_Base) const
The same function but in a different input format.
ushort getMaxNumberOfSuperLayers() const
Get the maximum number of super layers.
int m_nFLayer
The number of field wire layer.
static CDCGeometryPar * m_B4CDCGeometryParDB
Pointer that saves the instance of this class.
double zOffsetOuterWall() const
Returns the offset of the outer wall in z direction.
DBObjPtr< CDCMisalignment > * m_misalignmentFromDB
misalignment params.
ushort getNumberOfFieldWires() const
Get the number of field wires.
float m_XT[c_maxNSenseLayers][2][c_maxNAlphaPoints][c_maxNThetaPoints][c_nXTParams]
XT-relation coefficients for each layer, Left/Right, entrance angle and polar angle.
void setSenseWireR(int layerId, double r)
Set radius of sense wire in each layer.
signed short m_shiftInSuperLayer[c_nSuperLayers][8]
shift in phi-direction wrt the 1st layer in each super layer
std::string m_version
The version of geometry parameters.
double senseWireDiameter() const
Returns diameter of the sense wire.
const B2Vector3D wireBackwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the backward position of the input sense wire.
bool m_linearInterpolationOfXT
Switch for linear interpolation of xt.
double getTdcBinWidth() const
Return TDC bin width (nsec).
DBObjPtr< CDCSpaceResols > * m_sResolFromDB
sigma params.
void setDisplacement()
Set displacement of sense wire.
double getOutgoingAlpha(const double alpha) const
Converts incoming- to outgoing-alpha.
bool isHotWire(const WireID &wid)
Inquire if the wire is hot.
double m_meanT0
mean t0 over all wires; should be double.
double momZ(int iBound) const
Returns boundary position in Z axis of the CDC mother volume.
bool m_debug
Switch for debug printing.
DBObjPtr< CDCTimeWalks > * m_timeWalkFromDB
time-walk coeffs.
ushort m_nSenseWires
Maximum number of Sense Wires.
unsigned short m_tdcOffset
Not used; to be removed later.
float getT0(const WireID &wireID) const
Returns t0 parameter of the specified sense wire.
double getSigma(double dist, unsigned short layer, unsigned short lr, double alpha=0., double theta=0.5 *M_PI) const
Return the basic resolution of drift length (cm).
unsigned short getOutgoingLR(const unsigned short lr, const double alpha) const
Converts incoming-lr to outgoing-lr.
ushort m_maxNSenseLayers
Maximum number of Sense Wire Layers.
void readWirePositionParams(EWirePosition set, const CDCGeometry *geom)
Read displacement or (mis)alignment params from text file.
double getFudgeFactorForSigma(unsigned short target) const
Return the fuge factor for space resol.
float m_thetaPoints4Sgm[c_maxNThetaPoints]
theta sampling points for sigma (rad)
const B2Vector3D wireForwardPosition(const WireID &wireID, EWirePosition set=c_Base) const
The same function but in a different input format.
double zInnerWall() const
Returns the length of the inner wall in Z.
void setXT()
Set XT-relation table (from DB).
std::map< WireID, unsigned short > m_wireToBoard
map relating wire-id and board-id.
double getOutgoingTheta(const double alpha, const double theta) const
Converts incoming- to outgoing-theta.
double m_senseWireDiameter
The diameter of sense wires.
double offset(int layerID) const
Return wire offset in phi direction at endplate.
bool m_displacement
Switch for displacement.
int m_twParamMode
Mode for tw parameterization.
double senseWireBZ(int layerId) const
Returns backward z position of sense wire in each layer.
double m_dzSBackwardLayer[c_maxNSenseLayers]
Corrections for backward z position of sense wire layers.
double getMinDriftTime(unsigned short layer, unsigned short lr, double alpha=0., double theta=0.5 *M_PI) const
Return the min.
unsigned nWiresInLayer(int layerId) const
Returns wire numbers in a layer.
double fieldWireBZ(int layerId) const
Returns backward z position of field wire in each layer.
void getClosestThetaPoints(const double alpha, const double theta, double &wth, unsigned short points[2]) const
Returns the two closest theta points for the input track incident angle (theta).
double zOffsetInnerWall() const
Returns the offset of the outer wall in z direction.
double senseWireFZ(int layerId) const
Returns forward z position of sense wire in each layer.
void readPropSpeed(const GearDir &gbxParams, int mode=0)
Read the propagation speed along the sense wire.
double getBwdDeltaZ(unsigned short layerID) const
Return backward 'deltaZ'.
double innerRadiusInnerWall() const
Returns the inner radius of the inner wall.
DBObjPtr< CDCTimeZeros > * m_t0FromDB
t0s retrieved from DB.
ushort getMaxNumberOfCellsPerLayer() const
Get the maximum number of cells in one layer.
int m_xtFileFormat
Format of xt input file.
int m_sigmaFileFormat
Format of sigma input file.
void setSenseWireBZ(int layerId, double bz)
set backward z position of sense wires.
ushort m_firstSuperLayerOffset
Offset of the first super layer (for reduced CDC studies)
void setChMap()
Set channel map (from DB)
double getEDepToADCSigma(unsigned short layer, unsigned short cell)
Return sigma for extra smearing of edep to ADC conversion.
double getNominalDriftV() const
Return the nominal drift velocity of He-ethane gas (default: 4.0x10^-3 cm/nsec).
DBObjPtr< CDCFudgeFactorsForSigma > * m_fFactorFromDB
fudge factors retrieved from DB.
int m_nSLayer
The number of sense wire layer.
DBArray< CDCChannelMap > * m_chMapFromDB
channel map retrieved from DB.
void calcMeanT0(double minT0=3800, double maxT0=5800, int maxIt=10, double nStdv=3, double epsi=0.1)
Calculate mean t0 in ns (over all good wires)
double getMeanT0() const
Returns the mean t0 over all wires.
void readFromDB(const CDCGeometry &)
Gets geometry parameters from database.
DBObjPtr< CDCXtRelations > * m_xtRelFromDB
xt params.
double m_nominalDriftV
Nominal drift velocity (4.0x10^-3 cm/nsec).
float m_FWirPos[c_maxNSenseLayers][c_maxNDriftCells][3]
Wire position incl.
ushort getNumberOfSenseLayers() const
Get the number of sense layers.
float m_WireSagCoefAlign[c_maxNSenseLayers][c_maxNDriftCells]
Wire sag coefficient incl.
double m_zSForwardLayer[c_maxNSenseLayers]
The array to store forward z position of sense wire layers.
bool m_linearInterpolationOfSgm
Switch for linear interpolation of sigma.
DBObjPtr< CDCPropSpeeds > * m_propSpeedFromDB
prop.
double getPropSpeedInv(const unsigned int layerID) const
Get the inversel of propagation speed in the sense wire.
void setBadWire()
Set bad-wires (from DB)
int m_xtParamMode
Mode for xt parameterization.
float m_FWirPosAlign[c_maxNSenseLayers][c_maxNDriftCells][3]
Wire position incl.
CDCGeometryPar(const CDCGeometryPar &)
Singleton class.
double fieldWireFZ(int layerId) const
Returns forward z position of field wire in each layer.
double m_dzSForwardLayer[c_maxNSenseLayers]
Corrections for forward z position of sense wire layers.
double getEDepToADCConvFactor(unsigned short layer, unsigned short cell, double edep, double dx, double costh)
Return edep-to-ADC conversion factor.
double m_nominalDriftVInv
Inverse of the nominal drift velocity.
const double * innerRadiusWireLayer() const
Returns an array of inner radius of wire layers.
double getDriftTime(double dist, unsigned short layer, unsigned short lr, double alpha, double theta) const
Return the drift time to the sense wire.
signed short getShiftInSuperLayer(unsigned short iSuperLayer, unsigned short iLayer) const
Returns shift in the super-layer.
double getWireSagCoef(EWirePosition set, uint layerId, int cellId) const
Returns coefficient for the sense wire sag.
void readChMap()
Read channel map between wire-id and electronics-id.
double m_zFForwardLayer[c_maxNFieldLayers]
The array to store forward z position of field wire layers.
double m_rSLayer[c_maxNSenseLayers]
The array to store radius of sense wire layers.
double m_fieldWireDiameter
The diameter of field wires.
double m_zFBackwardLayer[c_maxNFieldLayers]
The array to store backward z position of field wire layers.
ushort m_nFieldWires
Maximum number of Field Wires.
float m_WireSagCoefMisalign[c_maxNSenseLayers][c_maxNDriftCells]
Wire sag coefficient incl.
double getDriftLength(double dt, unsigned short layer, unsigned short lr, double alpha=0., double theta=0.5 *M_PI, bool calculateMinTime=true, double minTime=0.) const
Return the drift dength to the sense wire.
double m_cellSize[c_maxNSenseLayers]
The array to store cell size in each sense wire layer.
float m_BWirPosAlign[c_maxNSenseLayers][c_maxNDriftCells][3]
Wire position incl.
double outerRadiusOuterWall() const
Returns the outer radius of the outer wall.
float m_t0[c_maxNSenseLayers][c_maxNDriftCells]
t0 for each sense-wire (in nsec).
void setWirPosMisalignParams()
Set wire misalignment params.
double m_momZ[7]
Z-cordinates of the cdc mother volume (7 segments).
double m_momRmin[7]
R_min of the cdc mother volume (7 segments).
double m_offSet[c_maxNSenseLayers]
The array to store z offset of sense wire layers.
int getSenseWireZposMode() const
Return mode for sense wire z position.
void setTW()
Set time-walk parameters.
const B2Vector3D wireBackwardPosition(const WireID &wireID, EWirePosition set=c_Base) const
The same function but in a different input format.
void setSResol()
Set spatial resolution (from DB).
double m_zSBackwardLayer[c_maxNSenseLayers]
The array to store backward z position of sense wire layers.
unsigned short getOldLeftRight(const B2Vector3D &posOnWire, const B2Vector3D &posOnTrack, const B2Vector3D &momentum) const
Returns old left/right.
float m_propSpeedInv[c_maxNSenseLayers]
Inverse of propagation speed of the sense wire.
ushort m_maxNCellsPerLayer
Maximum number wires within a layer.
double m_zWall[4][2]
The array to store z position of inner wall and outer wall.
bool isBadWire(const WireID &wid)
Inquire if the wire is totally-dead.
ushort getNumberOfFieldLayers() const
Get the number of field layers.
const B2Vector3D wireBackwardPosition(const WireID &wireID, double z, EWirePosition set=c_Base) const
The same function but in a different input format.
DBObjPtr< CDCAlignment > * m_alignmentFromDB
alignment params.
ushort m_maxNFieldLayers
Maximum number of Field Wire Layers.
bool m_misalignment
Switch for misalignment.
int getMaterialDefinitionMode() const
Return mode for material definition.
double m_senseWireDensity
The density of sense wires.
static CDCGeometryPar & Instance(const CDCGeometry *=nullptr)
Static method to get a reference to the CDCGeometryPar instance.
ushort m_firstLayerOffset
Offset of the first layer (for reduced CDC studies)
void Print() const
Print some debug information.
float m_timeWalkCoef[c_nBoards][2]
coefficients for time walk.
void readFFactor(const GearDir &gbxParams, int mode=0)
Read fudge factors.
unsigned short m_nThetaPoints
No.
ushort getOffsetOfFirstSuperLayer() const
Get the offset of the first super layer.
double m_maxSpaceResol
max space resolution allowed (cm).
double m_thresholdEnergyDeposit
Energy thresh.
float m_BWirPos[c_maxNSenseLayers][c_maxNDriftCells][3]
Wire position incl.
float m_Sigma[c_maxNSenseLayers][2][c_maxNAlphaPoints][c_maxNThetaPoints][c_nSigmaParams]
position resulution for each layer.
void readXT(const GearDir &gbxParams, int mode=0)
Read XT-relation table.
double m_rFLayer[c_maxNFieldLayers]
The array to store radius of field wire layers.
void newReadXT(const GearDir &gbxParams, int mode=0)
Read XT-relation table in new format.
unsigned short getChannelID(const WireID &wID) const
Returns frontend channel id. corresponding to the wire id.
double m_nominalSpaceResol
Nominal spacial resolution (0.0130 cm).
unsigned nWireLayers() const
Returns a number of wire layers.
unsigned short m_nAlphaPoints
No.
unsigned short getNewLeftRightRaw(const B2Vector3D &posOnWire, const B2Vector3D &posOnTrack, const B2Vector3D &momentum) const
Returns new left/right_raw.
int m_senseWireZposMode
Mode for sense wire z position corr.
double motherOuterR() const
The method to get cdc mother volume outer R.
CDCGeometryPar & operator=(const CDCGeometryPar &)
Singleton class.
double m_rWall[4]
The array to store radius of inner wall and outer wall.
double m_tdcBinWidth
TDC bin width (nsec/bin).
bool m_modLeftRightFlag
Switch for modified left/right flag.
void getClosestThetaPoints4Sgm(const double alpha, const double theta, double &wth, unsigned short points[2]) const
Returns the two closest theta points for sigma for the input track incident angle (theta).
bool isModifiedLeftRightFlagOn() const
Returns on/off for modified left/right calculation in FullSim.
DBObjPtr< CDCEDepToADCConversions > * m_eDepToADCConversionsFromDB
Pointer to edep-to-ADC conv.
const double * outerRadiusWireLayer() const
Returns an array of outer radius of wire layers.
double senseWireR(int layerId) const
Returns radius of sense wire in each layer.
ushort getNumberOfSenseWires() const
Get the number of sense wires.
double m_senseWireTension
The tension of sense wires.
double getEDepToADCMainFactor(unsigned short layer, unsigned short cell, double costh=0)
Return edep-to-ADC conversion main factor (in count/keV)
double zOffsetWireLayer(unsigned i) const
Returns the offset of z of the wire layer i.
void setFFactor()
Set fudge factors (from DB).
void setSenseWireFZ(int layerId, double fz)
Set forward z position of sense wires.
std::string version() const
Returns the version of cdc geometry parameters.
int momBound() const
to get the number of boundary position of the CDC mother volume
unsigned short getTdcOffset() const
Return TDC offset value (default = 0 ch).
Class for accessing arrays of objects in the database.
Definition: DBArray.h:26
Class for accessing objects in the database.
Definition: DBObjPtr.h:21
GearDir is the basic class used for accessing the parameter store.
Definition: GearDir.h:31
Class to identify a wire inside the CDC.
Definition: WireID.h:34
unsigned short getICLayer() const
Getter for continuous layer numbering.
Definition: WireID.cc:24
unsigned short getIWire() const
Getter for wire within the layer.
Definition: WireID.h:145
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28
Abstract base class for different kinds of events.