Skip to content

Commit

Permalink
ShowerDigi data format
Browse files Browse the repository at this point in the history
  • Loading branch information
Sven Dildick committed Apr 9, 2021
1 parent 5e29582 commit de1c9b0
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 0 deletions.
53 changes: 53 additions & 0 deletions DataFormats/CSCDigi/interface/CSCShowerDigi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#ifndef DataFormats_CSCDigi_CSCShowerDigi_h
#define DataFormats_CSCDigi_CSCShowerDigi_h

#include <cstdint>
#include <iosfwd>
#include <limits>
#include <vector>

class CSCShowerDigi {
public:
// Run-3 definitions as provided in DN-20-033
enum Run3Shower { kInvalid = 0, kLoose = 1, kNominal = 2, kTight = 3 };
enum BitMask { kInTimeMask = 0x2, kOutTimeMask = 0x2 };
enum BitShift { kInTimeShift = 0, kOutTimeShift = 2 };

/// Constructors
CSCShowerDigi(const uint16_t inTimeBits, const uint16_t outTimeBits, const uint16_t cscID);
/// default
CSCShowerDigi();

/// clear this Shower
void clear() { bits_ = 0; }

/// data
bool isValid() const;

bool isLooseInTime() const;
bool isNominalInTime() const;
bool isTightInTime() const;
bool isLooseOutTime() const;
bool isNominalOutTime() const;
bool isTightOutTime() const;

uint16_t bits() const { return bits_; }
uint16_t bitsInTime() const;
uint16_t bitsOutTime() const;

uint16_t getCSCID() const { return cscID_; }

/// set cscID
void setCSCID(const uint16_t c) { cscID_ = c; }

private:
void setDataWord(const uint16_t newWord, uint16_t& word, const unsigned shift, const unsigned mask);
uint16_t getDataWord(const uint16_t word, const unsigned shift, const unsigned mask) const;

uint16_t bits_;
// 4-bit CSC chamber identifier
uint16_t cscID_;
};

std::ostream& operator<<(std::ostream& o, const CSCShowerDigi& digi);
#endif
10 changes: 10 additions & 0 deletions DataFormats/CSCDigi/interface/CSCShowerDigiCollection.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#ifndef DataFormats_CSCDigi_CSCShowerDigiCollection_h
#define DataFormats_CSCDigi_CSCShowerDigiCollection_h

#include "DataFormats/MuonDetId/interface/CSCDetId.h"
#include "DataFormats/CSCDigi/interface/CSCShowerDigi.h"
#include "DataFormats/MuonData/interface/MuonDigiCollection.h"

typedef MuonDigiCollection<CSCDetId, CSCShowerDigi> CSCShowerDigiCollection;

#endif
51 changes: 51 additions & 0 deletions DataFormats/CSCDigi/src/CSCShowerDigi.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include "DataFormats/CSCDigi/interface/CSCShowerDigi.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include <iomanip>
#include <iostream>

using namespace std;

/// Constructors
CSCShowerDigi::CSCShowerDigi(const uint16_t bitsInTime, const uint16_t bitsOutTime, const uint16_t cscID)
: cscID_(cscID) {
setDataWord(bitsInTime, bits_, kInTimeShift, kInTimeMask);
setDataWord(bitsOutTime, bits_, kOutTimeShift, kOutTimeMask);
}

/// Default
CSCShowerDigi::CSCShowerDigi() : bits_(0), cscID_(0) {}

bool CSCShowerDigi::isValid() const {
// any loose shower is valid
return isLooseInTime() or isLooseOutTime();
}

bool CSCShowerDigi::isLooseInTime() const { return bitsInTime() >= kLoose; }

bool CSCShowerDigi::isNominalInTime() const { return bitsInTime() >= kNominal; }

bool CSCShowerDigi::isTightInTime() const { return bitsInTime() >= kTight; }

bool CSCShowerDigi::isLooseOutTime() const { return bitsOutTime() >= kLoose; }

bool CSCShowerDigi::isNominalOutTime() const { return bitsOutTime() >= kNominal; }

bool CSCShowerDigi::isTightOutTime() const { return bitsOutTime() >= kTight; }

uint16_t CSCShowerDigi::bitsInTime() const { return getDataWord(bits_, kInTimeShift, kInTimeMask); }

uint16_t CSCShowerDigi::bitsOutTime() const { return getDataWord(bits_, kOutTimeShift, kOutTimeMask); }

void CSCShowerDigi::setDataWord(const uint16_t newWord, uint16_t& word, const unsigned shift, const unsigned mask) {
// clear the old value
word &= ~(mask << shift);

// set the new value
word |= newWord << shift;
}

