CMS 3D CMS Logo

Public Member Functions | Private Attributes | Static Private Attributes

EcalTBReadout Class Reference

#include <EcalTBReadout.h>

List of all members.

Public Member Functions

 EcalTBReadout (const std::string theEcalTBInfoLabel)
void findTTlist (const int &crysId, const EcalTrigTowerConstituentsMap &etmap)
 search for the TT to be read
void performReadout (edm::Event &event, const EcalTrigTowerConstituentsMap &theTTmap, const EEDigiCollection &input, EEDigiCollection &output)
 master function to be called once per event
void performReadout (edm::Event &event, const EcalTrigTowerConstituentsMap &theTTmap, const EBDigiCollection &input, EBDigiCollection &output)
 master function to be called once per event
void readOut (const EBDigiCollection &input, EBDigiCollection &output, const EcalTrigTowerConstituentsMap &etmap)
 read only the digis from the selected TT
void readOut (const EEDigiCollection &input, EEDigiCollection &output, const EcalTrigTowerConstituentsMap &etmap)
 read only the digis from the selected TT
void setDetIds (const std::vector< DetId > &detIds)
 tell the readout which cells exist
 ~EcalTBReadout ()

Private Attributes

std::string ecalTBInfoLabel_
const std::vector< DetId > * theDetIds
int theTargetCrystal_
std::vector< EcalTrigTowerDetIdtheTTlist_

Static Private Attributes

static const int NCRYMATRIX = 7

Detailed Description

Definition at line 20 of file EcalTBReadout.h.


Constructor & Destructor Documentation

EcalTBReadout::EcalTBReadout ( const std::string  theEcalTBInfoLabel)

Definition at line 8 of file EcalTBReadout.cc.

References theTargetCrystal_, and theTTlist_.

                                                               : 
   ecalTBInfoLabel_(theEcalTBInfoLabel)
{
   theTargetCrystal_ = -1 ;
   theTTlist_.reserve(1) ;
}
EcalTBReadout::~EcalTBReadout ( ) [inline]

Definition at line 25 of file EcalTBReadout.h.

{};

Member Function Documentation

void EcalTBReadout::findTTlist ( const int &  crysId,
const EcalTrigTowerConstituentsMap etmap 
)

search for the TT to be read

step 1: find the correspondence between the crystal identified in module and its DetId assuming only 1 SM present

step 2: find the crystals in the matrix and fill the TT list

loop on all the valid DetId and search for the good ones

Definition at line 16 of file EcalTBReadout.cc.

References Exception, spr::find(), newFWLiteAna::found, i, EBDetId::ic(), EBDetId::ieta(), EBDetId::iphi(), LogDebug, NCRYMATRIX, findQualityFiles::size, theDetIds, theTargetCrystal_, theTTlist_, and EcalTrigTowerConstituentsMap::towerOf().

Referenced by performReadout().

