-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Sven Dildick
committed
Apr 9, 2021
1 parent
5e29582
commit de1c9b0
Showing
5 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters