Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use presamples and sample variables correctly for HF TP #18169

Merged
merged 1 commit into from Apr 14, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
43 changes: 21 additions & 22 deletions SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc
Expand Up @@ -458,33 +458,33 @@ void HcalTriggerPrimitiveAlgo::analyzeHF(IntegerCaloSamples & samples, HcalTrigg
}

void HcalTriggerPrimitiveAlgo::analyzeHF2016(
const IntegerCaloSamples& SAMPLES,
const IntegerCaloSamples& samples,
HcalTriggerPrimitiveDigi& result,
const int HF_LUMI_SHIFT,
const HcalFeatureBit* HCALFEM
const int hf_lumi_shift,
const HcalFeatureBit* embit
) {
// Align digis and TP
const int SHIFT = SAMPLES.presamples() - numberOfPresamples_;
const int SHIFT = samples.presamples() - numberOfPresamplesHF_;
assert(SHIFT >= 0);
assert((SHIFT + numberOfSamples_) <= SAMPLES.size());
assert((SHIFT + numberOfSamplesHF_) <= samples.size());

// Try to find the HFDetails from the map corresponding to our samples
const HcalTrigTowerDetId detId(SAMPLES.id());
const HcalTrigTowerDetId detId(samples.id());
HFDetailMap::const_iterator it = theHFDetailMap.find(detId);
// Missing values will give an empty digi
if (it == theHFDetailMap.end()) {
return;
}

std::vector<std::bitset<2>> finegrain(numberOfSamples_, false);
std::vector<std::bitset<2>> finegrain(numberOfSamplesHF_, false);

// Set up out output of IntergerCaloSamples
IntegerCaloSamples output(SAMPLES.id(), numberOfSamples_);
output.setPresamples(numberOfPresamples_);
IntegerCaloSamples output(samples.id(), numberOfSamplesHF_);
output.setPresamples(numberOfPresamplesHF_);

for (const auto& item: it->second) {
auto& details = item.second;
for (int ibin = 0; ibin < numberOfSamples_; ++ibin) {
for (int ibin = 0; ibin < numberOfSamplesHF_; ++ibin) {
const int IDX = ibin + SHIFT;
int long_fiber_val = 0;
if (IDX < details.long_fiber.size()) {
Expand All @@ -502,22 +502,21 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2016(
if (details.LongDigi.id().ietaAbs() >= FIRST_FINEGRAIN_TOWER) {
finegrain[ibin][1] = (ADCLong > FG_HF_threshold_ || ADCShort > FG_HF_threshold_);

if (HCALFEM != 0)
finegrain[ibin][0] = HCALFEM->fineGrainbit(details.ShortDigi, details.LongDigi, ibin);
if (embit != 0)
finegrain[ibin][0] = embit->fineGrainbit(details.ShortDigi, details.LongDigi, ibin);
}
}
}

for (int bin = 0; bin < numberOfSamples_; ++bin) {
for (int bin = 0; bin < numberOfSamplesHF_; ++bin) {
static const unsigned int MAX_OUTPUT = QIE8_LINEARIZATION_ET; // QIE8_LINEARIZATION_ET = 1023
output[bin] = min({MAX_OUTPUT, output[bin] >> HF_LUMI_SHIFT});
output[bin] = min({MAX_OUTPUT, output[bin] >> hf_lumi_shift});
}

std::vector<int> finegrain_converted;
for (const auto& fg: finegrain)
finegrain_converted.push_back(fg.to_ulong());
outcoder_->compress(output, finegrain_converted, result);

}

bool
Expand Down Expand Up @@ -547,9 +546,9 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017(
const int hf_lumi_shift, const HcalFeatureBit* embit)
{
// Align digis and TP
const int shift = samples.presamples() - numberOfPresamples_;
const int shift = samples.presamples() - numberOfPresamplesHF_;
assert(shift >= 0);
assert((shift + numberOfSamples_) <= samples.size());
assert((shift + numberOfSamplesHF_) <= samples.size());

// Try to find the HFDetails from the map corresponding to our samples
const HcalTrigTowerDetId detId(samples.id());
Expand All @@ -559,15 +558,15 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017(
return;
}

std::vector<std::bitset<2>> finegrain(numberOfSamples_, false);
std::vector<std::bitset<2>> finegrain(numberOfSamplesHF_, false);

// Set up out output of IntergerCaloSamples
IntegerCaloSamples output(samples.id(), numberOfSamples_);
output.setPresamples(numberOfPresamples_);
IntegerCaloSamples output(samples.id(), numberOfSamplesHF_);
output.setPresamples(numberOfPresamplesHF_);

for (const auto& item: it->second) {
auto& details = item.second;
for (int ibin = 0; ibin < numberOfSamples_; ++ibin) {
for (int ibin = 0; ibin < numberOfSamplesHF_; ++ibin) {
const int idx = ibin + shift;

int long_fiber_val = 0;
Expand Down Expand Up @@ -634,7 +633,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017(
}
}

for (int bin = 0; bin < numberOfSamples_; ++bin) {
for (int bin = 0; bin < numberOfSamplesHF_; ++bin) {
output[bin] = min({(unsigned int) QIE10_MAX_LINEARIZATION_ET, output[bin]}) >> hf_lumi_shift;
}
std::vector<int> finegrain_converted;
Expand Down