CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes

L1GtPatternGenerator Class Reference

#include <L1GtPatternGenerator.h>

Inheritance diagram for L1GtPatternGenerator:
edm::EDAnalyzer

List of all members.

Public Member Functions

 L1GtPatternGenerator (const edm::ParameterSet &)
 ~L1GtPatternGenerator ()

Protected Member Functions

void extractGlobalTriggerData (const edm::Event &iEvent, L1GtPatternMap &patterns)

Private Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 analyze each event
virtual void beginJob ()
 analyze
virtual void endJob ()
 end of job
void packHfRecords (const std::string &resultName, L1GtPatternMap &allPatterns)

Static Private Member Functions

static uint32_t packEtMiss (uint32_t rawValue)
static uint32_t packRegionalMuons (uint32_t rawValue)

Private Attributes

std::vector< int > m_bx
std::vector< uint32_t > m_columnDefaults
std::vector< uint32_t > m_columnLengths
std::vector< std::string > m_columnNames
edm::InputTag m_cscTag
bool m_debug
std::string m_destPath
 an algorithm and a condition in that algorithm to test the object maps
edm::InputTag m_dtTag
 input tags for regional muon data
std::string m_fileName
 output file name
std::ofstream m_fileStream
std::string m_footer
edm::InputTag m_gctTag
 input tag for GCT data
edm::InputTag m_gmtTag
 input tag for GMT data
edm::InputTag m_gtTag
 input tag for GT data
std::string m_header
 formatting instructions
edm::InputTag m_rpcbTag
edm::InputTag m_rpcfTag
std::auto_ptr< L1GtPatternWriterm_writer

Detailed Description

Description: A generator of pattern files for L1 GT hardware testing.

Implementation: <TODO: enter implementation details>

Author:
: Thomas Themel - HEPHY Vienna

$Date$ $Revision$

Description: see header file.

Implementation: <TODO: enter implementation details>

Author:
: Thomas Themel - HEPHY Vienna

$Date$ $Revision$

Definition at line 39 of file L1GtPatternGenerator.h.


Constructor & Destructor Documentation

L1GtPatternGenerator::L1GtPatternGenerator ( const edm::ParameterSet parSet) [explicit]

Definition at line 39 of file L1GtPatternGenerator.cc.

References edm::ParameterSet::getParameter(), LogDebug, m_bx, m_columnDefaults, m_columnLengths, m_columnNames, m_cscTag, m_debug, m_dtTag, m_fileName, m_footer, m_gctTag, m_gmtTag, m_gtTag, m_header, m_rpcbTag, and m_rpcfTag.

{
    // input tags for trigger records
    m_gctTag = parSet.getParameter<edm::InputTag>("GctInputTag");
    m_gmtTag = parSet.getParameter<edm::InputTag>("GmtInputTag");
    m_gtTag = parSet.getParameter<edm::InputTag>("GtInputTag");
    m_dtTag = parSet.getParameter<edm::InputTag>("DtInputTag");
    m_cscTag = parSet.getParameter<edm::InputTag>("CscInputTag");
    m_rpcbTag = parSet.getParameter<edm::InputTag>("RpcbInputTag");
    m_rpcfTag = parSet.getParameter<edm::InputTag>("RpcfInputTag");

    // output formatting stuff
    m_header = parSet.getParameter<std::string>("PatternFileHeader");
    m_footer = parSet.getParameter<std::string>("PatternFileFooter");
    m_columnNames = parSet.getParameter<std::vector<std::string> >("PatternFileColumns");
    m_columnLengths = parSet.getParameter<std::vector<uint32_t> >("PatternFileLengths");
    m_columnDefaults = parSet.getParameter<std::vector<uint32_t> >("PatternFileDefaultValues");
    m_fileName = parSet.getParameter<std::string>("PatternFileName");
    m_bx = parSet.getParameter<std::vector<int> >("bx");
    m_debug = parSet.getParameter<bool>("DebugOutput");


    if(m_columnLengths.size() != m_columnNames.size()) { 
      edm::LogWarning("L1GtPatternGenerator") 
        << "Length of PatternFileColumns does not match length of PatternFileLenghts, " <<
        m_columnNames.size() << " vs " << m_columnLengths.size() << std::endl;
    }

    LogDebug("L1GtPatternGenerator")
      << "\nL1 GCT  record:            "
      << m_gctTag 
      << "\nL1 GMT record:             "
      << m_gmtTag
      << "\nL1 GT record:              "
      << m_gtTag << std::endl;
}
L1GtPatternGenerator::~L1GtPatternGenerator ( )

