Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:22

0001 #ifndef FastSimulation_TrackerSetup_TrackerInteractionGeometry_H
0002 #define FastSimulation_TrackerSetup_TrackerInteractionGeometry_H
0003 // v0  who ? when ?
0004 // 11 Dec 2003 Florian Beaudette. Removed the surfaces corresponding to ECAL
0005 //             This will carried out by the FamosTrajectoryManager
0006 // 12 Oct 2006 Patrick Janot. Removed hardcoded active geometry & rings
0007 //                            Removed RecHit smearing parameterization
0008 // 16 Nov 2007 Patrick Janot. Make the whole thing configurable
0009 
0010 //FAMOS Headers
0011 #include "FastSimulation/TrackerSetup/interface/TrackerLayer.h"
0012 
0013 #include <list>
0014 #include <vector>
0015 
0016 class MediumProperties;
0017 class GeometricSearchTracker;
0018 
0019 namespace edm {
0020   class ParameterSet;
0021 }
0022 
0023 class TrackerInteractionGeometry {
0024 public:
0025   enum FirstCylinders { PXB = 0, PXD = 3, TIB = 5, TID = 9, TOB = 12, TEC = 18 };
0026 
0027   /// Constructor : get the configurable parameters
0028   TrackerInteractionGeometry(const edm::ParameterSet &trackerMaterial, const GeometricSearchTracker *geomSearchTracker);
0029 
0030   /// Destructor
0031   ~TrackerInteractionGeometry();
0032 
0033   /// Initialize the interaction geometry
0034   /// void initialize(const GeometricSearchTracker* geomSearchTracker);
0035 
0036   /// Returns the first pointer in the cylinder list
0037   inline std::list<TrackerLayer>::const_iterator cylinderBegin() const { return _theCylinders.begin(); }
0038 
0039   /// Returns the last pointer in the cylinder list
0040   inline std::list<TrackerLayer>::const_iterator cylinderEnd() const { return _theCylinders.end(); }
0041 
0042   /// Returns the number of cylinders in the Tracker
0043   inline const int nCylinders() const { return _theCylinders.size(); }
0044 
0045 private:
0046   // Fudge factors to apply to each layer material (private use only)
0047   std::vector<double> fudgeFactors(unsigned layerNr);
0048   std::vector<double> minDim(unsigned layerNr);
0049   std::vector<double> maxDim(unsigned layerNr);
0050 
0051 private:
0052   /// The list of tracker (sensistive or not) layers
0053   std::list<TrackerLayer> _theCylinders;
0054 
0055   /// Thickness of all layers
0056   /// Version of the description
0057   unsigned int version;
0058   /// Beam Pipe
0059   std::vector<double> beamPipeThickness;
0060   /// Pixel Barrel Layers 1-3
0061   std::vector<double> pxbThickness;
0062   /// Pixel Barrel services at the end of layers 1-3
0063   std::vector<double> pxb1CablesThickness;
0064   std::vector<double> pxb2CablesThickness;
0065   std::vector<double> pxb3CablesThickness;
0066   /// Pixel Barrel outside cables
0067   std::vector<double> pxbOutCables1Thickness;
0068   std::vector<double> pxbOutCables2Thickness;
0069   /// Pixel Disks 1-2
0070   std::vector<double> pxdThickness;
0071   /// Pixel Endcap outside cables
0072   std::vector<double> pxdOutCables1Thickness;
0073   std::vector<double> pxdOutCables2Thickness;
0074   /// Tracker Inner barrel layers 1-4
0075   std::vector<double> tibLayer1Thickness;
0076   std::vector<double> tibLayer2Thickness;
0077   std::vector<double> tibLayer3Thickness;
0078   std::vector<double> tibLayer4Thickness;
0079   /// TIB outside services (endcap)
0080   std::vector<double> tibOutCables1Thickness;
0081   std::vector<double> tibOutCables2Thickness;
0082   /// Tracker Inner disks layers 1-3
0083   std::vector<double> tidLayer1Thickness;
0084   std::vector<double> tidLayer2Thickness;
0085   std::vector<double> tidLayer3Thickness;
0086   /// TID outside wall (endcap)
0087   std::vector<double> tidOutsideThickness;
0088   /// TOB inside wall (barrel)
0089   std::vector<double> tobInsideThickness;
0090   /// Tracker Outer barrel layers 1-6
0091   std::vector<double> tobLayer1Thickness;
0092   std::vector<double> tobLayer2Thickness;
0093   std::vector<double> tobLayer3Thickness;
0094   std::vector<double> tobLayer4Thickness;
0095   std::vector<double> tobLayer5Thickness;
0096   std::vector<double> tobLayer6Thickness;
0097   // TOB services (endcap)
0098   std::vector<double> tobOutsideThickness;
0099   // Tracker EndCap disks layers 1-9
0100   std::vector<double> tecLayerThickness;
0101   // TOB outside wall (barrel)
0102   std::vector<double> barrelCablesThickness;
0103   // TEC outside wall (endcap)
0104   std::vector<double> endcapCables1Thickness;
0105   std::vector<double> endcapCables2Thickness;
0106 
0107   /// Position of dead material layers (cables, services, etc.)
0108   /// Beam pipe
0109   std::vector<double> beamPipeRadius;
0110   std::vector<double> beamPipeLength;
0111   /// Cables and Services at the end of PIXB1,2,3 ("disk")
0112   std::vector<double> pxb1CablesInnerRadius;
0113   std::vector<double> pxb2CablesInnerRadius;
0114   std::vector<double> pxb3CablesInnerRadius;
0115   /// Pixel Barrel Outside walls and cables
0116   std::vector<double> pxbOutCables1InnerRadius;
0117   std::vector<double> pxbOutCables1OuterRadius;
0118   std::vector<double> pxbOutCables1ZPosition;
0119   std::vector<double> pxbOutCables2InnerRadius;
0120   std::vector<double> pxbOutCables2OuterRadius;
0121   std::vector<double> pxbOutCables2ZPosition;
0122   /// Pixel Outside walls and cables (barrel and endcaps)
0123   std::vector<double> pixelOutCablesRadius;
0124   std::vector<double> pixelOutCablesLength;
0125   std::vector<double> pixelOutCablesInnerRadius;
0126   std::vector<double> pixelOutCablesOuterRadius;
0127   std::vector<double> pixelOutCablesZPosition;
0128   /// Tracker Inner Barrel Outside Cables and walls (endcap)
0129   std::vector<double> tibOutCables1InnerRadius;
0130   std::vector<double> tibOutCables1OuterRadius;
0131   std::vector<double> tibOutCables1ZPosition;
0132   std::vector<double> tibOutCables2InnerRadius;
0133   std::vector<double> tibOutCables2OuterRadius;
0134   std::vector<double> tibOutCables2ZPosition;
0135   /// Tracker outer barrel Inside wall (barrel)
0136   std::vector<double> tobInCablesRadius;
0137   std::vector<double> tobInCablesLength;
0138   /// Tracker Inner Disks Outside Cables and walls
0139   std::vector<double> tidOutCablesInnerRadius;
0140   std::vector<double> tidOutCablesZPosition;
0141   /// Tracker Outer Barrel Outside Cables and walls (barrel and endcaps)
0142   std::vector<double> tobOutCablesInnerRadius;
0143   std::vector<double> tobOutCablesOuterRadius;
0144   std::vector<double> tobOutCablesZPosition;
0145   std::vector<double> tobOutCablesRadius;
0146   std::vector<double> tobOutCablesLength;
0147   /// Tracker Endcaps Outside Cables and walls
0148   std::vector<double> tecOutCables1InnerRadius;
0149   std::vector<double> tecOutCables1OuterRadius;
0150   std::vector<double> tecOutCables1ZPosition;
0151   std::vector<double> tecOutCables2InnerRadius;
0152   std::vector<double> tecOutCables2OuterRadius;
0153   std::vector<double> tecOutCables2ZPosition;
0154 
0155   // Fudge factors for layer inhomogeneities
0156   std::vector<unsigned int> fudgeLayer;
0157   std::vector<double> fudgeMin;
0158   std::vector<double> fudgeMax;
0159   std::vector<double> fudgeFactor;
0160   /// The following list gives the thicknesses of the various layers.
0161   /// The beam pipe
0162   MediumProperties *_theMPBeamPipe;
0163   /// The barrel pixel layers
0164   MediumProperties *_theMPPixelBarrel;
0165   /// The endcap pixel layers
0166   MediumProperties *_theMPPixelEndcap;
0167   /// A series of cables/walls to reproduce the full sim
0168   MediumProperties *_theMPPixelOutside1;
0169   MediumProperties *_theMPPixelOutside2;
0170   MediumProperties *_theMPPixelOutside3;
0171   MediumProperties *_theMPPixelOutside4;
0172   MediumProperties *_theMPPixelOutside;
0173   MediumProperties *_theMPPixelOutside5;
0174   MediumProperties *_theMPPixelOutside6;
0175   /// The tracker inner barrel layer 1
0176   MediumProperties *_theMPTIB1;
0177   /// The tracker inner barrel layer 2
0178   MediumProperties *_theMPTIB2;
0179   /// The tracker inner barrel layer 3
0180   MediumProperties *_theMPTIB3;
0181   /// The tracker inner barrel layer 4
0182   MediumProperties *_theMPTIB4;
0183   /// The tracker outer barrel layer 1
0184   MediumProperties *_theMPTOB1;
0185   /// The tracker outer barrel layer 2
0186   MediumProperties *_theMPTOB2;
0187   /// The tracker outer barrel layer 3
0188   MediumProperties *_theMPTOB3;
0189   /// The tracker outer barrel layer 4
0190   MediumProperties *_theMPTOB4;
0191   /// The tracker outer barrel layer 5
0192   MediumProperties *_theMPTOB5;
0193   /// The tracker outer barrel layer 6
0194   MediumProperties *_theMPTOB6;
0195   /// The Tracker EndCap layers
0196   MediumProperties *_theMPEndcap;
0197   /// The tracker inner disks
0198   MediumProperties *_theMPInner1;
0199   MediumProperties *_theMPInner2;
0200   MediumProperties *_theMPInner3;
0201   /// Some material in front of the tracker outer barrel (cylinder)
0202   MediumProperties *_theMPTOBBInside;
0203   /// Some material around the tracker inner barrel (disk)
0204   MediumProperties *_theMPTIBEOutside1;
0205   MediumProperties *_theMPTIBEOutside2;
0206   /// Some material around the tracker outer barrel (disk)
0207   MediumProperties *_theMPTOBEOutside;
0208   /// Some material around the tracker inner disks (disk)
0209   MediumProperties *_theMPTIDEOutside;
0210   /// Cables around the tracker (one barrel, two disks)
0211   MediumProperties *_theMPBarrelOutside;
0212   MediumProperties *_theMPEndcapOutside;
0213   MediumProperties *_theMPEndcapOutside2;
0214 
0215   std::vector<MediumProperties *> _mediumProperties;
0216 
0217   //use hardcoded pre-Phase I upgrade tracker geometry or use flexible geometry
0218   bool use_hardcoded;
0219 };
0220 #endif