FirstCylinders

TrackerInteractionGeometry

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
#ifndef FastSimulation_TrackerSetup_TrackerInteractionGeometry_H
#define FastSimulation_TrackerSetup_TrackerInteractionGeometry_H
// v0  who ? when ?
// 11 Dec 2003 Florian Beaudette. Removed the surfaces corresponding to ECAL
//             This will carried out by the FamosTrajectoryManager
// 12 Oct 2006 Patrick Janot. Removed hardcoded active geometry & rings
//                            Removed RecHit smearing parameterization
// 16 Nov 2007 Patrick Janot. Make the whole thing configurable

//FAMOS Headers
#include "FastSimulation/TrackerSetup/interface/TrackerLayer.h"

#include <list>
#include <vector>

class MediumProperties;
class GeometricSearchTracker;

namespace edm {
  class ParameterSet;
}

class TrackerInteractionGeometry {
public:
  enum FirstCylinders { PXB = 0, PXD = 3, TIB = 5, TID = 9, TOB = 12, TEC = 18 };

  /// Constructor : get the configurable parameters
  TrackerInteractionGeometry(const edm::ParameterSet &trackerMaterial, const GeometricSearchTracker *geomSearchTracker);

  /// Destructor
  ~TrackerInteractionGeometry();

  /// Initialize the interaction geometry
  /// void initialize(const GeometricSearchTracker* geomSearchTracker);

  /// Returns the first pointer in the cylinder list
  inline std::list<TrackerLayer>::const_iterator cylinderBegin() const { return _theCylinders.begin(); }

  /// Returns the last pointer in the cylinder list
  inline std::list<TrackerLayer>::const_iterator cylinderEnd() const { return _theCylinders.end(); }

  /// Returns the number of cylinders in the Tracker
  inline const int nCylinders() const { return _theCylinders.size(); }

private:
  // Fudge factors to apply to each layer material (private use only)
  std::vector<double> fudgeFactors(unsigned layerNr);
  std::vector<double> minDim(unsigned layerNr);
  std::vector<double> maxDim(unsigned layerNr);

private:
  /// The list of tracker (sensistive or not) layers
  std::list<TrackerLayer> _theCylinders;

  /// Thickness of all layers
  /// Version of the description
  unsigned int version;
  /// Beam Pipe
  std::vector<double> beamPipeThickness;
  /// Pixel Barrel Layers 1-3
  std::vector<double> pxbThickness;
  /// Pixel Barrel services at the end of layers 1-3
  std::vector<double> pxb1CablesThickness;
  std::vector<double> pxb2CablesThickness;
  std::vector<double> pxb3CablesThickness;
  /// Pixel Barrel outside cables
  std::vector<double> pxbOutCables1Thickness;
  std::vector<double> pxbOutCables2Thickness;
  /// Pixel Disks 1-2
  std::vector<double> pxdThickness;
  /// Pixel Endcap outside cables
  std::vector<double> pxdOutCables1Thickness;
  std::vector<double> pxdOutCables2Thickness;
  /// Tracker Inner barrel layers 1-4
  std::vector<double> tibLayer1Thickness;
  std::vector<double> tibLayer2Thickness;
  std::vector<double> tibLayer3Thickness;
  std::vector<double> tibLayer4Thickness;
  /// TIB outside services (endcap)
  std::vector<double> tibOutCables1Thickness;
  std::vector<double> tibOutCables2Thickness;
  /// Tracker Inner disks layers 1-3
  std::vector<double> tidLayer1Thickness;
  std::vector<double> tidLayer2Thickness;
  std::vector<double> tidLayer3Thickness;
  /// TID outside wall (endcap)
  std::vector<double> tidOutsideThickness;
  /// TOB inside wall (barrel)
  std::vector<double> tobInsideThickness;
  /// Tracker Outer barrel layers 1-6
  std::vector<double> tobLayer1Thickness;
  std::vector<double> tobLayer2Thickness;
  std::vector<double> tobLayer3Thickness;
  std::vector<double> tobLayer4Thickness;
  std::vector<double> tobLayer5Thickness;
  std::vector<double> tobLayer6Thickness;
  // TOB services (endcap)
  std::vector<double> tobOutsideThickness;
  // Tracker EndCap disks layers 1-9
  std::vector<double> tecLayerThickness;
  // TOB outside wall (barrel)
  std::vector<double> barrelCablesThickness;
  // TEC outside wall (endcap)
  std::vector<double> endcapCables1Thickness;
  std::vector<double> endcapCables2Thickness;

