CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
HcalTTPDigiProducer Class Reference

#include <HcalTTPDigiProducer.h>

Inheritance diagram for HcalTTPDigiProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 HcalTTPDigiProducer (const edm::ParameterSet &ps)
 
virtual void produce (edm::Event &e, const edm::EventSetup &c)
 
virtual ~HcalTTPDigiProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

bool decision (int nP, int nM, int bit)
 
bool isMasked (HcalDetId id)
 

Private Attributes

std::string bit_ [4]
 
int calc_ [4]
 
int fwAlgo_
 
int id_
 
int iEtaMax_
 
int iEtaMin_
 
std::vector< unsigned int > maskedChannels_
 
char mReq_ [4]
 
int nHFm_ [4]
 
int nHFp_ [4]
 
int nHits_ [4]
 
char pmLogic_ [4]
 
char pReq_ [4]
 
int presamples_
 
int samples_
 
int SoI_
 
unsigned int threshold_
 
edm::EDGetTokenT
< HFDigiCollection
tok_hf_
 

Static Private Attributes

static const int inputs_ []
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 11 of file HcalTTPDigiProducer.h.

Constructor & Destructor Documentation

HcalTTPDigiProducer::HcalTTPDigiProducer ( const edm::ParameterSet ps)
explicit

Definition at line 23 of file HcalTTPDigiProducer.cc.

References bit_, calc_, edm::hlt::Exception, fwAlgo_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), i, id_, iEtaMax_, iEtaMin_, maskedChannels_, mReq_, nHFm_, nHFp_, nHits_, pmLogic_, pReq_, presamples_, samples_, SoI_, AlCaHLTBitMon_QueryRunRegistry::string, threshold_, and tok_hf_.

