CMS 3D CMS Logo

Public Types | Public Member Functions | Private Attributes

PixelEndcapNameUpgrade Class Reference

#include <PixelEndcapNameUpgrade.h>

Inheritance diagram for PixelEndcapNameUpgrade:
PixelModuleName

List of all members.

Public Types

enum  HalfCylinder { mO = 1, mI = 2, pO = 3, pI = 4 }

Public Member Functions

int bladeName () const
 blade id
int diskName () const
 disk id
PXFDetId getDetId ()
 return DetId
HalfCylinder halfCylinder () const
virtual PixelModuleName::ModuleType moduleType () const
 module Type
virtual std::string name () const
 from base class
virtual bool operator== (const PixelModuleName &) const
 check equality of modules from datamemebers
int pannelName () const
 pannel id
 PixelEndcapNameUpgrade (std::string name)
 ctor from name string
 PixelEndcapNameUpgrade (HalfCylinder part=mO, int disk=0, int blade=0, int pannel=0, int plaq=0)
 ctor for defined name
 PixelEndcapNameUpgrade (const DetId &)
 ctor from DetId
int plaquetteName () const
 plaquetteId (in pannel)
virtual ~PixelEndcapNameUpgrade ()

Private Attributes

int theBlade
int theDisk
int thePannel
HalfCylinder thePart
int thePlaquette

Detailed Description

Endcap Module name (as in PixelDatabase) for endcaps

Definition at line 16 of file PixelEndcapNameUpgrade.h.


Member Enumeration Documentation

Enumerator:
mO 
mI 
pO 
pI 

Definition at line 19 of file PixelEndcapNameUpgrade.h.

{ mO = 1, mI = 2 , pO =3 , pI =4 };

Constructor & Destructor Documentation

PixelEndcapNameUpgrade::PixelEndcapNameUpgrade ( const DetId id)

ctor from DetId

Definition at line 14 of file PixelEndcapNameUpgrade.cc.

References PXFDetId::blade(), PXFDetId::disk(), mI, mO, PXFDetId::module(), SurfaceOrientation::outer, PXFDetId::panel(), pI, pO, PXFDetId::side(), theBlade, theDisk, thePannel, thePart, and thePlaquette.

  : PixelModuleName(false)
{
  PXFDetId cmssw_numbering(id);
  int side = cmssw_numbering.side();
  int tmpBlade = cmssw_numbering.blade();
  bool outer = false;
  
/*
  //    iasonas1-with this we determine inner-outer ring, NOT x-direction
  if (tmpBlade >= 23 && tmpBlade <= 56) {       //23-56-->outer ring
    outer = true;
    theBlade = 57-tmpBlade;
  } else if( tmpBlade <= 22 ) {                 //1-22-->inner ring
    theBlade = 23-tmpBlade; 
  } //  iasonas1-end
  
*/
  //    iasonas2-with this we determine inner-outer x-position (x>0-x<0), NOT ring
  //    m/pI:1-6,18-31,49-56. m/pO:7-17,32-48.
  if (tmpBlade>=7 && tmpBlade<=17) {
    outer = true;
    theBlade = tmpBlade-6;                      //7...17-->1...11
  } else if (tmpBlade>=32 && tmpBlade<=48) {
    outer = true;
    theBlade = 60-tmpBlade;                     //32...48-->28...12
  } else if( tmpBlade<=6 ) {
    theBlade = 7-tmpBlade;                      //1...6-->6...1
  } else if( tmpBlade>=18 && tmpBlade<=31 ) {
    theBlade = 38-tmpBlade;                     //18...31-->20...7
  } else if( tmpBlade>=49 && tmpBlade<=56 ) {
    theBlade = 77-tmpBlade;                     //49...56-->28...21
  } //  iasonas2-end
  
       if( side == 1 &&  outer ) thePart = mO;
  else if( side == 1 && !outer ) thePart = mI;
  else if( side == 2 &&  outer ) thePart = pO;
  else if( side == 2 && !outer ) thePart = pI;
  
  theDisk = cmssw_numbering.disk();
  thePannel = cmssw_numbering.panel();
  thePlaquette = cmssw_numbering.module();
  
}
PixelEndcapNameUpgrade::PixelEndcapNameUpgrade ( HalfCylinder  part = mO,
int  disk = 0,
int  blade = 0,
int  pannel = 0,
int  plaq = 0 
) [inline]

ctor for defined name

Definition at line 25 of file PixelEndcapNameUpgrade.h.

    : PixelModuleName(false), 
      thePart(part), theDisk(disk), theBlade(blade), thePannel(pannel), thePlaquette(plaq)
  { }
