BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnGemStripModule.h
Go to the documentation of this file.
1#ifndef BMNGEMSTRIPMODULE_H
2#define BMNGEMSTRIPMODULE_H
3
4#include "BmnGemStripLayer.h"
5#include "BmnGemStripMedium.h"
6#include "BmnMatch.h"
7#include "BmnStripData.h"
8#include "TMath.h"
9#include "TString.h"
10
11#include <iostream>
12#include <memory>
13#include <vector>
14
15using namespace TMath;
16using namespace std;
17
23
24struct CollPoint;
25
27{
28
29 public:
30 // Constructors -------------------------------------------------------------
32
34 ElectronDriftDirectionInModule edrift_direction,
35 Double_t DriftGap,
36 Double_t FTransferGap,
37 Double_t STransferGap,
38 Double_t InductionGap);
39 //--------------------------------------------------------------------------
40
41 // Destructor
43
44 // Verbosity is kept for compatibility only (default kFALSE): the output of the module goes through FairLogger LOG()
45 void SetVerbosity(Bool_t verb) { Verbosity = verb; }
47
48 // Module parameters --------------------------------------------------------
53
56
57 void SetZStartModulePosition(Double_t zpos_module) { ZStartModulePosition = zpos_module; }
59
62
64 Double_t GetZPositionRegistered(); // position for all registered point (hits)
65 //--------------------------------------------------------------------------
66
67 // Strip layers controls ----------------------------------------------------
69
70 Bool_t SetStripSignalInLayer(Int_t layer_num, Int_t strip_num, Double_t signal);
71 Bool_t AddStripSignalInLayer(Int_t layer_num, Int_t strip_num, Double_t signal);
73 Int_t strip_num,
74 BmnMatch mc_match); // set a MC-match for a strip in some layer
76 Int_t layer_num,
77 Int_t strip_num,
78 BmnMatch digit_num_match); // set a digit number match for a strip in some layer
79
81 BmnMatch GetStripMatchInLayer(Int_t layer_num, Int_t strip_num); // get a MC-match for a strip in some layer
83 Int_t strip_num); // get a digit number match for a strip in some layer
84
85 Int_t GetNStripLayers() { return StripLayers.size(); }
87 vector<BmnGemStripLayer>& GetStripLayers() { return StripLayers; }
88
89 void ResetModuleData(); // clear all data in the module and all layers (not delete layers!)
90 //--------------------------------------------------------------------------
91
92 // Point ownership of the module --------------------------------------------
93 Bool_t IsPointInsideModule(Double_t x, Double_t y); // plane ownership
94 Bool_t IsPointInsideModule(Double_t x, Double_t y, Double_t z); // volume ownership
96 Double_t z); // point with z-coord is between z_start and z_end of the module (inside module thickness)?
97 //--------------------------------------------------------------------------
98
99 // Methods to add a point to the module -------------------------------------
100
101 // Universal method
103 Double_t y,
104 Double_t z,
105 Double_t px,
106 Double_t py,
107 Double_t pz,
108 Double_t signal,
109 Int_t refID);
110
111 // ANN generation of the strip clusters for all modules (static: can be set in a macro before the run)
112 static void SetUseANNGeneration(Bool_t use) { fUseANNGeneration = use; }
114
115 // path to the ANN (MLP, .bmnmlp) model for all modules; "" - the default path
116 static void SetANNModelPath(TString path);
118
119 // Strip ANN methods: max |theta| (deg) of the track for the ANN, above it - the standard method
120 static constexpr Double_t kANNMaxThetaAngle = 79.0;
121
122 // Center point of the ANN strip window: the track segment at the depth of the middle of the drift gap
124 Double_t y,
125 Double_t z,
126 Double_t x_out,
127 Double_t y_out,
128 Double_t z_out,
129 Double_t& x_c,
130 Double_t& y_c) const;
131
133 Double_t y,
134 Double_t z,
135 Double_t px,
136 Double_t py,
137 Double_t pz,
138 Double_t signal,
139 Int_t refID);
140
141 // ANN-based 2D cluster generation
143 Double_t y,
144 Double_t z,
145 Double_t px,
146 Double_t py,
147 Double_t pz,
148 Double_t signal,
149 Int_t refID,
150 Int_t pdg_code,
151 Double_t bfield,
152 Bool_t onlyStandard = false,
153 vector<Int_t> segs = {});
154
155 // Strip generation with the fdeep model
157 Double_t y,
158 Double_t z,
159 Double_t px,
160 Double_t py,
161 Double_t pz,
162 Double_t signal,
163 Int_t refID,
164 Int_t pdg_code = 0,
165 Double_t bfield = -1,
166 Bool_t onlyStandard = kFALSE,
167 vector<Int_t> segs = {});
168
169 // Strip generation with the fdeep model + the standard method is parallel (std::thread)
171 Double_t y,
172 Double_t z,
173 Double_t px,
174 Double_t py,
175 Double_t pz,
176 Double_t signal,
177 Int_t refID,
178 Int_t pdg_code = 0,
179 Double_t bfield = -1,
180 Bool_t onlyStandard = kFALSE,
181 vector<Int_t> segs = {});
182
183 // Strip generation with the own MLP inference
185 Double_t y,
186 Double_t z,
187 Double_t px,
188 Double_t py,
189 Double_t pz,
190 Double_t signal,
191 Int_t refID,
192 Int_t pdg_code = 0,
193 Double_t bfield = -1,
194 Bool_t onlyStandard = kFALSE,
195 vector<Int_t> segs = {});
196
197 // Strip generation with the own MLP inference + the standard method is parallel (std::thread)
199 Double_t y,
200 Double_t z,
201 Double_t px,
202 Double_t py,
203 Double_t pz,
204 Double_t signal,
205 Int_t refID,
206 Int_t pdg_code = 0,
207 Double_t bfield = -1,
208 Bool_t onlyStandard = kFALSE,
209 vector<Int_t> segs = {});
210
211 // Strip generation with the own MLP inference + the fast standard method without the per-electron loop
213 Double_t y,
214 Double_t z,
215 Double_t px,
216 Double_t py,
217 Double_t pz,
218 Double_t signal,
219 Int_t refID,
220 Int_t pdg_code = 0,
221 Double_t bfield = -1,
222 Bool_t onlyStandard = kFALSE,
223 vector<Int_t> segs = {});
224
226 Double_t y,
227 Double_t z,
228 Double_t px,
229 Double_t py,
230 Double_t pz,
231 Double_t signal,
232 Int_t refID);
233
235 Double_t y,
236 Double_t z,
237 Double_t px,
238 Double_t py,
239 Double_t pz,
240 Double_t signal,
241 Int_t refID); // old
242
243 // make a strip cluster from a single point (with gauss smearing)
244 StripCluster MakeCluster(Int_t layer_num, Double_t xcoord, Double_t ycoord, Double_t signal, Double_t radius);
245
246 // seed for the random generator in the full simulation (AddRealPointFull)
249
250 // limit for the mean number of ionizing clusters per cm: 0 - no limit
251 void SetMaxClustersPerCm(Double_t max_clusters) { MaxClustersPerCm = max_clusters; }
253
254 // fill the data for the training sample generation (default: kFALSE):
257
258 // controls to set up the avalanche radius in the non-full simulation (AddRealPointFullOne)
259 void SetAvalancheRadius(Double_t aval_radius);
261 //--------------------------------------------------------------------------
262
263 // Methods to calculate intersection points in the module -------------------
265
266 // need for a separated test (find x,y intersection coords from strip positions)
268 Double_t& y,
269 Double_t strip_pos_layerA,
270 Double_t strip_pos_layerB,
271 Int_t layerA_index,
272 Int_t layerB_index);
273 //--------------------------------------------------------------------------
274
275 // Added (real) points ------------------------------------------------------
276 Int_t GetNRealPoints() { return RealPointsX.size(); } // quantity of added points
277 Double_t GetRealPointX(Int_t indx) { return RealPointsX.at(indx); } // X-coord of i-added point
278 Double_t GetRealPointY(Int_t indx) { return RealPointsY.at(indx); } // Y-coord of i-added point
279 Double_t GetRealPointXout(Int_t indx) { return RealPointsXout.at(indx); } // Xout-coord of i-added point
280 Double_t GetRealPointYout(Int_t indx) { return RealPointsYout.at(indx); } // Yout-coord of i-added point
281 Double_t GetRealPointMC(Int_t indx) { return RealPointsMC.at(indx); } // MC-index of i-added point
282 // ANN strip window center point of i-added point (only the strip ANN methods
283 // AddRealPointFull_ANNStripGenerator_* fill it, also with onlyStandard)
287
289 {
290 RealPointsX.clear();
291 RealPointsY.clear();
292 RealPointsXout.clear();
293 RealPointsYout.clear();
294 RealPointsMC.clear();
295 RealPointsXcenter.clear();
296 RealPointsYcenter.clear();
297 }
298 //--------------------------------------------------------------------------
299
300 // Intersection points ------------------------------------------------------
301 Int_t GetNIntersectionPoints() { return IntersectionPointsX.size(); } // quantity of intersections
303 {
304 return IntersectionPointsX.at(indx);
305 } // X-coord of indx-intersection point
307 {
308 return IntersectionPointsY.at(indx);
309 } // Y-coord of indx-intersection point
311 {
312 return IntersectionPointsXErrors.at(indx);
313 } // X-coord error of indx-intersection point
315 {
316 return IntersectionPointsYErrors.at(indx);
317 } // Y-coord error of indx-intersection point
319 {
321 } // cluster size in the lower layer
323 {
325 } // cluster size in the upper layer
327 {
329 } // strip position in the lower layer
331 {
333 } // strip position in the upper layer
335 {
337 } // total signal in the lower layer
339 {
341 } // total signal in the upper layer
343 {
344 return IntersectionPointMatches.at(indx);
345 } // Intersection point MC-match
347 {
349 } // Intersection point digit number match
350
353
355 //--------------------------------------------------------------------------
356
357 // Pseudo intersections -----------------------------------------------------
388 {
389 return PseudoIntersectionMatches.at(indx);
390 } // Pseudo intersection MC-match
392 {
394 } // Pseudo intersection point digit number match
395
398
400 //--------------------------------------------------------------------------
401
402 private:
403 void DefineModuleBorders(); // calculate min-max coordinates of the module from layers` parameters
405 Double_t gamma,
406 Double_t charge,
407 Double_t p0,
408 Double_t p1); // AZ-110124
409
410 private:
413
414 private:
416
421
423
429
431
432 vector<BmnGemStripLayer> StripLayers;
433
434 static Bool_t fUseANNGeneration; // see SetUseANNGeneration()
435
437 Double_t MaxClustersPerCm; // 0 - no limit
438 Bool_t FillGenerationData; // see SetFillGenerationData()
440 Double_t MCD; // Mean collision distance
442
443 vector<Double_t> RealPointsX;
444 vector<Double_t> RealPointsY;
445 vector<Double_t> RealPointsXout;
446 vector<Double_t> RealPointsYout;
447 vector<Double_t> RealPointsMC; // index of MC point
448 vector<Double_t> RealPointsXcenter; // ANN strip window center point (strip ANN methods only)
449 vector<Double_t> RealPointsYcenter;
450
451 vector<Double_t> IntersectionPointsX;
452 vector<Double_t> IntersectionPointsY;
453 vector<Double_t> IntersectionPointsXErrors;
454 vector<Double_t> IntersectionPointsYErrors;
455
456 vector<Int_t> IntersectionPoints_LowerLayerClusterSize; // cluster size (number of strips) in the lower layer for
457 // each intersection point
458 vector<Int_t> IntersectionPoints_UpperLayerClusterSize; // cluster size (number of strips) in the upper layer for
459 // each intersection point
460
461 vector<Double_t>
462 IntersectionPoints_LowerLayerStripPosition; // strip position in the lower layer for each intersection point
463 vector<Double_t>
464 IntersectionPoints_UpperLayerStripPosition; // strip position in the upper layer for each intersection point
465
466 vector<Double_t>
467 IntersectionPoints_LowerLayerStripTotalSignal; // total signal in the lower layer for each intersection point
468 vector<Double_t>
469 IntersectionPoints_UpperLayerStripTotalSignal; // total signal in the upper layer for each intersection point
470
471 vector<BmnMatch> IntersectionPointMatches; // MC-matches
472 vector<BmnMatch> IntersectionPointDigitNumberMatches; // Digit number matches
473
474 vector<StripCluster> UpperClusters;
475 vector<StripCluster> LowerClusters;
476
477 // Pseudo intersections -----------------------------------------------------
478 vector<Double_t> PseudoIntersectionsX;
479 vector<Double_t> PseudoIntersectionsY;
480 vector<Double_t> PseudoIntersectionsXErrors;
481 vector<Double_t> PseudoIntersectionsYErrors;
482
485
488
491
492 vector<BmnMatch> PseudoIntersectionMatches; // MC-matches
493 vector<BmnMatch> PseudoIntersectionDigitNumberMatches; // Digit number matches
494
495 vector<StripCluster> UpperClusters_PseudoIntersections;
496 vector<StripCluster> LowerClusters_PseudoIntersections;
497
498 // testing part -----------------------------------------------------------------
499 public:
500 vector<Double_t> XElectronPos;
501 vector<Double_t> YElectronPos;
502 vector<Double_t> ElectronSignal;
503 vector<Int_t> SegmentedChargeDistribution; // ioniz. cluster distribution along a segmented track
504
505 vector<vector<StripCluster>> AddedClusters; // test
506
508 {
509 std::vector<Double_t>().swap(XElectronPos); // clear + empty capacity
510 std::vector<Double_t>().swap(YElectronPos);
511 std::vector<Double_t>().swap(ElectronSignal);
512 SegmentedChargeDistribution.clear(); // small- only clear is enough
513
514 std::vector<std::vector<StripCluster>>().swap(AddedClusters); // test
515 }
516 //------------------------------------------------------------------------------
517
518 private:
519 // Struct: a collision point position (an ionizing cluster position) --------
520 struct CollPoint
521 {
523 : x(_x)
524 , y(_y)
525 , z(_z)
526 {}
527 Double_t x;
528 Double_t y;
529 Double_t z;
530 };
531};
532//------------------------------------------------------------------------------
533
534#endif /* BMNGEMSTRIPMODULE_H */
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
vector< Double_t > IntersectionPointsYErrors
vector< Double_t > RealPointsXcenter
vector< Double_t > IntersectionPointsX
void GetANNWindowCenterPoint(Double_t x, Double_t y, Double_t z, Double_t x_out, Double_t y_out, Double_t z_out, Double_t &x_c, Double_t &y_c) const
Double_t FirstTransferGapThickness
vector< Double_t > PseudoIntersections_LowerLayerStripPosition
void ResetPseudoIntersections()
Double_t GetPseudoIntersectionX(Int_t indx)
vector< Int_t > PseudoIntersections_UpperLayerClusterSize
Bool_t AddRealPointFull_ANNStripGenerator_Fdeep(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID, Int_t pdg_code=0, Double_t bfield=-1, Bool_t onlyStandard=kFALSE, vector< Int_t > segs={})
void ResetIntersectionPoints()
void CalculateStripHitIntersectionPoints()
BmnMatch GetPseudoIntersectionMatch(Int_t indx)
vector< Double_t > PseudoIntersections_UpperLayerStripPosition
void SetZStartModulePosition(Double_t zpos_module)
BmnMatch GetStripMatchInLayer(Int_t layer_num, Int_t strip_num)
void SetAvalancheRadius(Double_t aval_radius)
Double_t GetIntersectionPoint_UpperLayerSripPosition(Int_t indx)
vector< Double_t > XElectronPos
vector< Double_t > RealPointsXout
vector< Double_t > IntersectionPoints_LowerLayerStripTotalSignal
vector< vector< StripCluster > > AddedClusters
Double_t GetPseudoIntersection_UpperLayerSripPosition(Int_t indx)
void SetVerbosity(Bool_t verb)
vector< Double_t > RealPointsMC
vector< StripCluster > UpperClusters
Double_t GetIntersectionPoint_LowerLayerSripTotalSignal(Int_t indx)
Double_t GetIntersectionPointX(Int_t indx)
Double_t GetIntersectionPointY(Int_t indx)
vector< StripCluster > LowerClusters
StripCluster GetLowerCluster(Int_t indx)
vector< BmnMatch > IntersectionPointDigitNumberMatches
BmnMatch GetStripDigitNumberMatchInLayer(Int_t layer_num, Int_t strip_num)
Double_t GetPseudoIntersection_UpperLayerSripTotalSignal(Int_t indx)
StripCluster GetLowerCluster_PseudoIntersections(Int_t indx)
BmnGemStripModule & operator=(const BmnGemStripModule &)=delete
BmnGemStripModule(Double_t z_start_pos, ElectronDriftDirectionInModule edrift_direction, Double_t DriftGap, Double_t FTransferGap, Double_t STransferGap, Double_t InductionGap)
vector< Double_t > IntersectionPoints_UpperLayerStripTotalSignal
ElectronDriftDirectionInModule ElectronDriftDirection
Double_t GetModuleThickness()
vector< Int_t > PseudoIntersections_LowerLayerClusterSize
BmnGemStripLayer & GetStripLayer(Int_t num)
vector< Double_t > PseudoIntersections_UpperLayerStripTotalSignal
Double_t GetIntersectionPointYError(Int_t indx)
vector< Double_t > IntersectionPoints_LowerLayerStripPosition
vector< Double_t > PseudoIntersectionsY
void SetElectronDriftDirection(ElectronDriftDirectionInModule direction)
vector< Double_t > PseudoIntersections_LowerLayerStripTotalSignal
Int_t GetPseudoIntersection_LowerLayerClusterSize(Int_t indx)
vector< Double_t > IntersectionPointsY
Bool_t AddRealPointFull(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID)
Bool_t AddRealPointFull_ANNStripGenerator_MLP_Parallel(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID, Int_t pdg_code=0, Double_t bfield=-1, Bool_t onlyStandard=kFALSE, vector< Int_t > segs={})
Double_t GetPseudoIntersection_LowerLayerSripPosition(Int_t indx)
static void SetUseANNGeneration(Bool_t use)
Double_t GetStripSignalInLayer(Int_t layer_num, Int_t strip_num)
static void SetANNModelPath(TString path)
StripCluster GetUpperCluster_PseudoIntersections(Int_t indx)
vector< BmnMatch > PseudoIntersectionMatches
vector< Double_t > YElectronPos
vector< Double_t > RealPointsY
void SetAvalancheGenerationSeed(UInt_t seed)
vector< Double_t > IntersectionPoints_UpperLayerStripPosition
Bool_t GetFillGenerationData() const
Bool_t AddRealPointSimple(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID)
void SetFillGenerationData(Bool_t fill)
vector< Int_t > SegmentedChargeDistribution
vector< Double_t > PseudoIntersectionsYErrors
BmnMatch GetIntersectionPointMatch(Int_t indx)
Double_t GetRealPointMC(Int_t indx)
UInt_t GetAvalancheGenerationSeed()
Bool_t SetStripSignalInLayer(Int_t layer_num, Int_t strip_num, Double_t signal)
vector< Double_t > ElectronSignal
Bool_t IsPointInsideModule(Double_t x, Double_t y)
vector< Double_t > PseudoIntersectionsX
void SetMaxClustersPerCm(Double_t max_clusters)
vector< StripCluster > UpperClusters_PseudoIntersections
BmnMatch GetPseudoIntersectionDigitNumberMatch(Int_t indx)
vector< BmnMatch > IntersectionPointMatches
BmnMatch GetIntersectionPointDigitNumberMatch(Int_t indx)
vector< Double_t > RealPointsX
Double_t GetPseudoIntersection_LowerLayerSripTotalSignal(Int_t indx)
Double_t GetPseudoIntersectionXError(Int_t indx)
Bool_t AddRealPointFull_ANNGenerator(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID, Int_t pdg_code, Double_t bfield, Bool_t onlyStandard=false, vector< Int_t > segs={})
Double_t GetMaxClustersPerCm() const
Bool_t AddStripSignalInLayer(Int_t layer_num, Int_t strip_num, Double_t signal)
Double_t GetRealPointY(Int_t indx)
Bool_t AddRealPointFullOne(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID)
Double_t GetNumberOfClusters(Double_t beta, Double_t gamma, Double_t charge, Double_t p0, Double_t p1)
Bool_t SetStripMatchInLayer(Int_t layer_num, Int_t strip_num, BmnMatch mc_match)
static Bool_t GetUseANNGeneration()
void DefineModuleBorders()
Bool_t AddRealPointFull_ANNStripGenerator_MLP_FastStand(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID, Int_t pdg_code=0, Double_t bfield=-1, Bool_t onlyStandard=kFALSE, vector< Int_t > segs={})
vector< Int_t > IntersectionPoints_UpperLayerClusterSize
StripCluster GetUpperCluster(Int_t indx)
Bool_t AddRealPoint(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID)
vector< Double_t > RealPointsYcenter
static Bool_t fUseANNGeneration
Double_t GetPseudoIntersectionY(Int_t indx)
Int_t GetPseudoIntersection_UpperLayerClusterSize(Int_t indx)
Int_t GetIntersectionPoint_LowerLayerClusterSize(Int_t indx)
Double_t GetRealPointYout(Int_t indx)
vector< BmnMatch > PseudoIntersectionDigitNumberMatches
Double_t GetRealPointX(Int_t indx)
vector< Int_t > IntersectionPoints_LowerLayerClusterSize
Double_t GetZStartModulePosition()
vector< Double_t > RealPointsYout
Double_t GetIntersectionPoint_LowerLayerSripPosition(Int_t indx)
static constexpr Double_t kANNMaxThetaAngle
vector< StripCluster > LowerClusters_PseudoIntersections
StripCluster MakeCluster(Int_t layer_num, Double_t xcoord, Double_t ycoord, Double_t signal, Double_t radius)
void ResetElectronPointsAndClusters()
Bool_t IsPointInsideZThickness(Double_t z)
ElectronDriftDirectionInModule GetElectronDriftDirection()
static TString GetANNModelPath()
Bool_t SearchIntersectionPoint(Double_t &x, Double_t &y, Double_t strip_pos_layerA, Double_t strip_pos_layerB, Int_t layerA_index, Int_t layerB_index)
Double_t SecondTransferGapThickness
Bool_t AddRealPointFull_ANNStripGenerator_Fdeep_Parallel(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID, Int_t pdg_code=0, Double_t bfield=-1, Bool_t onlyStandard=kFALSE, vector< Int_t > segs={})
Bool_t IsPointInsideModule(Double_t x, Double_t y, Double_t z)
Double_t GetIntersectionPointXError(Int_t indx)
Int_t GetIntersectionPoint_UpperLayerClusterSize(Int_t indx)
Double_t GetPseudoIntersectionYError(Int_t indx)
vector< Double_t > PseudoIntersectionsXErrors
Bool_t AddRealPointFull_ANNStripGenerator_MLP(Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t signal, Int_t refID, Int_t pdg_code=0, Double_t bfield=-1, Bool_t onlyStandard=kFALSE, vector< Int_t > segs={})
Double_t GetZPositionRegistered()
BmnGemStripModule(const BmnGemStripModule &)=delete
Double_t GetRealPointXcenter(Int_t indx)
vector< Double_t > IntersectionPointsXErrors
void AddStripLayer(BmnGemStripLayer strip_layer)
Double_t GetRealPointXout(Int_t indx)
vector< BmnGemStripLayer > StripLayers
Double_t GetRealPointYcenter(Int_t indx)
Double_t GetIntersectionPoint_UpperLayerSripTotalSignal(Int_t indx)
Bool_t SetStripDigitNumberMatchInLayer(Int_t layer_num, Int_t strip_num, BmnMatch digit_num_match)
virtual ~BmnGemStripModule()
Double_t GetAvalancheRadius()
vector< BmnGemStripLayer > & GetStripLayers()
ElectronDriftDirectionInModule
@ BackwardZAxisEDrift
@ ForwardZAxisEDrift
double beta(double x, double y)
ElectronDriftDirectionInModule
Definition json.hpp:4446
CollPoint(Double_t _x, Double_t _y, Double_t _z)