CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
hcaltb::HcalTBTDCUnpacker Class Reference

#include <HcalTBTDCUnpacker.h>

Classes

struct  Hit
 
struct  WireChamberRecoData
 

Public Member Functions

 HcalTBTDCUnpacker (bool)
 
void setCalib (const std::vector< std::vector< std::string > > &calibLines_)
 
void unpack (const FEDRawData &raw, HcalTBEventPosition &pos, HcalTBTiming &timing) const
 

Private Member Functions

void reconstructTiming (const std::vector< Hit > &hits, HcalTBTiming &timing) const
 
void reconstructWC (const std::vector< Hit > &hits, HcalTBEventPosition &pos) const
 
void unpackHits (const FEDRawData &raw, std::vector< Hit > &hits, HcalTBTiming &timing) const
 

Private Attributes

bool includeUnmatchedHits_
 
double tdc_convers [161]
 
double tdc_ped [161]
 
struct
hcaltb::HcalTBTDCUnpacker::WireChamberRecoData 
wc_ [PLANECOUNT]
 

Static Private Attributes

static const int PLANECOUNT = 16
 
static const int WC_CHANNELIDS [PLANECOUNT *3]
 

Detailed Description

Date:
2010/10/19 18:29:26
Revision:
1.7
Author
J. Mans, P. Dudero - Minnesota

Definition at line 14 of file HcalTBTDCUnpacker.h.

Constructor & Destructor Documentation

hcaltb::HcalTBTDCUnpacker::HcalTBTDCUnpacker ( bool  include_unmatched_hits)

Definition at line 32 of file HcalTBTDCUnpacker.cc.

32  :
33  includeUnmatchedHits_(include_unmatched_hits) {
34 // setupWC(); reads it from configuration file
35 // dumpObs=fopen("dump_obs.csv","w");
36 }

Member Function Documentation

void hcaltb::HcalTBTDCUnpacker::reconstructTiming ( const std::vector< Hit > &  hits,
HcalTBTiming timing 
) const
private

Definition at line 171 of file HcalTBTDCUnpacker.cc.

References j, lcBeamCoincidence, lcBeamHalo1, lcBeamHalo2, lcBeamHalo3, lcBeamHalo4, lcLaserFlash, lcMuon1, lcMuon2, lcMuon3, lcQIEPhase, lcScint1, lcScint2, lcScint3, lcScint4, lcTOF1J, lcTOF1S, lcTOF2J, lcTOF2S, lcTriggerTime, lcTTCL1ATime, HcalTBTiming::setHits(), HcalTBTiming::setTimes(), and tdc_ped.

Referenced by unpack().

