StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StEEmcA2EMaker.cxx
1 
16 #include "StEEmcA2EMaker.h"
17 
18 //#include "StMuDSTMaker/COMMON/StMuDstMaker.h"
19 #include "StMuDSTMaker/COMMON/StMuEmcCollection.h"
20 #include "StMuDSTMaker/COMMON/StMuDst.h"
21 
22 //#include "StEventMaker/StEventMaker.h"
23 
24 #include "StEEmcUtil/database/StEEmcDb.h"
25 #include "StEEmcUtil/database/EEmcDbItem.h"
26 
27 
29 #include "StEvent/StEvent.h"
30 #include "StEvent/StEmcDetector.h"
31 #include "StEvent/StEmcModule.h"
32 #include "StEvent/StEmcRawHit.h"
33 #include "StEvent/StEmcCollection.h"
34 
35 #include "StMessMgr.h"
36 
37 #include <iostream>
38 
39 ClassImp(StEEmcA2EMaker);
40 
41 // ----------------------------------------------------------------------------
42 StEEmcA2EMaker::StEEmcA2EMaker(const Char_t *name) : StMaker(name)
43 {
44 
45  scale(1.0);
46 
47  mEEgeom=new EEmcGeomSimple();
48 
49  //$$$ std::cout << "StEEmcA2EMaker(" << name << ")" << std::endl;
51  for ( Int_t tower=0; tower < 720; tower++ ) {
52  for ( Int_t layer=0; layer < 4; layer++ ) {
53  mTowers[tower][layer].Clear("");
54  mTowers[tower][layer].layer(layer);
55  mTowers[tower][layer].index(tower);
56  }
57  }
58 
59 
60 
61  for ( Int_t i=0;i<12;i++ )
62  for ( Int_t j=0;j<6;j++ )
63  {
64  mEnergy[i][j] = 0.;
65  mHits[i][j] = 0;
66  }
67 
68 
69 
71  for ( Int_t tower=0; tower < 720; tower++ )
72  {
73  for ( Int_t layer=0; layer < 4; layer++ )
74  {
75 
76  Int_t phibin=mTowers[tower][layer].phibin();
77  Int_t etabin=mTowers[tower][layer].etabin();
78 
79  //$$$std::cout << "tower " << mTowers[tower][layer].name() << ":";
80 
81  for ( Int_t phi=phibin-1;phi<=phibin+1;phi++ )
82  for ( Int_t eta=etabin-1;eta<=etabin+1;eta++ )
83  {
84 
86  if ( phi==phibin && eta==etabin ) continue;
87 
89  if ( eta<0 || eta>11) continue;
90 
92  Int_t kphi=phi;
93  if ( kphi<0 ) kphi+=60;
94  if ( kphi>59 ) kphi-=60;
95 
96  Int_t neighbor=12*kphi+eta;
97 
98  if ((neighbor>=0) && (neighbor<720)) {
100  mTowers[tower][layer].neighbor( &mTowers[neighbor][layer] );
101  }
102  }
103 
104 
105  }
106  }
107 
109  mHighTower[0]=&mTowers[0][0];
110  mHighTower[1]=&mTowers[0][1];
111  mHighTower[2]=&mTowers[0][2];
112  mHighTower[3]=&mTowers[0][3];
113 
115  for ( Int_t sec=0; sec<12; sec++ ) {
116  for ( Int_t plane=0; plane<2; plane++ ) {
117  for ( Int_t strip=0; strip<288; strip++ ) {
118  mStrips[sec][plane][strip].Clear("");
119  mStrips[sec][plane][strip].sector(sec);
120  mStrips[sec][plane][strip].plane(plane);
121  mStrips[sec][plane][strip].index(strip);
122  }
123  }
124  }
125 
127  mDbMaker = 0;
128 
130  threshold(3.0,0);
131  threshold(3.0,1);
132  threshold(3.0,2);
133  threshold(3.0,3);
134  threshold(3.0,4);
135  threshold(3.0,5);
136 
139 
141  StEEmcTowerVec_t t;
142  for ( Int_t i = 0; i < 4; i++ ) mHitTowers.push_back(t);
143 
145  StEEmcStripVec_t s;
146  std::vector< StEEmcStripVec_t > plane;
147  plane.push_back(s); // U plane
148  plane.push_back(s); // V plane
149  for ( Int_t i=0; i < 12; i++ ) mHitStrips.push_back(plane);
150 
151 
152 
153 }
154 
155 // ----------------------------------------------------------------------------
156 StEEmcA2EMaker::~StEEmcA2EMaker()
157 {
158  if (mEEgeom) delete mEEgeom;
159  mEEgeom = 0;
160 }
161 
162 // ----------------------------------------------------------------------------
164 {
166  mDbMaker = (const StEEmcDb*)this->GetDataSet("StEEmcDb");
167  return StMaker::Init();
168 }
169 
170 // ----------------------------------------------------------------------------
172 {
174  if ( !readData() ) return kStWarn;
175  return kStOK;
176 }
177 
178 // ----------------------------------------------------------------------------
180 {
182  const StMuDst* muDst = (const StMuDst*)GetInputDS("MuDst");
183  if (muDst) {
184  const StMuEmcCollection *emc = muDst->muEmcCollection();
185  if (emc) {
186  {LOG_DEBUG << "Reading from MuDst..." << endm;}
187  return fillFromMuDst(emc);
188  }
189  }
190  const StEvent *event = (const StEvent*)GetInputDS("StEvent");
191  if (event) {
192  const StEmcCollection *emc = event->emcCollection();
193  if (emc) {
194  {LOG_DEBUG << "Reading from StEvent..." << endm;}
195  return fillFromSt(emc);
196  }
197  {LOG_WARN << "Cannot find emc in the event" << endm;}
198  return false;
199  } else {
200  {LOG_WARN << "Cannot find neither event or mudst" << endm;}
201  }
202  return false;
203 }
204 
205 // ----------------------------------------------------------------------------
207 {
208  if (!emc) {
209  {LOG_WARN << "Cannot find StMuEmcCollection" << endm;}
210  return false;
211  }
212 
213  LOG_DEBUG<<GetName()<<"::fillFromMuDst() N tower ADC = "<<emc -> getNEndcapTowerADC()<<endm;
214 
216  for ( Int_t ihit = 0; ihit < emc -> getNEndcapTowerADC(); ihit++ ) {
217 
218  Int_t adc, sec, sub, eta;
219  emc -> getEndcapTowerADC ( ihit, adc, sec, sub, eta );
220 
221  sec--; // Counting from 1 is insane in c++! It ends here.
222  sub--; // Everything in my classes assume indexes from 0.
223  eta--; //
224 
225  if ((sec >= 0) && (sec < 12) && (sub >= 0) && (sub < 5) && (eta >= 0) && (eta < 12)) {
226  addTowerHit(sec,sub,eta,adc,0);
227  } else {
228  // Indexing errors detected
229  }
230  }
231 
232  LOG_DEBUG<<GetName()<<"::fillFromMuDst() N pre/post ADC = "<<emc -> getNEndcapPrsHits()<<endm;
233 
235  for ( Int_t ihit = 0; ihit < emc -> getNEndcapPrsHits(); ihit++ ) {
236 
237  Int_t adc, sec, sub, eta, det;
238  const StMuEmcHit *hit = emc -> getEndcapPrsHit(ihit, sec, sub, eta, det);
239  if (!hit) continue;
240 
241  adc = hit -> getAdc();
242 
243  sec--; // Counting from 1 is insane in c++! It ends here.
244  sub--; // Everything in my classes assume indexes from 0.
245  eta--; //
246 
247  if ((sec >= 0) && (sec < 12) && (sub >= 0) && (sub < 5) && (eta >= 0) && (eta < 12) && (det >= 1) && (det < 4)) {
248  addTowerHit(sec,sub,eta,(Float_t)adc,det);
249  } else {
250  // Indexing errors detected
251  }
252  }
253 
255  Char_t cpl[] = { 'U','V' };
256  for ( Int_t plane = 0; plane < 2; plane++ )
257  for ( Int_t ihit = 0; ihit < emc -> getNEndcapSmdHits(cpl[plane]); ihit++ ) {
258 
259  Int_t sec, strip, adc;
260  const StMuEmcHit *hit = emc -> getEndcapSmdHit( cpl[plane], ihit, sec, strip );
261  adc = hit -> getAdc();
262 
263  sec--; // Counting from 1 is insane in c++! It ends here.
264  strip--; // Everything in my classes assume indexes from 0.
265 
266  if ((sec >= 0) && (sec < 12) && (strip >= 0) && (strip < 288)) {
267  addSmdHit(sec,plane,strip,(Float_t)adc);
268  } else {
269  // Indexing errors detected
270  }
271  }
272  return true;
273 }
274 
275 // ----------------------------------------------------------------------------
276 Float_t StEEmcA2EMaker::addTowerHit( Int_t sec, Int_t sub, Int_t eta, Float_t adc, Int_t layer )
277 {
278  Float_t energy = 0;
279  if (!((sec>=0 && sec<12) && (sub>=0 && sub<5) && (eta>=0 && eta<12) && (layer>=0 && layer < 4))) {
280  return energy;
281  }
282  Int_t index=60*sec+12*sub+eta;
283  if (!((0<=index) && (index<720))) {
284  // Just can't stay in bounds today
285  return energy;
286  }
287 
288  static const Char_t subsectors[] = { 'A','B','C','D','E' };
289  static const Char_t detectors[] = { 'T', 'P', 'Q', 'R' };
290 
294 
295  const EEmcDbItem *dbitem = mDbMaker ? mDbMaker -> getTile( sec+1,subsectors[sub],eta+1, detectors[layer] ) : 0;
296  if (!dbitem) {
297  return energy;
298  }
299 
301  mTowers[index][layer].fail( dbitem -> fail );
302  mTowers[index][layer].stat( dbitem -> stat );
303 
305  mTowers[index][layer].raw(adc);
306 
308  if ( dbitem -> fail ) return energy;
309  //if ( dbitem -> stat ) return energy;
310 
311  Float_t ped = dbitem -> ped;
312  Float_t gain = dbitem -> gain;
313  Float_t threshold = ped + dbitem -> sigPed * mSigmaPed[layer];
314 
316  if ( adc < threshold ) return energy;
317  mHits[sec][layer]++;
318 
320  mTowers[index][layer].adc(adc-ped);
321 
323  if ( gain <= 0. ) return energy;
325  energy = ( adc - ped + 0.5 ) / gain;
326 
328  mTowers[index][layer].energy( energy * mScale );
329 
331  UInt_t s=(UInt_t)mTowers[index][layer].sector();
332  UInt_t ss=(UInt_t)mTowers[index][layer].subsector();
333  UInt_t eb=(UInt_t)mTowers[index][layer].etabin();
334  TVector3 momentum=mEEgeom -> getTowerCenter( s,ss,eb );
335  momentum=momentum.Unit();
336  momentum*=energy;
337  mTowers[index][layer].et( (Float_t)momentum.Perp() );
338 
339  if ( !mTowers[index][layer].fail() )
340  if ( adc - ped > mHighTower[layer]->adc() ) {
341  mHighTower[layer] = &mTowers[index][layer];
342  }
343 
345 
346  mHitTowers[layer].push_back( mTowers[index][layer] );
347  mEnergy[sec][layer] += mTowers[index][layer].energy();
348 
349 #if 0
350  mTowers[index][layer].print();
351 #endif
352  return energy;
353 }
354 
355 // ----------------------------------------------------------------------------
356 Float_t StEEmcA2EMaker::addSmdHit( Int_t sec, Int_t plane, Int_t strip, Float_t adc )
357 {
358  Float_t energy = 0;
359  if (!((0 <= sec) && (sec < 12) && (0 <= plane) && (plane < 2) && (0 <= strip) && (strip < 288))) {
360  return energy;
361  }
362 
364  static const Char_t planes[] = { 'U', 'V' };
365  const EEmcDbItem *dbitem = mDbMaker ? mDbMaker -> getByStrip ( sec+1, planes[plane], strip+1 ) : 0;
366 
368  if ( dbitem == 0 ) return energy;
369 
371  mStrips[sec][plane][strip].fail( dbitem -> fail );
372  mStrips[sec][plane][strip].stat( dbitem -> stat );
373 
375  mStrips[sec][plane][strip].raw(adc);
376 
378  if ( dbitem -> fail ) return energy;
379  //if ( dbitem -> stat ) return energy;
380 
381  Float_t ped = dbitem -> ped;
382  Float_t gain = dbitem -> gain;
383  Float_t threshold = ped + dbitem -> sigPed * mSigmaPed[4+plane];
384 
386  if ( adc < threshold ) return energy;
387  mHits[sec][plane+4]++;
388 
390  mStrips[sec][plane][strip].adc(adc-ped);
391 
393  if ( gain <= 0. ) return energy;
394 
396  energy = ( adc - ped + 0.5 ) / gain;
397 
398  mStrips[sec][plane][strip].energy(energy);
399 
400  mHitStrips[sec][plane].push_back( mStrips[sec][plane][strip] );
401 
402  mEnergy[sec][plane+4] += energy;
403  return energy;
404 }
405 
406 // ----------------------------------------------------------------------------
407 void StEEmcA2EMaker::Clear(Option_t *opts)
408 {
409  StMaker::Clear(opts);
411  for ( Int_t layer = 0; layer < 4; layer++ )
412  mHitTowers[layer].clear();
413 
414  for ( Int_t sector=0; sector<12; sector++ )
415  for ( Int_t plane = 0; plane < 2; plane++ )
416  mHitStrips[sector][plane].clear();
417 
418 
422 
423  for ( Int_t i = 0; i < 720; i++ )
424  for ( Int_t j = 0; j < 4; j++ )
425  mTowers[i][j].Clear("");
426 
427  for ( Int_t i = 0; i < 12; i++ )
428  for ( Int_t j = 0; j < 2; j++ )
429  for ( Int_t k = 0; k < 288; k++ )
430  mStrips[i][j][k].Clear("");
431 
433  for ( Int_t i = 0; i < 12; i++ )
434  for ( Int_t j = 0; j < 6; j++ ) {
435  mEnergy[i][j] = 0.;
436  mHits[i][j]=0;
437  }
438 }
439 
440 // ----------------------------------------------------------------------------
442 {
446  const StEmcDetector *detector=emc->detector(kEndcapEmcTowerId);
447  if ( !detector )
448  {
449  Warning("fillFromSt","\n**********\nemc->detector() NULL for eemc towers. MAJOR PROBLEM, trying to procede.\n**********\n\n");
450  return false;
451  }
452 
453  for ( UInt_t sec = 0; sec < detector -> numberOfModules(); sec++ )
454  {
455 
458  const StEmcModule *sector = detector -> module( sec+1 );
459  if (!sector) {
460  continue;
461  }
462  const StSPtrVecEmcRawHit &hits = sector->hits();
463 
465  for ( UInt_t ihit=0; ihit<hits.size(); ihit++ )
466  {
467 
468  if (!hits[ihit]) {
469  continue;
470  }
471 
474  Int_t isector = hits[ihit]->module() - 1;
475  Int_t isubsector = hits[ihit]->sub() - 1;
476  Int_t ietabin = hits[ihit]->eta() - 1;
477  Int_t adc = hits[ihit]->adc();
478  if (!((isector >= 0) && (isector < 12) && (isubsector >= 0) && (isubsector < 5) && (ietabin >= 0) && (ietabin < 12))) {
479  continue;
480  }
481 
482  Int_t iphibin = 5 * isector + isubsector;
483  Int_t index = 12 * iphibin + ietabin;
484  if (!((iphibin >= 0) && (iphibin < 60) && (index >= 0) && (index < 720))) {
485  continue;
486  }
487 
488 #if 0
489  std::cout << "isector=" << isector
490  << " isubsector=" << isubsector
491  << " ietabin=" << ietabin
492  << " " << hits[ihit]->module()
493  << " " << hits[ihit]->sub()
494  << " " << hits[ihit]->eta()
495  << " " << hits[ihit]->adc()
496  << std::endl;
497 #endif
498 
500  mTowers[index][0].stemc( hits[ihit] );
501 
502 
508  Float_t energy = addTowerHit(isector,isubsector,ietabin,(Float_t)adc,0);
509  hits[ihit]->setEnergy(energy);
510  }
511 
512  }
513 
514 #if 0
515  for ( UInt_t ii=0; ii < mHitTowers.size(); ii++ )
517  {
518  std::cout << "mHitTowers[0][" << ii << "] "
519  << mHitTowers[0][ii].sector() << " "
520  << mHitTowers[0][ii].subsector() << " "
521  << mHitTowers[0][ii].etabin() << " "
522  << mHitTowers[0][ii].adc() << " "
523  <<std::endl << " ====> "
524  << mHitTowers[0][ii].stemc()
525  << std::endl;
526  }
528 #endif
529 
533 
534  detector=emc->detector(kEndcapEmcPreShowerId);
535 
536  if ( !detector )
537  {
538  Warning("fillFromSt","\n**********\nemc->detector() NULL for eemc pre/post. MAJOR PROBLEM, trying to procede.\n**********\n\n");
539  } else {
540  for ( UInt_t sec = 0; sec < detector -> numberOfModules(); sec++ ) {
541 
544  const StEmcModule *sector = detector -> module( sec+1 );
545  const StSPtrVecEmcRawHit &hits = sector->hits();
546 
548  for ( UInt_t ihit=0; ihit<hits.size(); ihit++ )
549  {
550 
551  if (!hits[ihit]) {
552  continue;
553  }
554 
557  Int_t isector = hits[ihit]->module() - 1;
558  Int_t isubsector = (hits[ihit]->sub() - 1) % 5;
559  Int_t ietabin = hits[ihit]->eta() - 1;
560  Int_t adc = hits[ihit]->adc();
561 
562  Int_t ilayer = (hits[ihit]->sub() - 1) / 5 + 1;
563  if (!((ilayer >= 1) && (ilayer < 4))) {
564  continue;
565  }
566 
567  Int_t iphibin = 5*isector+isubsector;
568  Int_t index = 12*iphibin + ietabin;
569 
570  mTowers[index][ilayer].stemc( hits[ihit] );
571 
574  Float_t energy = addTowerHit( isector, isubsector, ietabin, (Float_t)adc, ilayer );
575  hits[ihit]->setEnergy(energy);
576  }
577 
578  }
579  }
580 
584  StDetectorId ids[] = { kEndcapSmdUStripId, kEndcapSmdVStripId };
586  for ( Int_t iplane=0; iplane<2; iplane++ )
587  {
588 
590  detector=emc->detector( ids[iplane] );
591  if ( !detector ) {
592  Warning("fillFromSt","\n**********\nemc->detector() NULL for esmd plane. MAJOR PROBLEM, trying to procede.\n**********\n\n");
593  } else {
594  for ( UInt_t sec = 0; sec < detector -> numberOfModules(); sec++ )
595  {
596 
599  const StEmcModule *sector = detector -> module( sec+1 );
600  const StSPtrVecEmcRawHit &hits = sector->hits();
601 
603  for ( UInt_t ihit=0; ihit<hits.size(); ihit++ )
604  {
605  Int_t isector=hits[ihit]->module()-1;
606  Int_t istrip=hits[ihit]->eta()-1;
607  Int_t adc =hits[ihit]->adc();
608  if (!((isector >= 0) && (isector < 12) && (istrip >= 0) && (istrip < 288))) {
609  continue;
610  }
611 
612  mStrips[isector][iplane][istrip].stemc( hits[ihit] );
613 
615  Float_t energy = addSmdHit( isector, iplane, istrip, (Float_t)adc);
616  hits[ihit]->setEnergy(energy);
617  }
618 
619  }
620  }
621  }
622  return true;
623 }
624 
625 // ----------------------------------------------------------------------------
626 Float_t StEEmcA2EMaker::energy(Int_t layer) const
627 {
628  Float_t sum=0.;
629  for ( Int_t sector=0;sector<12;sector++ ) sum+= energy(sector,layer);
630  return sum;
631 }
632 
633 // ----------------------------------------------------------------------------
634 StEEmcTower *StEEmcA2EMaker::tower(TVector3 &r, Int_t layer) {
635  Int_t sec=-1,sub=-1,eta=-1;
636  if ( !mEEgeom->getTower(r,sec,sub,eta) ) return NULL;
637  return &mTowers[ index(sec,sub,eta) ][layer];
638 }
639 
640 // ----------------------------------------------------------------------------
641 const StEEmcTower *StEEmcA2EMaker::tower(TVector3 &r, Int_t layer) const {
642  Int_t sec=-1,sub=-1,eta=-1;
643  if ( !mEEgeom->getTower(r,sec,sub,eta) ) return NULL;
644  return &mTowers[ index(sec,sub,eta) ][layer];
645 }
StEEmcA2EMaker(const Char_t *name="mEEanalysis")
Float_t mEnergy[kEEmcNumSectors][6]
EEmc ADC –&gt; energy maker.
void stat(unsigned s)
Set a status bit for this element.
Definition: StEEmcElement.h:23
Bool_t fillFromMuDst(const StMuEmcCollection *emc)
virtual void Clear(Option_t *opts="")
Clears the element.
Float_t addTowerHit(Int_t sec, Int_t sub, Int_t eta, Float_t adc, Int_t layer)
void layer(Int_t l)
Sets the layer, [0-4]=[TPQR].
Definition: StEEmcTower.h:31
void scale(Float_t s)
StEEmcTower * mHighTower[4]
std::vector< StEEmcTowerVec_t > mHitTowers
Float_t addSmdHit(Int_t sec, Int_t plane, Int_t str, Float_t adc)
Int_t mHits[kEEmcNumSectors][6]
Number of hits in layer.
StEEmcStrip mStrips[kEEmcNumSectors][kEEmcNumSmdUVs][kEEmcNumStrips]
Array of 12x2x288 smd strip objects.
void neighbor(StEEmcTower *n)
add a tower to list of neighbors
Definition: StEEmcTower.h:52
StEEmcStrip & strip(Int_t sector, Int_t plane, Int_t strip)
virtual void Clear(Option_t *opts="")
Clears the tower.
Definition: StEEmcTower.h:72
virtual void Clear(Option_t *option="")
User defined functions.
Definition: StMaker.cxx:634
const EEmcGeomSimple * mEEgeom
Int_t index(Int_t sector, Int_t subsector, Int_t etabin) const
Given tower sector, subsector, etabin, translate into index.
void raw(Float_t r)
Set the raw ADC for this element.
Definition: StEEmcElement.h:17
Bool_t fillFromSt(const StEmcCollection *emc)
If StEvent is used, we will fill additional parts of StEEmcElement.
Int_t etabin() const
Returns the etabin of this tower, pre- or postshower element.
Definition: StEEmcTower.h:45
void fail(unsigned f)
Set a fail bit for this element.
Definition: StEEmcElement.h:25
Int_t phibin(Int_t sector, Int_t subsector) const
Given tower sector, subsector, translate to phibin.
void threshold(Float_t cut, Int_t layer)
const StEEmcDb * mDbMaker
std::vector< std::vector< StEEmcStripVec_t > > mHitStrips
Float_t energy(Int_t sector, Int_t layer) const
void print() const
Print a summary of this tower.
Definition: StEEmcTower.cxx:58
void index(Int_t i)
Sets the index for this SMD strip, 0..287.
Definition: StEEmcStrip.cxx:32
void index(Int_t i)
Definition: StEEmcTower.cxx:76
Base class for representing tower, preshower and postshower elements.
Definition: StEEmcTower.h:11
virtual Int_t Init()
Initialize.
static StMuEmcCollection * muEmcCollection()
returns pointer to current StMuEmcCollection
Definition: StMuDst.h:389
virtual const char * GetName() const
special overload
Definition: StMaker.cxx:237
Definition: Stypes.h:42
EEMC simple geometry.
Definition: Stypes.h:40
Int_t phibin() const
Returns the phibin of this tower.
Definition: StEEmcTower.h:47
void et(Float_t e)
Definition: StEEmcTower.h:34
void adc(Float_t a)
Set the pedestal-subtracted ADC for this element.
Definition: StEEmcElement.h:19
virtual void Clear(Option_t *opts="")
Clear the maker for next event.
StEEmcTower & tower(Int_t index, Int_t layer=0)
Float_t mSigmaPed[6]
void stemc(StEmcRawHit *h)
Sets pointer to the StEmcRawHit when processing an StEvent file.
Definition: StEEmcElement.h:43
StEEmcTower mTowers[kEEmcNumSectors *kEEmcNumSubSectors *kEEmcNumEtas][4]
Array of 720 x 4 tower objects.
void plane(Int_t p)
Sets the plane for this SMD strip, 0=U, 1=V.
Definition: StEEmcStrip.h:19
bool getTower(const TVector3 &r, int &sec, int &sub, int &etabin, Float_t &dphi, Float_t &deta) const
void sector(Int_t s)
Sets the sector for this SMD strip.
Definition: StEEmcStrip.h:17
void energy(Float_t e)
Set the energy (adc-ped+0.5)/gain for this element.
Definition: StEEmcElement.h:21
virtual Int_t Make()
Read and process one event.