PixelEndcapNameUpgrade::PixelEndcapNameUpgrade ( std::string  name)

ctor from name string

Definition at line 61 of file PixelEndcapNameUpgrade.cc.

References mI, mO, name(), pI, pO, theBlade, theDisk, thePannel, thePart, and thePlaquette.

  : PixelModuleName(false), thePart(mO), theDisk(0), 
    theBlade(0), thePannel(0), thePlaquette(0) {
  // parse the name string
  // first, check to make sure this is an FPix name, should start with "FPix_"
  // also check to make sure the needed parts are present
  if ( (name.substr(0, 5) != "FPix_") ||
       (name.find("_B") == string::npos) || 
       (name.find("_D") == string::npos) ||
       (name.find("_BLD") == string::npos) || 
       (name.find("_PNL") == string::npos) ||
       (name.find("_PLQ") == string::npos) ) {
    edm::LogError ("BadNameString|SiPixel") 
      << "Bad name string in PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string): "
      << name;
    return;
  }
  // strip off ROC part if it's there
  if (name.find("_ROC") != string::npos)
    name = name.substr(0, name.find("_ROC"));
  // get the half cylinder
  string hcString = name.substr(name.find("_B")+2, name.find("_D")-name.find("_B")-2);
  if (hcString == "mO") thePart = mO;
  else if (hcString == "mI") thePart = mI;
  else if (hcString == "pO") thePart = pO;
  else if (hcString == "pI") thePart = pI;
  else {
    edm::LogError ("BadNameString|SiPixel") 
      << "Unable to determine half cylinder in PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string): "
      << name;
  }
  // get the disk
  string diskString = name.substr(name.find("_D")+2, name.find("_BLD")-name.find("_D")-2);
  if (diskString == "1") theDisk = 1;
  else if (diskString == "2") theDisk = 2;
  else if (diskString == "3") theDisk = 3;
  else {
    edm::LogError ("BadNameString|SiPixel") 
      << "Unable to determine disk number in PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string): "
      << name;
  }
  // get the blade
  string bladeString = name.substr(name.find("_BLD")+4, name.find("_PNL")-name.find("_BLD")-4);
  // since atoi() doesn't report errors, do it the long way
  if (bladeString == "1") theBlade = 1;
  else if (bladeString == "2") theBlade = 2;
  else if (bladeString == "3") theBlade = 3;
  else if (bladeString == "4") theBlade = 4;
  else if (bladeString == "5") theBlade = 5;
  else if (bladeString == "6") theBlade = 6;
  else if (bladeString == "7") theBlade = 7;
  else if (bladeString == "8") theBlade = 8;
  else if (bladeString == "9") theBlade = 9;
  else if (bladeString == "10") theBlade = 10;
  else if (bladeString == "11") theBlade = 11;
  else if (bladeString == "12") theBlade = 12;
  else if (bladeString == "13") theBlade = 13;
  else if (bladeString == "14") theBlade = 14;
  else if (bladeString == "15") theBlade = 15;
  else if (bladeString == "16") theBlade = 16;
  else if (bladeString == "17") theBlade = 17;
  else {
    edm::LogError ("BadNameString|SiPixel") 
      << "Unable to determine blade number in PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string): "
      << name;
  }
  // find the panel
  string panelString = name.substr(name.find("_PNL")+4, name.find("_PLQ")-name.find("_PNL")-4);
  if (panelString == "1") thePannel = 1;
  else if (panelString == "2") thePannel = 2;
  else {
    edm::LogError ("BadNameString|SiPixel") 
      << "Unable to determine panel number in PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string): "
      << name;
  }
  // find the plaquette
  string plaquetteString = name.substr(name.find("_PLQ")+4, name.size()-name.find("_PLQ")-4);
  if (plaquetteString == "1") thePlaquette = 1;
  else {
    edm::LogError ("BadNameString|SiPixel") 
      << "Unable to determine plaquette number in PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string): "
      << name;
  }

} // PixelEndcapNameUpgrade::PixelEndcapNameUpgrade(std::string name)
virtual PixelEndcapNameUpgrade::~PixelEndcapNameUpgrade ( ) [inline, virtual]

Definition at line 33 of file PixelEndcapNameUpgrade.h.

{ }

Member Function Documentation

int PixelEndcapNameUpgrade::bladeName ( ) const [inline]
int PixelEndcapNameUpgrade::diskName ( ) const [inline]
PXFDetId PixelEndcapNameUpgrade::getDetId ( void  )

return DetId

Definition at line 195 of file PixelEndcapNameUpgrade.cc.

