16 useEcal_(iConfig.getParameter<bool>(
"useEcal")),
17 useHcal_(iConfig.getParameter<bool>(
"useHcal")),
18 ecalDigisLabel_(iConfig.getParameter<
edm::InputTag>(
"ecalDigisLabel")),
19 hcalDigisLabel_(iConfig.getParameter<
edm::InputTag>(
"hcalDigisLabel")),
20 maskFile_(iConfig.getParameter<
edm::FileInPath>(
"maskFile"))
30 produces<EcalTrigPrimDigiCollection>();
31 produces<HcalTrigPrimDigiCollection>();
85 if (!maskFileStream.is_open())
88 <<
"RCT mask file not opened" << std::endl;;
98 maskFileStream >> junk;
100 while (junk !=
"ECAL:");
103 std::vector<std::vector<std::vector<unsigned short> > > ecalMask(2,std::vector<std::vector<unsigned short> >(72,std::vector<unsigned short>(28,1)));
104 std::vector<std::vector<std::vector<unsigned short> > > hcalMask(2,std::vector<std::vector<unsigned short> >(72,std::vector<unsigned short>(28,1)));
105 std::vector<std::vector<std::vector<unsigned short> > > hfMask(2,std::vector<std::vector<unsigned short> >(18,std::vector<unsigned short>(8,1)));
109 for (
int i = 1;
i <= 72;
i++)
111 int phi_index = (72 + 18 -
i) % 72;
112 if (phi_index == 0) {phi_index = 72;}
114 for (
int j = 28; j >= 1; j--)
116 maskFileStream >> junk;
119 else if ((junk ==
"X") || (junk ==
"x"))
121 ecalMask.at(0).at(phi_index-1).at(j-1) = 0;
125 std::cerr <<
"RCT mask producer: error -- unrecognized character" << std::endl;
128 for (
int j = 1; j <= 28; j++)
130 maskFileStream >> junk;
133 else if((junk ==
"X") || (junk ==
"x"))
135 ecalMask.at(1).at(phi_index-1).at(j-1) = 0;
139 std::cerr <<
"RCT mask producer: error -- unrecognized character" << std::endl;
145 maskFileStream >> junk;
149 <<
"RCT mask producer: error reading ECAL mask" << std::endl;;
156 for (
int i = 1;
i <= 72;
i++)
158 int phi_index = (72 + 18 -
i) % 72;
159 if (phi_index == 0) {phi_index = 72;}
161 for (
int j = 28; j >= 1; j--)
163 maskFileStream >> junk;
166 else if ((junk ==
"X") || (junk ==
"x"))
168 hcalMask.at(0).at(phi_index-1).at(j-1) = 0;
172 std::cerr <<
"RCT mask producer: error -- unrecognized character" << std::endl;
175 for (
int j = 1; j <= 28; j++)
177 maskFileStream >> junk;
180 else if((junk ==
"X") || (junk ==
"x"))
182 hcalMask.at(1).at(phi_index-1).at(j-1) = 0;
186 std::cerr <<
"RCT mask producer: error -- unrecognized character" << std::endl;
191 maskFileStream >> junk;
195 <<
"RCT mask producer: error reading HCAL mask" << std::endl;;
199 for(
int i = 0;
i < 18;
i++)
202 for (
int j = 4; j >= 1; j--)
204 if (maskFileStream >> junk) {}
205 else {
std::cerr <<
"RCT mask producer: error reading HF mask" << std::endl; }
208 else if ((junk ==
"X") || (junk ==
"x"))
210 hfMask.at(0).at(
i).at(j-1) = 0;
214 std::cerr <<
"RCT mask producer: error -- unrecognized character" << std::endl;
217 for (
int j = 1; j <= 4; j++)
219 if (maskFileStream >> junk) {}
220 else {
std::cerr <<
"RCT mask producer: error reading HF mask" << std::endl; }
223 else if ((junk ==
"X") || (junk ==
"x"))
225 hfMask.at(1).at(
i).at(j-1) = 0;
229 std::cerr <<
"RCT mask producer: error -- unrecognized character" << std::endl;
236 maskFileStream.close();
242 std::unique_ptr<EcalTrigPrimDigiCollection>
244 std::unique_ptr<HcalTrigPrimDigiCollection>
246 maskedEcalTPs->reserve(56*72);
247 maskedHcalTPs->reserve(56*72+18*8);
248 int nEcalSamples = 0;
249 int nHcalSamples = 0;
251 for (
unsigned int i = 0;
i < ecalColl.
size();
i++)
253 nEcalSamples = ecalColl[
i].
size();
254 short ieta = (short) ecalColl[
i].
id().ieta();
255 unsigned short absIeta = (
unsigned short)
abs(ieta);
256 int sign = ieta / absIeta;
257 short iphi = (
unsigned short) ecalColl[
i].
id().iphi();
263 ecalDigi.
setSize(nEcalSamples);
265 for (
int nSample = 0; nSample < nEcalSamples; nSample++)
269 bool fineGrain =
false;
274 energy = ecalMask.at(0).at(iphi-1).at(absIeta-1) * ecalColl[
i].sample(nSample).compressedEt();
275 fineGrain = (ecalMask.at(0).at(iphi-1).at(absIeta-1) !=0) && ecalColl[
i].
sample(nSample).fineGrain();
280 energy = ecalMask.at(1).at(iphi-1).at(absIeta-1) * ecalColl[
i].sample(nSample).compressedEt();
281 fineGrain = (ecalMask.at(1).at(iphi-1).at(absIeta-1) != 0) && ecalColl[
i].
sample(nSample).fineGrain();
288 maskedEcalTPs->push_back(ecalDigi);
293 for (
unsigned int i = 0;
i < hcalColl.
size();
i++)
295 nHcalSamples = hcalColl[
i].
size();
297 short ieta = (short) hcalColl[
i].
id().ieta();
298 unsigned short absIeta = (
unsigned short)
abs(ieta);
299 int sign = ieta / absIeta;
300 short iphi = (
unsigned short) hcalColl[
i].
id().iphi();
313 hcalDigi.
setSize(nHcalSamples);
316 for (
int nSample = 0; nSample < nHcalSamples; nSample++)
320 bool fineGrain =
false;
326 energy = hcalMask.at(0).at(iphi-1).at(absIeta-1) * hcalColl[
i].sample(nSample).compressedEt();
327 fineGrain = (hcalMask.at(0).at(iphi-1).at(absIeta-1) != 0) && hcalColl[
i].
sample(nSample).fineGrain();
331 energy = hcalMask.at(1).at(iphi-1).at(absIeta-1) * hcalColl[
i].sample(nSample).compressedEt();
332 fineGrain = (hcalMask.at(1).at(iphi-1).at(absIeta-1) !=0) && hcalColl[
i].
sample(nSample).fineGrain();
335 else if ((absIeta >= 29) && (absIeta <= 32))
338 short hf_phi_index = iphi/4;
345 energy = hfMask.at(0).at(hf_phi_index).at(absIeta-29) * hcalColl[
i].sample(nSample).compressedEt();
346 fineGrain = (hfMask.at(0).at(hf_phi_index).at(absIeta-29) != 0) && hcalColl[
i].
sample(nSample).fineGrain();
352 energy = hfMask.at(1).at(hf_phi_index).at(absIeta-29) * hcalColl[
i].sample(nSample).compressedEt();
353 fineGrain = (hfMask.at(1).at(hf_phi_index).at(absIeta-29) != 0) && hcalColl[
i].
sample(nSample).fineGrain();
369 maskedHcalTPs->push_back(hcalDigi);
void setSample(int i, const HcalTriggerPrimitiveSample &sam)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
edm::SortedCollection< HcalTriggerPrimitiveDigi > HcalTrigPrimDigiCollection
#define DEFINE_FWK_MODULE(type)
void setSample(int i, const EcalTriggerPrimitiveSample &sam)
Abs< T >::type abs(const T &t)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
edm::SortedCollection< EcalTriggerPrimitiveDigi > EcalTrigPrimDigiCollection
void setPresamples(int ps)
std::string fullPath() const