31 : includeUnmatchedHits_(include_unmatched_hits), dumpObs_(nullptr) {
36 for (
int i = 0;
i < 161;
i++) {
40 for (
unsigned int ii = 0;
ii < calibLines_.size();
ii++) {
42 if (calibLines_[
ii][0] ==
"TDC") {
43 if (calibLines_[
ii].
size() == 4) {
44 int channel = atoi(calibLines_[
ii][1].c_str());
45 tdc_ped[channel] = atof(calibLines_[
ii][2].c_str());
50 <<
"Wrong TDC configuration format : expected 3 parameters, got " << calibLines_[
ii].size() - 1;
55 if (calibLines_[
ii][0] ==
"WC") {
56 if (calibLines_[
ii].
size() == 6) {
57 int plane = atoi(calibLines_[
ii][1].c_str());
58 wc_[plane].
b0 = atof(calibLines_[
ii][2].c_str());
59 wc_[plane].
b1 = atof(calibLines_[
ii][3].c_str());
60 wc_[plane].
mean = atof(calibLines_[
ii][4].c_str());
61 wc_[plane].
sigma = atof(calibLines_[
ii][5].c_str());
66 <<
"Wrong Wire Chamber configuration format : expected 5 parameters, got " << calibLines_[
ii].size() - 1;
74 std::vector<Hit> hits;
101 if (raw.
size() < 3 * 8) {
102 throw cms::Exception(
"Missing Data") <<
"No data in the TDC block";
105 const unsigned int* hitbase =
nullptr;
106 unsigned int totalhits = 0;
111 hitbase = (
const unsigned int*)(qdctdc);
120 hitbase = &(tdc->
hits[0]);
124 for (
unsigned int i = 0;
i < totalhits;
i++) {
126 h.
channel = (hitbase[
i] & 0x7FC00000) >> 22;
134 for (
int i = 0;
i < 32;
i++)
138 hitbase = (
const unsigned int*)(qdctdc);
142 totalhits = (qdctdc->
n_tdc_hits & 0xFFFF0000) >> 16;
143 for (
unsigned int i = 0;
i < totalhits;
i++) {
146 h.
channel = 129 + ((hitbase[
i] & 0x3F0000) >> 16);
150 v775[(h.
channel - 129)] = (hitbase[
i] & 0xFFF);
158 std::vector<Hit>::const_iterator
j;
159 double trigger_time = 0;
160 double ttc_l1a_time = 0;
161 double laser_flash = 0;
162 double qie_phase = 0;
163 double TOF1S_time = 0;
164 double TOF1J_time = 0;
165 double TOF2S_time = 0;
166 double TOF2J_time = 0;
168 std::vector<double> m1hits, m2hits, m3hits, s1hits, s2hits, s3hits, s4hits, bh1hits, bh2hits, bh3hits, bh4hits,
171 for (j = hits.begin(); j != hits.end(); j++) {
172 switch (j->channel) {
238 timing.
setTimes(trigger_time, ttc_l1a_time, laser_flash, qie_phase, TOF1S_time, TOF1J_time, TOF2S_time, TOF2J_time);
240 m1hits, m2hits, m3hits, s1hits, s2hits, s3hits, s4hits, bh1hits, bh2hits, bh3hits, bh4hits, beam_coinc);
300 float hits1[MAX_HITS], hits2[MAX_HITS], hitsA[MAX_HITS];
301 int n1, n2, nA, chan1, chan2, chanA;
303 std::vector<double> x;
305 for (
int plane = 0; plane <
PLANECOUNT; plane++) {
310 std::vector<double> plane_hits;
321 for (std::vector<Hit>::const_iterator
j = hits.begin();
j != hits.end();
j++) {
322 if (
j->channel == chan1 && n1 < MAX_HITS) {
326 if (
j->channel == chan2 && n2 < MAX_HITS) {
330 if (
j->channel == chanA && nA < MAX_HITS) {
336 if (n1 != 0 && n2 != 0 &&
dumpObs_ !=
nullptr) {
337 fprintf(
dumpObs_,
"%d,%f,%f,%f,%f\n", plane, hits1[0], hits2[0], hitsA[0], hitsA[1]);
342 for (
int ii = 0;
ii < n1;
ii++) {
343 int jmin = -1, lmin = -1;
344 float dsumMin = 99999;
345 for (
int jj = 0;
jj < n2;
jj++) {
346 for (
int ll = 0; ll < nA; ll++) {
347 float dsum = fabs(
wc_[plane].
mean - hits1[
ii] - hits2[
jj] + 2.0 * hitsA[ll]);
348 if (dsum < (
N_SIGMA *
wc_[plane].sigma) && dsum < dsumMin) {
356 hit_time =
wc_[plane].
b0 +
wc_[plane].
b1 * (hits1[
ii] - hits2[jmin]);
357 if ((plane % 2) == 0) {
358 plane_hits.push_back(-hit_time);
360 plane_hits.push_back(hit_time);
363 hits2[jmin] = -99999;
369 for (
int ii = 0;
ii < n1;
ii++) {
370 if (hits1[
ii] < -99990)
372 for (
int jj = 0;
jj < n2;
jj++) {
373 if (hits2[
jj] < -99990)
375 hit_time =
wc_[plane].
b0 +
wc_[plane].
b1 * (hits1[
ii] - hits2[
jj]);
376 if ((plane % 2) == 0) {
377 plane_hits.push_back(-hit_time);
379 plane_hits.push_back(hit_time);
384 if ((plane % 2) == 0)
387 char chamber =
'A' + plane / 2;
static const int lcBeamCoincidence
void setChamberHits(char chamberch, const std::vector< double > &xvec, const std::vector< double > &yvec)
void reconstructTiming(const std::vector< Hit > &hits, HcalTBTiming &timing) const
static const int lcBeamHalo4
void unpackHits(const FEDRawData &raw, std::vector< Hit > &hits, HcalTBTiming &timing) const
static const int lcTTCL1ATime
static const int lcScint4
static const int lcScint3
size_t size() const
Lenght of the data buffer in bytes.
static const int lcBeamHalo2
static const int lcLaserFlash
static const int lcScint1
void setCalib(const std::vector< std::vector< std::string > > &calibLines_)
static const int lcBeamHalo1
static const int lcTriggerTime
static const int lcQIEPhase
bool includeUnmatchedHits_
void unpack(const FEDRawData &raw, HcalTBEventPosition &pos, HcalTBTiming &timing) const
void reconstructWC(const std::vector< Hit > &hits, HcalTBEventPosition &pos) const
static const double N_SIGMA
static const int lcBeamHalo3
void setTimes(const double trigger_time, const double ttc_l1a_time, const double laser_flash, const double qie_phase, const double TOF1S_time, const double TOF1J_time, const double TOF2S_time, const double TOF2J_time)
static const int PLANECOUNT
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
static const double TDC_OFFSET_CONSTANT
void setHits(const std::vector< double > &m1hits, const std::vector< double > &m2hits, const std::vector< double > &m3hits, const std::vector< double > &s1hits, const std::vector< double > &s2hits, const std::vector< double > &s3hits, const std::vector< double > &s4hits, const std::vector< double > &bh1hits, const std::vector< double > &bh2hits, const std::vector< double > &bh3hits, const std::vector< double > &bh4hits, const std::vector< double > &beamCoincidenceHits)
static const int WC_CHANNELIDS[PLANECOUNT *3]
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
tuple size
Write out results.
struct hcaltb::HcalTBTDCUnpacker::WireChamberRecoData wc_[PLANECOUNT]
static const int lcScint2