172  {
173  std::vector<Hit>::const_iterator j;
174  double trigger_time=0;
175  double ttc_l1a_time=0;
176  double laser_flash=0;
177  double qie_phase=0;
178  double TOF1S_time=0;
179  double TOF1J_time=0;
180  double TOF2S_time=0;
181  double TOF2J_time=0;
182 
183  std::vector<double> m1hits, m2hits, m3hits, s1hits, s2hits, s3hits, s4hits,
184  bh1hits, bh2hits, bh3hits, bh4hits,beam_coinc;
185 
186  for (j=hits.begin(); j!=hits.end(); j++) {
187  switch (j->channel) {
188  case lcTriggerTime: trigger_time = j->time-tdc_ped[lcTriggerTime]; break;
189  case lcTTCL1ATime: ttc_l1a_time = j->time-tdc_ped[lcTTCL1ATime]; break;
190  case lcBeamCoincidence: beam_coinc.push_back(j->time-tdc_ped[lcBeamCoincidence]); break;
191  case lcLaserFlash: laser_flash = j->time-tdc_ped[lcLaserFlash]; break;
192  case lcQIEPhase: qie_phase = j->time-tdc_ped[lcQIEPhase]; break;
193  case lcMuon1: m1hits.push_back(j->time-tdc_ped[lcMuon1]); break;
194  case lcMuon2: m2hits.push_back(j->time-tdc_ped[lcMuon2]); break;
195  case lcMuon3: m3hits.push_back(j->time-tdc_ped[lcMuon3]); break;
196  case lcScint1: s1hits.push_back(j->time-tdc_ped[lcScint1]); break;
197  case lcScint2: s2hits.push_back(j->time-tdc_ped[lcScint2]); break;
198  case lcScint3: s3hits.push_back(j->time-tdc_ped[lcScint3]); break;
199  case lcScint4: s4hits.push_back(j->time-tdc_ped[lcScint4]); break;
200  case lcTOF1S: TOF1S_time = j->time-tdc_ped[lcTOF1S]; break;
201  case lcTOF1J: TOF1J_time = j->time-tdc_ped[lcTOF1J]; break;
202  case lcTOF2S: TOF2S_time = j->time-tdc_ped[lcTOF2S]; break;
203  case lcTOF2J: TOF2J_time = j->time-tdc_ped[lcTOF2J]; break;
204  case lcBeamHalo1: bh1hits.push_back(j->time-tdc_ped[lcBeamHalo1]); break;
205  case lcBeamHalo2: bh2hits.push_back(j->time-tdc_ped[lcBeamHalo2]); break;
206  case lcBeamHalo3: bh3hits.push_back(j->time-tdc_ped[lcBeamHalo3]); break;
207  case lcBeamHalo4: bh4hits.push_back(j->time-tdc_ped[lcBeamHalo4]); break;
208  default: break;
209  }
210  }
211 
212  timing.setTimes(trigger_time,ttc_l1a_time,laser_flash,qie_phase,TOF1S_time,TOF1J_time,TOF2S_time,TOF2J_time);
213  timing.setHits (m1hits,m2hits,m3hits,s1hits,s2hits,s3hits,s4hits,bh1hits,bh2hits,bh3hits,bh4hits,beam_coinc);
214 
215 }
static const int lcBeamCoincidence
static const int lcTOF2S
static const int lcBeamHalo4
static const int lcTOF1S
static const int lcTTCL1ATime
static const int lcScint4
static const int lcScint3
static const int lcBeamHalo2
static const int lcLaserFlash
static const int lcScint1
int j
Definition: DBlmapReader.cc:9
static const int lcMuon3
static const int lcBeamHalo1
static const int lcTriggerTime
static const int lcTOF1J
static const int lcQIEPhase
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)
Definition: HcalTBTiming.cc:29
static const int lcMuon1
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)
Definition: HcalTBTiming.cc:47
static const int lcMuon2
static const int lcTOF2J
static const int lcScint2
void hcaltb::HcalTBTDCUnpacker::reconstructWC ( const std::vector< Hit > &  hits,
HcalTBEventPosition pos 
) const
private

Definition at line 271 of file HcalTBTDCUnpacker.cc.

References hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::b0, hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::b1, hcaltb::dumpObs, includeUnmatchedHits_, j, findQualityFiles::jj, timingPdfMaker::mean, hcaltb::N_SIGMA, PLANECOUNT, HcalTBEventPosition::setChamberHits(), hcaltb::TDC_OFFSET_CONSTANT, wc_, WC_CHANNELIDS, and vdt::x.

Referenced by unpack().

