CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ZdcHitReconstructor.cc
Go to the documentation of this file.
1 #include "ZdcHitReconstructor.h"
13 
14 #include <iostream>
15 
16 /* Zdc Hit reconstructor allows for CaloRecHits with status words */
17 
19  reco_(conf.getParameter<bool>("correctForTimeslew"),
20  conf.getParameter<bool>("correctForPhaseContainment"),
21  conf.getParameter<double>("correctionPhaseNS"),
22  conf.getParameter<int>("recoMethod"),
23  conf.getParameter<int>("lowGainOffset"),
24  conf.getParameter<double>("lowGainFrac")),
25  det_(DetId::Hcal),
26  correctTiming_(conf.getParameter<bool>("correctTiming")),
27  setNoiseFlags_(conf.getParameter<bool>("setNoiseFlags")),
28  setHSCPFlags_(conf.getParameter<bool>("setHSCPFlags")),
29  setSaturationFlags_(conf.getParameter<bool>("setSaturationFlags")),
30  setTimingTrustFlags_(conf.getParameter<bool>("setTimingTrustFlags")),
31  dropZSmarkedPassed_(conf.getParameter<bool>("dropZSmarkedPassed")),
32  AuxTSvec_(conf.getParameter<std::vector<int> >("AuxTSvec")),
33  myobject(0),
34  theTopology(0)
35 
36 {
37  tok_input_ = consumes<ZDCDigiCollection>(conf.getParameter<edm::InputTag>("digiLabel"));
38 
39  std::sort(AuxTSvec_.begin(),AuxTSvec_.end()); // sort vector in ascending TS order
40  std::string subd=conf.getParameter<std::string>("Subdetector");
41 
43  {
44  const edm::ParameterSet& pssat = conf.getParameter<edm::ParameterSet>("saturationParameters");
45  saturationFlagSetter_ = new HcalADCSaturationFlag(pssat.getParameter<int>("maxADCvalue"));
46  }
47  if (!strcasecmp(subd.c_str(),"ZDC")) {
50  produces<ZDCRecHitCollection>();
51  } else if (!strcasecmp(subd.c_str(),"CALIB")) {
54  produces<HcalCalibRecHitCollection>();
55  } else {
56  std::cout << "ZdcHitReconstructor is not associated with a specific subdetector!" << std::endl;
57  }
58 
59 }
60 
62 }
64 
66  es.get<HcalLongRecoParamsRcd>().get(p);
68 
70  es.get<IdealGeometryRecord>().get(htopo);
71  theTopology=new HcalTopology(*htopo);
73 
74 }
75 
77  delete myobject; myobject=0;
78  delete theTopology; theTopology=0;
79 }
81 {
82  // get conditions
84  eventSetup.get<HcalDbRecord>().get(conditions);
85 
87  eventSetup.get<HcalChannelQualityRcd>().get(p);
88  HcalChannelQuality* myqual = new HcalChannelQuality(*p.product());
89 
91  eventSetup.get<HcalSeverityLevelComputerRcd>().get(mycomputer);
92  const HcalSeverityLevelComputer* mySeverity = mycomputer.product();
93 
94  // define vectors to pass noiseTS and signalTS
95  std::vector<unsigned int> mySignalTS;
96  std::vector<unsigned int> myNoiseTS;
97 
100  e.getByToken(tok_input_,digi);
101 
102  // create empty output
103  std::auto_ptr<ZDCRecHitCollection> rec(new ZDCRecHitCollection);
104  rec->reserve(digi->size());
105  // run the algorithm
107  for (i=digi->begin(); i!=digi->end(); i++) {
108  HcalZDCDetId cell = i->id();
109  DetId detcell=(DetId)cell;
110  // check on cells to be ignored and dropped: (rof,20.Feb.09)
111  const HcalChannelStatus* mydigistatus=myqual->getValues(detcell.rawId());
112  if (mySeverity->dropChannel(mydigistatus->getValue() ) ) continue;
114  if (i->zsMarkAndPass()) continue;
115  const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell);
116  const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
117  const HcalQIEShape* shape = conditions->getHcalShape (channelCoder);
118  HcalCoderDb coder (*channelCoder, *shape);
119 
120 // get db values for signalTSs and noiseTSs
121  const HcalLongRecoParam* myParams = myobject->getValues(detcell);
122  mySignalTS.clear();
123  myNoiseTS.clear();
124  mySignalTS = myParams->signalTS();
125  myNoiseTS = myParams->noiseTS();
126 
127  rec->push_back(reco_.reconstruct(*i,myNoiseTS,mySignalTS,coder,calibrations));
128  (rec->back()).setFlags(0);
130  saturationFlagSetter_->setSaturationFlag(rec->back(),*i);
131 
132  // Set auxiliary flag with subset of digi information
133  // ZDC aux flag can store non-contiguous set of values
134  int auxflag=0;
135  for (unsigned int xx=0; xx<AuxTSvec_.size() && xx<4;++xx)
136  {
137  if (AuxTSvec_[xx]<0 || AuxTSvec_[xx]>9) continue; // don't allow
138  auxflag+=(i->sample(AuxTSvec_[xx]).adc())<<(7*xx); // store the time slices in the first 28 bits of aux, a set of 4 7-bit a dc values
139  }
140  // bits 28 and 29 are reserved for capid of the first time slice saved in aux
141  if (AuxTSvec_.size()>0)
142  auxflag+=((i->sample(AuxTSvec_[0]).capid())<<28);
143  (rec->back()).setAux(auxflag);
144  }
145  // return result
146  e.put(rec);
147  } // else if (det_==DetId::Calo...)
148 
149  delete myqual;
150 } // void HcalHitReconstructor::produce(...)
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
std::vector< unsigned int > signalTS() const
HcalTopology * theTopology
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
std::vector< ZDCDataFrame >::const_iterator const_iterator
void setTopo(const HcalTopology *topo) const
const Item * getValues(DetId fId, bool throwOnFail=true) const
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
ZDCRecHit reconstruct(const ZDCDataFrame &digi, const std::vector< unsigned int > &myNoiseTS, const std::vector< unsigned int > &mySignalTS, const HcalCoder &coder, const HcalCalibrations &calibs) const
ZdcSimpleRecAlgo reco_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
HcalOtherSubdetector subdetOther_
virtual void beginRun(edm::Run const &r, edm::EventSetup const &es) overridefinal
HcalLongRecoParams * myobject
bool dropChannel(const uint32_t &mystatus) const
void setSaturationFlag(HBHERecHit &rechit, const HBHEDataFrame &digi)
HcalADCSaturationFlag * saturationFlagSetter_
tuple conf
Definition: dbtoconf.py:185
Definition: DetId.h:18
static const int SubdetectorId
Definition: HcalZDCDetId.h:20
ZdcHitReconstructor(const edm::ParameterSet &ps)
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::vector< int > AuxTSvec_
edm::EDGetTokenT< ZDCDigiCollection > tok_input_
std::vector< unsigned int > noiseTS() const
tuple cout
Definition: gather_cfg.py:121
virtual void produce(edm::Event &e, const edm::EventSetup &c) overridefinal
uint32_t getValue() const
virtual void endRun(edm::Run const &r, edm::EventSetup const &es) overridefinal
Definition: Run.h:41