  /// Position of dead material layers (cables, services, etc.)
  /// Beam pipe
  std::vector<double> beamPipeRadius;
  std::vector<double> beamPipeLength;
  /// Cables and Services at the end of PIXB1,2,3 ("disk")
  std::vector<double> pxb1CablesInnerRadius;
  std::vector<double> pxb2CablesInnerRadius;
  std::vector<double> pxb3CablesInnerRadius;
  /// Pixel Barrel Outside walls and cables
  std::vector<double> pxbOutCables1InnerRadius;
  std::vector<double> pxbOutCables1OuterRadius;
  std::vector<double> pxbOutCables1ZPosition;
  std::vector<double> pxbOutCables2InnerRadius;
  std::vector<double> pxbOutCables2OuterRadius;
  std::vector<double> pxbOutCables2ZPosition;
  /// Pixel Outside walls and cables (barrel and endcaps)
  std::vector<double> pixelOutCablesRadius;
  std::vector<double> pixelOutCablesLength;
  std::vector<double> pixelOutCablesInnerRadius;
  std::vector<double> pixelOutCablesOuterRadius;
  std::vector<double> pixelOutCablesZPosition;
  /// Tracker Inner Barrel Outside Cables and walls (endcap)
  std::vector<double> tibOutCables1InnerRadius;
  std::vector<double> tibOutCables1OuterRadius;
  std::vector<double> tibOutCables1ZPosition;
  std::vector<double> tibOutCables2InnerRadius;
  std::vector<double> tibOutCables2OuterRadius;
  std::vector<double> tibOutCables2ZPosition;
  /// Tracker outer barrel Inside wall (barrel)
  std::vector<double> tobInCablesRadius;
  std::vector<double> tobInCablesLength;
  /// Tracker Inner Disks Outside Cables and walls
  std::vector<double> tidOutCablesInnerRadius;
  std::vector<double> tidOutCablesZPosition;
  /// Tracker Outer Barrel Outside Cables and walls (barrel and endcaps)
  std::vector<double> tobOutCablesInnerRadius;
  std::vector<double> tobOutCablesOuterRadius;
  std::vector<double> tobOutCablesZPosition;
  std::vector<double> tobOutCablesRadius;
  std::vector<double> tobOutCablesLength;
  /// Tracker Endcaps Outside Cables and walls
  std::vector<double> tecOutCables1InnerRadius;
  std::vector<double> tecOutCables1OuterRadius;
  std::vector<double> tecOutCables1ZPosition;
  std::vector<double> tecOutCables2InnerRadius;
  std::vector<double> tecOutCables2OuterRadius;
  std::vector<double> tecOutCables2ZPosition;

  // Fudge factors for layer inhomogeneities
  std::vector<unsigned int> fudgeLayer;
  std::vector<double> fudgeMin;
  std::vector<double> fudgeMax;
  std::vector<double> fudgeFactor;
  /// The following list gives the thicknesses of the various layers.
  /// The beam pipe
  MediumProperties *_theMPBeamPipe;
  /// The barrel pixel layers
  MediumProperties *_theMPPixelBarrel;
  /// The endcap pixel layers
  MediumProperties *_theMPPixelEndcap;
  /// A series of cables/walls to reproduce the full sim
  MediumProperties *_theMPPixelOutside1;
  MediumProperties *_theMPPixelOutside2;
  MediumProperties *_theMPPixelOutside3;
  MediumProperties *_theMPPixelOutside4;
  MediumProperties *_theMPPixelOutside;
  MediumProperties *_theMPPixelOutside5;
  MediumProperties *_theMPPixelOutside6;
  /// The tracker inner barrel layer 1
  MediumProperties *_theMPTIB1;
  /// The tracker inner barrel layer 2
  MediumProperties *_theMPTIB2;
  /// The tracker inner barrel layer 3
  MediumProperties *_theMPTIB3;
  /// The tracker inner barrel layer 4
  MediumProperties *_theMPTIB4;
  /// The tracker outer barrel layer 1
  MediumProperties *_theMPTOB1;
  /// The tracker outer barrel layer 2
  MediumProperties *_theMPTOB2;
  /// The tracker outer barrel layer 3
  MediumProperties *_theMPTOB3;
  /// The tracker outer barrel layer 4
  MediumProperties *_theMPTOB4;
  /// The tracker outer barrel layer 5
  MediumProperties *_theMPTOB5;
  /// The tracker outer barrel layer 6
  MediumProperties *_theMPTOB6;
  /// The Tracker EndCap layers
  MediumProperties *_theMPEndcap;
  /// The tracker inner disks
  MediumProperties *_theMPInner1;
  MediumProperties *_theMPInner2;
  MediumProperties *_theMPInner3;
  /// Some material in front of the tracker outer barrel (cylinder)
  MediumProperties *_theMPTOBBInside;
  /// Some material around the tracker inner barrel (disk)
  MediumProperties *_theMPTIBEOutside1;
  MediumProperties *_theMPTIBEOutside2;
  /// Some material around the tracker outer barrel (disk)
  MediumProperties *_theMPTOBEOutside;
  /// Some material around the tracker inner disks (disk)
  MediumProperties *_theMPTIDEOutside;
  /// Cables around the tracker (one barrel, two disks)
  MediumProperties *_theMPBarrelOutside;
  MediumProperties *_theMPEndcapOutside;
  MediumProperties *_theMPEndcapOutside2;

  std::vector<MediumProperties *> _mediumProperties;

  //use hardcoded pre-Phase I upgrade tracker geometry or use flexible geometry
  bool use_hardcoded;
};
#endif