271  {
272  // process all planes, looping over all hits...
273  const int MAX_HITS=100;
274  float hits1[MAX_HITS], hits2[MAX_HITS], hitsA[MAX_HITS];
275  int n1,n2,nA,chan1,chan2,chanA;
276 
277  std::vector<double> x;
278 
279  for (int plane=0; plane<PLANECOUNT; plane++) {
280  n1=0; n2=0; nA=0;
281 
282  std::vector<double> plane_hits;
283  double hit_time;
284  hits1[0]=-1000;
285  hits2[0]=-1000;
286  hitsA[0]=-1000;
287  hitsA[1]=-1000;
288 
289  chan1=WC_CHANNELIDS[plane*3];
290  chan2=WC_CHANNELIDS[plane*3+1];
291  chanA=WC_CHANNELIDS[plane*3+2];
292 
293  for (std::vector<Hit>::const_iterator j=hits.begin(); j!=hits.end(); j++) {
294  if (j->channel==chan1 && n1<MAX_HITS) {
295  hits1[n1]=j->time-TDC_OFFSET_CONSTANT; n1++;
296  }
297  if (j->channel==chan2 && n2<MAX_HITS) {
298  hits2[n2]=j->time-TDC_OFFSET_CONSTANT; n2++;
299  }
300  if (j->channel==chanA && nA<MAX_HITS) {
301  hitsA[nA]=j->time-TDC_OFFSET_CONSTANT; nA++;
302  }
303  }
304 
305  if (n1!=0 && n2!=0 && dumpObs!=0) {
306  fprintf(dumpObs,"%d,%f,%f,%f,%f\n",plane,hits1[0],hits2[0],hitsA[0],hitsA[1]);
307  fflush(dumpObs);
308  }
309 
310  // anode-matched hits
311  for (int ii=0; ii<n1; ii++) {
312  int jmin=-1, lmin=-1;
313  float dsumMin=99999;
314  for (int jj=0; jj<n2; jj++) {
315  for (int ll=0; ll<nA; ll++) {
316  float dsum=fabs(wc_[plane].mean - hits1[ii] - hits2[jj] + 2.0*hitsA[ll]);
317  if(dsum<(N_SIGMA*wc_[plane].sigma) && dsum<dsumMin){
318  jmin=jj;
319  lmin=ll;
320  dsumMin=dsum;
321  }
322  }
323  }
324  if (jmin>=0) {
325  hit_time = wc_[plane].b0 +
326  wc_[plane].b1 * (hits1[ii]-hits2[jmin]);
327  if((plane%2)==0)
328  {
329  plane_hits.push_back(-hit_time);
330  }else{
331  plane_hits.push_back(hit_time);
332  }
333  hits1[ii]=-99999;
334  hits2[jmin]=-99999;
335  hitsA[lmin]=99999;
336  }
337  }
338 
339  if (includeUnmatchedHits_||plane>9) // unmatched hits (all pairs get in here)
340  for (int ii=0; ii<n1; ii++) {
341  if (hits1[ii]<-99990) continue;
342  for (int jj=0; jj<n2; jj++) {
343  if (hits2[jj]<-99990) continue;
344  hit_time = wc_[plane].b0 +
345  wc_[plane].b1 * (hits1[ii]-hits2[jj]);
346  if((plane%2)==0)
347  {
348  plane_hits.push_back(-hit_time);
349  }else{
350  plane_hits.push_back(hit_time);
351  }
352  }
353  }
354 
355  if ((plane%2)==0) x=plane_hits;
356  else {
357  char chamber='A'+plane/2;
358  ep.setChamberHits(chamber,x,plane_hits);
359  }
360  }
361 
362 }
int j
Definition: DBlmapReader.cc:9
static FILE * dumpObs
static const double N_SIGMA
static const double TDC_OFFSET_CONSTANT
static const int WC_CHANNELIDS[PLANECOUNT *3]
x
Definition: VDTMath.h:216
struct hcaltb::HcalTBTDCUnpacker::WireChamberRecoData wc_[PLANECOUNT]
void hcaltb::HcalTBTDCUnpacker::setCalib ( const std::vector< std::vector< std::string > > &  calibLines_)

Definition at line 37 of file HcalTBTDCUnpacker.cc.

References hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::b0, hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::b1, edm::hlt::Exception, i, hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::mean, hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::sigma, findQualityFiles::size, tdc_convers, tdc_ped, and wc_.

Referenced by HcalTBObjectUnpacker::HcalTBObjectUnpacker().

