CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
l1t::GenToInputProducer Class Reference
Inheritance diagram for l1t::GenToInputProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 GenToInputProducer (const ParameterSet &)
 
 ~GenToInputProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

virtual void beginJob ()
 
virtual void beginRun (Run const &iR, EventSetup const &iE)
 
int convertEtaToHW (double ieta, double minEta, double maxEta, int steps)
 
int convertPhiToHW (double iphi, int steps)
 
int convertPtToHW (double ipt, int maxPt, double step)
 
virtual void endJob ()
 
virtual void endRun (Run const &iR, EventSetup const &iE)
 
virtual void produce (Event &, EventSetup const &)
 

Private Attributes

int bxFirst_
 
int bxLast_
 
int counter_
 
std::vector< l1t::EGammaegammaVec_bx0
 
std::vector< l1t::EGammaegammaVec_bxm1
 
std::vector< l1t::EGammaegammaVec_bxm2
 
std::vector< l1t::EGammaegammaVec_bxp1
 
double egEtThreshold_
 
int emptyBxEvt_
 
int emptyBxTrailer_
 
std::vector< l1t::EtSumetsumVec_bx0
 
std::vector< l1t::EtSumetsumVec_bxm1
 
std::vector< l1t::EtSumetsumVec_bxm2
 
std::vector< l1t::EtSumetsumVec_bxp1
 
int eventCnt_
 
GlobalExtBlk extCond_bx0
 
GlobalExtBlk extCond_bxm1
 
GlobalExtBlk extCond_bxm2
 
GlobalExtBlk extCond_bxp1
 
edm::EDGetTokenT< reco::GenJetCollectiongenJetsToken
 
edm::EDGetTokenT< reco::GenMETCollectiongenMetToken
 
edm::EDGetTokenT< reco::GenParticleCollectiongenParticlesToken
 
TRandom3 * gRandom
 
double jetEtThreshold_
 
std::vector< l1t::JetjetVec_bx0
 
std::vector< l1t::JetjetVec_bxm1
 
std::vector< l1t::JetjetVec_bxm2
 
std::vector< l1t::JetjetVec_bxp1
 
unsigned long long m_paramsCacheId
 
int maxNumEGCands_
 
int maxNumJetCands_
 
int maxNumMuCands_
 
int maxNumTauCands_
 
double muEtThreshold_
 
std::vector< l1t::MuonmuonVec_bx0
 
std::vector< l1t::MuonmuonVec_bxm1
 
std::vector< l1t::MuonmuonVec_bxm2
 
std::vector< l1t::MuonmuonVec_bxp1
 
double tauEtThreshold_
 
std::vector< l1t::TautauVec_bx0
 
std::vector< l1t::TautauVec_bxm1
 
std::vector< l1t::TautauVec_bxm2
 
std::vector< l1t::TautauVec_bxp1
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- 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

Description: Create Input Collections for the GT from MC gen particles. Allows testing of emulation.

Author
: D. Puigh OSU

Modeled after FakeInputProducer.cc

Definition at line 60 of file GenToInputProducer.cc.

Constructor & Destructor Documentation

l1t::GenToInputProducer::GenToInputProducer ( const ParameterSet iConfig)
explicit

Definition at line 147 of file GenToInputProducer.cc.

References edm::ParameterSet::getParameter(), and AlCaHLTBitMon_QueryRunRegistry::string.

148  {
149  // register what you produce
150  produces<BXVector<l1t::EGamma>>();
151  produces<BXVector<l1t::Muon>>();
152  produces<BXVector<l1t::Tau>>();
153  produces<BXVector<l1t::Jet>>();
154  produces<BXVector<l1t::EtSum>>();
155  produces<GlobalExtBlkBxCollection>();
156 
157  // Setup parameters
158  bxFirst_ = iConfig.getParameter<int>("bxFirst");
159  bxLast_ = iConfig.getParameter<int>("bxLast");
160 
161  maxNumMuCands_ = iConfig.getParameter<int>("maxMuCand");
162  maxNumJetCands_ = iConfig.getParameter<int>("maxJetCand");
163  maxNumEGCands_ = iConfig.getParameter<int>("maxEGCand");
164  maxNumTauCands_ = iConfig.getParameter<int>("maxTauCand");
165 
166  jetEtThreshold_ = iConfig.getParameter<double>("jetEtThreshold");
167  tauEtThreshold_ = iConfig.getParameter<double>("tauEtThreshold");
168  egEtThreshold_ = iConfig.getParameter<double>("egEtThreshold");
169  muEtThreshold_ = iConfig.getParameter<double>("muEtThreshold");
170 
171 
172  emptyBxTrailer_ = iConfig.getParameter<int>("emptyBxTrailer");
173  emptyBxEvt_ = iConfig.getParameter<int>("emptyBxEvt");
174 
175 
176  genParticlesToken = consumes <reco::GenParticleCollection> (std::string("genParticles"));
177  genJetsToken = consumes <reco::GenJetCollection> (std::string("ak4GenJets"));
178  genMetToken = consumes <reco::GenMETCollection> (std::string("genMetCalo"));
179 
180 
181  // set cache id to zero, will be set at first beginRun:
182  m_paramsCacheId = 0;
183  eventCnt_ = 0;
184  }
T getParameter(std::string const &) const
unsigned long long m_paramsCacheId
edm::EDGetTokenT< reco::GenJetCollection > genJetsToken
edm::EDGetTokenT< reco::GenMETCollection > genMetToken
edm::EDGetTokenT< reco::GenParticleCollection > genParticlesToken
l1t::GenToInputProducer::~GenToInputProducer ( )