uint16_t CSCShowerDigi::getDataWord(const uint16_t word, const unsigned shift, const unsigned mask) const {
return (word >> shift) & mask;
}

std::ostream& operator<<(std::ostream& o, const CSCShowerDigi& digi) { return o << "CSC Shower: " << digi.bits(); }
2 changes: 2 additions & 0 deletions DataFormats/CSCDigi/src/classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
#include "DataFormats/CSCDigi/interface/CSCCLCTPreTriggerDigiCollection.h"
#include "DataFormats/CSCDigi/interface/CSCALCTPreTriggerDigi.h"
#include "DataFormats/CSCDigi/interface/CSCALCTPreTriggerDigiCollection.h"
#include "DataFormats/CSCDigi/interface/CSCShowerDigi.h"
#include "DataFormats/CSCDigi/interface/CSCShowerDigiCollection.h"

// dummy structs to ensure backward compatibility
struct GEMCSCLCTDigi {};
Expand Down
8 changes: 8 additions & 0 deletions DataFormats/CSCDigi/src/classes_def.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
<class name="CSCALCTPreTriggerDigi" ClassVersion="10">
<version ClassVersion="10" checksum="2925979693"/>
</class>
<class name="CSCShowerDigi" ClassVersion="10">
<version ClassVersion="10" checksum="3566030124"/>
</class>
<class name="CSCCFEBStatusDigi" ClassVersion="10">
<version ClassVersion="10" checksum="3752412263"/>
</class>
Expand Down Expand Up @@ -76,6 +79,7 @@
<class name="std::vector<CSCDDUStatusDigi>"/>
<class name="std::vector<CSCDCCStatusDigi>"/>
<class name="std::vector<CSCALCTStatusDigi>"/>
<class name="std::vector<CSCShowerDigi>"/>

<class name="std::map<CSCDetId,std::vector<CSCWireDigi> >"/>
<class name="std::map<CSCDetId,std::vector<CSCRPCDigi> >"/>
Expand All @@ -95,6 +99,7 @@
<class name="std::map<CSCDetId,std::vector<CSCDCCStatusDigi> >"/>
<class name="std::map<CSCDetId,std::vector<CSCALCTStatusDigi> >"/>
<class name="std::map<CSCDetId,std::vector<CSCCLCTPreTrigger> >"/>
<class name="std::map<CSCDetId,std::vector<CSCShowerDigi> >"/>

<class name="std::pair<CSCDetId,std::vector<CSCWireDigi> >"/>
<class name="std::pair<CSCDetId,std::vector<CSCRPCDigi> >"/>
Expand All @@ -114,6 +119,7 @@
<class name="std::pair<CSCDetId,std::vector<CSCDCCStatusDigi> >"/>
<class name="std::pair<CSCDetId,std::vector<CSCALCTStatusDigi> >"/>
<class name="std::pair<CSCDetId,std::vector<CSCCLCTPreTrigger> >"/>
<class name="std::pair<CSCDetId,std::vector<CSCShowerDigi> >"/>


<class name="MuonDigiCollection<CSCDetId,CSCWireDigi>"/>
Expand All @@ -134,6 +140,7 @@
<class name="MuonDigiCollection<CSCDetId,CSCDDUStatusDigi>"/>
<class name="MuonDigiCollection<CSCDetId,CSCALCTStatusDigi>"/>
<class name="MuonDigiCollection<CSCDetId,CSCCLCTPreTrigger>"/>
<class name="MuonDigiCollection<CSCDetId,CSCShowerDigi>"/>

<class name="edm::Wrapper<MuonDigiCollection<CSCDetId,CSCWireDigi>>" splitLevel="0"/>
<class name="edm::Wrapper<MuonDigiCollection<CSCDetId,CSCRPCDigi>>" splitLevel="0"/>
Expand All @@ -153,5 +160,6 @@
<class name="edm::Wrapper<MuonDigiCollection<CSCDetId,CSCDDUStatusDigi> >" splitLevel="0"/>
<class name="edm::Wrapper<MuonDigiCollection<CSCDetId,CSCALCTStatusDigi> >" splitLevel="0"/>
<class name="edm::Wrapper<MuonDigiCollection<CSCDetId,CSCCLCTPreTrigger> >" splitLevel="0"/>
<class name="edm::Wrapper<MuonDigiCollection<CSCDetId,CSCShowerDigi> >" splitLevel="0"/>

</lcgdict>

0 comments on commit de1c9b0

Please sign in to comment.