StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StEpdHitMaker.cxx
1 #include <stdlib.h>
2 
17 #include "StEpdHitMaker.h"
18 #include "StMaker.h"
19 #include "StEventTypes.h"
20 #include "StEvent/StTriggerData.h"
21 #include "StEpdHit.h"
22 #include <TSystem.h>
23 #include "StEvent/StEpdCollection.h"
24 #include "StEpdDbMaker/StEpdDbMaker.h"
25 
26 
27 #include <iostream>
28 #include <fstream>
29 #include <sstream>
30 #include <string>
31 
32 ClassImp(StEpdHitMaker)
33 
34 
35 //----------------------------------------------
37  mEventCounter(0), mTriggerEventCounter(0), mEpdCollection(0), mTriggerData(0), mEpdDbMaker(0), mStEvent(0) {
38  LOG_DEBUG << "StEpdHitMaker::ctor" << endm;
39 }
40 
41 //----------------------------------------------
43  return kStOK;
44 }
45 
46 //----------------------------------------------
48  mEventCounter++ ;
49  mTriggerEventCounter++;
50  mTriggerData = this->GetTriggerData();
51  if (!mTriggerData){
52  LOG_ERROR << "StEpdHitMaker::Make - no TriggerData object" << endm;
53  return kStErr;
54  }
55  mEpdDbMaker = this->GetEpdDbMaker();
56  if (!mEpdDbMaker){
57  LOG_ERROR << "StEpdHitMaker::Make - no EpdDbMaker object" << endm;
58  return kStErr;
59  }
60  mEpdCollection = this->GetEpdCollection();
61  if (!mEpdCollection){
62  LOG_ERROR << "StEpdHitMaker::Make - no EpdCollection object" << endm;
63  return kStErr;
64  }
65  FillStEpdData();
66  return kStOK;
67 }
68 
69 
70 //------------------------------------------------
72  // StEpdDbMaker* dbMaker = (StEpdDbMaker*)GetDataSet("epdDb"); // no, this doesn't work!!
73  StEpdDbMaker* dbMaker = (StEpdDbMaker*)GetMaker("epdDb");
74  if (!dbMaker) LOG_WARN << "No StEpdDbMaker found by StEpdHitMaker::GetEpdDbMaker" << endm;
75  return dbMaker;
76 }
77 
78 //----------------------------------------------
80  return kStOK;
81 }
82 
83 //----------------------------------------------
85  StTriggerData* trg=0;
86  mStEvent = dynamic_cast<StEvent *> (GetInputDS("StEvent")); // this is how the StBtofHitMaker does it.
87  if (mStEvent){
88  trg = mStEvent->triggerData();
89  }
90  else {LOG_WARN << "No StEvent found by StEpdHitMaker::GetTriggerData" << endm;}
91  return trg;
92 }
93 
94 //----------------------------------------------
95 // this is patterned after the StBTofHitMaker
97  StEpdCollection* epdCollection = 0;
98  mStEvent = dynamic_cast<StEvent *> (GetInputDS("StEvent")); // this is how the StBtofHitMaker does it.
99  if (mStEvent){
100  epdCollection = mStEvent->epdCollection();
102  if (!epdCollection){
103  LOG_INFO << "StEpdHitMaker::GetEpdCollection - making new StEpdCollection and giving it to StEvent" << endm;
104  epdCollection = new StEpdCollection();
105  mStEvent->setEpdCollection(epdCollection);
106  }
107  else {
108  LOG_INFO << "StEpdHitMaker::GetEpdCollection - StEvent already has a StEpdCollection - not making a new one" << endm;
109  }
110  }
111  else {
112  LOG_WARN << "No StEvent found by StEpdHitMaker::GetEpdCollection" << endm;
113  }
114 
115  return epdCollection;
116 }
117 
118 void StEpdHitMaker::FillStEpdData(){
119 
120  StTriggerData* trg=mTriggerData;
121 
122  // This is for BBC. We can do this if we ever have a StBbc class.
123  // for (Int_t ew=0; ew<2; ew++){
124  // for (Int_t pmt=0; pmt<24; pmt++){
125  // mStEpdData.BBCadc[ew][pmt] = trg->bbcADC(eastwest(ew),pmt+1,0);
126  // mStEpdData.BBCtac[ew][pmt] = trg->bbcTDC(eastwest(ew),pmt+1,0);
127  // mStEpdData.BBCtdc[ew][pmt] = trg->bbcTDC5bit(eastwest(ew),pmt+1);
128  // }
129  // }
130 
131  int PrePost=0; // this probably will henceforth always be zero, but keep it
132 
133  // ofstream EpdOfs;
134  // EpdOfs.open("FromStEpdHitMaker.txt");
135  // ofstream EpdOfs2;
136  // EpdOfs.open("FromStEpdHitMaker2.txt");
137 
138 
139  int nHitsAdded=0;
140  for (short ew=0; ew<2; ew++){ // EastWest (ew) = 0,1 for east,west
141  for (short PP=1; PP<13; PP++){ // note position (PP) goes from 1..12
142  for (short TT=1; TT<32; TT++){ // note tile number (TT) goes from 1..31
143 
144  short crateAdc = mEpdDbMaker->GetCrateAdc(ew,PP,TT);
145 
146  short EWforHit=(ew==0)?-1:+1;
147 
148  //---------------------------------------------------
149  // This below is for debugging only...
150  // cout << "StEpdHitMaker::FillStEpdData() -- this is what I get from StEpdDbMaker...\n";
151  // cout << "EW\tPP\tTT\tcrateAdc\t\boardAdc\tchannelAdc\tcrateTac\tboardTac\tchannelTac\n";
152  // cout << ew << "\t" << PP << "\t" << TT << "\t"
153  // << mEpdDbMaker->GetCrateAdc(ew,PP,TT) << "\t"
154  // << mEpdDbMaker->GetBoardAdc(ew,PP,TT) << "\t"
155  // << mEpdDbMaker->GetChannelAdc(ew,PP,TT) << "\t"
156  // << mEpdDbMaker->GetCrateTac(ew,PP,TT) << "\t"
157  // << mEpdDbMaker->GetBoardTac(ew,PP,TT) << "\t"
158  // << mEpdDbMaker->GetChannelTac(ew,PP,TT) << "\n";
159  //---------------------------------------------------
160 
161 
162  // EpdOfs << ew << "\t" << PP << "\t" << TT << "\t"
163  // << mEpdDbMaker->GetCrateAdc(ew,PP,TT) << "\t"
164  // << mEpdDbMaker->GetBoardAdc(ew,PP,TT) << "\t"
165  // << mEpdDbMaker->GetChannelAdc(ew,PP,TT) << "\t"
166  // << mEpdDbMaker->GetCrateTac(ew,PP,TT) << "\t"
167  // << mEpdDbMaker->GetBoardTac(ew,PP,TT) << "\t"
168  // << mEpdDbMaker->GetChannelTac(ew,PP,TT) << "\n";
169 
170 
171 
172  if (crateAdc>0){ // only create a StEpdHit object if database says it is in the data
173 
174  short boardAdc = mEpdDbMaker->GetBoardAdc(ew,PP,TT);
175  short channelAdc = mEpdDbMaker->GetChannelAdc(ew,PP,TT);
176  int ADC = trg->epdADC(crateAdc,boardAdc,channelAdc,PrePost);
177 
178  if (ADC>0){ // we are zero-suppressing at QT level, so don't just write a bunch of zeros into the data
179  int TDC = trg->epdTDC(crateAdc,boardAdc,channelAdc,PrePost);
180 
181  // bool isGood = kTRUE; // until it is in the database
182  bool isGood = true; // until it is in the database
183 
184  bool HasTac = (mEpdDbMaker->GetChannelTac(ew,PP,TT)>=0);
185  int TAC;
186  if (HasTac){
187  TAC = trg->epdADC(mEpdDbMaker->GetCrateTac(ew,PP,TT), // relying on conversion from int to short
188  mEpdDbMaker->GetBoardTac(ew,PP,TT),
189  mEpdDbMaker->GetChannelTac(ew,PP,TT),
190  PrePost);}
191  else{TAC = 0;}
192 
193  // finally.... CALIBRATED data....
194  double gain = mEpdDbMaker->GetMip(ew,PP,TT);
195  if (gain<=0.0) gain = 1.0; // not yet calibrated. Give it a gain of unity
196 
197  float nMIP = (ADC + mEpdDbMaker->GetOffset(ew,PP,TT)) / mEpdDbMaker->GetMip(ew,PP,TT);
198 
199  int truthId=0; // this is for simulation
200 
201 
202  // EpdOfs2 << ew << "\t" << PP << "\t" << TT << "\t"
203  // << mEpdDbMaker->GetCrateAdc(ew,PP,TT) << "\t"
204  // << mEpdDbMaker->GetBoardAdc(ew,PP,TT) << "\t"
205  // << mEpdDbMaker->GetChannelAdc(ew,PP,TT) << "\t"
206  // << mEpdDbMaker->GetCrateTac(ew,PP,TT) << "\t"
207  // << mEpdDbMaker->GetBoardTac(ew,PP,TT) << "\t"
208  // << mEpdDbMaker->GetChannelTac(ew,PP,TT) << "\t"
209  // << ADC << "\t" << nMIP << endl;
210 
211  StEpdHit* hit = new StEpdHit(PP,TT,EWforHit,ADC,TAC,TDC,HasTac,nMIP,isGood,truthId);
212  mEpdCollection->addHit(hit);
213  nHitsAdded++;
214  }
215  }
216  }
217  }
218  }
219 
220  // EpdOfs.close();
221  // EpdOfs2.close();
222 
223  LOG_INFO << "StEpdHitMaker::FillStEpdData - added " << nHitsAdded << " to StEpdHitCollection" << endm;
224 }
225 
StEpdDbMaker * GetEpdDbMaker()
Returns a pointer to the StEpdDbMaker.
virtual int Init()
Init does nothing right now.
Definition: T.h:18
StEpdCollection * GetEpdCollection()
Returns the collection of StEpdHits in the event.
virtual int Finish()
Finish does nothing right now.
StTriggerData * GetTriggerData()
Returns a pointer to the StTriggerData object.
virtual int Make()
Stores information for tiles in STAR Event Plane Detector.
Definition: StEpdHit.h:43
Definition: Stypes.h:40
Definition: Stypes.h:44