Definition at line 187 of file GenToInputProducer.cc.

188  {
189  }

Member Function Documentation

void l1t::GenToInputProducer::beginJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 701 of file GenToInputProducer.cc.

702 {
703 }
void l1t::GenToInputProducer::beginRun ( Run const &  iR,
EventSetup const &  iE 
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 712 of file GenToInputProducer.cc.

References LogDebug.

712  {
713 
714  LogDebug("GtGenToInputProducer") << "GenToInputProducer::beginRun function called...\n";
715 
716  counter_ = 0;
717  srand( 0 );
718 
719  gRandom = new TRandom3();
720 }
#define LogDebug(id)
int l1t::GenToInputProducer::convertEtaToHW ( double  ieta,
double  minEta,
double  maxEta,
int  steps 
)
private

Definition at line 739 of file GenToInputProducer.cc.

References createfilelist::int, and cutBasedElectronID_CSA14_50ns_V0_cff::minEta.

739  {
740 
741  double binWidth = (maxEta - minEta)/steps;
742 
743  //if we are outside the limits, set error
744  if(ieta < minEta) return 99999;//ieta = minEta+binWidth/2.;
745  if(ieta > maxEta) return 99999;//ieta = maxEta-binWidth/2.;
746 
747  int binNum = (int)(ieta/binWidth);
748  if(ieta<0.) binNum--;
749 
750 // unsigned int hwEta = binNum & bitMask;
751 // Remove masking for BXVectors...only assume in raw data
752 
753  return binNum;
754 }
double maxEta
int l1t::GenToInputProducer::convertPhiToHW ( double  iphi,
int  steps 
)
private

Definition at line 729 of file GenToInputProducer.cc.

References createfilelist::int, M_PI, and AlignmentTrackSelector_cfi::phiMax.

729  {
730 
731  double phiMax = 2 * M_PI;
732  if( iphi < 0 ) iphi += 2*M_PI;
733  if( iphi > phiMax) iphi -= phiMax;
734 
735  int hwPhi = int( (iphi/phiMax)*steps + 0.00001 );
736  return hwPhi;
737 }
#define M_PI
int l1t::GenToInputProducer::convertPtToHW ( double  ipt,
int  maxPt,
double  step 
)
private

Definition at line 756 of file GenToInputProducer.cc.

References createfilelist::int, and MuonErrorMatrixAnalyzer_cfi::maxPt.

756  {
757 
758  int hwPt = int( ipt/step + 0.0001 );
759  // if above max Pt, set to largest value
760  if( hwPt > maxPt ) hwPt = maxPt;
761 
762  return hwPt;
763 }
step
void l1t::GenToInputProducer::endJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 707 of file GenToInputProducer.cc.

707  {
708 }
void l1t::GenToInputProducer::endRun ( Run const &  iR,
EventSetup const &  iE 
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 723 of file GenToInputProducer.cc.

723  {
724 
725 }
void l1t::GenToInputProducer::fillDescriptions ( ConfigurationDescriptions descriptions)
static

Definition at line 768 of file GenToInputProducer.cc.

References edm::ConfigurationDescriptions::addDefault(), DEFINE_FWK_MODULE, and edm::ParameterSetDescription::setUnknown().

768  {
769  //The following says we do not know what parameters are allowed so do no validation
770  // Please change this to state exactly what you do use, even if it is no parameters
772  desc.setUnknown();
773  descriptions.addDefault(desc);
774 }
void addDefault(ParameterSetDescription const &psetDescription)
void l1t::GenToInputProducer::produce ( Event ,
EventSetup const &   
)
privatevirtual

Implements edm::EDProducer.

Definition at line 199 of file GenToInputProducer.cc.

References funct::abs(), ALCARECOTkAlJpsiMuMu_cff::charge, reco::Candidate::charge(), debug, stringResolutionProvider_cfi::eta, reco::Candidate::eta(), edm::EventID::event(), patPFMETCorrections_cff::genJets, HepMCValidationHelper::genMet(), GenHFHadronMatcher_cfi::genParticles, edm::Event::getByToken(), mps_fire::i, edm::EventBase::id(), createfilelist::int, objects.IsoTrackAnalyzer::isoSum, metsig::jet, fwrapper::jets, gen::k, L1Analysis::kMissingEt, L1Analysis::kMissingHt, L1Analysis::kTotalEt, L1Analysis::kTotalHt, LogDebug, LogTrace, eostools::move(), RPCpg::mu, electronCleaner_cfi::muons, ecaldqm::nTowers, p4, cosmictrackingParticleSelector_cfi::pdgId, reco::Candidate::pdgId(), reco::Candidate::phi(), EnergyCorrector::pt, reco::Candidate::pt(), edm::Event::put(), GlobalExtBlk::reset(), GlobalExtBlk::setExternalDecision(), mps_update::status, reco::Candidate::status(), objects.METAnalyzer::sumEt, GlobalPosition_Frontier_DevDB_cff::tag, metsig::tau, and jetCleaner_cfi::taus.

200 {
201 
202  eventCnt_++;
203 
204  LogDebug("GtGenToInputProducer") << "GenToInputProducer::produce function called...\n";
205 
206  // Setup vectors
207  std::vector<l1t::Muon> muonVec;
208  std::vector<l1t::EGamma> egammaVec;
209  std::vector<l1t::Tau> tauVec;
210  std::vector<l1t::Jet> jetVec;
211  std::vector<l1t::EtSum> etsumVec;
212  GlobalExtBlk extCond_bx;
213 
214  // Set the range of BX....TO DO...move to Params or determine from param set.
215  int bxFirst = bxFirst_;
216  int bxLast = bxLast_;
217 
218 
219  // Default values objects
220  double MaxLepPt_ = 255;
221  double MaxJetPt_ = 1023;
222  double MaxEt_ = 2047;
223 
224  double MaxCaloEta_ = 5.0;
225  double MaxMuonEta_ = 2.45;
226 
227  double PhiStepCalo_ = 144;
228  double PhiStepMuon_ = 576;
229 
230  // eta scale
231  double EtaStepCalo_ = 230;
232  double EtaStepMuon_ = 450;
233 
234  // Et scale (in GeV)
235  double PtStep_ = 0.5;
236 
237 
238  //outputs
239  std::unique_ptr<l1t::EGammaBxCollection> egammas (new l1t::EGammaBxCollection(0, bxFirst, bxLast));
240  std::unique_ptr<l1t::MuonBxCollection> muons (new l1t::MuonBxCollection(0, bxFirst, bxLast));
241  std::unique_ptr<l1t::TauBxCollection> taus (new l1t::TauBxCollection(0, bxFirst, bxLast));
242  std::unique_ptr<l1t::JetBxCollection> jets (new l1t::JetBxCollection(0, bxFirst, bxLast));
243  std::unique_ptr<l1t::EtSumBxCollection> etsums (new l1t::EtSumBxCollection(0, bxFirst, bxLast));
244  std::unique_ptr<GlobalExtBlkBxCollection> extCond( new GlobalExtBlkBxCollection(0,bxFirst,bxLast));
245 
246  std::vector<int> mu_cands_index;
247  std::vector<int> eg_cands_index;
248  std::vector<int> tau_cands_index;
250  // Make sure that you can get genParticles
251  if( iEvent.getByToken(genParticlesToken, genParticles) ){
252 
253  for( size_t k = 0; k < genParticles->size(); k++ ){
254  const reco::Candidate & mcParticle = (*genParticles)[k];
255 
256  int status = mcParticle.status();
257  int pdgId = mcParticle.pdgId();
258  double pt = mcParticle.pt();
259 
260  // Only use status 1 particles (Tau's need to be allowed through..take status 2 taus)
261  if( status!=1 && !(abs(pdgId)==15 && status==2) ) continue;
262 
263  int absId = abs(pdgId);
264 
265  if( absId==11 && pt>=egEtThreshold_ ) eg_cands_index.push_back(k);
266  else if( absId==13 && pt>=muEtThreshold_ ) mu_cands_index.push_back(k);
267  else if( absId==15 && pt>=tauEtThreshold_ ) tau_cands_index.push_back(k);
268  }
269  }
270  else {
271  LogTrace("GtGenToInputProducer") << ">>> GenParticles collection not found!" << std::endl;
272  }
273 
274 
275 
276  // Muon Collection
277  int numMuCands = int( mu_cands_index.size() );
278  Int_t idxMu[numMuCands];
279  double muPtSorted[numMuCands];
280  for( int iMu=0; iMu<numMuCands; iMu++ ) muPtSorted[iMu] = genParticles->at(mu_cands_index[iMu]).pt();
281 
282  TMath::Sort(numMuCands,muPtSorted,idxMu);
283  for( int iMu=0; iMu<numMuCands; iMu++ ){
284 
285  if( iMu>=maxNumMuCands_ ) continue;
286 
287  const reco::Candidate & mcParticle = (*genParticles)[mu_cands_index[idxMu[iMu]]];
288 
289  int pt = convertPtToHW( mcParticle.pt(), MaxLepPt_, PtStep_ );
290  int eta = convertEtaToHW( mcParticle.eta(), -MaxMuonEta_, MaxMuonEta_, EtaStepMuon_);
291  int phi = convertPhiToHW( mcParticle.phi(), PhiStepMuon_ );
292  int qual = gRandom->Integer(16);//4;
293  int iso = gRandom->Integer(4)%2;//1;
294  int charge = ( mcParticle.charge()<0 ) ? 1 : 0;
295  int chargeValid = 1;
296  int tfMuIdx = 0;
297  int tag = 1;
298  bool debug = false;
299  int isoSum = 0;
300  int dPhi = 0;
301  int dEta = 0;
302  int rank = 0;
303  int hwEtaAtVtx = eta;
304  int hwPhiAtVtx = phi;
305 
306  // Eta outside of acceptance
307  if( eta>=9999 ) continue;
308 
309  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
310 
311  l1t::Muon mu(*p4, pt, eta, phi, qual, charge, chargeValid, iso, tfMuIdx, tag, debug, isoSum, dPhi, dEta, rank, hwEtaAtVtx, hwPhiAtVtx);
312  muonVec.push_back(mu);
313  }
314 
315 
316  // EG Collection
317  int numEgCands = int( eg_cands_index.size() );
318  Int_t idxEg[numEgCands];
319  double egPtSorted[numEgCands];
320  for( int iEg=0; iEg<numEgCands; iEg++ ) egPtSorted[iEg] = genParticles->at(eg_cands_index[iEg]).pt();
321 
322  TMath::Sort(numEgCands,egPtSorted,idxEg);
323  for( int iEg=0; iEg<numEgCands; iEg++ ){
324 
325  if( iEg>=maxNumEGCands_ ) continue;
326 
327  const reco::Candidate & mcParticle = (*genParticles)[eg_cands_index[idxEg[iEg]]];
328 
329  int pt = convertPtToHW( mcParticle.pt(), MaxLepPt_, PtStep_ );
330  int eta = convertEtaToHW( mcParticle.eta(), -MaxCaloEta_, MaxCaloEta_, EtaStepCalo_ );
331  int phi = convertPhiToHW( mcParticle.phi(), PhiStepCalo_ );
332  int qual = 1;
333  int iso = gRandom->Integer(4)%2;
334 
335  // Eta outside of acceptance
336  if( eta>=9999 ) continue;
337 
338  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
339 
340  l1t::EGamma eg(*p4, pt, eta, phi, qual, iso);
341  egammaVec.push_back(eg);
342  }
343 
344 
345 
346  // Tau Collection
347  int numTauCands = int( tau_cands_index.size() );
348  Int_t idxTau[numTauCands];
349  double tauPtSorted[numTauCands];
350  for( int iTau=0; iTau<numTauCands; iTau++ ) tauPtSorted[iTau] = genParticles->at(tau_cands_index[iTau]).pt();
351 
352  TMath::Sort(numTauCands,tauPtSorted,idxTau);
353  for( int iTau=0; iTau<numTauCands; iTau++ ){
354 
355  if( iTau>=maxNumTauCands_ ) continue;
356 
357  const reco::Candidate & mcParticle = (*genParticles)[tau_cands_index[idxTau[iTau]]];
358 
359  int pt = convertPtToHW( mcParticle.pt(), MaxLepPt_, PtStep_ );
360  int eta = convertEtaToHW( mcParticle.eta(), -MaxCaloEta_, MaxCaloEta_, EtaStepCalo_);
361  int phi = convertPhiToHW( mcParticle.phi(), PhiStepCalo_ );
362  int qual = 1;
363  int iso = gRandom->Integer(4)%2;
364 
365  // Eta outside of acceptance
366  if( eta>=9999 ) continue;
367 
368  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
369 
370  l1t::Tau tau(*p4, pt, eta, phi, qual, iso);
371  tauVec.push_back(tau);
372  }
373 
374 
375  // Temporary hack to increase number of EGs and taus
376  int maxOtherEGs = 4;
377  int maxOtherTaus = 8;
378  int numCurrentEGs = int( egammaVec.size() );
379  int numCurrentTaus = int( tauVec.size() );
380 
381  int numExtraEGs=0, numExtraTaus=0;
382  // end hack
383 
384  // Use to sum the energy of the objects in the event for ETT and HTT
385  // sum all jets
386  double sumEt = 0;
387 
388  int nJet = 0;
390  // Make sure that you can get genJets
391  if( iEvent.getByToken(genJetsToken, genJets) ){ // Jet Collection
392  for(reco::GenJetCollection::const_iterator genJet = genJets->begin(); genJet!=genJets->end(); ++genJet ){
393 
394  //Keep running sum of total Et
395  sumEt += genJet->et();
396 
397  // Apply pt and eta cut?
398  if( genJet->pt()<jetEtThreshold_ ) continue;
399 
400  //
401  if( nJet>=maxNumJetCands_ ) continue;
402  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
403 
404  int pt = convertPtToHW( genJet->et(), MaxJetPt_, PtStep_ );
405  int eta = convertEtaToHW( genJet->eta(), -MaxCaloEta_, MaxCaloEta_, EtaStepCalo_ );
406  int phi = convertPhiToHW( genJet->phi(), PhiStepCalo_ );
407 
408  // Eta outside of acceptance
409  if( eta>=9999 ) continue;
410 
411  int qual = 0;
412 
413  l1t::Jet jet(*p4, pt, eta, phi, qual);
414  jetVec.push_back(jet);
415 
416  nJet++;
417 
418  // Temporary hack to increase number of EGs and taus
419  if( (numExtraEGs+numCurrentEGs)<maxNumEGCands_ && numExtraEGs<maxOtherEGs ){
420  numExtraEGs++;
421 
422  int EGpt = convertPtToHW( genJet->et(), MaxLepPt_, PtStep_ );
423  int EGeta = convertEtaToHW( genJet->eta(), -MaxCaloEta_, MaxCaloEta_, EtaStepCalo_ );
424  int EGphi = convertPhiToHW( genJet->phi(), PhiStepCalo_ );
425 
426  int EGqual = 1;
427  int EGiso = gRandom->Integer(4)%2;
428 
429  l1t::EGamma eg(*p4, EGpt, EGeta, EGphi, EGqual, EGiso);
430  egammaVec.push_back(eg);
431  }
432 
433  if( (numExtraTaus+numCurrentTaus)<maxNumTauCands_ && numExtraTaus<maxOtherTaus ){
434  numExtraTaus++;
435 
436  int Taupt = convertPtToHW( genJet->et(), MaxLepPt_, PtStep_ );
437  int Taueta = convertEtaToHW( genJet->eta(), -MaxCaloEta_, MaxCaloEta_, EtaStepCalo_ );
438  int Tauphi = convertPhiToHW( genJet->phi(), PhiStepCalo_ );
439  int Tauqual = 1;
440  int Tauiso = gRandom->Integer(4)%2;
441 
442  l1t::Tau tau(*p4, Taupt, Taueta, Tauphi, Tauqual, Tauiso);
443  tauVec.push_back(tau);
444  }
445  // end hack
446  }
447  }
448  else {
449  LogTrace("GtGenToInputProducer") << ">>> GenJets collection not found!" << std::endl;
450  }
451 
452 
453 // Put the total Et into EtSums (Make HTT slightly smaller to tell them apart....not supposed to be realistic)
454  int pt = convertPtToHW( sumEt, 2047, PtStep_ );
455  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > *p4 = new ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >();
456  l1t::EtSum etTotal(*p4, l1t::EtSum::EtSumType::kTotalEt,pt, 0, 0, 0);
457 
458 // Scale down ETTem as an estimate
459  pt = convertPtToHW( sumEt*0.6, 2047, PtStep_ );
460  l1t::EtSum etEmTotal(*p4, l1t::EtSum::EtSumType::kTotalEtEm,pt, 0, 0, 0);
461 
462  //ccla Generate uniform distribution of tower counts
463  int nTowers=4095*gRandom->Rndm();
464  l1t::EtSum towerCounts(*p4, l1t::EtSum::EtSumType::kTowerCount,nTowers, 0, 0, 0);
465 
466  pt = convertPtToHW( sumEt*0.9, 2047, PtStep_ );
467  l1t::EtSum htTotal(*p4, l1t::EtSum::EtSumType::kTotalHt,pt, 0, 0, 0);
468 
469 // Add EtSums for testing the MinBias Trigger (use some random numbers)
470  int hfP0val = gRandom->Poisson(4.);
471  if(hfP0val>15) hfP0val = 15;
472  l1t::EtSum hfP0(*p4, l1t::EtSum::EtSumType::kMinBiasHFP0,hfP0val, 0, 0, 0);
473 
474  int hfM0val = gRandom->Poisson(4.);
475  if(hfM0val>15) hfM0val = 15;
476  l1t::EtSum hfM0(*p4, l1t::EtSum::EtSumType::kMinBiasHFM0,hfM0val, 0, 0, 0);
477 
478  int hfP1val = gRandom->Poisson(4.);
479  if(hfP1val>15) hfP1val = 15;
480  l1t::EtSum hfP1(*p4, l1t::EtSum::EtSumType::kMinBiasHFP1,hfP1val, 0, 0, 0);
481 
482  int hfM1val = gRandom->Poisson(4.);
483  if(hfM1val>15) hfM1val = 15;
484  l1t::EtSum hfM1(*p4, l1t::EtSum::EtSumType::kMinBiasHFM1,hfM1val, 0, 0, 0);
485 
486 
487  int mpt = 0;
488  int mphi= 0;
489  int mptHf = 0;
490  int mphiHf= 0;
491  int mhpt = 0;
492  int mhphi= 0;
494  // Make sure that you can get genMET
495  if( iEvent.getByToken(genMetToken, genMet) ){
496  mpt = convertPtToHW( genMet->front().pt(), MaxEt_, PtStep_ );
497  mphi = convertPhiToHW( genMet->front().phi(), PhiStepCalo_ );
498 
499  // Make Missing Et with HF slightly largeer and rotated (These are all fake inputs anyway...not supposed to be realistic)
500  mptHf = convertPtToHW( genMet->front().pt()*1.1, MaxEt_, PtStep_ );
501  mphiHf = convertPhiToHW( genMet->front().phi()+ 3.14/7., PhiStepCalo_ );
502 
503  // Make Missing Ht slightly smaller and rotated (These are all fake inputs anyway...not supposed to be realistic)
504  mhpt = convertPtToHW( genMet->front().pt()*0.9, MaxEt_, PtStep_ );
505  mhphi = convertPhiToHW( genMet->front().phi()+ 3.14/5., PhiStepCalo_ );
506  }
507  else {
508  LogTrace("GtGenToInputProducer") << ">>> GenMet collection not found!" << std::endl;
509  }
510 
511 // Missing Et and missing htt
512  l1t::EtSum etmiss(*p4, l1t::EtSum::EtSumType::kMissingEt,mpt, 0,mphi, 0);
513  l1t::EtSum etmissHF(*p4, l1t::EtSum::EtSumType::kMissingEtHF,mptHf, 0,mphiHf, 0);
514  l1t::EtSum htmiss(*p4, l1t::EtSum::EtSumType::kMissingHt,mhpt, 0,mhphi, 0);
515 
516 // Fill the EtSums in the Correct order
517  etsumVec.push_back(etTotal);
518  etsumVec.push_back(etEmTotal);
519  etsumVec.push_back(hfP0);
520  etsumVec.push_back(htTotal);
521  etsumVec.push_back(hfM0);
522  etsumVec.push_back(etmiss);
523  etsumVec.push_back(hfP1);
524  etsumVec.push_back(htmiss);
525  etsumVec.push_back(hfM1);
526  etsumVec.push_back(etmissHF);
527  etsumVec.push_back(towerCounts);
528 
529 // Fill in some external conditions for testing
530  if((iEvent.id().event())%2 == 0 ) {
531  for(int i=0; i<255; i=i+2) extCond_bx.setExternalDecision(i,true);
532  } else {
533  for(int i=1; i<255; i=i+2) extCond_bx.setExternalDecision(i,true);
534  }
535 
536  // Insert all the bx into the L1 Collections
537  //printf("Event %i EmptyBxEvt %i emptyBxTrailer %i diff %i \n",eventCnt_,emptyBxEvt_,emptyBxTrailer_,(emptyBxEvt_ - eventCnt_));
538 
539  // Fill Muons
540  for( int iMu=0; iMu<int(muonVec_bxm2.size()); iMu++ ){
541  muons->push_back(-2, muonVec_bxm2[iMu]);
542  }
543  for( int iMu=0; iMu<int(muonVec_bxm1.size()); iMu++ ){
544  muons->push_back(-1, muonVec_bxm1[iMu]);
545  }
546  for( int iMu=0; iMu<int(muonVec_bx0.size()); iMu++ ){
547  muons->push_back(0, muonVec_bx0[iMu]);
548  }
549  for( int iMu=0; iMu<int(muonVec_bxp1.size()); iMu++ ){
550  muons->push_back(1, muonVec_bxp1[iMu]);
551  }
553  for( int iMu=0; iMu<int(muonVec.size()); iMu++ ){
554  muons->push_back(2, muonVec[iMu]);
555  }
556  } else {
557  // this event is part of empty trailer...clear out data
558  muonVec.clear();
559  }
560 
561  // Fill Egammas
562  for( int iEG=0; iEG<int(egammaVec_bxm2.size()); iEG++ ){
563  egammas->push_back(-2, egammaVec_bxm2[iEG]);
564  }
565  for( int iEG=0; iEG<int(egammaVec_bxm1.size()); iEG++ ){
566  egammas->push_back(-1, egammaVec_bxm1[iEG]);
567  }
568  for( int iEG=0; iEG<int(egammaVec_bx0.size()); iEG++ ){
569  egammas->push_back(0, egammaVec_bx0[iEG]);
570  }
571  for( int iEG=0; iEG<int(egammaVec_bxp1.size()); iEG++ ){
572  egammas->push_back(1, egammaVec_bxp1[iEG]);
573  }
575  for( int iEG=0; iEG<int(egammaVec.size()); iEG++ ){
576  egammas->push_back(2, egammaVec[iEG]);
577  }
578  } else {
579  // this event is part of empty trailer...clear out data
580  egammaVec.clear();
581  }
582 
583  // Fill Taus
584  for( int iTau=0; iTau<int(tauVec_bxm2.size()); iTau++ ){
585  taus->push_back(-2, tauVec_bxm2[iTau]);
586  }
587  for( int iTau=0; iTau<int(tauVec_bxm1.size()); iTau++ ){
588  taus->push_back(-1, tauVec_bxm1[iTau]);
589  }
590  for( int iTau=0; iTau<int(tauVec_bx0.size()); iTau++ ){
591  taus->push_back(0, tauVec_bx0[iTau]);
592  }
593  for( int iTau=0; iTau<int(tauVec_bxp1.size()); iTau++ ){
594  taus->push_back(1, tauVec_bxp1[iTau]);
595  }
597  for( int iTau=0; iTau<int(tauVec.size()); iTau++ ){
598  taus->push_back(2, tauVec[iTau]);
599  }
600  } else {
601  // this event is part of empty trailer...clear out data
602  tauVec.clear();
603  }
604 
605  // Fill Jets
606  for( int iJet=0; iJet<int(jetVec_bxm2.size()); iJet++ ){
607  jets->push_back(-2, jetVec_bxm2[iJet]);
608  }
609  for( int iJet=0; iJet<int(jetVec_bxm1.size()); iJet++ ){
610  jets->push_back(-1, jetVec_bxm1[iJet]);
611  }
612  for( int iJet=0; iJet<int(jetVec_bx0.size()); iJet++ ){
613  jets->push_back(0, jetVec_bx0[iJet]);
614  }
615  for( int iJet=0; iJet<int(jetVec_bxp1.size()); iJet++ ){
616  jets->push_back(1, jetVec_bxp1[iJet]);
617  }
619  for( int iJet=0; iJet<int(jetVec.size()); iJet++ ){
620  jets->push_back(2, jetVec[iJet]);
621  }
622  } else {
623  // this event is part of empty trailer...clear out data
624  jetVec.clear();
625  }
626 
627  // Fill Etsums
628  for( int iETsum=0; iETsum<int(etsumVec_bxm2.size()); iETsum++ ){
629  etsums->push_back(-2, etsumVec_bxm2[iETsum]);
630  }
631  for( int iETsum=0; iETsum<int(etsumVec_bxm1.size()); iETsum++ ){
632  etsums->push_back(-1, etsumVec_bxm1[iETsum]);
633  }
634  for( int iETsum=0; iETsum<int(etsumVec_bx0.size()); iETsum++ ){
635  etsums->push_back(0, etsumVec_bx0[iETsum]);
636  }
637  for( int iETsum=0; iETsum<int(etsumVec_bxp1.size()); iETsum++ ){
638  etsums->push_back(1, etsumVec_bxp1[iETsum]);
639  }
641  for( int iETsum=0; iETsum<int(etsumVec.size()); iETsum++ ){
642  etsums->push_back(2, etsumVec[iETsum]);
643  }
644  } else {
645  // this event is part of empty trailer...clear out data
646  etsumVec.clear();
647  }
648 
649  // Fill Externals
650  extCond->push_back(-2, extCond_bxm2);
651  extCond->push_back(-1, extCond_bxm1);
652  extCond->push_back(0, extCond_bx0);
653  extCond->push_back(1, extCond_bxp1);
655  extCond->push_back(2, extCond_bx);
656  } else {
657  // this event is part of the empty trailer...clear out data
658  extCond_bx.reset();
659  }
660 
661 
662  iEvent.put(std::move(egammas));
663  iEvent.put(std::move(muons));
664  iEvent.put(std::move(taus));
665  iEvent.put(std::move(jets));
666  iEvent.put(std::move(etsums));
667  iEvent.put(std::move(extCond));
668 
669  // Now shift the bx data by one to prepare for next event.
676 
683 
690 
691  muonVec_bxp1 = muonVec;
692  egammaVec_bxp1 = egammaVec;
693  tauVec_bxp1 = tauVec;
694  jetVec_bxp1 = jetVec;
695  etsumVec_bxp1 = etsumVec;
696  extCond_bxp1 = extCond_bx;
697 }
#define LogDebug(id)
BXVector< GlobalExtBlk > GlobalExtBlkBxCollection
Definition: GlobalExtBlk.h:30
std::vector< l1t::EtSum > etsumVec_bxm1
void reset()
reset the content of a GlobalExtBlk
Definition: GlobalExtBlk.cc:75
std::vector< l1t::Muon > muonVec_bxm1
std::vector< l1t::EtSum > etsumVec_bx0
std::vector< l1t::Muon > muonVec_bxp1
Definition: Tau.h:16
std::vector< l1t::Tau > tauVec_bx0
std::vector< l1t::Tau > tauVec_bxp1
std::vector< l1t::Tau > tauVec_bxm2
std::vector< l1t::Muon > muonVec_bxm2
std::vector< l1t::EtSum > etsumVec_bxp1
std::vector< l1t::EGamma > egammaVec_bxm1
Definition: Jet.h:16
virtual int status() const =0
status word
int convertPtToHW(double ipt, int maxPt, double step)
int iEvent
Definition: GenABIO.cc:230
std::vector< l1t::EGamma > egammaVec_bxm2
std::vector< l1t::EGamma > egammaVec_bxp1
edm::EDGetTokenT< reco::GenJetCollection > genJetsToken
virtual int pdgId() const =0
PDG identifier.
double p4[4]
Definition: TauolaWrapper.h:92
std::vector< l1t::Muon > muonVec_bx0
vector< PseudoJet > jets
std::vector< l1t::Tau > tauVec_bxm1
std::vector< l1t::Jet > jetVec_bxm1
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const int mu
Definition: Constants.h:22
std::vector< l1t::Jet > jetVec_bxp1
std::vector< l1t::EGamma > egammaVec_bx0
#define LogTrace(id)
void setExternalDecision(unsigned int bit, bool val)
Set decision bits.
Definition: GlobalExtBlk.cc:52
int convertPhiToHW(double iphi, int steps)
Definition: Muon.h:16
int k[5][pyjets_maxn]
#define debug
Definition: HDRShower.cc:19
virtual double eta() const =0
momentum pseudorapidity
virtual double pt() const =0
transverse momentum
TLorentzVector genMet(const HepMC::GenEvent *all, double etamin=-9999., double etamax=9999.)
int convertEtaToHW(double ieta, double minEta, double maxEta, int steps)
edm::EDGetTokenT< reco::GenMETCollection > genMetToken
virtual int charge() const =0
electric charge
edm::EDGetTokenT< reco::GenParticleCollection > genParticlesToken
isoSum
===> compute the isolation and find the most isolated track
std::vector< l1t::Jet > jetVec_bxm2
std::vector< l1t::EtSum > etsumVec_bxm2
virtual double phi() const =0
momentum azimuthal angle
def move(src, dest)
Definition: eostools.py:510
std::vector< l1t::Jet > jetVec_bx0