Definition at line 77 of file L1GtPatternGenerator.cc.

{}

Member Function Documentation

void L1GtPatternGenerator::analyze ( const edm::Event iEvent,
const edm::EventSetup evSetup 
) [private, virtual]

analyze each event

Analyze each event:

  • Extract the input records that interest us from the event
  • Split them into pattern file lines according to their bx number
  • Format the lines and write them to the file.

Implements edm::EDAnalyzer.

Definition at line 235 of file L1GtPatternGenerator.cc.

References L1GctEtMiss::et(), extractGlobalTriggerData(), extractRecordData(), L1MuRegionalCand::getDataWord(), L1MuGMTCand::getDataWord(), edm::InputTag::instance(), edm::InputTag::label(), m_cscTag, m_dtTag, m_gctTag, m_gmtTag, m_rpcbTag, m_rpcfTag, m_writer, packHfRecords(), packRegionalMuons(), phi, L1GctHFBitCounts::raw(), L1GctEtHad::raw(), L1GctJetCand::raw(), L1GctHFRingEtSums::raw(), L1GctEmCand::raw(), L1GctEtTotal::raw(), and L1GctHtMiss::raw().

{
   L1GtPatternMap allPatterns;

  // GMT muon candidates
  extractRecordData(iEvent, allPatterns, m_gmtTag.label(), m_gmtTag.instance(), &L1MuGMTCand::getDataWord, "gmtMuon");

  // regional muon candidates
  extractRecordData(iEvent, allPatterns, m_cscTag.label(), m_cscTag.instance(), &L1MuRegionalCand::getDataWord, "cscMuon", packRegionalMuons);  
  extractRecordData(iEvent, allPatterns, m_dtTag.label(),  m_dtTag.instance(), &L1MuRegionalCand::getDataWord, "dtMuon", packRegionalMuons);
  extractRecordData(iEvent, allPatterns, m_rpcfTag.label(), m_rpcfTag.instance(), &L1MuRegionalCand::getDataWord, "fwdMuon", packRegionalMuons);
  extractRecordData(iEvent, allPatterns, m_rpcbTag.label(), m_rpcbTag.instance(), &L1MuRegionalCand::getDataWord, "brlMuon", packRegionalMuons);

  // GCT objects
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "nonIsoEm", &L1GctEmCand::raw, "gctEm");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "isoEm", &L1GctEmCand::raw, "gctIsoEm");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctEtMiss::et, "etMiss");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctEtMiss::phi, "etMissPhi");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctHtMiss::raw, "htMiss");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctEtHad::raw, "etHad");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctEtTotal::raw, "etTotal");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "cenJets", &L1GctJetCand::raw, "cenJet");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "forJets", &L1GctJetCand::raw, "forJet");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "tauJets", &L1GctJetCand::raw, "tauJet");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctHFBitCounts::raw, "hfBitCounts");
  extractRecordData(iEvent, allPatterns, m_gctTag.label(), "", &L1GctHFRingEtSums::raw, "hfRingEtSums");

  // Post processing: 
  // HFBitCounts/HFRingEtSums need to be mangled to PSB values
  packHfRecords("hfPsbValue", allPatterns);

  // GT objects
  extractGlobalTriggerData(iEvent, allPatterns);

  // Output
  m_writer->writePatterns(allPatterns);
}
void L1GtPatternGenerator::beginJob ( void  ) [private, virtual]

