StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StIstRawHitMaker.cxx
1 // $Id: StIstRawHitMaker.cxx,v 1.50 2018/02/25 03:51:57 dongx Exp $
2 #include "StIstRawHitMaker.h"
3 
4 #include "StEvent.h"
5 #include "St_base/StMessMgr.h"
6 #include "RTS/src/DAQ_FGT/daq_fgt.h"
7 #include "RTS/src/DAQ_READER/daq_dta.h"
8 #include "StChain/StRtsTable.h"
9 
10 #include "StIstUtil/StIstCollection.h"
11 #include "StIstUtil/StIstRawHitCollection.h"
12 #include "StIstUtil/StIstRawHit.h"
13 #include "StIstDbMaker/StIstDb.h"
14 #include "StIstUtil/StIstConsts.h"
15 
16 #include "tables/St_istPedNoise_Table.h"
17 #include "tables/St_istGain_Table.h"
18 #include "tables/St_istMapping_Table.h"
19 #include "tables/St_istControl_Table.h"
20 #include "tables/St_istChipConfig_Table.h"
21 
22 
23 StIstRawHitMaker::StIstRawHitMaker( const char *name ): StRTSBaseMaker( "ist", name ),
24  mIsCaliMode(false), mDoEmbedding(false), mDoCmnCorrection(false),
25  mHitCut(5.), mCmnCut(3.),
26  mIstCollectionPtr(new StIstCollection()), mIstCollectionSimuPtr(nullptr),
27  mCmnVec(kIstNumApvs, 0),
28  mPedVec(kIstNumElecIds, 0),
29  mRmsVec(kIstNumElecIds, 0),
30  mGainVec(kIstNumElecIds, 0),
31  mMappingVec(kIstNumElecIds, 0),
32  mConfigVec(kIstNumApvs, 1),
33  mDataType(2)
34 {
35 }
36 
37 StIstRawHitMaker::~StIstRawHitMaker()
38 {
40 }
41 
42 
48 {
49  ToWhiteConst("istRawHitAndCluster", mIstCollectionPtr);
50 
51  return kStOk;
52 }
53 
54 
59 Int_t StIstRawHitMaker::InitRun(Int_t runnumber)
60 {
61  Int_t ierr = kStOk;
62 
63  TObjectSet *istDbDataSet = (TObjectSet *)GetDataSet("ist_db");
64  StIstDb *mIstDb = NULL;
65 
66  if (istDbDataSet) {
67  mIstDb = (StIstDb *)istDbDataSet->GetObject();
68  assert(mIstDb);
69  }
70  else {
71  LOG_ERROR << "InitRun : no istDb" << endm;
72  return kStErr;
73  }
74 
75  // IST control parameters
76  const istControl_st *istControlTable = mIstDb->getControl() ;
77 
78  if (!istControlTable) {
79  LOG_ERROR << "Pointer to IST control table is null" << endm;
80  ierr = kStErr;
81  }
82  else {
83  mHitCut = istControlTable[0].kIstHitCutDefault;
84  mCmnCut = istControlTable[0].kIstCMNCutDefault;
85  mChanMinRmsNoiseLevel = istControlTable[0].kIstChanMinRmsNoiseLevel;
86  mChanMaxRmsNoiseLevel = istControlTable[0].kIstChanMaxRmsNoiseLevel;
87  mApvMaxCmNoiseLevel = istControlTable[0].kIstApvMaxCmNoiseLevel;
88  mALLdata = istControlTable[0].kIstAlldata;
89  mADCdata = istControlTable[0].kIstADCdata;
90  mZSdata = istControlTable[0].kIstZSdata;
91  mDefaultTimeBin = istControlTable[0].kIstDefaultTimeBin;
92  mCurrentTimeBinNum = istControlTable[0].kIstCurrentTimeBinNum;
93  mMinNumOfRawHits = istControlTable[0].kIstMinNumOfRawHits;
94  mMaxNumOfRawHits = istControlTable[0].kIstMaxNumOfRawHits;
95  }
96 
97  // IST pedestal/rms table
98  const istPedNoise_st *gPN = mIstDb->getPedNoise();
99 
100  if ( !gPN ) {
101  LOG_ERROR << "Pointer to IST pedestal/noise table is null" << endm;
102  ierr = kStErr;
103  }
104  else {
105  for (int i = 0; i < kIstNumApvs; i++) {
106  LOG_DEBUG << Form(" Print entry %d : CM noise=%f ", i, (float)gPN[0].cmNoise[i] / 100.) << endm;
107  mCmnVec[i] = (float)gPN[0].cmNoise[i] / 100.0;
108  }
109 
110  for (int i = 0; i < kIstNumElecIds; i++) {
111  LOG_DEBUG << Form(" Print entry %d : pedestal=%f ", i, (float)gPN[0].pedestal[i]) << endm;
112  mPedVec[i] = (float)gPN[0].pedestal[i];
113  }
114 
115  for (int i = 0; i < kIstNumElecIds; i++) {
116  LOG_DEBUG << Form(" Print entry %d : RMS noise=%f ", i, (float)gPN[0].rmsNoise[i] / 100.) << endm;
117  mRmsVec[i] = (float)gPN[0].rmsNoise[i] / 100.;
118  }
119  }
120 
121  // IST gain table
122  const istGain_st *gG = mIstDb->getGain();
123 
124  if ( !gG ) {
125  LOG_WARN << "Pointer to IST gain table is null" << endm;
126  ierr = kStWarn;
127  }
128  else {
129  for (int i = 0; i < kIstNumElecIds; i++) {
130  LOG_DEBUG << Form(" Print entry %d : gain=%f ", i, (float)gG[0].gain[i]) << endm;
131  mGainVec[i] = (float)gG[0].gain[i];
132  }
133  }
134 
135  // IST mapping table
136  const istMapping_st *gM = mIstDb->getMapping();
137 
138  if ( !gM ) {
139  LOG_ERROR << "Pointer to IST mapping table is null" << endm;
140  ierr = kStErr;
141  }
142  else {
143  for (int i = 0; i < kIstNumElecIds; i++) {
144  LOG_DEBUG << Form(" Print entry %d : geoId=%d ", i, gM[0].mapping[i]) << endm;
145  mMappingVec[i] = gM[0].mapping[i];
146  }
147  }
148 
149  // IST chip configuration status table
150  const istChipConfig_st *gCS = mIstDb->getChipStatus();
151 
152  if ( !gCS ) {
153  LOG_ERROR << "Pointer to IST chip configuration table is null" << endm;
154  ierr = kStErr;
155  }
156  else {
157  if (runnumber == gCS[0].run) {
158  for (int i = 0; i < kIstNumApvs; i++) {
159  LOG_DEBUG << Form(" Print entry %d : status=%d ", i, gCS[0].s[i]) << endm;
160  mConfigVec[i] = gCS[0].s[i]; /* 0 dead; 1 good; 2-9 reserved good status; 10 mis-configured */
161  }
162  }
163  }
164 
165  return ierr;
166 }
167 
168 
177 {
178  Int_t ierr = kStOk;
179 
180  //access raw ADC containers from simu data
181  TObjectSet* istSimuDataSet = (TObjectSet*)GetDataSet("istRawAdcSimu");
182  if ( !istSimuDataSet ) {
183  LOG_WARN << "StIstRawHitMaker::Make() - No raw ADC dataset found from simu data! " << endm;
184  }
185  if(istSimuDataSet) {
186  mIstCollectionSimuPtr = (StIstCollection*)istSimuDataSet->GetObject();
187  }
188  if( !mIstCollectionSimuPtr ) {
189  LOG_WARN << "StIstRawHitMaker::Make() - No istCollection found in simu dataset! "<<endm;
190  }
191 
192 
193  StRtsTable *rts_tbl = 0;
194  UChar_t dataFlag = mALLdata;
195  Int_t ntimebin = mCurrentTimeBinNum;
196 
197  Int_t nRawAdcFromData = 0;
198  int nIdTruth_Ist = 0;
199  Bool_t printed = kFALSE;
200  while (1) { //loops over input raw data
201  if (dataFlag == mALLdata) {
202  if (mDataType == mALLdata) {
203  if(!printed) { LOG_INFO << " Trying to read ALLdata" << endm; printed = kTRUE; }
204  rts_tbl = GetNextDaqElement("ist/zs"); dataFlag = mZSdata;
205 
206  if (!rts_tbl) {
207  LOG_WARN << "NO ZS-DATA BANK FOUND!!!" << endm;
208  rts_tbl = GetNextDaqElement("ist/adc"); dataFlag = mADCdata;
209  }
210  }
211  else if (mDataType == mADCdata) {
212  if(!printed) { LOG_INFO << " Trying to read ADCdata" << endm; printed = kTRUE; }
213  rts_tbl = GetNextDaqElement("ist/adc"); dataFlag = mADCdata;
214  }
215  else if (mDataType == mZSdata) {
216  if(!printed) { LOG_INFO << " Trying to read ZSdata" << endm; printed = kTRUE; }
217  rts_tbl = GetNextDaqElement("ist/zs"); dataFlag = mZSdata;
218  }
219  }
220  else if (dataFlag == mADCdata) {
221  if(!printed) { LOG_INFO << " Trying to read ADCdata" << endm; printed = kTRUE; }
222  rts_tbl = GetNextDaqElement("ist/adc");
223  }
224  else if (dataFlag == mZSdata) {
225  if(!printed) { LOG_INFO << " Trying to read ZSdata" << endm; printed = kTRUE; }
226  rts_tbl = GetNextDaqElement("ist/zs");
227  }
228 
229  if (!rts_tbl) break;
230 
231  apv_meta_t *meta = (apv_meta_t *)rts_tbl->Meta();
232 
233  if (meta) {
234  for (int r = 1; r <= kIstNumRdos; r++) { //6 rdos needed for whole IST detector
235  if (meta->arc[r].present == 0) continue ;
236 
237  for (int arm = 0; arm < kIstNumArmsPerRdo; arm++) { //6 arms per arc
238  if (meta->arc[r].arm[arm].present == 0) continue ;
239 
240  for (int apv = 0; apv < kIstNumApvsPerArm; apv++) { //24 apvs per arm
241  if (meta->arc[r].arm[arm].apv[apv].present == 0) continue ;
242 
243  int nt = meta->arc[r].arm[arm].apv[apv].ntim;
244 
245  if (ntimebin != 0 && nt != 0 && ntimebin != nt)
246  LOG_WARN << "Different number of timebins in different APV!!! Taking larger one!!!" << endm;
247 
248  if (ntimebin < nt)
249  ntimebin = nt;
250  }
251  }
252  }
253  }
254 
255  mIstCollectionPtr->setNumTimeBins(ntimebin);
256 
257  // Arrays to store ADC information per APV chip (128 channels over all time bins)
258  // Signal w/o pedestal subtracted
259  std::array< std::array<double, kIstNumTimeBins>, kIstNumApvChannels > signalUnCorrected{};
260  // Signal w/ pedestal subtracted
261  std::array< std::array<double, kIstNumTimeBins>, kIstNumApvChannels > signalCorrected{};
262  // id of mc track
263  std::array<int, kIstNumApvChannels> idTruth{};
264 
265  // arrays to calculate dynamical common mode noise contribution to the APV chip in current event
266  double sumAdcPerEvent[kIstNumTimeBins];
267  Int_t counterAdcPerEvent[kIstNumTimeBins];
268  memset(sumAdcPerEvent, 0, sizeof(sumAdcPerEvent));
269  memset(counterAdcPerEvent, 0, sizeof(counterAdcPerEvent));
270 
271  // electronics coordinate info.: RDO, ARM, APV
272  Int_t rdo = rts_tbl->Rdo(); // 1, 2, ..., 6
273  Int_t arm = rts_tbl->Sector(); // 0, 1, ..., 5
274  Int_t apv = rts_tbl->Pad(); // 0, 1, ..., 23
275 
276  Int_t flag = 0;
277 
278  if (rdo < 1 || rdo > kIstNumRdos) flag = 1;
279  if (arm < 0 || arm >= kIstNumArmsPerRdo) flag = 1;
280  if (apv < 0 || apv >= kIstNumApvsPerArm) flag = 1;
281 
282  if (flag == 1) {
283  LOG_INFO << "Corrupt data rdo: " << rdo << " arm: " << arm << " apv: " << apv << endm;
284  continue;
285  }
286 
287  // Define apv Id to form full channel id later
288  int apvElecId = (rdo - 1) * kIstNumArmsPerRdo * kIstNumApvsPerArm * kIstNumApvChannels + arm * kIstNumApvsPerArm * kIstNumApvChannels + apv * kIstNumApvChannels;
289 
290  // Loop over the data in this APV to get raw hit info. (channel, timebin, adc)
291  for (StRtsTable::iterator it = rts_tbl->begin(); it != rts_tbl->end(); it++) {
292  // channel info.
293  fgt_adc_t *f = (fgt_adc_t *)*it;
294  Int_t channel = f->ch; //channel index 0, 1, ..., 127
295  Int_t adc = f->adc; //adc
296  Short_t timebin = f->tb; //time bin
297  LOG_DEBUG << "channel: " << channel << " adc: " << adc << " time bin: " << timebin << endm;
298 
299  flag = 0;
300 
301  if ((dataFlag == mADCdata) && (adc < 0 || adc >= kIstMaxAdc)) flag = 1;
302  if (channel < 0 || channel >= kIstNumApvChannels) flag = 1;
303  if (timebin < 0 || timebin >= ntimebin) flag = 1;
304 
305  if (flag == 1) {
306  LOG_INFO << "Corrupt data channel: " << channel << " tbin: " << timebin << " adc: " << adc << endm;
307  continue;
308  }
309 
310  signalUnCorrected[channel][timebin] = adc;
311  if(adc>0) nRawAdcFromData++;
312 
313  if ( !mIsCaliMode ) {
314  Int_t elecId = apvElecId + channel;
315 
316  if (elecId < 0 || elecId >= kIstNumElecIds) {
317  LOG_INFO << "Wrong elecId: " << elecId << endm;
318  continue;
319  }
320 
321  // This is where we get the simulated hits from the simu container if it is available
322  // and merge with real data ADC values
324  {
325  Int_t geoId = mMappingVec[elecId];
326  Int_t ladder = 1 + (geoId - 1) / (kIstNumSensorsPerLadder * kIstNumPadsPerSensor);
327 
328  StIstRawHitCollection *rawHitCollectionSimuPtr = mIstCollectionSimuPtr->getRawHitCollection(ladder-1);
329  if(rawHitCollectionSimuPtr)
330  {
331  StIstRawHit * rawHitSimu = rawHitCollectionSimuPtr->getRawHit(elecId);
332  idTruth[channel] = 0;
333  if(rawHitSimu->getCharge(timebin) > 0) { // a valid MC hit
334  signalUnCorrected[channel][timebin] += rawHitSimu->getCharge(timebin);
335  idTruth[channel] = rawHitSimu->getIdTruth();
336  }
337  }
338  }
339 
340  if ( dataFlag == mADCdata ) { // non-ZS data
341  signalCorrected[channel][timebin] = signalUnCorrected[channel][timebin] - mPedVec[elecId];
342 
343  // exclude signal-related channels for common mode noise calculation
344  if ( (signalCorrected[channel][timebin] > (-mCmnCut)*mRmsVec[elecId]) &&
345  (signalCorrected[channel][timebin] < mCmnCut *mRmsVec[elecId]) )
346  {
347  sumAdcPerEvent[timebin] += signalCorrected[channel][timebin];
348  counterAdcPerEvent[timebin]++;
349  }
350 
351  LOG_DEBUG << " Corrected = " << signalCorrected[channel][timebin] << "\t sumAdcPerEvent = " << sumAdcPerEvent[timebin] << endm;
352  }
353  else { // ZS data
354  signalCorrected[channel][timebin] = signalUnCorrected[channel][timebin];
355  }
356  }
357  } // end current APV loops
358 
359  nIdTruth_Ist += FillRawHitCollectionFromAPVData(dataFlag, ntimebin, counterAdcPerEvent, sumAdcPerEvent, apvElecId, signalUnCorrected, signalCorrected, idTruth);
360 
361  }//end while
362  LOG_INFO << " Total number of IST Raw Hits - Step I = " << mIstCollectionPtr->getNumRawHits() << " w/ idTruth = " << nIdTruth_Ist << endm;
363 
364  // In case of pure simulation mode when neither real data hits from DAQ
365  // records is available nor embedding is requested fill the output container
366  // with simulated hits
367  if(!mDoEmbedding && !nRawAdcFromData) nIdTruth_Ist += FillRawHitCollectionFromSimData();
368 
369  LOG_INFO << " Total number of IST Raw Hits - Step II = " << mIstCollectionPtr->getNumRawHits() << " w/ idTruth = " << nIdTruth_Ist << endm;
370 
371  return ierr;
372 }
373 
374 
379 int StIstRawHitMaker::FillRawHitCollectionFromAPVData(unsigned char dataFlag, int ntimebin,
380  int counterAdcPerEvent[], double sumAdcPerEvent[], int apvElecId,
381  std::array< std::array<double, kIstNumTimeBins>, kIstNumApvChannels > &signalUnCorrected,
382  std::array< std::array<double, kIstNumTimeBins>, kIstNumApvChannels > &signalCorrected,
383  std::array<int, kIstNumApvChannels> &idTruth)
384 {
385  int nIdTruth = 0;
386  // calculate the dynamical common mode noise for the current chip in this event
387  double commonModeNoise[kIstNumTimeBins];
388 
389  for (int tbIdx = 0; tbIdx < kIstNumTimeBins; tbIdx++)
390  commonModeNoise[tbIdx] = 0.;
391 
392  if ( !mIsCaliMode && dataFlag == mADCdata ) {
393  for (short iTb = 0; iTb < ntimebin; iTb++) {
394  if (counterAdcPerEvent[iTb] > 0)
395  commonModeNoise[iTb] = sumAdcPerEvent[iTb] / counterAdcPerEvent[iTb];
396  }
397  }
398 
399  // raw hit decision and channel counter passed the hit decision
400  std::vector<bool> isPassRawHitCut(kIstNumApvChannels, false);
401  Int_t nChanPassedCut = 0;
402 
403 
404  for (int iChan = 0; iChan < kIstNumApvChannels; iChan++)
405  {
406  Int_t elecId = apvElecId + iChan;
407 
408  for (int iTB = 1; iTB < ntimebin - 1; iTB++)
409  {
410  // raw hit decision: the method is stolen from Gerrit's ARMdisplay.C
411  if ( (signalUnCorrected[iChan][iTB] > 0) &&
412  (signalUnCorrected[iChan][iTB] < kIstMaxAdc) &&
413  (signalCorrected[iChan][iTB - 1] > mHitCut * mRmsVec[elecId]) &&
414  (signalCorrected[iChan][iTB] > mHitCut * mRmsVec[elecId]) &&
415  (signalCorrected[iChan][iTB + 1] > mHitCut * mRmsVec[elecId]) )
416  {
417  isPassRawHitCut[iChan] = kTRUE;
418  nChanPassedCut++;
419  iTB = 999;
420  }
421  }
422  }
423 
424  // skip the chip filling if the signal-channel number too large (20% chip occupancy was set) to exclude hot chip
425  if ( !mIsCaliMode && (nChanPassedCut > mMaxNumOfRawHits || nChanPassedCut < mMinNumOfRawHits) ) {
426  LOG_DEBUG << "Skip: The APV chip could be hot with " << nChanPassedCut << " channels fired!!" << endm;
427  return 0;
428  }
429 
430  // fill IST raw hits for current APV chip
431  for (int iChan = 0; iChan < kIstNumApvChannels; iChan++)
432  {
433  //mapping info.
434  Int_t elecId = apvElecId + iChan;
435  Int_t geoId = mMappingVec[elecId]; // channel geometry ID which is numbering from 1 to 110592
436  Int_t ladder = 1 + (geoId - 1) / (kIstApvsPerLadder * kIstNumApvChannels); // ladder geometry ID: 1, 2, ..., 24
437  Int_t apvId = 1 + (geoId - 1) / kIstNumApvChannels; // APV geometry ID: 1, ..., 864 (numbering from ladder 1 to ladder 24)
438 
439  //store raw hits information
440  StIstRawHitCollection *rawHitCollectionPtr = mIstCollectionPtr->getRawHitCollection( ladder - 1 );
441 
442  if ( !rawHitCollectionPtr ) {
443  LOG_WARN << "StIstRawHitMaker::Make() -- Could not access rawHitCollection for ladder " << ladder << endm;
444  continue;
445  }
446 
447  if ( mIsCaliMode ) { //calibration mode (non-ZS data): only write raw ADC value
448  if (dataFlag == mADCdata) {
449  rawHitCollectionPtr->addRawHit( new StIstRawHit(elecId, geoId, signalUnCorrected[iChan]) );
450  }
451  else return 0;
452  }
453  else { //physics mode: pedestal subtracted + dynamical common mode correction
454  //skip dead chips and bad mis-configured chips
455  if (mConfigVec[apvId - 1] < 1 || mConfigVec[apvId - 1] > 9) { //1-9 good status code
456  LOG_DEBUG << "Skip: Channel belongs to dead/bad/mis-configured APV chip geometry index: " << apvId << " on ladder " << ladder << endm;
457  continue;
458  }
459 
460  //skip current channel marked as suspicious status
461  if (mRmsVec[elecId] < mChanMinRmsNoiseLevel ||
462  mRmsVec[elecId] > mChanMaxRmsNoiseLevel ||
463  mRmsVec[elecId] > 99.0)
464  {
465  LOG_DEBUG << "Skip: Noisy/hot/dead channel electronics index: " << elecId << endm;
466  continue;
467  }
468 
469  if ( !isPassRawHitCut[iChan] )
470  continue;
471 
472  UChar_t tempMaxTB = -1;
473  double tempMaxCharge = -999.0;
474 
475  StIstRawHit *rawHitPtr = rawHitCollectionPtr->getRawHit( elecId );
476 
477  // Modify signalCorrected values in some ways
478  for (int iTBin = 0; iTBin < ntimebin; iTBin++)
479  {
480  if ( mDoCmnCorrection && dataFlag == mADCdata )
481  signalCorrected[iChan][iTBin] -= commonModeNoise[iTBin];
482 
483  if (signalCorrected[iChan][iTBin] < 0)
484  signalCorrected[iChan][iTBin] = 0.1;
485 
486  rawHitPtr->setChargeErr(mRmsVec[elecId] * mGainVec[elecId], (unsigned char)iTBin);
487 
488  if (signalCorrected[iChan][iTBin] > tempMaxCharge) {
489  tempMaxCharge = signalCorrected[iChan][iTBin];
490  tempMaxTB = (unsigned char)iTBin;
491  }
492 
493  signalCorrected[iChan][iTBin] *= mGainVec[elecId];
494  }
495 
496  rawHitPtr->setCharges(signalCorrected[iChan]);
497  rawHitPtr->setChannelId( elecId );
498  rawHitPtr->setGeoId( geoId );
499  rawHitPtr->setMaxTimeBin( tempMaxTB );
500  rawHitPtr->setDefaultTimeBin( mDefaultTimeBin );
501  rawHitPtr->setIdTruth( idTruth[iChan] );
502  if(idTruth[iChan]>0) nIdTruth++;
503 
504  }//end filling hit info
505  } //end single APV chip hits filling
506  return nIdTruth;
507 }
508 
509 
518 int StIstRawHitMaker::FillRawHitCollectionFromSimData()
519 {
520  int nIdTruth = 0;
521  if(!mIstCollectionSimuPtr) return 0;
522 
523  for( UChar_t ladderIdx=0; ladderIdx < kIstNumLadders; ++ladderIdx )
524  {
525  StIstRawHitCollection *rawHitCollectionDataPtr = mIstCollectionPtr->getRawHitCollection( ladderIdx );
526  std::vector<StIstRawHit *> rawAdcSimuVec = mIstCollectionSimuPtr->getRawHitCollection(ladderIdx)->getRawHitVec();
527 
528  for (const auto rawAdcSimuPtr : rawAdcSimuVec)
529  {
530  if (!rawAdcSimuPtr) continue;
531 
532  rawHitCollectionDataPtr->addRawHit(new StIstRawHit(*rawAdcSimuPtr));
533  if(rawAdcSimuPtr->getIdTruth()>0) nIdTruth++;
534  }
535  }
536  return nIdTruth;
537 }
538 
539 void StIstRawHitMaker::Clear( Option_t *opts )
540 {
541  if (mIstCollectionPtr ) {
542  for ( unsigned char i = 0; i < kIstNumLadders; ++i ) {
543  mIstCollectionPtr->getRawHitCollection(i)->Clear( "" );
544  }
545  }
546 }
547 
548 ClassImp(StIstRawHitMaker)
const int kIstNumPadsPerSensor
768 pads in each sensor
StRtsTable * GetNextDaqElement(const char *elementPath)
Query the STAR production chain for the DAQ data.
Class StRTSBaseMaker - is an abstract StMaker to define the interface to access the DAQ data from the...
std::vector< float > mRmsVec
Channel elec. index, RMS noise.
std::vector< float > mPedVec
Channel elec. index, pedestal.
StIstCollection * mIstCollectionPtr
const int kIstNumLadders
24 IST Ladders
std::vector< unsigned char > mConfigVec
APV chip configuration status indexed by geom. id.
std::vector< float > mCmnVec
APV chip geom. index, common mode (CM) noise.
std::vector< float > mGainVec
Channel elec. index, gain.
Int_t InitRun(Int_t runNumber)
std::vector< int > mMappingVec
Channel elec. index to geometry ID mapping.
StIstCollection * mIstCollectionSimuPtr
void addRawHit(StIstRawHit *istRawHit)
Definition: Stypes.h:42
unsigned short getIdTruth() const
for embedding, 0 as background
Definition: StIstRawHit.cxx:44
void setCharges(const Container &charges)
Definition: StIstRawHit.h:53
void Clear(Option_t *opts="")
User defined functions.
const int kIstNumSensorsPerLadder
6 sensor per one IST Ladder
virtual TObject * GetObject() const
The depricated method (left here for the sake of the backward compatibility)
Definition: TObjectSet.h:56
Definition: Stypes.h:44
Definition: Stypes.h:41