37  {
38  for(int i=0;i<161;i++)
39  {
40  tdc_ped[i]=0.;tdc_convers[i]=1.;
41  }
42  for(unsigned int ii=0;ii<calibLines_.size();ii++)
43  {
44 // TDC configuration
45  if(calibLines_[ii][0]=="TDC")
46  {
47  if(calibLines_[ii].size()==4)
48  {
49  int channel=atoi(calibLines_[ii][1].c_str());
50  tdc_ped[channel]=atof(calibLines_[ii][2].c_str());
51  tdc_convers[channel]=atof(calibLines_[ii][3].c_str());
52  // printf("Got TDC %i ped %f , conversion %f\n",channel, tdc_ped[channel],tdc_convers[channel]);
53  }
54  else
55  {
56  throw cms::Exception("Incomplete configuration") <<
57  "Wrong TDC configuration format : expected 3 parameters, got "<<calibLines_[ii].size()-1;
58  }
59  } // End of the TDCs
60 
61 // Wire chambers calibration
62  if(calibLines_[ii][0]=="WC")
63  {
64  if(calibLines_[ii].size()==6)
65  {
66  int plane=atoi(calibLines_[ii][1].c_str());
67  wc_[plane].b0=atof(calibLines_[ii][2].c_str());
68  wc_[plane].b1=atof(calibLines_[ii][3].c_str());
69  wc_[plane].mean=atof(calibLines_[ii][4].c_str());
70  wc_[plane].sigma=atof(calibLines_[ii][5].c_str());
71  // printf("Got WC plane %i b0 %f, b1 %f, mean %f, sigma %f\n",plane,
72  // wc_[plane].b0,wc_[plane].b1,wc_[plane].mean,wc_[plane].sigma);
73  }
74  else
75  {
76  throw cms::Exception("Incomplete configuration") <<
77  "Wrong Wire Chamber configuration format : expected 5 parameters, got "<<calibLines_[ii].size()-1;
78  }
79  } // End of the Wire Chambers
80 
81  } // End of the CalibLines
82  }
int i
Definition: DBlmapReader.cc:9
tuple size
Write out results.
struct hcaltb::HcalTBTDCUnpacker::WireChamberRecoData wc_[PLANECOUNT]
void hcaltb::HcalTBTDCUnpacker::unpack ( const FEDRawData raw,
HcalTBEventPosition pos,
HcalTBTiming timing 
) const

Definition at line 84 of file HcalTBTDCUnpacker.cc.

References reconstructTiming(), reconstructWC(), and unpackHits().

Referenced by HcalTBObjectUnpacker::produce().

86  {
87  std::vector<Hit> hits;
88 
89  unpackHits(raw, hits, timing);
90 
91  reconstructWC(hits, pos);
92  reconstructTiming(hits, timing);
93 
94  }
void reconstructTiming(const std::vector< Hit > &hits, HcalTBTiming &timing) const
void unpackHits(const FEDRawData &raw, std::vector< Hit > &hits, HcalTBTiming &timing) const
void reconstructWC(const std::vector< Hit > &hits, HcalTBEventPosition &pos) const
void hcaltb::HcalTBTDCUnpacker::unpackHits ( const FEDRawData raw,
std::vector< Hit > &  hits,
HcalTBTiming timing 
) const
private

Definition at line 112 of file HcalTBTDCUnpacker.cc.

References hcaltb::HcalTBTDCUnpacker::Hit::channel, FEDRawData::data(), edm::hlt::Exception, h, hcaltb::ClassicTDCDataFormat::hits, i, hcaltb::ClassicTDCDataFormat::n_hits, hcaltb::ClassicTDCDataFormat::n_max_hits, hcaltb::CombinedTDCQDCDataFormat::n_qdc_hits, hcaltb::CombinedTDCQDCDataFormat::n_tdc_hits, HcalTBTiming::setV775(), FEDRawData::size(), tdc_convers, and hcaltb::HcalTBTDCUnpacker::Hit::time.

Referenced by unpack().

