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:
2006/08/28 16:39:16
Revision:
1.6
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 30 of file HcalTBTDCUnpacker.cc.

30  :
31  includeUnmatchedHits_(include_unmatched_hits) {
32 // setupWC(); reads it from configuration file
33 }

Member Function Documentation

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

Definition at line 168 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().

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

References hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::b0, hcaltb::HcalTBTDCUnpacker::WireChamberRecoData::b1, includeUnmatchedHits_, j, plotscripts::mean(), hcaltb::N_SIGMA, PLANECOUNT, HcalTBEventPosition::setChamberHits(), ExpressReco_HICollisions_FallBack::sigma, hcaltb::TDC_OFFSET_CONSTANT, wc_, WC_CHANNELIDS, and ExpressReco_HICollisions_FallBack::x.

Referenced by unpack().

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

Definition at line 34 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().

34  {
35  for(int i=0;i<161;i++)
36  {
37  tdc_ped[i]=0.;tdc_convers[i]=1.;
38  }
39  for(unsigned int ii=0;ii<calibLines_.size();ii++)
40  {
41 // TDC configuration
42  if(calibLines_[ii][0]=="TDC")
43  {
44  if(calibLines_[ii].size()==4)
45  {
46  int channel=atoi(calibLines_[ii][1].c_str());
47  tdc_ped[channel]=atof(calibLines_[ii][2].c_str());
48  tdc_convers[channel]=atof(calibLines_[ii][3].c_str());
49  // printf("Got TDC %i ped %f , conversion %f\n",channel, tdc_ped[channel],tdc_convers[channel]);
50  }
51  else
52  {
53  throw cms::Exception("Incomplete configuration") <<
54  "Wrong TDC configuration format : expected 3 parameters, got "<<calibLines_[ii].size()-1;
55  }
56  } // End of the TDCs
57 
58 // Wire chambers calibration
59  if(calibLines_[ii][0]=="WC")
60  {
61  if(calibLines_[ii].size()==6)
62  {
63  int plane=atoi(calibLines_[ii][1].c_str());
64  wc_[plane].b0=atof(calibLines_[ii][2].c_str());
65  wc_[plane].b1=atof(calibLines_[ii][3].c_str());
66  wc_[plane].mean=atof(calibLines_[ii][4].c_str());
67  wc_[plane].sigma=atof(calibLines_[ii][5].c_str());
68  // printf("Got WC plane %i b0 %f, b1 %f, mean %f, sigma %f\n",plane,
69  // wc_[plane].b0,wc_[plane].b1,wc_[plane].mean,wc_[plane].sigma);
70  }
71  else
72  {
73  throw cms::Exception("Incomplete configuration") <<
74  "Wrong Wire Chamber configuration format : expected 5 parameters, got "<<calibLines_[ii].size()-1;
75  }
76  } // End of the Wire Chambers
77 
78  } // End of the CalibLines
79  }
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 81 of file HcalTBTDCUnpacker.cc.

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

Referenced by HcalTBObjectUnpacker::produce().

83  {
84  std::vector<Hit> hits;
85 
86  unpackHits(raw, hits, timing);
87 
88  reconstructWC(hits, pos);
89  reconstructTiming(hits, timing);
90 
91  }
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 109 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().

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

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, 15,
22, 23, 24,
20, 21, 25,
32, 33, 34,
30, 31, 35,
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().