Member Data Documentation

int l1t::GenToInputProducer::bxFirst_
private

Definition at line 87 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::bxLast_
private

Definition at line 88 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::counter_
private

Definition at line 110 of file GenToInputProducer.cc.

std::vector<l1t::EGamma> l1t::GenToInputProducer::egammaVec_bx0
private

Definition at line 119 of file GenToInputProducer.cc.

std::vector<l1t::EGamma> l1t::GenToInputProducer::egammaVec_bxm1
private

Definition at line 118 of file GenToInputProducer.cc.

std::vector<l1t::EGamma> l1t::GenToInputProducer::egammaVec_bxm2
private

Definition at line 117 of file GenToInputProducer.cc.

std::vector<l1t::EGamma> l1t::GenToInputProducer::egammaVec_bxp1
private

Definition at line 120 of file GenToInputProducer.cc.

double l1t::GenToInputProducer::egEtThreshold_
private

Definition at line 97 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::emptyBxEvt_
private

Definition at line 102 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::emptyBxTrailer_
private

Definition at line 101 of file GenToInputProducer.cc.

std::vector<l1t::EtSum> l1t::GenToInputProducer::etsumVec_bx0
private

Definition at line 134 of file GenToInputProducer.cc.

std::vector<l1t::EtSum> l1t::GenToInputProducer::etsumVec_bxm1
private