113  {
114  const ClassicTDCDataFormat* tdc=(const ClassicTDCDataFormat*)raw.data();
115 
116  if (raw.size()<3*8) {
117  throw cms::Exception("Missing Data") << "No data in the TDC block";
118  }
119 
120  const unsigned int* hitbase=0;
121  unsigned int totalhits=0;
122 
123  // old TDC (767)
124  if (tdc->n_max_hits!=192) {
125  const CombinedTDCQDCDataFormat* qdctdc=(const CombinedTDCQDCDataFormat*)raw.data();
126  hitbase=(unsigned int*)(qdctdc);
127  hitbase+=6; // header
128  hitbase+=qdctdc->n_qdc_hits/2; // two unsigned short per unsigned long
129  totalhits=qdctdc->n_tdc_hits&0xFFFF; // mask off high bits
130 
131  // for (unsigned int i=0; i<qdctdc->n_qdc_hits; i++)
132  // printf("QADC: %02d %d\n",i,qdctdc->qdc_values[i]&0xFFF);
133 
134  } else {
135  hitbase=&(tdc->hits[0]);
136  totalhits=tdc->n_hits;
137  }
138 
139  for (unsigned int i=0; i<totalhits; i++) {
140  Hit h;
141  h.channel=(hitbase[i]&0x7FC00000)>>22; // hardcode channel assignment
142  h.time=(hitbase[i]&0xFFFFF)*tdc_convers[h.channel];
143  hits.push_back(h);
144  // printf("V767: %d %f\n",h.channel,h.time);
145  }
146 
147  // new TDC (V775)
148  int v775[32];
149  for (int i=0;i<32;i++) v775[i]=-1;
150  if (tdc->n_max_hits!=192) {
151  const CombinedTDCQDCDataFormat* qdctdc=(const CombinedTDCQDCDataFormat*)raw.data();
152  hitbase=(unsigned int*)(qdctdc);
153  hitbase+=6; // header
154  hitbase+=qdctdc->n_qdc_hits/2; // two unsigned short per unsigned long
155  hitbase+=(qdctdc->n_tdc_hits&0xFFFF); // same length
156  totalhits=(qdctdc->n_tdc_hits&0xFFFF0000)>>16; // mask off high bits
157  for (unsigned int i=0; i<totalhits; i++) {
158  Hit h;
159 // h.channel=129+i;
160  h.channel=129+((hitbase[i]&0x3F0000)>>16);
161  h.time=(hitbase[i]&0xFFF)*tdc_convers[h.channel] ;
162  hits.push_back(h);
163  if ( (h.channel-129)<32 )
164  v775[(h.channel-129)] = (hitbase[i]&0xFFF);
165  // printf("V775: %d %f\n",h.channel,h.time);
166  }
167  }
168  timing.setV775(v775);
169 }
int i
Definition: DBlmapReader.cc:9
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:49
void setV775(int *V775)
Definition: HcalTBTiming.cc:75
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:29

Member Data Documentation

bool hcaltb::HcalTBTDCUnpacker::includeUnmatchedHits_
private

Definition at line 40 of file HcalTBTDCUnpacker.h.

Referenced by reconstructWC().

const int hcaltb::HcalTBTDCUnpacker::PLANECOUNT = 16
staticprivate

Definition at line 34 of file HcalTBTDCUnpacker.h.

Referenced by reconstructWC().

double hcaltb::HcalTBTDCUnpacker::tdc_convers[161]
private

Definition at line 42 of file HcalTBTDCUnpacker.h.

Referenced by setCalib(), and unpackHits().

double hcaltb::HcalTBTDCUnpacker::tdc_ped[161]
private

Definition at line 41 of file HcalTBTDCUnpacker.h.

Referenced by reconstructTiming(), and setCalib().

struct hcaltb::HcalTBTDCUnpacker::WireChamberRecoData hcaltb::HcalTBTDCUnpacker::wc_[PLANECOUNT]
private

Referenced by reconstructWC(), and setCalib().

const int hcaltb::HcalTBTDCUnpacker::WC_CHANNELIDS
staticprivate
Initial value:
= {
12, 13, 14,
10, 11, 14,
22, 23, 24,
20, 21, 24,
32, 33, 34,
30, 31, 34,
101, 102, 104,
107, 108, 110,
113, 114, 116,
97, 98, 99,
42, 43, -1,
44, 60, -1,
40, 41, -1,
45, 61, -1,
52, 53, -1,
54, 62, -1
}

Definition at line 35 of file HcalTBTDCUnpacker.h.

Referenced by reconstructWC().