CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_9_patch3/src/Geometry/TrackerGeometryBuilder/src/StripTopologyBuilder.cc

Go to the documentation of this file.
00001 #include "Geometry/TrackerGeometryBuilder/interface/StripTopologyBuilder.h"
00002 #include "Geometry/CommonTopologies/interface/RectangularStripTopology.h"
00003 #include "Geometry/CommonTopologies/interface/RadialStripTopology.h"
00004 #include "DataFormats/GeometrySurface/interface/Bounds.h"
00005 #include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
00006 
00007 StripTopologyBuilder::StripTopologyBuilder( void )
00008   : theAPVNumb( 0.0 )
00009 {}
00010 
00011 StripTopology*
00012 StripTopologyBuilder::build( const Bounds* bs, double apvnumb, std::string part )
00013 {
00014   theAPVNumb = apvnumb;
00015 
00016   StripTopology* result = 0;
00017   if( part == "barrel" )
00018   {
00019     result = constructBarrel( bs->length(), bs->width());
00020   }
00021   else
00022   {
00023     const TrapezoidalPlaneBounds* topo = dynamic_cast<const TrapezoidalPlaneBounds*>( bs );
00024     if( topo )
00025     {      
00026       int yAx = topo->yAxisOrientation();
00027       result = constructForward( bs->length(), bs->width(), bs->widthAtHalfLength(), yAx );
00028     }
00029   }
00030   return result;
00031 }
00032 
00033 StripTopology*
00034 StripTopologyBuilder::constructBarrel( float length, float width )
00035 {
00036   int nstrip = int( 128 * theAPVNumb );
00037   float pitch = width / nstrip;
00038   
00039   return new RectangularStripTopology( nstrip, pitch, length );
00040 }
00041 
00042 StripTopology*
00043 StripTopologyBuilder::constructForward( float length, float width, float widthAtHalf, int yAxOr )
00044 {
00045   int nstrip = int( 128 * theAPVNumb );
00046   float rCross = widthAtHalf * length / ( 2 * ( width - widthAtHalf ));
00047   float aw = atan2( widthAtHalf / 2., static_cast<double>( rCross )) / ( nstrip / 2 );
00048   return new RadialStripTopology( nstrip, aw, length, rCross, yAxOr );
00049 }
00050