From f53e7307d7efa201750271bb8399884a3ac7f730 Mon Sep 17 00:00:00 2001
From: Nikiforos Nikiforou <Nikiforos.Nikiforou@cern.ch>
Date: Tue, 23 Jun 2015 11:01:56 +0000
Subject: [PATCH] Modified plugin to create gear for CLIC to add FTD
 information for TrackerEndcaps

---
 DDRec/src/gear/createGearForCLIC.cpp | 87 +++++++++++++++-------------
 1 file changed, 48 insertions(+), 39 deletions(-)

diff --git a/DDRec/src/gear/createGearForCLIC.cpp b/DDRec/src/gear/createGearForCLIC.cpp
index 8b25fed75..60635e485 100644
--- a/DDRec/src/gear/createGearForCLIC.cpp
+++ b/DDRec/src/gear/createGearForCLIC.cpp
@@ -111,8 +111,10 @@ namespace DD4hep{
 	
 	//      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
 	int sitType =  gear::ZPlanarParameters::CCD ;
+  
 	gear::ZPlanarParametersImpl* gearSIT = new gear::ZPlanarParametersImpl( sitType, sit->rInnerShell/dd4hep::mm,  sit->rOuterShell/dd4hep::mm,
 										sit->zHalfShell/dd4hep::mm , sit->gapShell/dd4hep::mm , 0.  ) ;
+                    
 	std::vector<int> n_sensors_per_ladder ;
 	
 	for(unsigned i=0,n=sit->layers.size() ; i<n; ++i){
@@ -188,53 +190,60 @@ namespace DD4hep{
 
       try {
 
-	DetElement ftdDE = lcdd.detector("FTD") ;
+	DetElement iteDE = lcdd.detector("InnerTrackerEndcap") ;
 	
-	ZDiskPetalsData* ftd = ftdDE.extension<ZDiskPetalsData>() ;
+	ZDiskPetalsData* iteData = iteDE.extension<ZDiskPetalsData>() ;
 	
-	gear::FTDParametersImpl* gearFTD = new gear::FTDParametersImpl();
+  gear::GearParametersImpl* gearFTD = new gear::GearParametersImpl();
+  
+  std::vector<double> thicknesses;
+  std::vector<double> innerRadii;
+  std::vector<double> outerRadii;
+  std::vector<double> zPositions;
+  
 	
-	for(unsigned i=0,n=ftd->layers.size() ; i<n; ++i){
-	  
-	  const DDRec::ZDiskPetalsData::LayerLayout& l = ftd->layers[i] ;
-	  
-	  
-	  bool isDoubleSided  = l.typeFlags[ DDRec::ZDiskPetalsStruct::SensorType::DoubleSided ] ;
-	  
-	  // avoid 'undefined reference' at link time ( if built w/o optimization ):
-	  static const int PIXEL = gear::FTDParameters::PIXEL ;
-	  static const int STRIP = gear::FTDParameters::STRIP ;
-	  int  sensorType   = ( l.typeFlags[ DDRec::ZDiskPetalsStruct::SensorType::Pixel ] ? PIXEL : STRIP ) ;
-	  //			      gear::FTDParameters::PIXEL :  gear::FTDParameters::STRIP ) ;
-	  
-	  double zoffset = fabs( l.zOffsetSupport ) ;
-	  double signoffset =  l.zOffsetSupport > 0  ?  1. : -1 ;
-	  
-	  gearFTD->addLayer( l.petalNumber, l.sensorsPerPetal, 
-			     isDoubleSided, sensorType, 
-			     l.petalHalfAngle, l.phi0, l.alphaPetal, 
-			     l.zPosition/dd4hep::mm, zoffset/dd4hep::mm, signoffset,
-			     l.distanceSupport/dd4hep::mm, l.thicknessSupport/dd4hep::mm,
-			     l.widthInnerSupport/dd4hep::mm, l.widthOuterSupport/dd4hep::mm,
-			     l.lengthSupport/dd4hep::mm, 
-			     0.,
-			     l.distanceSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm,
-			     l.widthInnerSensitive/dd4hep::mm, l.widthOuterSensitive/dd4hep::mm,
-			     l.lengthSensitive/dd4hep::mm, 
-			     0. ) ;
-	  
-	  
-	  // FIXME set rad lengths to 0 -> need to get from DD4hep ....
+	for(unsigned i=0,n=iteData->layers.size() ; i<n; ++i){
+    
+    const DDRec::ZDiskPetalsData::LayerLayout& l = iteData->layers[i] ;
+    
+    thicknesses.push_back(l.thicknessSupport/ dd4hep::mm);
+    innerRadii.push_back( l.distanceSensitive/ dd4hep::mm);
+    outerRadii.push_back( (l.distanceSensitive + l.lengthSensitive)/ dd4hep::mm);
+    zPositions.push_back( l.zPosition/ dd4hep::mm);
+    
+
+
 	}
 	
-	gearFTD->setDoubleVal("strip_width_mm"  , ftd->widthStrip / dd4hep::mm ) ;
-	gearFTD->setDoubleVal("strip_length_mm" , ftd->lengthStrip/ dd4hep::mm ) ;
-	gearFTD->setDoubleVal("strip_pitch_mm"  , ftd->pitchStrip / dd4hep::mm ) ;
-	gearFTD->setDoubleVal("strip_angle_deg" , ftd->angleStrip / dd4hep::deg ) ;
 	
+	//Append OuterTracker
+	DetElement oteDE = lcdd.detector("OuterTrackerEndcap") ;
+  ZDiskPetalsData* oteData = oteDE.extension<ZDiskPetalsData>() ;
+   
+  
+  for(unsigned i=0,n=oteData->layers.size() ; i<n; ++i){
+    
+    const DDRec::ZDiskPetalsData::LayerLayout& l = oteData->layers[i] ;
+    
+    thicknesses.push_back(l.thicknessSupport/ dd4hep::mm);
+    innerRadii.push_back( l.distanceSensitive/ dd4hep::mm);
+    outerRadii.push_back( (l.distanceSensitive + l.lengthSensitive)/ dd4hep::mm);
+    zPositions.push_back( l.zPosition/ dd4hep::mm);
+    
+    
+    
+  }
 	
-	ftdDE.addExtension< GearHandle >( new GearHandle( gearFTD, "FTDParameters" ) ) ;
 
+	gearFTD->setDoubleVals("FTDDiskSupportThickness"  ,  thicknesses) ;
+  gearFTD->setDoubleVals("FTDInnerRadius" , innerRadii) ;
+  gearFTD->setDoubleVals("FTDOuterRadius"  , outerRadii ) ;
+  gearFTD->setDoubleVals("FTDZCoordinate" ,zPositions) ;
+  
+  //attach gear handle to inner tracker
+  iteDE.addExtension< GearHandle >( new GearHandle( gearFTD, "FTD" ) ) ;
+  
+  
       } catch( std::runtime_error& e ){  
 	std::cerr << " >>>> " << e.what() << std::endl ;
       } 
-- 
GitLab