CMS 3D CMS Logo

HcalZeroSuppressionAlgo.cc

Go to the documentation of this file.
00001 #include "SimCalorimetry/HcalZeroSuppressionAlgos/interface/HcalZeroSuppressionAlgo.h"
00002 #include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h"
00003 
00004 HcalZeroSuppressionAlgo::HcalZeroSuppressionAlgo(ZSMode mode) : m_mode(mode) {
00005 }
00006 
00007 
00008 void HcalZeroSuppressionAlgo::suppress(const HBHEDigiCollection& input, HBHEDigiCollection& output) {
00009   HBHEDigiCollection::const_iterator i;
00010   if (m_mode==zs_SingleChannel) {
00011     for (i=input.begin(); i!=input.end(); ++i) 
00012       if (shouldKeep(*i)) output.push_back(*i);
00013   } else if (m_mode==zs_TriggerTowerOR || m_mode==zs_AllDepthsOR) {
00014     HcalTrigTowerGeometry ttg;
00015     std::set<HcalTrigTowerDetId> passed;
00016     // get list of above-threshold trigger tower ids
00017     for (i=input.begin(); i!=input.end(); ++i) 
00018       if (shouldKeep(*i)) {
00019         std::vector<HcalTrigTowerDetId> tids=ttg.towerIds(i->id());
00020         if (!tids.empty()) passed.insert(tids[0]); // only use the first (order is stable for all channels)
00021       }
00022     // loop over digis again, checking to see if trig tower had passed
00023     for (i=input.begin(); i!=input.end(); ++i) {
00024       std::vector<HcalTrigTowerDetId> tids=ttg.towerIds(i->id());
00025       if (!tids.empty() && passed.find(tids[0])!=passed.end()) output.push_back(*i);
00026     }
00027   }
00028 }
00029 
00030 void HcalZeroSuppressionAlgo::suppress(const HFDigiCollection& input, HFDigiCollection& output) {
00031   HFDigiCollection::const_iterator i;
00032   if (m_mode==zs_SingleChannel) {   
00033     for (i=input.begin(); i!=input.end(); ++i) 
00034       if (shouldKeep(*i)) output.push_back(*i);
00035   } else if (m_mode==zs_TriggerTowerOR) {
00036     HcalTrigTowerGeometry ttg;
00037     std::set<HcalTrigTowerDetId> passed;
00038     // get list of above-threshold trigger tower ids
00039     for (i=input.begin(); i!=input.end(); ++i) 
00040       if (shouldKeep(*i)) {
00041         std::vector<HcalTrigTowerDetId> tids=ttg.towerIds(i->id());
00042         if (!tids.empty()) passed.insert(tids[0]); // only use the first (order is stable for all channels)
00043       }
00044     // loop over digis again, checking to see if trig tower had passed
00045     for (i=input.begin(); i!=input.end(); ++i) {
00046       std::vector<HcalTrigTowerDetId> tids=ttg.towerIds(i->id());
00047       if (!tids.empty() && passed.find(tids[0])!=passed.end()) output.push_back(*i);
00048     }
00049   } else if (m_mode==zs_AllDepthsOR) {
00050     std::set<HcalDetId> passed;
00051     // get list of above-threshold trigger tower ids
00052     for (i=input.begin(); i!=input.end(); ++i) 
00053       if (shouldKeep(*i)) {
00054         passed.insert(i->id()); 
00055       }
00056     // loop over digis again, checking to see if trig tower had passed
00057     for (i=input.begin(); i!=input.end(); ++i) {
00058       HcalDetId a(HcalForward,i->id().ieta(),i->id().iphi(),1); // depth 1
00059       HcalDetId b(HcalForward,i->id().ieta(),i->id().iphi(),2); // depth 2
00060       if (passed.find(a)!=passed.end() || passed.find(b)!=passed.end()) output.push_back(*i);
00061     }
00062   }  
00063 }
00064 
00065 void HcalZeroSuppressionAlgo::suppress(const HODigiCollection& input, HODigiCollection& output) {
00066   if (m_mode==zs_SingleChannel || m_mode==zs_TriggerTowerOR || m_mode==zs_AllDepthsOR) {
00067     HODigiCollection::const_iterator i;
00068     for (i=input.begin(); i!=input.end(); ++i) 
00069       if (shouldKeep(*i)) output.push_back(*i);
00070   }
00071 }
00072 
00073 
00074 
00075 

Generated on Tue Jun 9 17:46:30 2009 for CMSSW by  doxygen 1.5.4