Definition at line 133 of file GenToInputProducer.cc.

std::vector<l1t::EtSum> l1t::GenToInputProducer::etsumVec_bxm2
private

Definition at line 132 of file GenToInputProducer.cc.

std::vector<l1t::EtSum> l1t::GenToInputProducer::etsumVec_bxp1
private

Definition at line 135 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::eventCnt_
private

Definition at line 103 of file GenToInputProducer.cc.

GlobalExtBlk l1t::GenToInputProducer::extCond_bx0
private

Definition at line 139 of file GenToInputProducer.cc.

GlobalExtBlk l1t::GenToInputProducer::extCond_bxm1
private

Definition at line 138 of file GenToInputProducer.cc.

GlobalExtBlk l1t::GenToInputProducer::extCond_bxm2
private

Definition at line 137 of file GenToInputProducer.cc.

GlobalExtBlk l1t::GenToInputProducer::extCond_bxp1
private

Definition at line 140 of file GenToInputProducer.cc.

edm::EDGetTokenT<reco::GenJetCollection> l1t::GenToInputProducer::genJetsToken
private

Definition at line 107 of file GenToInputProducer.cc.

edm::EDGetTokenT<reco::GenMETCollection> l1t::GenToInputProducer::genMetToken
private

Definition at line 108 of file GenToInputProducer.cc.

