Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CSCShowerDigi data format (HadronicShowerTrigger-1) #33389

Merged
merged 1 commit into from
Apr 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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>