00001
00002 #include "FWCore/Utilities/interface/Exception.h"
00003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00004
00005
00006 #include "DataFormats/GeometrySurface/interface/Surface.h"
00007 #include "DataFormats/GeometrySurface/interface/BoundCylinder.h"
00008 #include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h"
00009 #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
00010 #include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h"
00011
00012
00013 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
00014 #include "TrackingTools/DetLayers/interface/BarrelDetLayer.h"
00015 #include "TrackingTools/DetLayers/interface/ForwardDetLayer.h"
00016
00017
00018 #include "FastSimulation/TrackerSetup/interface/TrackerInteractionGeometry.h"
00019
00020 #include<iostream>
00021
00022 TrackerInteractionGeometry::TrackerInteractionGeometry(const edm::ParameterSet& trackerMaterial,
00023 const GeometricSearchTracker* theGeomSearchTracker)
00024 {
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 version = trackerMaterial.getParameter<unsigned int>("TrackerMaterialVersion");
00036
00037 beamPipeThickness = trackerMaterial.getParameter<std::vector<double> >("BeamPipeThickness");
00038
00039 pxbThickness = trackerMaterial.getParameter<std::vector<double> >("PXBThickness");
00040
00041 pxb1CablesThickness = trackerMaterial.getParameter<std::vector<double> >("PXB1CablesThickness");
00042 pxb2CablesThickness = trackerMaterial.getParameter<std::vector<double> >("PXB2CablesThickness");
00043 pxb3CablesThickness = trackerMaterial.getParameter<std::vector<double> >("PXB3CablesThickness");
00044
00045 pxbOutCables1Thickness = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables1Thickness");
00046 pxbOutCables2Thickness = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables2Thickness");
00047
00048 pxdThickness = trackerMaterial.getParameter<std::vector<double> >("PXDThickness");
00049
00050 pxdOutCables1Thickness = trackerMaterial.getParameter<std::vector<double> >("PXDOutCables1Thickness");
00051 pxdOutCables2Thickness = trackerMaterial.getParameter<std::vector<double> >("PXDOutCables2Thickness");
00052
00053 tibLayer1Thickness = trackerMaterial.getParameter<std::vector<double> >("TIBLayer1Thickness");
00054 tibLayer2Thickness = trackerMaterial.getParameter<std::vector<double> >("TIBLayer2Thickness");
00055 tibLayer3Thickness = trackerMaterial.getParameter<std::vector<double> >("TIBLayer3Thickness");
00056 tibLayer4Thickness = trackerMaterial.getParameter<std::vector<double> >("TIBLayer4Thickness");
00057
00058 tibOutCables1Thickness = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables1Thickness");
00059 tibOutCables2Thickness = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables2Thickness");
00060
00061 tidLayer1Thickness = trackerMaterial.getParameter<std::vector<double> >("TIDLayer1Thickness");
00062 tidLayer2Thickness = trackerMaterial.getParameter<std::vector<double> >("TIDLayer2Thickness");
00063 tidLayer3Thickness = trackerMaterial.getParameter<std::vector<double> >("TIDLayer3Thickness");
00064
00065 tidOutsideThickness = trackerMaterial.getParameter<std::vector<double> >("TIDOutsideThickness");
00066
00067 tobInsideThickness = trackerMaterial.getParameter<std::vector<double> >("TOBInsideThickness");
00068
00069 tobLayer1Thickness = trackerMaterial.getParameter<std::vector<double> >("TOBLayer1Thickness");
00070 tobLayer2Thickness = trackerMaterial.getParameter<std::vector<double> >("TOBLayer2Thickness");
00071 tobLayer3Thickness = trackerMaterial.getParameter<std::vector<double> >("TOBLayer3Thickness");
00072 tobLayer4Thickness = trackerMaterial.getParameter<std::vector<double> >("TOBLayer4Thickness");
00073 tobLayer5Thickness = trackerMaterial.getParameter<std::vector<double> >("TOBLayer5Thickness");
00074 tobLayer6Thickness = trackerMaterial.getParameter<std::vector<double> >("TOBLayer6Thickness");
00075
00076 tobOutsideThickness = trackerMaterial.getParameter<std::vector<double> >("TOBOutsideThickness");
00077
00078 tecLayerThickness = trackerMaterial.getParameter<std::vector<double> >("TECLayerThickness");
00079
00080 barrelCablesThickness = trackerMaterial.getParameter<std::vector<double> >("BarrelCablesThickness");
00081
00082 endcapCables1Thickness = trackerMaterial.getParameter<std::vector<double> >("EndcapCables1Thickness");
00083 endcapCables2Thickness = trackerMaterial.getParameter<std::vector<double> >("EndcapCables2Thickness");
00084
00085
00086
00087 beamPipeRadius = trackerMaterial.getParameter<std::vector<double> >("BeamPipeRadius");
00088 beamPipeLength = trackerMaterial.getParameter<std::vector<double> >("BeamPipeLength");
00089
00090 pxb1CablesInnerRadius = trackerMaterial.getParameter<std::vector<double> >("PXB1CablesInnerRadius");
00091 pxb2CablesInnerRadius = trackerMaterial.getParameter<std::vector<double> >("PXB2CablesInnerRadius");
00092 pxb3CablesInnerRadius = trackerMaterial.getParameter<std::vector<double> >("PXB3CablesInnerRadius");
00093
00094 pxbOutCables1InnerRadius = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables1InnerRadius");
00095 pxbOutCables1OuterRadius = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables1OuterRadius");
00096 pxbOutCables1ZPosition = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables1ZPosition");
00097 pxbOutCables2InnerRadius = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables2InnerRadius");
00098 pxbOutCables2OuterRadius = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables2OuterRadius");
00099 pxbOutCables2ZPosition = trackerMaterial.getParameter<std::vector<double> >("PXBOutCables2ZPosition");
00100
00101 pixelOutCablesRadius = trackerMaterial.getParameter<std::vector<double> >("PixelOutCablesRadius");
00102 pixelOutCablesLength = trackerMaterial.getParameter<std::vector<double> >("PixelOutCablesLength");
00103 pixelOutCablesInnerRadius = trackerMaterial.getParameter<std::vector<double> >("PixelOutCablesInnerRadius");
00104 pixelOutCablesOuterRadius = trackerMaterial.getParameter<std::vector<double> >("PixelOutCablesOuterRadius");
00105 pixelOutCablesZPosition = trackerMaterial.getParameter<std::vector<double> >("PixelOutCablesZPosition");
00106
00107 tibOutCables1InnerRadius = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables1InnerRadius");
00108 tibOutCables1OuterRadius = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables1OuterRadius");
00109 tibOutCables1ZPosition = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables1ZPosition");
00110 tibOutCables2InnerRadius = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables2InnerRadius");
00111 tibOutCables2OuterRadius = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables2OuterRadius");
00112 tibOutCables2ZPosition = trackerMaterial.getParameter<std::vector<double> >("TIBOutCables2ZPosition");
00113
00114 tobInCablesRadius = trackerMaterial.getParameter<std::vector<double> >("TOBInCablesRadius");
00115 tobInCablesLength = trackerMaterial.getParameter<std::vector<double> >("TOBInCablesLength");
00116
00117 tidOutCablesInnerRadius = trackerMaterial.getParameter<std::vector<double> >("TIDOutCablesInnerRadius");
00118 tidOutCablesZPosition = trackerMaterial.getParameter<std::vector<double> >("TIDOutCablesZPosition");
00119
00120 tobOutCablesInnerRadius = trackerMaterial.getParameter<std::vector<double> >("TOBOutCablesInnerRadius");
00121 tobOutCablesOuterRadius = trackerMaterial.getParameter<std::vector<double> >("TOBOutCablesOuterRadius");
00122 tobOutCablesZPosition = trackerMaterial.getParameter<std::vector<double> >("TOBOutCablesZPosition");
00123 tobOutCablesRadius = trackerMaterial.getParameter<std::vector<double> >("TOBOutCablesRadius");
00124 tobOutCablesLength = trackerMaterial.getParameter<std::vector<double> >("TOBOutCablesLength");
00125
00126 tecOutCables1InnerRadius = trackerMaterial.getParameter<std::vector<double> >("TECOutCables1InnerRadius");
00127 tecOutCables1OuterRadius = trackerMaterial.getParameter<std::vector<double> >("TECOutCables1OuterRadius");
00128 tecOutCables1ZPosition = trackerMaterial.getParameter<std::vector<double> >("TECOutCables1ZPosition");
00129 tecOutCables2InnerRadius = trackerMaterial.getParameter<std::vector<double> >("TECOutCables2InnerRadius");
00130 tecOutCables2OuterRadius = trackerMaterial.getParameter<std::vector<double> >("TECOutCables2OuterRadius");
00131 tecOutCables2ZPosition = trackerMaterial.getParameter<std::vector<double> >("TECOutCables2ZPosition");
00132
00133
00134 fudgeLayer = trackerMaterial.getParameter<std::vector<unsigned int> >("FudgeLayer");
00135 fudgeMin = trackerMaterial.getParameter<std::vector<double> >("FudgeMin");
00136 fudgeMax = trackerMaterial.getParameter<std::vector<double> >("FudgeMax");
00137 fudgeFactor = trackerMaterial.getParameter<std::vector<double> >("FudgeFactor");
00138
00139
00140 if ( fudgeLayer.size() != fudgeMin.size() ||
00141 fudgeLayer.size() != fudgeMax.size() ||
00142 fudgeLayer.size() != fudgeFactor.size() ) {
00143 throw cms::Exception("FastSimulation/TrackerInteractionGeometry ")
00144 << " WARNING with fudge factors ! You have " << fudgeLayer.size()
00145 << " layers, but "
00146 << fudgeMin.size() << " min values, "
00147 << fudgeMax.size() << " max values and "
00148 << fudgeFactor.size() << " fudge factor values!"
00149 << std::endl
00150 << "Please make enter the same number of inputs "
00151 << "in FastSimulation/TrackerInteractionGeometry/data/TrackerMaterial.cfi"
00152 << std::endl;
00153 }
00154
00155
00156 _theMPBeamPipe = new MediumProperties(beamPipeThickness[version],0.0001);
00157
00158 _theMPPixelBarrel = new MediumProperties(pxbThickness[version],0.0001);
00159
00160 _theMPPixelOutside1 = new MediumProperties(pxb1CablesThickness[version],0.0001);
00161 _theMPPixelOutside2 = new MediumProperties(pxb2CablesThickness[version],0.0001);
00162 _theMPPixelOutside3 = new MediumProperties(pxb3CablesThickness[version],0.0001);
00163
00164 _theMPPixelOutside4 = new MediumProperties(pxbOutCables1Thickness[version],0.0001);
00165 _theMPPixelOutside = new MediumProperties(pxbOutCables2Thickness[version],0.0001);
00166
00167 _theMPPixelEndcap = new MediumProperties(pxdThickness[version],0.0001);
00168
00169 _theMPPixelOutside5 = new MediumProperties(pxdOutCables1Thickness[version],0.0001);
00170 _theMPPixelOutside6 = new MediumProperties(pxdOutCables2Thickness[version],0.0001);
00171
00172 _theMPTIB1 = new MediumProperties(tibLayer1Thickness[version],0.0001);
00173 _theMPTIB2 = new MediumProperties(tibLayer2Thickness[version],0.0001);
00174 _theMPTIB3 = new MediumProperties(tibLayer3Thickness[version],0.0001);
00175 _theMPTIB4 = new MediumProperties(tibLayer4Thickness[version],0.0001);
00176
00177 _theMPTIBEOutside1 = new MediumProperties(tibOutCables1Thickness[version],0.0001);
00178 _theMPTIBEOutside2 = new MediumProperties(tibOutCables2Thickness[version],0.0001);
00179
00180 _theMPInner1 = new MediumProperties(tidLayer1Thickness[version],0.0001);
00181 _theMPInner2 = new MediumProperties(tidLayer2Thickness[version],0.0001);
00182 _theMPInner3 = new MediumProperties(tidLayer3Thickness[version],0.0001);
00183
00184 _theMPTIDEOutside = new MediumProperties(tidOutsideThickness[version],0.0001);
00185
00186 _theMPTOBBInside = new MediumProperties(tobInsideThickness[version],0.0001);
00187
00188 _theMPTOB1 = new MediumProperties(tobLayer1Thickness[version],0.0001);
00189 _theMPTOB2 = new MediumProperties(tobLayer2Thickness[version],0.0001);
00190 _theMPTOB3 = new MediumProperties(tobLayer3Thickness[version],0.0001);
00191 _theMPTOB4 = new MediumProperties(tobLayer4Thickness[version],0.0001);
00192 _theMPTOB5 = new MediumProperties(tobLayer5Thickness[version],0.0001);
00193 _theMPTOB6 = new MediumProperties(tobLayer6Thickness[version],0.0001);
00194
00195 _theMPTOBEOutside = new MediumProperties(tobOutsideThickness[version],0.0001);
00196
00197 _theMPEndcap = new MediumProperties(tecLayerThickness[version],0.0001);
00198
00199 _theMPBarrelOutside = new MediumProperties(barrelCablesThickness[version],0.0001);
00200
00201 _theMPEndcapOutside = new MediumProperties(endcapCables1Thickness[version],0.0001);
00202 _theMPEndcapOutside2 = new MediumProperties(endcapCables2Thickness[version],0.0001);
00203
00204
00205 if ( !theGeomSearchTracker )
00206 throw cms::Exception("FastSimulation/TrackerInteractionGeometry")
00207 << "The pointer to the GeometricSearchTracker was not set";
00208
00209
00210 std::vector< BarrelDetLayer*> barrelLayers =
00211 theGeomSearchTracker->barrelLayers();
00212
00213
00214 std::vector< ForwardDetLayer*> posForwardLayers =
00215 theGeomSearchTracker->posForwardLayers();
00216
00217
00218 BoundCylinder* theCylinder;
00219 BoundDisk* theDisk;
00220
00221
00222 const Surface::PositionType thePosition(0.,0.,0.);
00223 const Surface::RotationType theRotation(1.,0.,0.,0.,1.,0.,0.,0.,1.);
00224
00225
00226 const SimpleCylinderBounds PIPE( beamPipeRadius[version]-0.003, beamPipeRadius[version]+0.003,
00227 -beamPipeLength[version], beamPipeLength[version]);
00228
00229
00230
00231 std::vector< BarrelDetLayer*>::const_iterator bl = barrelLayers.begin();
00232 double maxLength = (**bl).specificSurface().bounds().length()/2.+1.7;
00233 double maxRadius = (**bl).specificSurface().radius()+0.01;
00234
00235 const SimpleCylinderBounds PIXB1( maxRadius-0.005, maxRadius+0.005, -maxLength, +maxLength);
00236
00237 const SimpleDiskBounds PIXBOut1(pxb1CablesInnerRadius[version],maxRadius+0.01,-0.5,0.5);
00238 const Surface::PositionType PPIXBOut1(0.0,0.0,maxLength);
00239
00240
00241 ++bl;
00242 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+1.7, maxLength+0.000 );
00243 maxRadius = (**bl).specificSurface().radius();
00244 const SimpleCylinderBounds PIXB2( maxRadius-0.005, maxRadius+0.005, -maxLength, +maxLength);
00245
00246
00247 const SimpleDiskBounds PIXBOut2(pxb2CablesInnerRadius[version],maxRadius+0.005,-0.5,0.5);
00248 const Surface::PositionType PPIXBOut2(0.0,0.0,maxLength);
00249
00250
00251 ++bl;
00252 maxRadius = (**bl).specificSurface().radius();
00253 const SimpleDiskBounds PIXBOut3(pxb3CablesInnerRadius[version],maxRadius,-0.5,0.5);
00254 const Surface::PositionType PPIXBOut3(0.0,0.0,maxLength);
00255
00256
00257 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+1.7, maxLength+0.000 );
00258 const SimpleCylinderBounds PIXB3( maxRadius-0.005, maxRadius+0.005, -maxLength, +maxLength);
00259
00260
00261 const SimpleDiskBounds PIXBOut4( pxbOutCables1InnerRadius[version],pxbOutCables1OuterRadius[version],-0.5,0.5);
00262 const Surface::PositionType PPIXBOut4(0.0,0.0,pxbOutCables1ZPosition[version]);
00263
00264 const SimpleDiskBounds PIXBOut(pxbOutCables2InnerRadius[version],pxbOutCables2OuterRadius[version],-0.5,0.5);
00265 const Surface::PositionType PPIXBOut(0.0,0.0,pxbOutCables2ZPosition[version]);
00266
00267 const SimpleCylinderBounds PIXBOut5( pixelOutCablesRadius[version]-0.1, pixelOutCablesRadius[version]+0.1,
00268 -pixelOutCablesLength[version], pixelOutCablesLength[version]);
00269
00270 const SimpleDiskBounds PIXBOut6(pixelOutCablesInnerRadius[version],pixelOutCablesOuterRadius[version],-0.5,0.5);
00271 const Surface::PositionType PPIXBOut6(0.0,0.0,pixelOutCablesZPosition[version]);
00272
00273
00274
00275
00276 ++bl;
00277 maxRadius = (**bl).specificSurface().radius();
00278 maxLength = (**bl).specificSurface().bounds().length()/2.;
00279 const SimpleCylinderBounds TIB1( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00280
00281 ++bl;
00282 maxRadius = (**bl).specificSurface().radius();
00283 maxLength = std::max( (**bl).specificSurface().bounds().length()/2., maxLength+0.000 );
00284 const SimpleCylinderBounds TIB2( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00285
00286 ++bl;
00287 maxRadius = (**bl).specificSurface().radius();
00288 maxLength = std::max( (**bl).specificSurface().bounds().length()/2., maxLength+0.000 );
00289 const SimpleCylinderBounds TIB3( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00290
00291 ++bl;
00292 maxRadius = (**bl).specificSurface().radius();
00293 maxLength = std::max( (**bl).specificSurface().bounds().length()/2., maxLength+0.000 );
00294 const SimpleCylinderBounds TIB4( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00295
00296
00297 const SimpleDiskBounds TIBEOut(tibOutCables1InnerRadius[version],tibOutCables1OuterRadius[version],-0.05,0.05);
00298 const Surface::PositionType PTIBEOut(0.0,0.0,tibOutCables1ZPosition[version]);
00299
00300 const SimpleDiskBounds TIBEOut2(tibOutCables2InnerRadius[version],tibOutCables2OuterRadius[version],-0.05,0.05);
00301 const Surface::PositionType PTIBEOut2(0.0,0.0,tibOutCables2ZPosition[version]);
00302
00303
00304 const SimpleCylinderBounds TOBCIn ( tobInCablesRadius[version]-0.5, tobInCablesRadius[version]+0.5,
00305 -tobInCablesLength[version], tobInCablesLength[version]);
00306
00307
00308 ++bl;
00309 maxRadius = (**bl).specificSurface().radius();
00310 maxLength = (**bl).specificSurface().bounds().length()/2.+0.0;
00311 const SimpleCylinderBounds TOB1( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00312
00313 ++bl;
00314 maxRadius = (**bl).specificSurface().radius();
00315 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
00316 const SimpleCylinderBounds TOB2( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00317
00318 ++bl;
00319 maxRadius = (**bl).specificSurface().radius();
00320 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
00321 const SimpleCylinderBounds TOB3( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00322
00323 ++bl;
00324 maxRadius = (**bl).specificSurface().radius();
00325 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
00326 const SimpleCylinderBounds TOB4( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00327
00328 ++bl;
00329 maxRadius = (**bl).specificSurface().radius();
00330 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
00331 const SimpleCylinderBounds TOB5( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00332
00333 ++bl;
00334 maxRadius = (**bl).specificSurface().radius();
00335 maxLength = std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
00336 const SimpleCylinderBounds TOB6( maxRadius-0.0150, maxRadius+0.0150, -maxLength, +maxLength);
00337
00338 const SimpleDiskBounds TOBEOut(tobOutCablesInnerRadius[version],tobOutCablesOuterRadius[version],-0.5,0.5);
00339 const Surface::PositionType PTOBEOut(0.0,0.0,tobOutCablesZPosition[version]);
00340
00341 const Surface::RotationType theRotation2(1.,0.,0.,0.,1.,0.,0.,0.,1.);
00342
00343
00344 const SimpleCylinderBounds TBOut ( tobOutCablesRadius[version]-0.5, tobOutCablesRadius[version]+0.5,
00345 -tobOutCablesLength[version], tobOutCablesLength[version]);
00346
00347
00348 std::vector< ForwardDetLayer*>::const_iterator fl = posForwardLayers.begin();
00349
00350
00351
00352 double innerRadius = (**fl).specificSurface().innerRadius()-1.0;
00353 double outerRadius = (**fl).specificSurface().outerRadius()+2.0;
00354 const SimpleDiskBounds PIXD1(innerRadius, outerRadius,-0.0150,+0.0150);
00355 const Surface::PositionType PPIXD1(0.0,0.0,(**fl).surface().position().z());
00356
00357 ++fl;
00358 innerRadius = (**fl).specificSurface().innerRadius()-1.0;
00359 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00360 const SimpleDiskBounds PIXD2(innerRadius, outerRadius,-0.0150,+0.0150);
00361 const Surface::PositionType PPIXD2(0.0,0.0,(**fl).surface().position().z());
00362
00363
00364
00365
00366 ++fl;
00367 innerRadius = (**fl).specificSurface().innerRadius()-0.5;
00368 outerRadius = (**fl).specificSurface().outerRadius()+3.5;
00369 const SimpleDiskBounds TID1(innerRadius,outerRadius,-0.0150,+0.0150);
00370 const Surface::PositionType PTID1(0.,0.,(**fl).surface().position().z());
00371
00372 ++fl;
00373 innerRadius = (**fl).specificSurface().innerRadius()-0.5;
00374 outerRadius = std::max( (**fl).specificSurface().outerRadius()+3.5, outerRadius+0.000);
00375 const SimpleDiskBounds TID2(innerRadius,outerRadius,-0.0150,+0.0150);
00376 const Surface::PositionType PTID2(0.,0.,(**fl).surface().position().z());
00377
00378 ++fl;
00379 innerRadius = (**fl).specificSurface().innerRadius()-0.5;
00380 outerRadius = std::max( (**fl).specificSurface().outerRadius()+3.5, outerRadius+0.000);
00381 const SimpleDiskBounds TID3(innerRadius,outerRadius,-0.0150,+0.0150);
00382 const Surface::PositionType PTID3(0.,0.,(**fl).surface().position().z());
00383
00384
00385 const SimpleDiskBounds TIDEOut(tidOutCablesInnerRadius[version],outerRadius+1.0,-0.5,0.5);
00386 const Surface::PositionType PTIDEOut(0.0,0.0,tidOutCablesZPosition[version]);
00387
00388
00389
00390
00391
00392
00393 ++fl;
00394 innerRadius = (**fl).specificSurface().innerRadius()-1.5;
00395 outerRadius = (**fl).specificSurface().outerRadius()+2.0;
00396 const SimpleDiskBounds TEC1(innerRadius,outerRadius,-0.0150,+0.0150);
00397 const Surface::PositionType PTEC1(0.,0,(**fl).surface().position().z());
00398
00399 ++fl;
00400 innerRadius = (**fl).specificSurface().innerRadius()-1.5;
00401 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00402 const SimpleDiskBounds TEC2(innerRadius,outerRadius,-0.0150,+0.0150);
00403 const Surface::PositionType PTEC2(0.,0.,(**fl).surface().position().z());
00404
00405 ++fl;
00406 innerRadius = (**fl).specificSurface().innerRadius()-1.5;
00407 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00408 const SimpleDiskBounds TEC3(innerRadius,outerRadius,-0.0150,+0.0150);
00409 const Surface::PositionType PTEC3(0.,0.,(**fl).surface().position().z());
00410
00411 ++fl;
00412 innerRadius = (**fl).specificSurface().innerRadius()-2.5;
00413 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00414 const SimpleDiskBounds TEC4(innerRadius,outerRadius,-0.0150,+0.0150);
00415 const Surface::PositionType PTEC4(0.,0.,(**fl).surface().position().z());
00416
00417 ++fl;
00418 innerRadius = (**fl).specificSurface().innerRadius()-2.5;
00419 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00420 const SimpleDiskBounds TEC5(innerRadius,outerRadius,-0.0150,+0.0150);
00421 const Surface::PositionType PTEC5(0.,0.,(**fl).surface().position().z());
00422
00423 ++fl;
00424 innerRadius = (**fl).specificSurface().innerRadius()-2.5;
00425 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00426 const SimpleDiskBounds TEC6(innerRadius,outerRadius,-0.0150,+0.0150);
00427 const Surface::PositionType PTEC6(0.,0.,(**fl).surface().position().z());
00428
00429 ++fl;
00430 innerRadius = (**fl).specificSurface().innerRadius()-9.5;
00431 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00432 const SimpleDiskBounds TEC7(innerRadius,outerRadius,-0.0150,+0.0150);
00433 const Surface::PositionType PTEC7(0.,0.,(**fl).surface().position().z());
00434
00435 ++fl;
00436 innerRadius = (**fl).specificSurface().innerRadius()-9.5;
00437 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00438 const SimpleDiskBounds TEC8(innerRadius,outerRadius,-0.0150,+0.0150);
00439 const Surface::PositionType PTEC8(0.,0.,(**fl).surface().position().z());
00440
00441 ++fl;
00442 innerRadius = (**fl).specificSurface().innerRadius()-20.5;
00443 outerRadius = std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
00444 const SimpleDiskBounds TEC9(innerRadius,outerRadius,-0.0150,+0.0150);
00445 const Surface::PositionType PTEC9(0.,0.,(**fl).surface().position().z());
00446
00447
00448 const SimpleDiskBounds TEOut(tecOutCables1InnerRadius[version],tecOutCables1OuterRadius[version],-0.5,0.5);
00449 const Surface::PositionType PTEOut(0.0,0.0,tecOutCables1ZPosition[version]);
00450
00451 const SimpleDiskBounds TEOut2(tecOutCables2InnerRadius[version],tecOutCables2OuterRadius[version],-0.5,0.5);
00452 const Surface::PositionType PTEOut2(0.0,0.0,tecOutCables2ZPosition[version]);
00453
00454
00455
00456
00457
00458
00459
00460
00461 unsigned layerNr = 100;
00462 theCylinder = new BoundCylinder(thePosition,theRotation,PIPE);
00463 theCylinder->setMediumProperties(_theMPBeamPipe);
00464 if ( theCylinder->mediumProperties()->radLen() > 0. )
00465 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00466 minDim(layerNr),maxDim(layerNr),
00467 fudgeFactors(layerNr)));
00468 else
00469 delete theCylinder;
00470
00471
00472
00473 layerNr = TrackerInteractionGeometry::PXB+1;
00474 theCylinder = new BoundCylinder(thePosition,theRotation,PIXB1);
00475 theCylinder->setMediumProperties(_theMPPixelBarrel);
00476 if ( theCylinder->mediumProperties()->radLen() > 0. )
00477 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00478 minDim(layerNr),maxDim(layerNr),
00479 fudgeFactors(layerNr)));
00480 else
00481 delete theCylinder;
00482
00483 layerNr = 101;
00484 theDisk = new BoundDisk(PPIXBOut1,theRotation2,PIXBOut1);
00485 theDisk->setMediumProperties(_theMPPixelOutside1);
00486 if ( theDisk->mediumProperties()->radLen() > 0. )
00487 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00488 minDim(layerNr),maxDim(layerNr),
00489 fudgeFactors(layerNr)));
00490 else
00491 delete theDisk;
00492
00493 layerNr = TrackerInteractionGeometry::PXB+2;
00494 theCylinder = new BoundCylinder(thePosition,theRotation,PIXB2);
00495 theCylinder->setMediumProperties(_theMPPixelBarrel);
00496 if ( theCylinder->mediumProperties()->radLen() > 0. )
00497 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00498 minDim(layerNr),maxDim(layerNr),
00499 fudgeFactors(layerNr)));
00500 else
00501 delete theCylinder;
00502
00503 layerNr = 102;
00504 theDisk = new BoundDisk(PPIXBOut2,theRotation2,PIXBOut2);
00505 theDisk->setMediumProperties(_theMPPixelOutside2);
00506 if ( theDisk->mediumProperties()->radLen() > 0. )
00507 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00508 minDim(layerNr),maxDim(layerNr),
00509 fudgeFactors(layerNr)));
00510 else
00511 delete theDisk;
00512
00513 layerNr = 103;
00514 theDisk = new BoundDisk(PPIXBOut3,theRotation2,PIXBOut3);
00515 theDisk->setMediumProperties(_theMPPixelOutside3);
00516 if ( theDisk->mediumProperties()->radLen() > 0. )
00517 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00518 minDim(layerNr),maxDim(layerNr),
00519 fudgeFactors(layerNr)));
00520 else
00521 delete theDisk;
00522
00523 layerNr = TrackerInteractionGeometry::PXB+3;
00524 theCylinder = new BoundCylinder(thePosition,theRotation,PIXB3);
00525 theCylinder->setMediumProperties(_theMPPixelBarrel);
00526 if ( theCylinder->mediumProperties()->radLen() > 0. )
00527 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00528 minDim(layerNr),maxDim(layerNr),
00529 fudgeFactors(layerNr)));
00530 else
00531 delete theCylinder;
00532
00533 layerNr = 104;
00534 theDisk = new BoundDisk(PPIXBOut4,theRotation2,PIXBOut4);
00535 theDisk->setMediumProperties(_theMPPixelOutside4);
00536 if ( theDisk->mediumProperties()->radLen() > 0. )
00537 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00538 minDim(layerNr),maxDim(layerNr),
00539 fudgeFactors(layerNr)));
00540 else
00541 delete theDisk;
00542
00543 layerNr = 105;
00544 theDisk = new BoundDisk(PPIXBOut,theRotation2,PIXBOut);
00545 theDisk->setMediumProperties(_theMPPixelOutside);
00546 if ( theDisk->mediumProperties()->radLen() > 0. )
00547 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00548 minDim(layerNr),maxDim(layerNr),
00549 fudgeFactors(layerNr)));
00550 else
00551 delete theDisk;
00552
00553 layerNr = TrackerInteractionGeometry::PXD+1;
00554 theDisk = new BoundDisk(PPIXD1,theRotation2,PIXD1);
00555 theDisk->setMediumProperties(_theMPPixelEndcap);
00556 if ( theDisk->mediumProperties()->radLen() > 0. )
00557 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00558 minDim(layerNr),maxDim(layerNr),
00559 fudgeFactors(layerNr)));
00560 else
00561 delete theDisk;
00562
00563 layerNr = TrackerInteractionGeometry::PXD+2;
00564 theDisk = new BoundDisk(PPIXD2,theRotation2,PIXD2);
00565 theDisk->setMediumProperties(_theMPPixelEndcap);
00566 if ( theDisk->mediumProperties()->radLen() > 0. )
00567 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00568 minDim(layerNr),maxDim(layerNr),
00569 fudgeFactors(layerNr)));
00570 else
00571 delete theDisk;
00572
00573 layerNr = 106;
00574 theCylinder = new BoundCylinder(thePosition,theRotation,PIXBOut5);
00575 theCylinder->setMediumProperties(_theMPPixelOutside5);
00576 if ( theCylinder->mediumProperties()->radLen() > 0. )
00577 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00578 minDim(layerNr),maxDim(layerNr),
00579 fudgeFactors(layerNr)));
00580 else
00581 delete theCylinder;
00582
00583 layerNr = 107;
00584 theDisk = new BoundDisk(PPIXBOut6,theRotation2,PIXBOut6);
00585 theDisk->setMediumProperties(_theMPPixelOutside6);
00586 if ( theDisk->mediumProperties()->radLen() > 0. )
00587 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00588 minDim(layerNr),maxDim(layerNr),
00589 fudgeFactors(layerNr)));
00590 else
00591 delete theDisk;
00592
00593
00594
00595 layerNr = TrackerInteractionGeometry::TIB+1;
00596 theCylinder = new BoundCylinder(thePosition,theRotation,TIB1);
00597 theCylinder->setMediumProperties(_theMPTIB1);
00598 if ( theCylinder->mediumProperties()->radLen() > 0. )
00599 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00600 minDim(layerNr),maxDim(layerNr),
00601 fudgeFactors(layerNr)));
00602 else
00603 delete theCylinder;
00604
00605 layerNr = TrackerInteractionGeometry::TIB+2;
00606 theCylinder = new BoundCylinder(thePosition,theRotation,TIB2);
00607 theCylinder->setMediumProperties(_theMPTIB2);
00608 if ( theCylinder->mediumProperties()->radLen() > 0. )
00609 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00610 minDim(layerNr),maxDim(layerNr),
00611 fudgeFactors(layerNr)));
00612 else
00613 delete theCylinder;
00614
00615 layerNr = TrackerInteractionGeometry::TIB+3;
00616 theCylinder = new BoundCylinder(thePosition,theRotation,TIB3);
00617 theCylinder->setMediumProperties(_theMPTIB3);
00618 if ( theCylinder->mediumProperties()->radLen() > 0. )
00619 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00620 minDim(layerNr),maxDim(layerNr),
00621 fudgeFactors(layerNr)));
00622 else
00623 delete theCylinder;
00624
00625 layerNr = TrackerInteractionGeometry::TIB+4;
00626 theCylinder = new BoundCylinder(thePosition,theRotation,TIB4);
00627 theCylinder->setMediumProperties(_theMPTIB4);
00628 if ( theCylinder->mediumProperties()->radLen() > 0. )
00629 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00630 minDim(layerNr),maxDim(layerNr),
00631 fudgeFactors(layerNr)));
00632 else
00633 delete theCylinder;
00634
00635 layerNr = 108;
00636 theDisk = new BoundDisk(PTIBEOut,theRotation2,TIBEOut);
00637 theDisk->setMediumProperties(_theMPTIBEOutside1);
00638 if ( theDisk->mediumProperties()->radLen() > 0. )
00639 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00640 minDim(layerNr),maxDim(layerNr),
00641 fudgeFactors(layerNr)));
00642 else
00643 delete theDisk;
00644
00645 layerNr = 109;
00646 theDisk = new BoundDisk(PTIBEOut2,theRotation2,TIBEOut2);
00647 theDisk->setMediumProperties(_theMPTIBEOutside2);
00648 if ( theDisk->mediumProperties()->radLen() > 0. )
00649 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00650 minDim(layerNr),maxDim(layerNr),
00651 fudgeFactors(layerNr)));
00652 else
00653 delete theDisk;
00654
00655
00656
00657 layerNr = TrackerInteractionGeometry::TID+1;
00658 theDisk = new BoundDisk(PTID1,theRotation2,TID1);
00659 theDisk->setMediumProperties(_theMPInner1);
00660 if ( theDisk->mediumProperties()->radLen() > 0. )
00661 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00662 minDim(layerNr),maxDim(layerNr),
00663 fudgeFactors(layerNr)));
00664 else
00665 delete theDisk;
00666
00667 layerNr = TrackerInteractionGeometry::TID+2;
00668 theDisk = new BoundDisk(PTID2,theRotation2,TID2);
00669 theDisk->setMediumProperties(_theMPInner2);
00670 if ( theDisk->mediumProperties()->radLen() > 0. )
00671 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00672 minDim(layerNr),maxDim(layerNr),
00673 fudgeFactors(layerNr)));
00674
00675 else
00676 delete theDisk;
00677
00678 layerNr = TrackerInteractionGeometry::TID+3;
00679 theDisk = new BoundDisk(PTID3,theRotation2,TID3);
00680 theDisk->setMediumProperties(_theMPInner3);
00681 if ( theDisk->mediumProperties()->radLen() > 0. )
00682 _theCylinders.push_back(TrackerLayer(theDisk,12,layerNr,
00683 minDim(layerNr),maxDim(layerNr),
00684 fudgeFactors(layerNr)));
00685 else
00686 delete theDisk;
00687
00688 layerNr = 110;
00689 theDisk = new BoundDisk(PTIDEOut,theRotation2,TIDEOut);
00690 theDisk->setMediumProperties(_theMPTIDEOutside);
00691 if ( theDisk->mediumProperties()->radLen() > 0. )
00692 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00693 minDim(layerNr),maxDim(layerNr),
00694 fudgeFactors(layerNr)));
00695 else
00696 delete theDisk;
00697
00698
00699
00700
00701 layerNr = 111;
00702 theCylinder = new BoundCylinder(thePosition,theRotation,TOBCIn);
00703 theCylinder->setMediumProperties(_theMPTOBBInside);
00704 if ( theCylinder->mediumProperties()->radLen() > 0. )
00705 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00706 minDim(layerNr),maxDim(layerNr),
00707 fudgeFactors(layerNr)));
00708 else
00709 delete theCylinder;
00710
00711 layerNr = TrackerInteractionGeometry::TOB+1;
00712 theCylinder = new BoundCylinder(thePosition,theRotation,TOB1);
00713 theCylinder->setMediumProperties(_theMPTOB1);
00714 if ( theCylinder->mediumProperties()->radLen() > 0. )
00715 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00716 minDim(layerNr),maxDim(layerNr),
00717 fudgeFactors(layerNr)));
00718 else
00719 delete theCylinder;
00720
00721 layerNr = TrackerInteractionGeometry::TOB+2;
00722 theCylinder = new BoundCylinder(thePosition,theRotation,TOB2);
00723 theCylinder->setMediumProperties(_theMPTOB2);
00724 if ( theCylinder->mediumProperties()->radLen() > 0. )
00725 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00726 minDim(layerNr),maxDim(layerNr),
00727 fudgeFactors(layerNr)));
00728 else
00729 delete theCylinder;
00730
00731 layerNr = TrackerInteractionGeometry::TOB+3;
00732 theCylinder = new BoundCylinder(thePosition,theRotation,TOB3);
00733 theCylinder->setMediumProperties(_theMPTOB3);
00734 if ( theCylinder->mediumProperties()->radLen() > 0. )
00735 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00736 minDim(layerNr),maxDim(layerNr),
00737 fudgeFactors(layerNr)));
00738 else
00739 delete theCylinder;
00740
00741 layerNr = TrackerInteractionGeometry::TOB+4;
00742 theCylinder = new BoundCylinder(thePosition,theRotation,TOB4);
00743 theCylinder->setMediumProperties(_theMPTOB4);
00744 if ( theCylinder->mediumProperties()->radLen() > 0. )
00745 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00746 minDim(layerNr),maxDim(layerNr),
00747 fudgeFactors(layerNr)));
00748 else
00749 delete theCylinder;
00750
00751 layerNr = TrackerInteractionGeometry::TOB+5;
00752 theCylinder = new BoundCylinder(thePosition,theRotation,TOB5);
00753 theCylinder->setMediumProperties(_theMPTOB5);
00754 if ( theCylinder->mediumProperties()->radLen() > 0. )
00755 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00756 minDim(layerNr),maxDim(layerNr),
00757 fudgeFactors(layerNr)));
00758 else
00759 delete theCylinder;
00760
00761 layerNr = TrackerInteractionGeometry::TOB+6;
00762 theCylinder = new BoundCylinder(thePosition,theRotation,TOB6);
00763 theCylinder->setMediumProperties(_theMPTOB6);
00764 if ( theCylinder->mediumProperties()->radLen() > 0. )
00765 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00766 minDim(layerNr),maxDim(layerNr),
00767 fudgeFactors(layerNr)));
00768 else
00769 delete theCylinder;
00770
00771 layerNr = 112;
00772 theDisk = new BoundDisk(PTOBEOut,theRotation2,TOBEOut);
00773 theDisk->setMediumProperties(_theMPTOBEOutside);
00774 if ( theDisk->mediumProperties()->radLen() > 0. )
00775 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00776 minDim(layerNr),maxDim(layerNr),
00777 fudgeFactors(layerNr)));
00778 else
00779 delete theDisk;
00780
00781
00782
00783 layerNr = TrackerInteractionGeometry::TEC+1;
00784 theDisk = new BoundDisk(PTEC1,theRotation2,TEC1);
00785 theDisk->setMediumProperties(_theMPEndcap);
00786 if ( theDisk->mediumProperties()->radLen() > 0. )
00787 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00788 minDim(layerNr),maxDim(layerNr),
00789 fudgeFactors(layerNr)));
00790 else
00791 delete theDisk;
00792
00793 layerNr = TrackerInteractionGeometry::TEC+2;
00794 theDisk = new BoundDisk(PTEC2,theRotation2,TEC2);
00795 theDisk->setMediumProperties(_theMPEndcap);
00796 if ( theDisk->mediumProperties()->radLen() > 0. )
00797 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00798 minDim(layerNr),maxDim(layerNr),
00799 fudgeFactors(layerNr)));
00800 else
00801 delete theDisk;
00802
00803 layerNr = TrackerInteractionGeometry::TEC+3;
00804 theDisk = new BoundDisk(PTEC3,theRotation2,TEC3);
00805 theDisk->setMediumProperties(_theMPEndcap);
00806 if ( theDisk->mediumProperties()->radLen() > 0. )
00807 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00808 minDim(layerNr),maxDim(layerNr),
00809 fudgeFactors(layerNr)));
00810 else
00811 delete theDisk;
00812
00813 layerNr = TrackerInteractionGeometry::TEC+4;
00814 theDisk = new BoundDisk(PTEC4,theRotation2,TEC4);
00815 theDisk->setMediumProperties(_theMPEndcap);
00816 if ( theDisk->mediumProperties()->radLen() > 0. )
00817 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00818 minDim(layerNr),maxDim(layerNr),
00819 fudgeFactors(layerNr)));
00820 else
00821 delete theDisk;
00822
00823 layerNr = TrackerInteractionGeometry::TEC+5;
00824 theDisk = new BoundDisk(PTEC5,theRotation2,TEC5);
00825 theDisk->setMediumProperties(_theMPEndcap);
00826 if ( theDisk->mediumProperties()->radLen() > 0. )
00827 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00828 minDim(layerNr),maxDim(layerNr),
00829 fudgeFactors(layerNr)));
00830 else
00831 delete theDisk;
00832
00833 layerNr = TrackerInteractionGeometry::TEC+6;
00834 theDisk = new BoundDisk(PTEC6,theRotation2,TEC6);
00835 theDisk->setMediumProperties(_theMPEndcap);
00836 if ( theDisk->mediumProperties()->radLen() > 0. )
00837 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00838 minDim(layerNr),maxDim(layerNr),
00839 fudgeFactors(layerNr)));
00840 else
00841 delete theDisk;
00842
00843 layerNr = TrackerInteractionGeometry::TEC+7;
00844 theDisk = new BoundDisk(PTEC7,theRotation2,TEC7);
00845 theDisk->setMediumProperties(_theMPEndcap);
00846 if ( theDisk->mediumProperties()->radLen() > 0. )
00847 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00848 minDim(layerNr),maxDim(layerNr),
00849 fudgeFactors(layerNr)));
00850 else
00851 delete theDisk;
00852
00853 layerNr = TrackerInteractionGeometry::TEC+8;
00854 theDisk = new BoundDisk(PTEC8,theRotation2,TEC8);
00855 theDisk->setMediumProperties(_theMPEndcap);
00856 if ( theDisk->mediumProperties()->radLen() > 0. )
00857 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00858 minDim(layerNr),maxDim(layerNr),
00859 fudgeFactors(layerNr)));
00860 else
00861 delete theDisk;
00862
00863 layerNr = TrackerInteractionGeometry::TEC+9;
00864 theDisk = new BoundDisk(PTEC9,theRotation2,TEC9);
00865 theDisk->setMediumProperties(_theMPEndcap);
00866 if ( theDisk->mediumProperties()->radLen() > 0. )
00867 _theCylinders.push_back(TrackerLayer(theDisk,layerNr,
00868 minDim(layerNr),maxDim(layerNr),
00869 fudgeFactors(layerNr)));
00870 else
00871 delete theDisk;
00872
00873
00874
00875
00876 layerNr = 113;
00877 theCylinder = new BoundCylinder(thePosition,theRotation,TBOut);
00878 theCylinder->setMediumProperties(_theMPBarrelOutside);
00879 if ( theCylinder->mediumProperties()->radLen() > 0. )
00880 _theCylinders.push_back(TrackerLayer(theCylinder,false,layerNr,
00881 minDim(layerNr),maxDim(layerNr),
00882 fudgeFactors(layerNr)));
00883 else
00884 delete theCylinder;
00885
00886 layerNr = 114;
00887 theDisk = new BoundDisk(PTEOut,theRotation2,TEOut);
00888 theDisk->setMediumProperties(_theMPEndcapOutside);
00889 if ( theDisk->mediumProperties()->radLen() > 0. )
00890 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00891 minDim(layerNr),maxDim(layerNr),
00892 fudgeFactors(layerNr)));
00893 else
00894 delete theDisk;
00895
00896 layerNr = 115;
00897 theDisk = new BoundDisk(PTEOut2,theRotation2,TEOut2);
00898 theDisk->setMediumProperties(_theMPEndcapOutside2);
00899 if ( theDisk->mediumProperties()->radLen() > 0. )
00900 _theCylinders.push_back(TrackerLayer(theDisk,true,layerNr,
00901 minDim(layerNr),maxDim(layerNr),
00902 fudgeFactors(layerNr)));
00903 else
00904 delete theDisk;
00905
00906
00907
00908
00909 double zin, rin;
00910 double zout, rout;
00911 unsigned nCyl=0;
00912 std::list<TrackerLayer>::const_iterator cyliterOut=cylinderBegin();
00913
00914 if ( cyliterOut->forward() ) {
00915 zin = cyliterOut->disk()->position().z();
00916 rin = cyliterOut->disk()->outerRadius();
00917 } else {
00918 zin = cyliterOut->cylinder()->bounds().length()/2.;
00919 rin = cyliterOut->cylinder()->bounds().width()/2.;
00920 }
00921
00922 ++cyliterOut;
00923
00924 while ( cyliterOut != cylinderEnd() ) {
00925
00926 if ( cyliterOut->forward() ) {
00927 zout = cyliterOut->disk()->position().z();
00928 rout = cyliterOut->disk()->outerRadius();
00929 } else {
00930 zout = cyliterOut->cylinder()->bounds().length()/2.;
00931 rout = cyliterOut->cylinder()->bounds().width()/2.;
00932 }
00933
00934 nCyl++;
00935 if ( zout < zin || rout < rin ) {
00936 throw cms::Exception("FastSimulation/TrackerInteractionGeometry ")
00937 << " WARNING with cylinder number " << nCyl
00938 << " (Active Layer Number = " << cyliterOut->layerNumber()
00939 << " Forward ? " << cyliterOut->forward() << " ) "
00940 << " has dimensions smaller than previous cylinder : " << std::endl
00941 << " zout/zin = " << zout << " " << zin << std::endl
00942 << " rout/rin = " << rout << " " << rin << std::endl;
00943 } else {
00944
00945
00946
00947
00948
00949
00950
00951
00952 }
00953
00954 cyliterOut++;
00955
00956 zin = zout;
00957 rin = rout;
00958
00959 }
00960
00961 }
00962
00963 std::vector<double>
00964 TrackerInteractionGeometry::minDim(unsigned layerNr) {
00965 std::vector<double> min;
00966 for ( unsigned iLayer=0; iLayer<fudgeFactor.size(); ++iLayer ) {
00967 if ( layerNr != fudgeLayer[iLayer] ) continue;
00968 min.push_back(fudgeMin[iLayer]);
00969 }
00970 return min;
00971 }
00972
00973 std::vector<double>
00974 TrackerInteractionGeometry::maxDim(unsigned layerNr) {
00975 std::vector<double> max;
00976 for ( unsigned iLayer=0; iLayer<fudgeFactor.size(); ++iLayer ) {
00977 if ( layerNr != fudgeLayer[iLayer] ) continue;
00978 max.push_back(fudgeMax[iLayer]);
00979 }
00980 return max;
00981 }
00982
00983 std::vector<double>
00984 TrackerInteractionGeometry::fudgeFactors(unsigned layerNr) {
00985 std::vector<double> fudge;
00986 for ( unsigned iLayer=0; iLayer<fudgeFactor.size(); ++iLayer ) {
00987 if ( layerNr != fudgeLayer[iLayer] ) continue;
00988 fudge.push_back(fudgeFactor[iLayer]);
00989 }
00990 return fudge;
00991 }
00992
00993 TrackerInteractionGeometry::~TrackerInteractionGeometry()
00994 {
00995 _theCylinders.clear();
00996
00997
00998
00999 delete _theMPBeamPipe;
01000
01001 delete _theMPPixelBarrel;
01002
01003 delete _theMPPixelEndcap;
01004
01005 delete _theMPPixelOutside1;
01006 delete _theMPPixelOutside2;
01007 delete _theMPPixelOutside3;
01008 delete _theMPPixelOutside4;
01009 delete _theMPPixelOutside;
01010 delete _theMPPixelOutside5;
01011 delete _theMPPixelOutside6;
01012
01013 delete _theMPTIB1;
01014 delete _theMPTIB2;
01015 delete _theMPTIB3;
01016 delete _theMPTIB4;
01017
01018 delete _theMPTOB1;
01019 delete _theMPTOB2;
01020 delete _theMPTOB3;
01021 delete _theMPTOB4;
01022 delete _theMPTOB5;
01023 delete _theMPTOB6;
01024
01025 delete _theMPInner1;
01026 delete _theMPInner2;
01027 delete _theMPInner3;
01028
01029 delete _theMPEndcap;
01030
01031 delete _theMPTOBBInside;
01032 delete _theMPTIBEOutside1;
01033 delete _theMPTIBEOutside2;
01034 delete _theMPTIDEOutside;
01035 delete _theMPTOBEOutside;
01036 delete _theMPBarrelOutside;
01037 delete _theMPEndcapOutside;
01038 delete _theMPEndcapOutside2;
01039 }