edm::EDGetTokenT<reco::GenParticleCollection> l1t::GenToInputProducer::genParticlesToken
private

Definition at line 106 of file GenToInputProducer.cc.

TRandom3* l1t::GenToInputProducer::gRandom
private

Definition at line 84 of file GenToInputProducer.cc.

double l1t::GenToInputProducer::jetEtThreshold_
private

Definition at line 95 of file GenToInputProducer.cc.

std::vector<l1t::Jet> l1t::GenToInputProducer::jetVec_bx0
private

Definition at line 129 of file GenToInputProducer.cc.

std::vector<l1t::Jet> l1t::GenToInputProducer::jetVec_bxm1
private

Definition at line 128 of file GenToInputProducer.cc.

std::vector<l1t::Jet> l1t::GenToInputProducer::jetVec_bxm2
private

Definition at line 127 of file GenToInputProducer.cc.

std::vector<l1t::Jet> l1t::GenToInputProducer::jetVec_bxp1
private

Definition at line 130 of file GenToInputProducer.cc.

unsigned long long l1t::GenToInputProducer::m_paramsCacheId
private

Definition at line 79 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::maxNumEGCands_
private

Definition at line 92 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::maxNumJetCands_
private

Definition at line 91 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::maxNumMuCands_
private

Definition at line 90 of file GenToInputProducer.cc.