analyze

Method called once each job just before starting event loop.

  • Initialize the output file and the writer object.

Reimplemented from edm::EDAnalyzer.

Definition at line 276 of file L1GtPatternGenerator.cc.

References m_bx, m_columnDefaults, m_columnLengths, m_columnNames, m_debug, m_fileName, m_fileStream, m_footer, m_header, and m_writer.

{
  m_fileStream.open(m_fileName.c_str());

  if(!m_fileStream) { 
    edm::LogError("L1GtPatternGenerator") <<  "Failed to open output file " << m_fileName;
  }

  m_writer = std::auto_ptr<L1GtPatternWriter>(new L1GtPatternWriter(m_fileStream, m_header, m_footer, m_columnNames, m_columnLengths, m_columnDefaults, m_bx, m_debug));
}
void L1GtPatternGenerator::endJob ( void  ) [private, virtual]

end of job

Method called once each job just after ending the event loop.

  • Close the output file stream.

Reimplemented from edm::EDAnalyzer.

Definition at line 290 of file L1GtPatternGenerator.cc.

References m_fileStream, and m_writer.

{
  m_writer->close();
  m_fileStream.close();
}
void L1GtPatternGenerator::extractGlobalTriggerData ( const edm::Event iEvent,
L1GtPatternMap patterns 
) [protected]

Definition at line 172 of file L1GtPatternGenerator.cc.

References edm::EventID::event(), Exception, extractGlobalTriggerWord(), edm::Event::getByLabel(), L1GtPatternMap::getLine(), patZpeak::handle, edm::EventBase::id(), edm::InputTag::instance(), edm::HandleBase::isValid(), edm::InputTag::label(), geometryCSVtoXML::line, m_gtTag, and L1GtPatternLine::push().

Referenced by analyze().

                                                                                                    {

  // extract global trigger readout record
  edm::Handle<L1GlobalTriggerReadoutRecord> handle;
  iEvent.getByLabel(m_gtTag, handle);

  // continue if it's present
  if(!handle.isValid()) { 
    throw cms::Exception(__func__) << "Failed to extract GT readout record labeled " 
                                   << m_gtTag.label() << ", instance " << m_gtTag.instance();
  }

  edm::EventNumber_t eventNr = iEvent.id().event();

  // for each FDL word...
  const std::vector<L1GtFdlWord>& fdlWords = handle->gtFdlVector();
  for(std::vector<L1GtFdlWord>::const_iterator it = fdlWords.begin();
      it != fdlWords.end() ; ++it) { 
    // extract relevant data
    int bx = it->bxInEvent();

    // find matching pattern file line
    L1GtPatternLine& line = patterns.getLine(eventNr, bx);

    extractGlobalTriggerWord(it->gtDecisionWord(), line, "gtDecision");
    extractGlobalTriggerWord(it->gtDecisionWordExtended(), line, "gtDecisionExt");
    extractGlobalTriggerWord(it->gtTechnicalTriggerWord(), line, "gtTechTrigger");

    line.push("gtFinalOr", it->finalOR());
  }
}
static uint32_t L1GtPatternGenerator::packEtMiss ( uint32_t  rawValue) [static, private]

Post-processing for etMissing

void L1GtPatternGenerator::packHfRecords ( const std::string &  resultName,
L1GtPatternMap allPatterns 
) [private]

Post-processing for complex mapping of HF records to PSB values

The mapping from hfBitCounts/hfRingEtSums raw data to the PSBs is non-trivial, see https://wwwhephy.oeaw.ac.at/p3w/electronic1/GlobalTrigger/doc/InterfaceDesc/update_CMS_NOTE_2002_069.pdf