{

  // search for the TT involved in the NCRYMATRIX x NCRYMATRIX
  // around the target crystal if a new target, otherwise use
  // the list already filled

   if ( crysId == theTargetCrystal_ ) { return; }

   theTTlist_.clear();

  
   EBDetId theTargetId;
   std::vector<DetId>::const_iterator idItr = theDetIds->begin();
   unsigned int ncount = 0;
   bool found = false;
  
   while  ( (ncount < theDetIds->size()) && !found ) 
   {
      EBDetId thisEBdetid(idItr->rawId());
      if (thisEBdetid.ic() == crysId) {
         theTargetId = thisEBdetid;
         found = true;
      }
      ++idItr;
      ++ncount;
   }
   if ( !found ) {
      throw cms::Exception("ObjectNotFound", "Ecal TB target crystal not found in geometry");
      return;
   }
   theTargetCrystal_ = theTargetId.ic();


   int myEta = theTargetId.ieta();
   int myPhi = theTargetId.iphi();


   for ( int icrysEta = (myEta-(NCRYMATRIX-1)/2) ; icrysEta <= (myEta+(NCRYMATRIX-1)/2) ; ++icrysEta ) {
      for ( int icrysPhi = (myPhi-(NCRYMATRIX-1)/2) ; icrysPhi <= (myPhi+(NCRYMATRIX-1)/2) ; ++icrysPhi ) {
      

         EBDetId thisEBdetid;

         idItr = theDetIds->begin();
         ncount = 0;
         found = false;
  
         while  ( (ncount < theDetIds->size()) && !found ) 
         {
            EBDetId myEBdetid(idItr->rawId());
            if ( (myEBdetid.ieta() == icrysEta) && (myEBdetid.iphi() == icrysPhi) ) {
               thisEBdetid = myEBdetid;
               found = true;
            }
            ++idItr;
            ++ncount;
         }

         if ( found ) {
            
            EcalTrigTowerDetId thisTTdetId=etmap.towerOf(thisEBdetid);
            
            LogDebug("EcalDigi") << "Crystal to be readout: sequential id = " << thisEBdetid.ic() << " eta = " << icrysEta << " phi = " << icrysPhi << " from TT = " << thisTTdetId;
            
            if ( theTTlist_.size() == 0 || ( theTTlist_.size() == 1 && theTTlist_[0] != thisTTdetId )) {
               theTTlist_.push_back(thisTTdetId);
            }
            else {
               std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
               if ( theTTlist_.size() > 1 && ttFound == theTTlist_.end() && *(theTTlist_.end()) != thisTTdetId ) { 
                  theTTlist_.push_back(thisTTdetId);
               }
            }
         }
      }
   }
   
   edm::LogInfo("EcalDigi") << " TT to be read: ";
   for ( unsigned int i = 0 ; i < theTTlist_.size() ; ++i ) {
      edm::LogInfo("EcalDigi") << " TT " << i << " " << theTTlist_[i];
   }
}
void EcalTBReadout::performReadout ( edm::Event event,
const EcalTrigTowerConstituentsMap theTTmap,
const EBDigiCollection input,
EBDigiCollection output 
)

master function to be called once per event

Definition at line 171 of file EcalTBReadout.cc.

References ecalTBInfoLabel_, findTTlist(), and readOut().

Referenced by EcalTBDigiProducer::finalizeEvent().

{
   // TB readout
   // step 1: get the target crystal index

   edm::Handle<PEcalTBInfo> theEcalTBInfo;
   event.getByLabel(ecalTBInfoLabel_,theEcalTBInfo);

   int crysId = theEcalTBInfo->nCrystal();
  
   // step 2: update (if needed) the TT list to be read

   findTTlist(crysId, theTTmap);

   // step 3: perform the readout

   readOut( input, output, theTTmap ) ;
}
void EcalTBReadout::performReadout ( edm::Event event,
const EcalTrigTowerConstituentsMap theTTmap,
const EEDigiCollection input,
EEDigiCollection output 
)

master function to be called once per event

Definition at line 194 of file EcalTBReadout.cc.

References ecalTBInfoLabel_, findTTlist(), and readOut().

{

   // TB readout
   // step 1: get the target crystal index

   edm::Handle<PEcalTBInfo> theEcalTBInfo;
   event.getByLabel(ecalTBInfoLabel_,theEcalTBInfo);

   int crysId = theEcalTBInfo->nCrystal();
  
   // step 2: update (if needed) the TT list to be read

   findTTlist(crysId, theTTmap);

   // step 3: perform the readout

   readOut( input, output, theTTmap) ;
}
void EcalTBReadout::readOut ( const EBDigiCollection input,
EBDigiCollection output,
const EcalTrigTowerConstituentsMap etmap 
)

read only the digis from the selected TT

Definition at line 108 of file EcalTBReadout.cc.