int l1t::GenToInputProducer::maxNumTauCands_
private

Definition at line 93 of file GenToInputProducer.cc.

double l1t::GenToInputProducer::muEtThreshold_
private

Definition at line 98 of file GenToInputProducer.cc.

std::vector<l1t::Muon> l1t::GenToInputProducer::muonVec_bx0
private

Definition at line 114 of file GenToInputProducer.cc.

std::vector<l1t::Muon> l1t::GenToInputProducer::muonVec_bxm1
private

Definition at line 113 of file GenToInputProducer.cc.

std::vector<l1t::Muon> l1t::GenToInputProducer::muonVec_bxm2
private

Definition at line 112 of file GenToInputProducer.cc.

std::vector<l1t::Muon> l1t::GenToInputProducer::muonVec_bxp1
private

Definition at line 115 of file GenToInputProducer.cc.

double l1t::GenToInputProducer::tauEtThreshold_
private

Definition at line 96 of file GenToInputProducer.cc.

std::vector<l1t::Tau> l1t::GenToInputProducer::tauVec_bx0
private

Definition at line 124 of file GenToInputProducer.cc.

std::vector<l1t::Tau> l1t::GenToInputProducer::tauVec_bxm1
private

Definition at line 123 of file GenToInputProducer.cc.

std::vector<l1t::Tau> l1t::GenToInputProducer::tauVec_bxm2
private

Definition at line 122 of file GenToInputProducer.cc.

std::vector<l1t::Tau> l1t::GenToInputProducer::tauVec_bxp1
private

Definition at line 125 of file GenToInputProducer.cc.