Definition at line 207 of file L1GtPatternGenerator.cc.

References L1GtPatternMap::begin(), and L1GtPatternMap::end().

Referenced by analyze().

{
  // iterate over each pattern line
  for(L1GtPatternMap::LineMap::iterator it = allPatterns.begin(); 
      it != allPatterns.end(); ++it) { 
    // Get the HF bit counts and ring sums 
    uint32_t counts = it->second.get("hfBitCounts1");
    uint32_t sums = it->second.get("hfRingEtSums1");
    
    
    // Bits 0..11 -> 4 bit counts
    uint32_t hfPsbValue = (counts & 0xFFF) |
        // Bit 12..14 ring 1 pos. rap. HF Et sum
        (sums & 0x7) << 12 | 
        // Bits 16.. rest of the ET sums
        (sums >> 3) << 16;
    // TODO: Spec states non-data values for Bits 15, 31, 47 and 63.

    // Export computed value to pattern writer. */
    it->second.push(resultName, hfPsbValue);
  }
}
uint32_t L1GtPatternGenerator::packRegionalMuons ( uint32_t  rawData) [static, private]

Post-processing for regional muon trigger inputs

Bits 8..15 (5 bits Pt, 3 bits quality) need to be inverted on the GMT inputs. See https://wwwhephy.oeaw.ac.at/p3w/cms/trigger/globalMuonTrigger/notes/in04_022.pdf

Definition at line 164 of file L1GtPatternGenerator.cc.

Referenced by analyze().

                                                                 {
    uint32_t invertMask = 0x0000FF00;
    uint32_t toKeep =   rawData & (~invertMask);
    return toKeep | (~rawData & invertMask);
}

Member Data Documentation

std::vector<int> L1GtPatternGenerator::m_bx [private]

Definition at line 97 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

std::vector<uint32_t> L1GtPatternGenerator::m_columnDefaults [private]

Definition at line 98 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

std::vector<uint32_t> L1GtPatternGenerator::m_columnLengths [private]

Definition at line 96 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

std::vector<std::string> L1GtPatternGenerator::m_columnNames [private]

Definition at line 95 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

Definition at line 80 of file L1GtPatternGenerator.h.

Referenced by analyze(), and L1GtPatternGenerator().

Definition at line 99 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

std::string L1GtPatternGenerator::m_destPath [private]

an algorithm and a condition in that algorithm to test the object maps

Definition at line 85 of file L1GtPatternGenerator.h.

input tags for regional muon data

Definition at line 79 of file L1GtPatternGenerator.h.

Referenced by analyze(), and L1GtPatternGenerator().

std::string L1GtPatternGenerator::m_fileName [private]

output file name

Definition at line 88 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

std::ofstream L1GtPatternGenerator::m_fileStream [private]

Definition at line 89 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and endJob().

std::string L1GtPatternGenerator::m_footer [private]

Definition at line 94 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

input tag for GCT data

Definition at line 70 of file L1GtPatternGenerator.h.

Referenced by analyze(), and L1GtPatternGenerator().

input tag for GMT data

Definition at line 73 of file L1GtPatternGenerator.h.

Referenced by analyze(), and L1GtPatternGenerator().

input tag for GT data

Definition at line 76 of file L1GtPatternGenerator.h.

Referenced by extractGlobalTriggerData(), and L1GtPatternGenerator().

std::string L1GtPatternGenerator::m_header [private]

formatting instructions

Definition at line 93 of file L1GtPatternGenerator.h.

Referenced by beginJob(), and L1GtPatternGenerator().

Definition at line 81 of file L1GtPatternGenerator.h.

Referenced by analyze(), and L1GtPatternGenerator().

Definition at line 82 of file L1GtPatternGenerator.h.

Referenced by analyze(), and L1GtPatternGenerator().

Definition at line 101 of file L1GtPatternGenerator.h.

Referenced by analyze(), beginJob(), and endJob().