140 if ( fudgeLayer.size() != fudgeMin.size() ||
141 fudgeLayer.size() != fudgeMax.size() ||
142 fudgeLayer.size() != fudgeFactor.size() ) {
143 throw cms::Exception(
"FastSimulation/TrackerInteractionGeometry ")
144 <<
" WARNING with fudge factors ! You have " << fudgeLayer.size()
146 << fudgeMin.size() <<
" min values, "
147 << fudgeMax.size() <<
" max values and "
148 << fudgeFactor.size() <<
" fudge factor values!"
150 <<
"Please make enter the same number of inputs "
151 <<
"in FastSimulation/TrackerInteractionGeometry/data/TrackerMaterial.cfi"
205 if ( !theGeomSearchTracker )
207 <<
"The pointer to the GeometricSearchTracker was not set";
210 std::vector< BarrelDetLayer*> barrelLayers =
214 std::vector< ForwardDetLayer*> posForwardLayers =
227 -beamPipeLength[version], beamPipeLength[version]);
231 std::vector< BarrelDetLayer*>::const_iterator bl = barrelLayers.begin();
232 double maxLength = (**bl).specificSurface().bounds().length()/2.+1.7;
233 double maxRadius = (**bl).specificSurface().radius()+0.01;
237 const SimpleDiskBounds PIXBOut1(pxb1CablesInnerRadius[version],maxRadius+0.01,-0.5,0.5);
242 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+1.7, maxLength+0.000 );
243 maxRadius = (**bl).specificSurface().radius();
247 const SimpleDiskBounds PIXBOut2(pxb2CablesInnerRadius[version],maxRadius+0.005,-0.5,0.5);
252 maxRadius = (**bl).specificSurface().radius();
253 const SimpleDiskBounds PIXBOut3(pxb3CablesInnerRadius[version],maxRadius,-0.5,0.5);
257 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+1.7, maxLength+0.000 );
261 const SimpleDiskBounds PIXBOut4( pxbOutCables1InnerRadius[version],pxbOutCables1OuterRadius[version],-0.5,0.5);
264 const SimpleDiskBounds PIXBOut(pxbOutCables2InnerRadius[version],pxbOutCables2OuterRadius[version],-0.5,0.5);
267 const SimpleCylinderBounds PIXBOut5( pixelOutCablesRadius[version]-0.1, pixelOutCablesRadius[version]+0.1,
268 -pixelOutCablesLength[version], pixelOutCablesLength[version]);
270 const SimpleDiskBounds PIXBOut6(pixelOutCablesInnerRadius[version],pixelOutCablesOuterRadius[version],-0.5,0.5);
277 maxRadius = (**bl).specificSurface().radius();
278 maxLength = (**bl).specificSurface().bounds().length()/2.;
282 maxRadius = (**bl).specificSurface().radius();
283 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2., maxLength+0.000 );
287 maxRadius = (**bl).specificSurface().radius();
288 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2., maxLength+0.000 );
292 maxRadius = (**bl).specificSurface().radius();
293 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2., maxLength+0.000 );
297 const SimpleDiskBounds TIBEOut(tibOutCables1InnerRadius[version],tibOutCables1OuterRadius[version],-0.05,0.05);
300 const SimpleDiskBounds TIBEOut2(tibOutCables2InnerRadius[version],tibOutCables2OuterRadius[version],-0.05,0.05);
304 const SimpleCylinderBounds TOBCIn ( tobInCablesRadius[version]-0.5, tobInCablesRadius[version]+0.5,
305 -tobInCablesLength[version], tobInCablesLength[version]);
309 maxRadius = (**bl).specificSurface().radius();
310 maxLength = (**bl).specificSurface().bounds().length()/2.+0.0;
314 maxRadius = (**bl).specificSurface().radius();
315 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
319 maxRadius = (**bl).specificSurface().radius();
320 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
324 maxRadius = (**bl).specificSurface().radius();
325 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
329 maxRadius = (**bl).specificSurface().radius();
330 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
334 maxRadius = (**bl).specificSurface().radius();
335 maxLength =
std::max( (**bl).specificSurface().bounds().length()/2.+0.0, maxLength+0.000 );
338 const SimpleDiskBounds TOBEOut(tobOutCablesInnerRadius[version],tobOutCablesOuterRadius[version],-0.5,0.5);
344 const SimpleCylinderBounds TBOut ( tobOutCablesRadius[version]-0.5, tobOutCablesRadius[version]+0.5,
345 -tobOutCablesLength[version], tobOutCablesLength[version]);
348 std::vector< ForwardDetLayer*>::const_iterator fl = posForwardLayers.begin();
352 double innerRadius = (**fl).specificSurface().innerRadius()-1.0;
353 double outerRadius = (**fl).specificSurface().outerRadius()+2.0;
358 innerRadius = (**fl).specificSurface().innerRadius()-1.0;
359 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
367 innerRadius = (**fl).specificSurface().innerRadius()-0.5;
368 outerRadius = (**fl).specificSurface().outerRadius()+3.5;
373 innerRadius = (**fl).specificSurface().innerRadius()-0.5;
374 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+3.5, outerRadius+0.000);
379 innerRadius = (**fl).specificSurface().innerRadius()-0.5;
380 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+3.5, outerRadius+0.000);
385 const SimpleDiskBounds TIDEOut(tidOutCablesInnerRadius[version],outerRadius+1.0,-0.5,0.5);
394 innerRadius = (**fl).specificSurface().innerRadius()-1.5;
395 outerRadius = (**fl).specificSurface().outerRadius()+2.0;
400 innerRadius = (**fl).specificSurface().innerRadius()-1.5;
401 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
406 innerRadius = (**fl).specificSurface().innerRadius()-1.5;
407 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
412 innerRadius = (**fl).specificSurface().innerRadius()-2.5;
413 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
418 innerRadius = (**fl).specificSurface().innerRadius()-2.5;
419 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
424 innerRadius = (**fl).specificSurface().innerRadius()-2.5;
425 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
430 innerRadius = (**fl).specificSurface().innerRadius()-9.5;
431 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
436 innerRadius = (**fl).specificSurface().innerRadius()-9.5;
437 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
442 innerRadius = (**fl).specificSurface().innerRadius()-20.5;
443 outerRadius =
std::max( (**fl).specificSurface().outerRadius()+2.0, outerRadius+0.000 );
448 const SimpleDiskBounds TEOut(tecOutCables1InnerRadius[version],tecOutCables1OuterRadius[version],-0.5,0.5);
451 const SimpleDiskBounds TEOut2(tecOutCables2InnerRadius[version],tecOutCables2OuterRadius[version],-0.5,0.5);
461 unsigned layerNr = 100;
462 theCylinder =
new BoundCylinder(thePosition,theRotation,PIPE);
474 theCylinder =
new BoundCylinder(thePosition,theRotation,PIXB1);
484 theDisk =
new BoundDisk(PPIXBOut1,theRotation2,PIXBOut1);
494 theCylinder =
new BoundCylinder(thePosition,theRotation,PIXB2);
504 theDisk =
new BoundDisk(PPIXBOut2,theRotation2,PIXBOut2);
514 theDisk =
new BoundDisk(PPIXBOut3,theRotation2,PIXBOut3);
524 theCylinder =
new BoundCylinder(thePosition,theRotation,PIXB3);
534 theDisk =
new BoundDisk(PPIXBOut4,theRotation2,PIXBOut4);
544 theDisk =
new BoundDisk(PPIXBOut,theRotation2,PIXBOut);
554 theDisk =
new BoundDisk(PPIXD1,theRotation2,PIXD1);
564 theDisk =
new BoundDisk(PPIXD2,theRotation2,PIXD2);
574 theCylinder =
new BoundCylinder(thePosition,theRotation,PIXBOut5);
584 theDisk =
new BoundDisk(PPIXBOut6,theRotation2,PIXBOut6);
596 theCylinder =
new BoundCylinder(thePosition,theRotation,TIB1);
606 theCylinder =
new BoundCylinder(thePosition,theRotation,TIB2);
616 theCylinder =
new BoundCylinder(thePosition,theRotation,TIB3);
626 theCylinder =
new BoundCylinder(thePosition,theRotation,TIB4);
636 theDisk =
new BoundDisk(PTIBEOut,theRotation2,TIBEOut);
646 theDisk =
new BoundDisk(PTIBEOut2,theRotation2,TIBEOut2);
658 theDisk =
new BoundDisk(PTID1,theRotation2,TID1);
668 theDisk =
new BoundDisk(PTID2,theRotation2,TID2);
679 theDisk =
new BoundDisk(PTID3,theRotation2,TID3);
689 theDisk =
new BoundDisk(PTIDEOut,theRotation2,TIDEOut);
702 theCylinder =
new BoundCylinder(thePosition,theRotation,TOBCIn);
712 theCylinder =
new BoundCylinder(thePosition,theRotation,TOB1);
722 theCylinder =
new BoundCylinder(thePosition,theRotation,TOB2);
732 theCylinder =
new BoundCylinder(thePosition,theRotation,TOB3);
742 theCylinder =
new BoundCylinder(thePosition,theRotation,TOB4);
752 theCylinder =
new BoundCylinder(thePosition,theRotation,TOB5);
762 theCylinder =
new BoundCylinder(thePosition,theRotation,TOB6);
772 theDisk =
new BoundDisk(PTOBEOut,theRotation2,TOBEOut);
784 theDisk =
new BoundDisk(PTEC1,theRotation2,TEC1);
794 theDisk =
new BoundDisk(PTEC2,theRotation2,TEC2);
804 theDisk =
new BoundDisk(PTEC3,theRotation2,TEC3);
814 theDisk =
new BoundDisk(PTEC4,theRotation2,TEC4);
824 theDisk =
new BoundDisk(PTEC5,theRotation2,TEC5);
834 theDisk =
new BoundDisk(PTEC6,theRotation2,TEC6);
844 theDisk =
new BoundDisk(PTEC7,theRotation2,TEC7);
854 theDisk =
new BoundDisk(PTEC8,theRotation2,TEC8);
864 theDisk =
new BoundDisk(PTEC9,theRotation2,TEC9);
877 theCylinder =
new BoundCylinder(thePosition,theRotation,TBOut);
887 theDisk =
new BoundDisk(PTEOut,theRotation2,TEOut);
897 theDisk =
new BoundDisk(PTEOut2,theRotation2,TEOut2);
912 std::list<TrackerLayer>::const_iterator cyliterOut=
cylinderBegin();
914 if ( cyliterOut->forward() ) {
915 zin = cyliterOut->disk()->position().z();
916 rin = cyliterOut->disk()->outerRadius();
918 zin = cyliterOut->cylinder()->bounds().length()/2.;
919 rin = cyliterOut->cylinder()->bounds().width()/2.;
926 if ( cyliterOut->forward() ) {
927 zout = cyliterOut->disk()->position().z();
928 rout = cyliterOut->disk()->outerRadius();
930 zout = cyliterOut->cylinder()->bounds().length()/2.;
931 rout = cyliterOut->cylinder()->bounds().width()/2.;
935 if ( zout < zin || rout < rin ) {
936 throw cms::Exception(
"FastSimulation/TrackerInteractionGeometry ")
937 <<
" WARNING with cylinder number " << nCyl
938 <<
" (Active Layer Number = " << cyliterOut->layerNumber()
939 <<
" Forward ? " << cyliterOut->forward() <<
" ) "
940 <<
" has dimensions smaller than previous cylinder : " << std::endl
941 <<
" zout/zin = " << zout <<
" " << zin << std::endl
942 <<
" rout/rin = " << rout <<
" " << rin << std::endl;
965 std::vector<double>
min;
966 for (
unsigned iLayer=0; iLayer<
fudgeFactor.size(); ++iLayer ) {
967 if ( layerNr !=
fudgeLayer[iLayer] )
continue;
975 std::vector<double>
max;
976 for (
unsigned iLayer=0; iLayer<
fudgeFactor.size(); ++iLayer ) {
977 if ( layerNr !=
fudgeLayer[iLayer] )
continue;
985 std::vector<double> fudge;
986 for (
unsigned iLayer=0; iLayer<
fudgeFactor.size(); ++iLayer ) {
987 if ( layerNr !=
fudgeLayer[iLayer] )
continue;
std::vector< double > pixelOutCablesLength
MediumProperties * _theMPEndcap
The Tracker EndCap layers.
std::vector< double > tibOutCables2OuterRadius
T getParameter(std::string const &) const
std::vector< double > pxbOutCables2OuterRadius
MediumProperties * _theMPTOB3
The tracker outer barrel layer 3.
std::vector< double > tobLayer5Thickness
std::vector< double > fudgeMin
std::vector< double > pxdThickness
Pixel Disks 1-2.
std::vector< double > pxbThickness
Pixel Barrel Layers 1-3.
std::vector< double > pixelOutCablesOuterRadius
std::vector< double > pxbOutCables1Thickness
Pixel Barrel outside cables.
std::vector< double > tidLayer3Thickness
std::vector< double > tibOutCables1Thickness
TIB outside services (endcap)
MediumProperties * _theMPTOB4
The tracker outer barrel layer 4.
std::vector< double > fudgeMax
std::vector< double > pxb1CablesInnerRadius
Cables and Services at the end of PIXB1,2,3 ("disk")
std::vector< double > tecOutCables2ZPosition
std::vector< double > pxbOutCables1ZPosition
std::list< TrackerLayer > _theCylinders
The list of tracker (sensistive or not) layers.
MediumProperties * _theMPTIBEOutside2
MediumProperties * _theMPPixelEndcap
The endcap pixel layers.
std::vector< double > beamPipeThickness
Beam Pipe.
std::vector< double > pxb3CablesThickness
std::vector< double > tibOutCables1OuterRadius
std::vector< double > pixelOutCablesZPosition
std::vector< double > pxbOutCables2InnerRadius
std::vector< double > beamPipeLength
MediumProperties * _theMPTIDEOutside
Some material around the tracker inner disks (disk)
MediumProperties * _theMPPixelOutside6
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
std::vector< double > pxb1CablesThickness
Pixel Barrel services at the end of layers 1-3.
std::vector< double > pxb3CablesInnerRadius
std::vector< double > pixelOutCablesRadius
Pixel Outside walls and cables (barrel and endcaps)
MediumProperties * _theMPTOB1
The tracker outer barrel layer 1.
std::vector< double > tobOutCablesRadius
MediumProperties * _theMPBarrelOutside
Cables around the tracker (one barrel, two disks)
std::vector< double > tobLayer3Thickness
std::vector< double > tobOutCablesInnerRadius
Tracker Outer Barrel Outside Cables and walls (barrel and endcaps)
std::vector< double > tecOutCables2OuterRadius
std::vector< double > tibOutCables2InnerRadius
std::vector< double > tobInsideThickness
TOB inside wall (barrel)
std::vector< double > tidOutCablesZPosition
std::vector< double > pxb2CablesInnerRadius
MediumProperties * _theMPPixelOutside
MediumProperties * _theMPTOB6
The tracker outer barrel layer 6.
std::vector< double > tobOutCablesLength
MediumProperties * _theMPTOBEOutside
Some material around the tracker outer barrel (disk)
std::vector< double > minDim(unsigned layerNr)
std::vector< double > barrelCablesThickness
const MediumProperties * mediumProperties() const
std::vector< double > pixelOutCablesInnerRadius
std::vector< double > pxdOutCables1Thickness
Pixel Endcap outside cables.
std::vector< double > tobLayer6Thickness
MediumProperties * _theMPPixelOutside2
MediumProperties * _theMPTOB2
The tracker outer barrel layer 2.
std::vector< BarrelDetLayer * > const & barrelLayers() const
std::vector< double > endcapCables2Thickness
std::vector< double > pxbOutCables1OuterRadius
void setMediumProperties(const MediumProperties &mp)
MediumProperties * _theMPTIBEOutside1
Some material around the tracker inner barrel (disk)
std::vector< double > tibLayer2Thickness
std::vector< double > fudgeFactors(unsigned layerNr)
MediumProperties * _theMPBeamPipe
MediumProperties * _theMPPixelOutside1
A series of cables/walls to reproduce the full sim.
std::vector< double > beamPipeRadius
MediumProperties * _theMPPixelBarrel
The barrel pixel layers.
const T & max(const T &a, const T &b)
MediumProperties * _theMPPixelOutside3
MediumProperties * _theMPInner3
MediumProperties * _theMPTIB2
The tracker inner barrel layer 2.
std::vector< double > tibLayer4Thickness
MediumProperties * _theMPEndcapOutside2
MediumProperties * _theMPPixelOutside4
std::vector< double > tibOutCables1ZPosition
MediumProperties * _theMPTIB1
The tracker inner barrel layer 1.
std::vector< double > tidLayer2Thickness
std::vector< double > tibLayer1Thickness
Tracker Inner barrel layers 1-4.
std::vector< double > tecOutCables1OuterRadius
std::vector< double > tobLayer1Thickness
Tracker Outer barrel layers 1-6.
std::vector< double > tidOutsideThickness
TID outside wall (endcap)
MediumProperties * _theMPEndcapOutside
MediumProperties * _theMPTOB5
The tracker outer barrel layer 5.
std::vector< double > tibLayer3Thickness
std::vector< double > tobInCablesLength
std::vector< double > pxbOutCables2Thickness
std::vector< double > tibOutCables2Thickness
MediumProperties * _theMPInner1
The tracker inner disks.
std::vector< double > tobLayer4Thickness
std::vector< double > tecOutCables1ZPosition
MediumProperties * _theMPPixelOutside5
std::vector< double > endcapCables1Thickness
MediumProperties * _theMPInner2
std::vector< double > tibOutCables1InnerRadius
Tracker Inner Barrel Outside Cables and walls (endcap)
std::vector< double > pxbOutCables1InnerRadius
Pixel Barrel Outside walls and cables.
std::vector< ForwardDetLayer * > const & posForwardLayers() const
std::vector< unsigned int > fudgeLayer
TrackerInteractionGeometry(const edm::ParameterSet &trackerMaterial, const GeometricSearchTracker *geomSearchTracker)
Constructor : get the configurable parameters.
std::vector< double > tobLayer2Thickness
std::vector< double > tobInCablesRadius
Tracker outer barrel Inside wall (barrel)
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
~TrackerInteractionGeometry()
Destructor.
std::vector< double > tobOutCablesZPosition
std::vector< double > fudgeFactor
std::vector< double > tecLayerThickness
std::vector< double > pxbOutCables2ZPosition
std::vector< double > tidOutCablesInnerRadius
Tracker Inner Disks Outside Cables and walls.
std::vector< double > maxDim(unsigned layerNr)
std::vector< double > tecOutCables1InnerRadius
Tracker Endcaps Outside Cables and walls.
std::vector< double > tibOutCables2ZPosition
std::vector< double > pxdOutCables2Thickness
MediumProperties * _theMPTOBBInside
Some material in front of the tracker outer barrel (cylinder)
std::vector< double > tobOutsideThickness
MediumProperties * _theMPTIB4
The tracker inner barrel layer 4.
std::vector< double > tidLayer1Thickness
Tracker Inner disks layers 1-3.
std::vector< double > tecOutCables2InnerRadius
std::vector< double > pxb2CablesThickness
MediumProperties * _theMPTIB3
The tracker inner barrel layer 3.
std::vector< double > tobOutCablesOuterRadius