24 {
25  tok_hf_ = consumes<HFDigiCollection>(ps.getParameter<edm::InputTag>("HFDigiCollection"));
26  maskedChannels_ = ps.getParameter< std::vector<unsigned int> >("maskedChannels") ;
27  bit_[0] = ps.getParameter<std::string>("defTT8") ;
28  bit_[1] = ps.getParameter<std::string>("defTT9") ;
29  bit_[2] = ps.getParameter<std::string>("defTT10") ;
30  bit_[3] = ps.getParameter<std::string>("defTTLocal") ;
31 
32  for (int i=0; i<4; i++) {
33  nHits_[i] = -1 ; nHFp_[i] = -1 ; nHFm_[i] = -1 ;
34  pReq_[i] = ' ' ; mReq_[i] = ' ' ; pmLogic_[i] = ' ' ;
35  calc_[i] = sscanf(bit_[i].c_str(),"hits>=%d:hfp%c=%d%chfm%c=%d",
36  &(nHits_[i]),&(pReq_[i]),&(nHFp_[i]),
37  &(pmLogic_[i]),&(mReq_[i]),&(nHFm_[i])) ;
38  if ( calc_[i] == 1 ) {
39  if ( nHits_[i] < 0 )
40  throw cms::Exception("HcalTTPDigiProducer")
41  << "Unable to read logic for technical trigger" ;
42  } else if ( calc_[i] == 6 ) {
43  if ( nHits_[i] < 0 || nHFp_[i] < 0 || nHFm_[i] < 0 )
44  throw cms::Exception("HcalTTPDigiProducer")
45  << "Unable to read logic for technical trigger" ;
46  if ( (pReq_[i] != '>' && pReq_[i] != '<') ||
47  (mReq_[i] != '>' && mReq_[i] != '<') ||
48  (pmLogic_[i] != ':' && pmLogic_[i] != '|') )
49  throw cms::Exception("HcalTTPDigiProducer")
50  << "Technical Trigger logic must obey the following format:\n"
51  "\"hits>=[A1]:hfp[B1]=[A2][C]hfm[B2]=[A3]\",\n"
52  "or \"hits>=[A1]\",\n"
53  "with A# >= 0, B# = (</>) and C = (:/|)" ;
54  } else {
55  throw cms::Exception("HcalTTPDigiProducer")
56  << "Unable to read logic for technical trigger" ;
57  }
58  }
59 
60  id_ = ps.getUntrackedParameter<int>("id",-1) ;
61  samples_ = ps.getParameter<int>("samples") ;
62  presamples_ = ps.getParameter<int>("presamples") ;
63  iEtaMin_ = ps.getParameter<int>("iEtaMin") ;
64  iEtaMax_ = ps.getParameter<int>("iEtaMax") ;
65  threshold_ = ps.getParameter<unsigned int>("threshold") ;
66  fwAlgo_ = ps.getParameter<int>("fwAlgorithm") ;
67 
68  SoI_ = ps.getParameter<int>("HFSoI") ;
69 
70  if ( samples_ > 8 ) {
71  samples_ = 8 ;
72  edm::LogWarning("HcalTTPDigiProducer") << "Samples forced to maximum value of 8" ;
73  }
74  if ( presamples_ - SoI_ > 0 ) { // Too many presamples
75  presamples_ = SoI_ ;
76  edm::LogWarning("HcalTTPDigiProducer") << "Presamples reset to HF SoI value" ;
77  }
78 
79  produces<HcalTTPDigiCollection>();
80 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
std::vector< unsigned int > maskedChannels_
edm::EDGetTokenT< HFDigiCollection > tok_hf_
HcalTTPDigiProducer::~HcalTTPDigiProducer ( )
virtual

Definition at line 83 of file HcalTTPDigiProducer.cc.

83  {
84 }

Member Function Documentation

bool HcalTTPDigiProducer::decision ( int  nP,
int  nM,
int  bit 
)
private

Definition at line 93 of file HcalTTPDigiProducer.cc.

References calc_, edm::false, mReq_, nHFm_, nHFp_, nHits_, pmLogic_, and pReq_.

Referenced by produce().

93  {
94 
95  bool pOK = false ; bool mOK = false ;
96  if ( (nP + nM) < nHits_[bit] ) return false ;
97  if ( calc_[bit] == 1 ) return ( (nP + nM) >= nHits_[bit] ) ;
98 
99  if ( pReq_[bit] == '>' ) pOK = ( nP >= nHFp_[bit] ) ;
100  else if ( pReq_[bit] == '<' ) pOK = ( nP <= nHFp_[bit] ) ;
101 
102  if ( mReq_[bit] == '>' ) mOK = ( nM >= nHFm_[bit] ) ;
103  else if ( mReq_[bit] == '<' ) mOK = ( nM <= nHFm_[bit] ) ;
104 
105  if ( pmLogic_[bit] == ':' ) return ( pOK && mOK ) ;
106  else if ( pmLogic_[bit] == '|' ) return ( pOK || mOK ) ;
107 
108  // Should not ever get here...need to create a warning message
109  edm::LogWarning("HcalTTPDigiProducer") << "Trigger logic exhausted. Returning false" ;
110  return false ;
111 }
volatile std::atomic< bool > shutdown_flag false
bool HcalTTPDigiProducer::isMasked ( HcalDetId  id)
private

Definition at line 86 of file HcalTTPDigiProducer.cc.

References edm::false, i, and maskedChannels_.

Referenced by produce().

86  {
87 
88  for ( unsigned int i=0; i<maskedChannels_.size(); i++ )
89  if ( id.rawId() == maskedChannels_.at(i) ) return true ;
90  return false ;
91 }
int i
Definition: DBlmapReader.cc:9
std::vector< unsigned int > maskedChannels_
volatile std::atomic< bool > shutdown_flag false
void HcalTTPDigiProducer::produce ( edm::Event e,
const edm::EventSetup c 
)
virtual

Implements edm::EDProducer.

Definition at line 113 of file HcalTTPDigiProducer.cc.

References decision(), fwAlgo_, edm::EventSetup::get(), edm::Event::getByToken(), i, id_, iEtaMax_, iEtaMin_, inputs_, isMasked(), j, evf::evtn::offset(), presamples_, edm::Event::put(), samples_, HcalTTPDigi::setSample(), edm::shift, SoI_, threshold_, and tok_hf_.

113  {
114 
115  // Step A: Get Inputs
116  edm::Handle<HFDigiCollection> hfDigiCollection ;
117  e.getByToken(tok_hf_,hfDigiCollection) ;
118  edm::ESHandle<HcalTPGCoder> inputCoder ;
119  eventSetup.get<HcalTPGRecord>().get(inputCoder) ;
120 
121  // Step B: Create empty output
122  std::auto_ptr<HcalTTPDigiCollection> ttpResult(new HcalTTPDigiCollection()) ;
123 
124  // Step C: Compute TTP inputs
125  uint16_t trigInputs[40] ;
126  int nP[8] ; int nM[8] ;
127  for (int i=0; i<8; i++) {
128  nP[i] = 0 ; nM[i] = 0 ;
129  for (int j=0; j<5; j++) trigInputs[j*8+i] = 0 ;
130  }
131  for (HFDigiCollection::const_iterator theDigi=hfDigiCollection->begin();
132  theDigi!=hfDigiCollection->end(); theDigi++) {
133  HcalDetId id = HcalDetId(theDigi->id()) ;
134  if ( isMasked(id) ) continue ;
135  if ( id.ietaAbs() < iEtaMin_ || id.ietaAbs() > iEtaMax_ ) continue ;
136 
137  IntegerCaloSamples samples(id,theDigi->size()) ;
138  inputCoder->adc2Linear(*theDigi,samples) ;
139 
140  for (int relSample=-presamples_; relSample<(samples_-presamples_); relSample++) {
141  if ( samples[SoI_+relSample] >= threshold_ ) {
142  int linSample = presamples_ + relSample ;
143  int offset = (-1+id.zside())/2 ;
144  int shift = inputs_[id.iphi()+offset] ;
145  int group = 0 ;
146  while ( shift >= 16 ) { shift -= 16 ; group++ ; }
147  if ( !(trigInputs[(linSample*8)+group]&(1<<shift)) )
148  ( id.ieta() > 0 ) ? ( nP[linSample]++) : ( nM[linSample]++ ) ;
149  trigInputs[(linSample*8)+group] |= (1<<shift) ;
150  }
151  }
152  }
153 
154  // Step D: Compute trigger decision and fill TTP digi
155  uint8_t trigOutput[8] ;
156  uint32_t algoDepBits[8] ;
158  for (int linSample=0; linSample<8; linSample++) {
159  trigOutput[linSample] = 0 ; algoDepBits[linSample] = 0 ;
160  if ( linSample<samples_) {
161  for (int j=0; j<4; j++)
162  trigOutput[linSample] |= (decision(nP[linSample],nM[linSample],j)<<j) ;
163  int nT = nP[linSample] + nM[linSample] ;
164 
165  // Algorithm Dependent bits for FW flavor = 1
166  // NOTE: this disagrees with the fw var. names that implies (LSB) T,M,P (MSB)
167  if ( fwAlgo_ == 1 ) algoDepBits[linSample] = (nT&0x7F) | ((nP[linSample]&0x3F)<<7) | ((nM[linSample]&0x3F)<<13) ;
168  ttpDigi.setSample((linSample-presamples_),&trigInputs[linSample*8],algoDepBits[linSample],trigOutput[linSample]) ;
169  }
170  }
171  ttpResult->push_back( ttpDigi ) ;
172 
173  // Step E: Put outputs into event
174  e.put(ttpResult);
175 }
int i
Definition: DBlmapReader.cc:9
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
std::vector< HFDataFrame >::const_iterator const_iterator
bool isMasked(HcalDetId id)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
static const int inputs_[]
int j
Definition: DBlmapReader.cc:9
bool decision(int nP, int nM, int bit)
unsigned int offset(bool)
edm::SortedCollection< HcalTTPDigi > HcalTTPDigiCollection
edm::EDGetTokenT< HFDigiCollection > tok_hf_
static unsigned int const shift

Member Data Documentation

std::string HcalTTPDigiProducer::bit_[4]
private

Definition at line 27 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer().

int HcalTTPDigiProducer::calc_[4]
private

Definition at line 28 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

int HcalTTPDigiProducer::fwAlgo_
private

Definition at line 32 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

int HcalTTPDigiProducer::id_
private

Definition at line 31 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

int HcalTTPDigiProducer::iEtaMax_
private

Definition at line 33 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

int HcalTTPDigiProducer::iEtaMin_
private

Definition at line 33 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

const int HcalTTPDigiProducer::inputs_
staticprivate
Initial value:
= { 30,66,4,44,4,44,0,68,
0,68,16,48,16,48,6,46,
6,46,2,70,2,70,18,50,
18,50,12,40,12,40,8,52,
8,52,20,36,20,36,14,42,
14,42,10,54,10,54,22,38,
22,38,24,56,24,56,32,60,
32,60,28,64,28,64,26,58,
26,58,34,62,34,62,30,66 }

Definition at line 38 of file HcalTTPDigiProducer.h.

Referenced by produce().

std::vector<unsigned int> HcalTTPDigiProducer::maskedChannels_
private

Definition at line 26 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and isMasked().

char HcalTTPDigiProducer::mReq_[4]
private

Definition at line 30 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

int HcalTTPDigiProducer::nHFm_[4]
private

Definition at line 29 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

int HcalTTPDigiProducer::nHFp_[4]
private

Definition at line 29 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

int HcalTTPDigiProducer::nHits_[4]
private

Definition at line 29 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

char HcalTTPDigiProducer::pmLogic_[4]
private

Definition at line 30 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

char HcalTTPDigiProducer::pReq_[4]
private

Definition at line 30 of file HcalTTPDigiProducer.h.

Referenced by decision(), and HcalTTPDigiProducer().

int HcalTTPDigiProducer::presamples_
private

Definition at line 31 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

int HcalTTPDigiProducer::samples_
private

Definition at line 31 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

int HcalTTPDigiProducer::SoI_
private

Definition at line 36 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

unsigned int HcalTTPDigiProducer::threshold_
private

Definition at line 34 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().

edm::EDGetTokenT<HFDigiCollection> HcalTTPDigiProducer::tok_hf_
private

Definition at line 25 of file HcalTTPDigiProducer.h.

Referenced by HcalTTPDigiProducer(), and produce().