CMS 3D CMS Logo

Public Member Functions | Private Attributes

GEMGeometryBuilderFromCondDB Class Reference

#include <GEMGeometryBuilderFromCondDB.h>

List of all members.

Public Member Functions

GEMGeometrybuild (const RecoIdealGeometry &rgeo)
 GEMGeometryBuilderFromCondDB (bool comp11)
 ~GEMGeometryBuilderFromCondDB ()

Private Attributes

bool theComp11Flag

Detailed Description

Build the GEMGeometry from the DDD description stored in Condition DB

Author:
M. Maggi - INFN Bari

Definition at line 21 of file GEMGeometryBuilderFromCondDB.h.


Constructor & Destructor Documentation

GEMGeometryBuilderFromCondDB::GEMGeometryBuilderFromCondDB ( bool  comp11)

Implementation of the GEM Geometry Builder from DDD stored in CondDB

Author:
M. Maggi - INFN Bari

Definition at line 27 of file GEMGeometryBuilderFromCondDB.cc.

                                                                      :
  theComp11Flag(comp11)
{ }
GEMGeometryBuilderFromCondDB::~GEMGeometryBuilderFromCondDB ( )

Definition at line 31 of file GEMGeometryBuilderFromCondDB.cc.

{ }

Member Function Documentation

GEMGeometry * GEMGeometryBuilderFromCondDB::build ( const RecoIdealGeometry rgeo)

Definition at line 34 of file GEMGeometryBuilderFromCondDB.cc.

References RecoIdealGeometry::detIds(), GeomDetEnumerators::GEM, geometry, mergeVDriftHistosByStation::name, pos, makeMuonMisalignmentScenario::rot, TkRotation< T >::rotateAxes(), RecoIdealGeometry::rotStart(), RecoIdealGeometry::shapeStart(), AlCaHLTBitMon_QueryRunRegistry::string, RecoIdealGeometry::strStart(), and RecoIdealGeometry::tranStart().

Referenced by GEMGeometryESModule::produce().

{
  const std::vector<DetId>& detids(rgeo.detIds());
  GEMGeometry* geometry = new GEMGeometry();
  
  std::string name;
  std::vector<double>::const_iterator tranStart;
  std::vector<double>::const_iterator shapeStart;
  std::vector<double>::const_iterator rotStart;
  std::vector<std::string>::const_iterator strStart;
  
  for (unsigned int id=0; id<detids.size(); id++){
    
    GEMDetId gemid(detids[id]);
    //    GEMDetId chid(gemid.region(),gemid.ring(),gemid.station(),
    //            gemid.sector(),gemid.layer(),gemid.subsector(),0);
    
    tranStart=rgeo.tranStart(id);
    shapeStart=rgeo.shapeStart(id);
    rotStart=rgeo.rotStart(id);
    strStart=rgeo.strStart(id);
    name=*(strStart);

    Surface::PositionType pos(*(tranStart)/cm,*(tranStart+1)/cm, *(tranStart+2)/cm);
    // CLHEP way
    Surface::RotationType rot(*(rotStart+0),*(rotStart+1),*(rotStart+2),
                              *(rotStart+3),*(rotStart+4),*(rotStart+5),
                              *(rotStart+6),*(rotStart+7),*(rotStart+8));
      
    std::vector<float> pars;
    GEMEtaPartitionSpecs* etapartitionspecs= 0;
    Bounds* bounds = 0;

    float be = *(shapeStart+0)/cm;
    float te = *(shapeStart+1)/cm;
    float ap = *(shapeStart+2)/cm;
    float ti = *(shapeStart+3)/cm;
    float nstrip = *(shapeStart+4);
    //  TrapezoidalPlaneBounds* 
    bounds = 
      new TrapezoidalPlaneBounds(be,te,ap,ti);
    pars.push_back(be); //b/2;
    pars.push_back(te); //B/2;
    pars.push_back(ap); //h/2;
    pars.push_back(nstrip); 
    
    etapartitionspecs = new GEMEtaPartitionSpecs(GeomDetEnumerators::GEM,name,pars);
      
      //Change of axes for the forward
    Basic3DVector<float> newX(1.,0.,0.);
    Basic3DVector<float> newY(0.,0.,1.);
    //      if (tran[2] > 0. )
    newY *= -1;
    Basic3DVector<float> newZ(0.,1.,0.);
    rot.rotateAxes (newX, newY,newZ);   
  
    
    BoundPlane* bp = new BoundPlane(pos,rot,bounds);
    ReferenceCountingPointer<BoundPlane> surf(bp);
    GEMEtaPartition* gep=new GEMEtaPartition(gemid,surf,etapartitionspecs);
    geometry->add(gep);
    
    
    std::list<GEMEtaPartition *> gepls;
    /*
    if (chids.find(chid)!=chids.end()){
      gepls = chids[chid];
    }
    */
    gepls.push_back(gep);
    //chids[chid]=gepls;
    
  }
  /*
  // Create the GEMChambers and store them on the Geometry 

  for( std::map<GEMDetId, std::list<GEMEtaPartition *> >::iterator ich=chids.begin();
       ich != chids.end(); ich++){
    GEMDetId chid = ich->first;
    std::list<GEMEtaPartition * > gepls = ich->second;

    // compute the overall boundplane. At the moment we use just the last
    // surface
    BoundPlane* bp=0;
    for(std::list<GEMEtaPartition *>::iterator gepl=gepls.begin();
    gepl!=gepls.end(); gepl++){
    const BoundPlane& bps = (*gepl)->surface();
      bp = const_cast<BoundPlane *>(&bps);
    }

    ReferenceCountingPointer<BoundPlane> surf(bp);
    // Create the chamber 
    GEMChamber* ch = new GEMChamber (chid, surf); 
    // Add the etaps to rhe chamber
    for(std::list<GEMEtaPartition *>::iterator gepl=gepls.begin();
    gepl!=gepls.end(); gepl++){
      ch->add(*gepl);
    }
    // Add the chamber to the geometry
    geometry->add(ch);

  }
  */
  return geometry;
}

Member Data Documentation

Definition at line 34 of file GEMGeometryBuilderFromCondDB.h.