EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FiberParData.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file FiberParData.h
1 //
2 // AYK (ayk@bnl.gov), 2013/06/12
3 //
4 // Fiber layout class (shared between FEMC & CEMC);
5 //
6 
7 #include <TObject.h>
8 #include <TString.h>
9 
10 #ifndef _FIBER_PAR_DATA_
11 #define _FIBER_PAR_DATA_
12 
13 class FiberTowerLayer: public TObject
14 {
15  public:
17  FiberTowerLayer(double thickness, const char *media):
18  mThickness(thickness), mOffset(0.0), mMedia(media) {};
20 
21  double mThickness;
22  TString mMedia;
23 
24  double mOffset;
25 
26  // Well, don't want to calculate this stuff every time new;
27  TString mLayerName;
29  TString mFiberCoreName;
30 
31  void SetLayerNames(const char *layer, const char *cladding, const char *core) {
32  mLayerName = TString(layer);
33  mFiberCladdingName = TString(cladding);
34  mFiberCoreName = TString(core);
35  };
36 
38 };
39 
40 class FiberParData: public TObject
41 {
42  public:
46  mFiberY0offset(0.0) {};
48 
49  //
50  // -> Do not mind to have these variables public?; yes, they are pure
51  // data containers, so set()/get() methods really make no sense;
52  // same true for FiberTowerLayer class;
53  //
54 
55  // Honeycomb-like structure;
56  Int_t mFiberNumPerRow; // number of fibers in a row
57  Int_t mFiberRowNum; // number of fiber rows
58  Double_t mFiberCoreDiameter; // fiber sensitive core diameter
59  Double_t mFiberCladdingThickness; // fiber cladding thickness
60  // May either be given (as it happens in practice when one has to round
61  // all numbers to 0.0001") or taken ideal from cell size;
62  Double_t mFiberSpacingX; // X-distance between neighboring fibers
63  // May either be given (as it happens in practice when one has to round
64  // all numbers to 0.0001") or recalculated from H-spacing as sqrt(3)/2;
65  Double_t mFiberSpacingY; // Y-distance between fiber rows
66  Double_t mEdgeSafetyDistance; // min distance from fiber center to the mesh edge
67 
68  // Well, sort of redundant; yet have no problem to put this stuff in here;
69  Double_t mOuterDiameter; // fiber outer diamater;
70  Double_t mFiberX0offset; // 1-st fiber X-offset with respect to the tower edge
71  Double_t mFiberY0offset; // 1-st fiber Y-offset with respect to the tower edge
72 
73  std::vector<FiberTowerLayer> mLayers; // layer description (epoxy, mesh, epoxy+W)
74 
75  // Well, this one want to pack inot a method;
76  void AddLayer(double thickness, const char *media) {
77  mLayers.push_back(FiberTowerLayer(thickness, media));
78  };
79 
80  unsigned GetLayerNum() const { return mLayers.size(); };;
81  const FiberTowerLayer *GetLayer(unsigned id) {
82  return id < mLayers.size() ? &mLayers[id] : 0;
83  };
84 
86 };
87 
88 class TowerParData: public TObject
89 {
90  public:
93  mG10Thickness(0.0), mG10Width(0.0) {};
95 
96  //
97  // These parameters make sense no matter the "main" tower material is smeared
98  // or represented by fibers, etc;
99  //
100 
101  Double_t mLightGuideUpstreamWidth;// light guide pyramid width at the sensor side
102  Double_t mLightGuideLength; // light guide length
103  Double_t mSiliconPadThickness; // thickness of silicon pad between light guide and sensors
104  Double_t mTowerShellLength; // overall length of tower air shell assembly (see *.C script)
105 
106  Double_t mSensorWidth; // SiPM square sensor side length
107  Double_t mSensorThickness; // sensor thickness; should not really matter
108  Double_t mSensorToSensorDistance; // distance between sensors in a 2x2 setup
109 
110  Double_t mG10Thickness; // sensor PCB (equivalent) thickness
111  Double_t mG10Width; // a (square) sensor PCB side width
112 
114 };
115 
116 #endif