References edm::DataFrameContainer::back(), edm::DataFrame::begin(), filterCSVwithJSON::copy, gather_cfg::cout, edm::DataFrame::end(), spr::find(), EcalDataFrame::frame(), EBDataFrame::id(), edm::DataFrameContainer::push_back(), edm::DataFrameContainer::size(), theTTlist_, and EcalTrigTowerConstituentsMap::towerOf().

Referenced by performReadout().

{
  /*
  for(EBDigiCollection::const_iterator digiItr = input.begin();
      digiItr != input.end(); ++digiItr)
    {
      EcalTrigTowerDetId thisTTdetId=etmap.towerOf(digiItr->id());
      std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
      if ((ttFound != theTTlist_.end()) || *(theTTlist_.end()) == thisTTdetId) { 
        output.push_back(*digiItr);
      }
    }
  edm::LogInfo("EcalDigi") << "Read EB Digis: " << output.size();
  */

   std::cout<<"%%%%%%% In readOut(), size="<< input.size() <<std::endl ;

   for( unsigned int digis=0; digis<input.size(); ++digis )
   {
      EBDataFrame ebdf = input[digis];
    
      EcalTrigTowerDetId thisTTdetId=etmap.towerOf(ebdf.id());
      std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);

      if ((ttFound != theTTlist_.end()) || *(theTTlist_.end()) == thisTTdetId) {      
         output.push_back( ebdf.id() ) ;
         EBDataFrame ebdf2( output.back() );
         std::copy( ebdf.frame().begin(),
                    ebdf.frame().end(),
                    ebdf2.frame().begin() );
      }
   }
}
void EcalTBReadout::readOut ( const EEDigiCollection input,
EEDigiCollection output,
const EcalTrigTowerConstituentsMap etmap 
)

read only the digis from the selected TT

Definition at line 145 of file EcalTBReadout.cc.

References edm::DataFrameContainer::back(), edm::DataFrame::begin(), filterCSVwithJSON::copy, edm::DataFrame::end(), spr::find(), EcalDataFrame::frame(), EEDataFrame::id(), edm::DataFrameContainer::push_back(), edm::DataFrameContainer::size(), theTTlist_, and EcalTrigTowerConstituentsMap::towerOf().

{
   for (unsigned int digis=0; digis<input.size(); ++digis)
   { 
      EEDataFrame eedf ( input[digis] ) ;

      EcalTrigTowerDetId thisTTdetId ( etmap.towerOf( eedf.id() ) ) ;

      std::vector<EcalTrigTowerDetId>::iterator ttFound 
         ( find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId ) ) ;

      if( ( ttFound != theTTlist_.end() ) ||
          *(theTTlist_.end()) == thisTTdetId ) 
      {      
         output.push_back( eedf.id() ) ;
         EEDataFrame eedf2( output.back() ) ;
         std::copy( eedf.frame().begin(), 
                    eedf.frame().end(),
                    eedf2.frame().begin() );
      }
   }
}
void EcalTBReadout::setDetIds ( const std::vector< DetId > &  detIds) [inline]

tell the readout which cells exist

Definition at line 28 of file EcalTBReadout.h.

References theDetIds.

Referenced by EcalTBDigiProducer::initializeEvent().

{theDetIds = &detIds;}

Member Data Documentation

std::string EcalTBReadout::ecalTBInfoLabel_ [private]

Definition at line 66 of file EcalTBReadout.h.

Referenced by performReadout().

const int EcalTBReadout::NCRYMATRIX = 7 [static, private]

Definition at line 62 of file EcalTBReadout.h.

Referenced by findTTlist().

const std::vector<DetId>* EcalTBReadout::theDetIds [private]

Definition at line 64 of file EcalTBReadout.h.

Referenced by findTTlist(), and setDetIds().

Definition at line 58 of file EcalTBReadout.h.

Referenced by EcalTBReadout(), and findTTlist().

Definition at line 60 of file EcalTBReadout.h.

Referenced by EcalTBReadout(), findTTlist(), and readOut().