CMS 3D CMS Logo

Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes

PixelToLNKAssociateFromAscii Class Reference

#include <PixelToLNKAssociateFromAscii.h>

Inheritance diagram for PixelToLNKAssociateFromAscii:
PixelToFEDAssociate

List of all members.

Public Types

typedef
PixelToFEDAssociate::CablingRocId 
CablingRocId
typedef
PixelToFEDAssociate::DetectorRocId 
DetectorRocId

Public Member Functions

virtual const CablingRocIdoperator() (const DetectorRocId &roc) const
 LNK id for module.
 PixelToLNKAssociateFromAscii (const std::string &fileName)
virtual std::string version () const
 version

Private Types

typedef TRange< int > Range

Private Member Functions

void addConnections (int fedId, int linkId, std::string module, Range rocDetIds)
void init (const std::string &fileName)
 initialisatin (read file)
Range readRange (const std::string &) const

Private Attributes

std::vector< std::pair
< DetectorRocId, CablingRocId > > 
theConnection
std::string theVersion

Detailed Description

Check to which FED pixel module belongs to. The associacions are read from the datafile

Definition at line 20 of file PixelToLNKAssociateFromAscii.h.


Member Typedef Documentation

Definition at line 23 of file PixelToLNKAssociateFromAscii.h.

Definition at line 24 of file PixelToLNKAssociateFromAscii.h.

Definition at line 34 of file PixelToLNKAssociateFromAscii.h.


Constructor & Destructor Documentation

PixelToLNKAssociateFromAscii::PixelToLNKAssociateFromAscii ( const std::string &  fileName)

Definition at line 14 of file PixelToLNKAssociateFromAscii.cc.

References init.

                                                                            {
  init(fn);
}

Member Function Documentation

void PixelToLNKAssociateFromAscii::addConnections ( int  fedId,
int  linkId,
std::string  module,
Range  rocDetIds 
) [private]

Definition at line 135 of file PixelToLNKAssociateFromAscii.cc.

References Exception, PixelToFEDAssociate::CablingRocId::fedId, PixelBarrelName::isHalfModule(), PixelToFEDAssociate::CablingRocId::linkId, TRange< T >::max(), PixelBarrelName::mI, PixelEndcapName::mI, TRange< T >::min(), PixelBarrelName::mO, PixelEndcapName::mO, PixelToFEDAssociate::DetectorRocId::module, AlCaRecoCosmics_cfg::name, PixelPannelType::p3L, PixelPannelType::p3R, PixelPannelType::p4L, PixelPannelType::p4R, PixelEndcapName::pI, PixelBarrelName::pI, PixelBarrelName::pO, PixelEndcapName::pO, pos, PixelToFEDAssociate::DetectorRocId::rocDetId, PixelToFEDAssociate::CablingRocId::rocLinkId, and ExpressReco_HICollisions_FallBack::step.

