00001 #ifndef FastSimulation_TrackerSetup_TrackerInteractionGeometry_H 00002 #define FastSimulation_TrackerSetup_TrackerInteractionGeometry_H 00003 // v0 who ? when ? 00004 // 11 Dec 2003 Florian Beaudette. Removed the surfaces corresponding to ECAL 00005 // This will carried out by the FamosTrajectoryManager 00006 // 12 Oct 2006 Patrick Janot. Removed hardcoded active geometry & rings 00007 // Removed RecHit smearing parameterization 00008 // 16 Nov 2007 Patrick Janot. Make the whole thing configurable 00009 00010 //FAMOS Headers 00011 #include "FastSimulation/TrackerSetup/interface/TrackerLayer.h" 00012 00013 #include <list> 00014 #include <vector> 00015 00016 class MediumProperties; 00017 class GeometricSearchTracker; 00018 00019 namespace edm { 00020 class ParameterSet; 00021 } 00022 00023 class TrackerInteractionGeometry 00024 { 00025 00026 public: 00027 00028 enum FirstCylinders { PXB=0,PXD=3,TIB=5,TID=9,TOB=12,TEC=18 }; 00029 00031 TrackerInteractionGeometry(const edm::ParameterSet& trackerMaterial, 00032 const GeometricSearchTracker* geomSearchTracker); 00033 00035 ~TrackerInteractionGeometry(); 00036 00039 00041 inline std::list<TrackerLayer>::const_iterator cylinderBegin() const 00042 { return _theCylinders.begin(); } 00043 00045 inline std::list<TrackerLayer>::const_iterator cylinderEnd() const 00046 { return _theCylinders.end(); } 00047 00049 inline const int nCylinders() const 00050 { return static_cast<const int>(_theCylinders.size()); } 00051 00052 private: 00053 00054 // Fudge factors to apply to each layer material (private use only) 00055 std::vector<double> fudgeFactors(unsigned layerNr); 00056 std::vector<double> minDim(unsigned layerNr); 00057 std::vector<double> maxDim(unsigned layerNr); 00058 00059 private: 00060 00062 std::list<TrackerLayer> _theCylinders; 00063 00066 unsigned int version; 00068 std::vector<double> beamPipeThickness; 00070 std::vector<double> pxbThickness; 00072 std::vector<double> pxb1CablesThickness; 00073 std::vector<double> pxb2CablesThickness; 00074 std::vector<double> pxb3CablesThickness; 00076 std::vector<double> pxbOutCables1Thickness; 00077 std::vector<double> pxbOutCables2Thickness; 00079 std::vector<double> pxdThickness; 00081 std::vector<double> pxdOutCables1Thickness; 00082 std::vector<double> pxdOutCables2Thickness; 00084 std::vector<double> tibLayer1Thickness; 00085 std::vector<double> tibLayer2Thickness; 00086 std::vector<double> tibLayer3Thickness; 00087 std::vector<double> tibLayer4Thickness; 00089 std::vector<double> tibOutCables1Thickness; 00090 std::vector<double> tibOutCables2Thickness; 00092 std::vector<double> tidLayer1Thickness; 00093 std::vector<double> tidLayer2Thickness; 00094 std::vector<double> tidLayer3Thickness; 00096 std::vector<double> tidOutsideThickness; 00098 std::vector<double> tobInsideThickness; 00100 std::vector<double> tobLayer1Thickness; 00101 std::vector<double> tobLayer2Thickness; 00102 std::vector<double> tobLayer3Thickness; 00103 std::vector<double> tobLayer4Thickness; 00104 std::vector<double> tobLayer5Thickness; 00105 std::vector<double> tobLayer6Thickness; 00106 // TOB services (endcap) 00107 std::vector<double> tobOutsideThickness; 00108 // Tracker EndCap disks layers 1-9 00109 std::vector<double> tecLayerThickness; 00110 // TOB outside wall (barrel) 00111 std::vector<double> barrelCablesThickness; 00112 // TEC outside wall (endcap) 00113 std::vector<double> endcapCables1Thickness; 00114 std::vector<double> endcapCables2Thickness; 00115 00118 std::vector<double> beamPipeRadius; 00119 std::vector<double> beamPipeLength; 00121 std::vector<double> pxb1CablesInnerRadius; 00122 std::vector<double> pxb2CablesInnerRadius; 00123 std::vector<double> pxb3CablesInnerRadius; 00125 std::vector<double> pxbOutCables1InnerRadius; 00126 std::vector<double> pxbOutCables1OuterRadius; 00127 std::vector<double> pxbOutCables1ZPosition; 00128 std::vector<double> pxbOutCables2InnerRadius; 00129 std::vector<double> pxbOutCables2OuterRadius; 00130 std::vector<double> pxbOutCables2ZPosition; 00132 std::vector<double> pixelOutCablesRadius; 00133 std::vector<double> pixelOutCablesLength; 00134 std::vector<double> pixelOutCablesInnerRadius; 00135 std::vector<double> pixelOutCablesOuterRadius; 00136 std::vector<double> pixelOutCablesZPosition; 00138 std::vector<double> tibOutCables1InnerRadius; 00139 std::vector<double> tibOutCables1OuterRadius; 00140 std::vector<double> tibOutCables1ZPosition; 00141 std::vector<double> tibOutCables2InnerRadius; 00142 std::vector<double> tibOutCables2OuterRadius; 00143 std::vector<double> tibOutCables2ZPosition; 00145 std::vector<double> tobInCablesRadius; 00146 std::vector<double> tobInCablesLength; 00148 std::vector<double> tidOutCablesInnerRadius; 00149 std::vector<double> tidOutCablesZPosition; 00151 std::vector<double> tobOutCablesInnerRadius; 00152 std::vector<double> tobOutCablesOuterRadius; 00153 std::vector<double> tobOutCablesZPosition; 00154 std::vector<double> tobOutCablesRadius; 00155 std::vector<double> tobOutCablesLength; 00157 std::vector<double> tecOutCables1InnerRadius; 00158 std::vector<double> tecOutCables1OuterRadius; 00159 std::vector<double> tecOutCables1ZPosition; 00160 std::vector<double> tecOutCables2InnerRadius; 00161 std::vector<double> tecOutCables2OuterRadius; 00162 std::vector<double> tecOutCables2ZPosition; 00163 00164 // Fudge factors for layer inhomogeneities 00165 std::vector<unsigned int> fudgeLayer; 00166 std::vector<double> fudgeMin; 00167 std::vector<double> fudgeMax; 00168 std::vector<double> fudgeFactor; 00171 MediumProperties *_theMPBeamPipe; 00173 MediumProperties *_theMPPixelBarrel; 00175 MediumProperties *_theMPPixelEndcap; 00177 MediumProperties *_theMPPixelOutside1; 00178 MediumProperties *_theMPPixelOutside2; 00179 MediumProperties *_theMPPixelOutside3; 00180 MediumProperties *_theMPPixelOutside4; 00181 MediumProperties *_theMPPixelOutside; 00182 MediumProperties *_theMPPixelOutside5; 00183 MediumProperties *_theMPPixelOutside6; 00185 MediumProperties *_theMPTIB1; 00187 MediumProperties *_theMPTIB2; 00189 MediumProperties *_theMPTIB3; 00191 MediumProperties *_theMPTIB4; 00193 MediumProperties *_theMPTOB1; 00195 MediumProperties *_theMPTOB2; 00197 MediumProperties *_theMPTOB3; 00199 MediumProperties *_theMPTOB4; 00201 MediumProperties *_theMPTOB5; 00203 MediumProperties *_theMPTOB6; 00205 MediumProperties *_theMPEndcap; 00207 MediumProperties *_theMPInner1; 00208 MediumProperties *_theMPInner2; 00209 MediumProperties *_theMPInner3; 00211 MediumProperties *_theMPTOBBInside; 00213 MediumProperties *_theMPTIBEOutside1; 00214 MediumProperties *_theMPTIBEOutside2; 00216 MediumProperties *_theMPTOBEOutside; 00218 MediumProperties *_theMPTIDEOutside; 00220 MediumProperties *_theMPBarrelOutside; 00221 MediumProperties *_theMPEndcapOutside; 00222 MediumProperties *_theMPEndcapOutside2; 00223 00224 std::vector<MediumProperties *> _mediumProperties; 00225 00226 //use hardcoded pre-Phase I upgrade tracker geometry or use flexible geometry 00227 bool use_hardcoded; 00228 00229 }; 00230 #endif