References bladeName(), diskName(), halfCylinder(), mI, mO, SurfaceOrientation::outer, pannelName(), pI, plaquetteName(), pO, and theBlade.

                                          {
  
  uint32_t side = 0;
  uint32_t disk = 0;
  uint32_t blade = 0;
  uint32_t panel = 0;
  uint32_t module = 0;

  // figure out the side
  HalfCylinder hc = halfCylinder();
  if (hc == mO || hc == mI) side = 1;
  else if (hc == pO || hc == pI) side = 2;
  
  // get disk/blade/panel/module numbers from PixelEndcapNameUpgrade object
  disk = static_cast<uint32_t>(diskName());
  uint32_t tmpBlade = static_cast<uint32_t>(bladeName());
  panel = static_cast<uint32_t>(pannelName());
  module = static_cast<uint32_t>(plaquetteName());

  // convert blade numbering to cmssw convention
  bool outer = false;
  outer = (hc == mO) || (hc == pO);
/*
  //iasonas1
  if (outer) {blade = 57 - tmpBlade;}
  else       {blade = 23 - tmpBlade;}
  
*/
  //iasonas2    m/pI:1-6,18-31,49-56. m/pO:7-17,32-48.
  if (outer) {
    if          (tmpBlade>=7 && tmpBlade<=17)    theBlade = tmpBlade+6;
    else if     (tmpBlade>=32 && tmpBlade<=48)   theBlade = 60-tmpBlade;
  } else { //inner
    if          (tmpBlade<=6 )                   theBlade = 7-tmpBlade;
    else if     (tmpBlade>=18 && tmpBlade<=31)   theBlade = 38-tmpBlade;
    else if     (tmpBlade>=49 && tmpBlade<=56)   theBlade = 77-tmpBlade;
  }

  // create and return the DetId
  return PXFDetId(side, disk, blade, panel, module);

} // PXFDetId PixelEndcapNameUpgrade::getDetId()
HalfCylinder PixelEndcapNameUpgrade::halfCylinder ( ) const [inline]
PixelModuleName::ModuleType PixelEndcapNameUpgrade::moduleType ( ) const [virtual]

module Type

Implements PixelModuleName.

Definition at line 148 of file PixelEndcapNameUpgrade.cc.

References pannelName(), plaquetteName(), and PixelModuleName::v2x8.

{
  ModuleType type = v2x8;
  if (pannelName() == 1) {
    if (plaquetteName() == 1)      { type = v2x8; }
  }
  else {
    if (plaquetteName() == 1)      { type = v2x8; }
  }
  return type;
}
string PixelEndcapNameUpgrade::name ( ) const [virtual]

from base class

Implements PixelModuleName.

Definition at line 174 of file PixelEndcapNameUpgrade.cc.

References theBlade, theDisk, thePannel, thePart, and thePlaquette.

Referenced by PixelEndcapNameUpgrade().

{
  std::ostringstream stm;
  stm <<"FPix_B"<<thePart<<"_D"<<theDisk<<"_BLD"<<theBlade<<"_PNL"<<thePannel<<"_PLQ"<<thePlaquette;
  return stm.str();
}
bool PixelEndcapNameUpgrade::operator== ( const PixelModuleName o) const [virtual]

check equality of modules from datamemebers

Implements PixelModuleName.

Definition at line 161 of file PixelEndcapNameUpgrade.cc.

References PixelModuleName::isBarrel(), python::connectstrParser::o, theBlade, theDisk, thePannel, thePart, and thePlaquette.

{
  if (!o.isBarrel()) {
    const PixelEndcapNameUpgrade * other = dynamic_cast<const PixelEndcapNameUpgrade *>(&o);
    return (    other 
             && thePart      == other->thePart
             && theDisk      == other->theDisk
             && theBlade     == other->theBlade
             && thePannel    == other->thePannel
             && thePlaquette == other->thePlaquette ); 
  } else return false;
}
int PixelEndcapNameUpgrade::pannelName ( ) const [inline]
int PixelEndcapNameUpgrade::plaquetteName ( ) const [inline]

Member Data Documentation

Definition at line 64 of file PixelEndcapNameUpgrade.h.

Referenced by diskName(), name(), operator==(), and PixelEndcapNameUpgrade().

Definition at line 64 of file PixelEndcapNameUpgrade.h.

Referenced by name(), operator==(), pannelName(), and PixelEndcapNameUpgrade().

Definition at line 63 of file PixelEndcapNameUpgrade.h.

Referenced by halfCylinder(), name(), operator==(), and PixelEndcapNameUpgrade().

Definition at line 64 of file PixelEndcapNameUpgrade.h.

Referenced by name(), operator==(), PixelEndcapNameUpgrade(), and plaquetteName().