{
  string::size_type pos;

  // check for Barrel modules
  pos = module.find("BPix");
  if (pos != string::npos) { 

     // shell
     string strP = module.substr(pos+6,2);
     PixelBarrelName::Shell part;
         if (strP=="mO") part = PixelBarrelName::mO; 
     else if(strP=="mI") part = PixelBarrelName::mI;
     else if(strP=="pO") part = PixelBarrelName::pO;
     else                part = PixelBarrelName::pI;
     module = module.substr(pos+9);

     // sector
     pos = module.find("_");
     if (pos ==  string::npos) throw cms::Exception("problem with sector formatting");
     // int sector = atoi( module.substr(3,pos-3).c_str());
     module = module.substr(pos+1);

     // layer
     pos = module.find("_");
     if (pos ==  string::npos) throw cms::Exception("problem with layer formatting");
     int layer = atoi( module.substr(3,pos-3).c_str());
     module = module.substr(pos+1);

     // ladder
     pos = module.find("_");
     if (pos ==  string::npos) throw cms::Exception("problem with ladder formatting");
     int ladder = atoi( module.substr(3,pos-3).c_str());
     module = module.substr(pos+1);

     // z-module
     int zmodule = atoi( module.substr(3,pos-3).c_str());

     // place modules in connections
     int rocLnkId = 0; 
     for (int rocDetId=rocDetIds.min(); rocDetId <= rocDetIds.max(); rocDetId++) {
       rocLnkId++;
       DetectorRocId  detectorRocId;
       PixelBarrelName * name = new PixelBarrelName(part, layer, zmodule, ladder);
       detectorRocId.module = name;
       detectorRocId.rocDetId = rocDetId;
       CablingRocId   cablingRocId;
       cablingRocId.fedId = fedId;
       cablingRocId.linkId = linkId;
       cablingRocId.rocLinkId = rocLnkId;
       // fix for type-B modules in barrel
       if (name->isHalfModule() && (rocDetIds.min()>7)  
           && (part==PixelBarrelName::mO || PixelBarrelName::mI) ) {
         //cablingRocId.rocLinkId = 9-rocLnkId;
         // rocDetId=8,...,15
         cablingRocId.rocLinkId = rocLnkId;   // 1...8    19/11/08 d.k.
         detectorRocId.rocDetId = rocDetId-8; // 0...7
       }
       theConnection.push_back( make_pair(detectorRocId,cablingRocId));
     } 
  }

  // check for endcap modules
  // check for Barrel modules
  pos = module.find("FPix");
  if (pos != string::npos) {
     string strH = module.substr(pos+6,2);
     PixelEndcapName::HalfCylinder part;
         if (strH=="mO") part = PixelEndcapName::mO;
     else if(strH=="mI") part = PixelEndcapName::mI;
     else if(strH=="pO") part = PixelEndcapName::pO;
     else                part = PixelEndcapName::pI;
     module = module.substr(pos+9);

     // disk
     pos = module.find("_");
     if (pos ==  string::npos) throw cms::Exception("problem with disk formatting");
     int disk = atoi( module.substr(1,pos-1).c_str());
     module = module.substr(pos+1);

     // blade
     pos = module.find("_");
     if (pos ==  string::npos) throw cms::Exception("problem with blade formatting");
     int blade = atoi( module.substr(3,pos-3).c_str());
     module = module.substr(pos+1);

     //pannel
     pos = module.find("_");
     if (pos ==  string::npos) throw cms::Exception("problem with pannel formatting");
     int pannel = atoi( module.substr(3,pos-3).c_str());
     module = module.substr(pos+1);

     // plaquete
//     pos = module.find("_");
//     if (pos ==  string::npos) throw cms::Exception("problem with plaquette formatting");
//     int plaq = atoi( module.substr(3,pos-3).c_str());

     // pannel type
     pos = module.find("TYP:");
     if (pos ==  string::npos) throw cms::Exception("problem with pannel type formatting");
     string strT = module.substr(pos+5,3);

     PixelPannelType::PannelType pannelType; 
          if (strT=="P3R") pannelType=PixelPannelType::p3R;
     else if (strT=="P3L") pannelType=PixelPannelType::p3L;
     else if (strT=="P4R") pannelType=PixelPannelType::p4R;
     else if (strT=="P4L") pannelType=PixelPannelType::p4L;
     else throw cms::Exception("problem with pannel type formatting (unrecoginzed word)");

     if ( pannelType==PixelPannelType::p4L) {
//     cout <<"----------- p4L"<<endl;
       int rocLnkId =0;
       for (int plaq = 1; plaq <= 4; plaq++) {
         Range rocs; int firstRoc=0; int step=0;
         if (plaq==1) { rocs = Range(0,1); firstRoc=1; step=-1; }
         if (plaq==2) { rocs = Range(0,5); firstRoc=0; step=+1; }
         if (plaq==3) { rocs = Range(0,7); firstRoc=0; step=+1; }
         if (plaq==4) { rocs = Range(0,4); firstRoc=0; step=+1; }
         for (int iroc =rocs.min(); iroc<=rocs.max(); iroc++) {
           rocLnkId++;
           int rocDetId = firstRoc + step*iroc; 

           DetectorRocId  detectorRocId;
           detectorRocId.module = new PixelEndcapName(part,disk,blade,pannel,plaq);
           detectorRocId.rocDetId = rocDetId;

           CablingRocId   cablingRocId;
           cablingRocId.fedId = fedId;
           cablingRocId.linkId = linkId;
           cablingRocId.rocLinkId = rocLnkId;

           theConnection.push_back( make_pair(detectorRocId,cablingRocId));
//         cout <<"PLAQ:"<<plaq<<" rocDetId: "<<rocDetId<<" rocLnkId:"<<rocLnkId<<endl;
         }
       } 
     } 
     else if ( pannelType==PixelPannelType::p4R) {
//     cout <<"----------- p4R"<<endl;
       int rocLnkId =0;
       for (int plaq = 4; plaq >= 1; plaq--) {
         Range rocs; int firstRoc=0; int step=0;
         if (plaq==1) { rocs = Range(0,1); firstRoc=1; step=-1; }
         if (plaq==2) { rocs = Range(0,5); firstRoc=3; step=+1; }
         if (plaq==3) { rocs = Range(0,7); firstRoc=4; step=+1; }
         if (plaq==4) { rocs = Range(0,4); firstRoc=0; step=+1; }
         for (int iroc =rocs.min(); iroc<=rocs.max(); iroc++) {
           rocLnkId++;
           int rocDetId = firstRoc + step*iroc;
           if (rocDetId > rocs.max()) rocDetId = (rocDetId-1)%rocs.max();

           DetectorRocId  detectorRocId;
           detectorRocId.module = new PixelEndcapName(part,disk,blade,pannel,plaq);
           detectorRocId.rocDetId = rocDetId;

           CablingRocId   cablingRocId;
           cablingRocId.fedId = fedId;
           cablingRocId.linkId = linkId;
           cablingRocId.rocLinkId = rocLnkId;

           theConnection.push_back( make_pair(detectorRocId,cablingRocId));
//         cout <<"PLAQ:"<<plaq<<" rocDetId: "<<rocDetId<<" rocLnkId:"<<rocLnkId<<endl;
         }
       }
     }
     else if ( pannelType==PixelPannelType::p3L) {
//     cout <<"----------- p3L"<<endl;
       int rocLnkId =0;
       for (int plaq = 1; plaq <= 3; plaq++) {
         Range rocs; int firstRoc=0; int step=0;
         if (plaq==1) { rocs = Range(0,5); firstRoc=0; step=1; }
         if (plaq==2) { rocs = Range(0,7); firstRoc=0; step=1; }
         if (plaq==3) { rocs = Range(0,9); firstRoc=0; step=1; }
         for (int iroc =rocs.min(); iroc<=rocs.max(); iroc++) {
           rocLnkId++;
           int rocDetId = firstRoc + step*iroc; 

           DetectorRocId  detectorRocId;
           detectorRocId.module = new PixelEndcapName(part,disk,blade,pannel,plaq);
           detectorRocId.rocDetId = rocDetId;

           CablingRocId   cablingRocId;
           cablingRocId.fedId = fedId;
           cablingRocId.linkId = linkId;
           cablingRocId.rocLinkId = rocLnkId;

           theConnection.push_back( make_pair(detectorRocId,cablingRocId));
//         cout <<"PLAQ:"<<plaq<<" rocDetId: "<<rocDetId<<" rocLnkId:"<<rocLnkId<<endl;
         }
       } 
     } 
     else if ( pannelType==PixelPannelType::p3R) {
//     cout <<"----------- p3R"<<endl;
       int rocLnkId =0;
       for (int plaq = 3; plaq >= 1; plaq--) {
         Range rocs; int firstRoc=0; int step=0;
         if (plaq==1) { rocs = Range(0,5); firstRoc=3; step=1; }
         if (plaq==2) { rocs = Range(0,7); firstRoc=4; step=1; }
         if (plaq==3) { rocs = Range(0,9); firstRoc=5; step=1; }
         for (int iroc =rocs.min(); iroc<=rocs.max(); iroc++) {
           rocLnkId++;
           int rocDetId = firstRoc + step*iroc;
           if (rocDetId > rocs.max()) rocDetId = (rocDetId-1)%rocs.max();

           DetectorRocId  detectorRocId;
           detectorRocId.module = new PixelEndcapName(part,disk,blade,pannel,plaq);
           detectorRocId.rocDetId = rocDetId;

           CablingRocId   cablingRocId;
           cablingRocId.fedId = fedId;
           cablingRocId.linkId = linkId;
           cablingRocId.rocLinkId = rocLnkId;

           theConnection.push_back( make_pair(detectorRocId,cablingRocId));
//         cout <<"PLAQ:"<<plaq<<" rocDetId: "<<rocDetId<<" rocLnkId:"<<rocLnkId<<endl;
         }
       }
     }

  }
}
void PixelToLNKAssociateFromAscii::init ( const std::string &  fileName) [private]

initialisatin (read file)

const PixelToLNKAssociateFromAscii::CablingRocId * PixelToLNKAssociateFromAscii::operator() ( const DetectorRocId roc) const [virtual]

LNK id for module.

Reimplemented from PixelToFEDAssociate.

Definition at line 22 of file PixelToLNKAssociateFromAscii.cc.

References PixelToFEDAssociate::DetectorRocId::module, and PixelToFEDAssociate::DetectorRocId::rocDetId.

{
//  bool deb = (roc.module->name()=="BPix_BpI_SEC1_LYR1_LDR1H_MOD1");
//  if (deb) cout <<"KUKU"<<endl;

  typedef std::vector< std::pair<DetectorRocId,CablingRocId> >::const_iterator IM;
  for (IM im = theConnection.begin(); im != theConnection.end(); im++) {
    if( ( *(im->first.module) == *roc.module ) && (im->first.rocDetId == roc.rocDetId)) {
      return &(im->second);  
    }
  }
  return 0;
}
PixelToLNKAssociateFromAscii::Range PixelToLNKAssociateFromAscii::readRange ( const std::string &  ) const [private]

Definition at line 221 of file PixelToFEDAssociateFromAscii.cc.

References Exception, first, prof2calltree::l, geometryCSVtoXML::line, LogDebug, and asciidump::s.

{
  bool first = true;
  int num1 = -1;
  int num2 = -1;
  const char * line = l.c_str();
  while (line) {
    char * evp = 0;
    int num = strtol(line, &evp, 10);
    { stringstream s; s<<"raad from line: "; s<<num; LogDebug(s.str()); }
    if (evp != line) {
      line = evp +1;
      if (first) { num1 = num; first = false; }
      num2 = num;
    } else line = 0;
  }
  if (first) {
    string s = "** PixelToFEDAssociateFromAscii, read data, cant intrpret: " ;
    edm::LogInfo(s) << endl 
              << l << endl 
              <<"=====> send exception " << endl;
    s += l;
    throw cms::Exception(s);
  }
  return Range(num1,num2);
}
std::string PixelToLNKAssociateFromAscii::version ( ) const [virtual]

version

Implements PixelToFEDAssociate.

Definition at line 17 of file PixelToLNKAssociateFromAscii.cc.

{
  return theVersion; 
}

Member Data Documentation

Definition at line 42 of file PixelToLNKAssociateFromAscii.h.

Definition at line 41 of file PixelToLNKAssociateFromAscii.h.