QwAnalysis
QwScanner.h
Go to the documentation of this file.
1 /**********************************************************\
2 * File: QwScanner.h *
3 * *
4 * Author: J. Pan *
5 * jpan@jlab.org *
6 * *
7 * Thu May 21 21:20:41 CDT 2009 *
8 \**********************************************************/
9 
10 #ifndef __QWSCANNER__
11 #define __QWSCANNER__
12 
13 // System headers
14 #include <vector>
15 
16 // ROOT headers
17 #include "TTree.h"
18 #include "TFile.h"
19 #include "TProfile2D.h"
20 
21 //#include "TRandom3.h"
22 
23 // Qweak headers
24 #include "VQwSubsystemTracking.h"
25 #include "VQwSubsystemParity.h"
26 
27 
28 #include "QwHit.h"
29 #include "QwHitContainer.h"
30 
31 #include "QwTypes.h"
32 #include "QwDetectorInfo.h"
33 
34 #include "MQwV775TDC.h"
35 #include "QwVQWK_Channel.h"
36 #include "QwScaler_Channel.h"
37 #include "QwPMT_Channel.h"
38 #include "QwF1TDContainer.h"
39 
40 class QwScanner:
41  public VQwSubsystemParity,
42  public VQwSubsystemTracking,
43  public MQwSubsystemCloneable<QwScanner> {
44 
45  private:
46  /// Private default constructor (not implemented, will throw linker error on use)
47  QwScanner();
48 
49  public:
50  /// Constructor with name
51  QwScanner(const TString& name);
52  /// Copy constructor
53  QwScanner(const QwScanner& source);
54  /// Virtual destructor
55  virtual ~QwScanner();
56 
57  // VQwSubsystem methods
61  void ProcessOptions(QwOptions &options); //Handle command line options
62  void Sum(VQwSubsystem *value1, VQwSubsystem *value2)
63  {
64  return;
65  };
66  void Difference(VQwSubsystem *value1, VQwSubsystem *value2)
67  {
68  return;
69  };
70  void Ratio(VQwSubsystem *numer, VQwSubsystem *denom)
71  {
72  return;
73  };
74  void Scale(Double_t factor)
75  {
76  return;
77  };
78 
80  {
81  return;
82  };
83  //remove one entry from the running sums for devices
85  };
86 
88  {
89  return;
90  };
91 
92  Int_t LoadEventCuts(TString filename)
93  {
94  return 0;
95  };
97  {
98  return kTRUE;
99  };
101  {
102  };
103  void PrintErrorCounters() const
104  {
105  };
106  Bool_t CheckRunningAverages(Bool_t )
107  {
108  return kTRUE;
109  };
110 
111  /* Member functions derived from VQwSubsystem. */
112  Int_t LoadChannelMap(TString mapfile);
113  Int_t LoadGeometryDefinition(TString filename)
114  {
115  return 0;
116  };
117 
118  Int_t LoadInputParameters(TString parameterfile);
119  Int_t ProcessConfigurationBuffer(const UInt_t roc_id, const UInt_t bank_id, UInt_t* buffer, UInt_t num_words);
120  void InitializeChannel(TString name, TString datatosave);
121  void ClearEventData();
122 
123  void SetPedestal(Double_t ped);
124  void SetCalibrationFactor(Double_t calib);
125 // void RandomizeEventData(int helicity);
126 // void EncodeEventData(std::vector<UInt_t> &buffer);
127 
128  Int_t ProcessEvBuffer(const UInt_t roc_id, const UInt_t bank_id, UInt_t* buffer, UInt_t num_words);
129  void ProcessEvent();
130 
132  void ConstructHistograms(TDirectory *folder, TString &prefix);
133  void FillHistograms();
134 
136  void ConstructBranchAndVector(TTree *tree, TString &prefix, std::vector<Double_t> &values);
137  void FillTreeVector(std::vector<Double_t> &values) const;
138 
139  void FillDB(QwParityDB *db, TString type)
140  {
141  return;
142  };
143 
144  void GetHitList(QwHitContainer & grandHitContainer) {
145  grandHitContainer.Append(fTDCHits);
146  };
147 
148  void ReportConfiguration(Bool_t verbose);
149 
150  Bool_t Compare(VQwSubsystem* value);
151 
152  Bool_t ApplyHWChecks() //Check for harware errors in the devices
153  {
154  Bool_t status = kTRUE;
155  for (size_t i=0; i<fADCs.size(); i++)
156  {
157  status &= fADCs.at(i).ApplyHWChecks();
158  }
159  return status;
160  };
161 
162  void PrintValue() const { };
163  void PrintInfo() const;
164 
165  void FillRawTDCWord(Int_t bank_index, Int_t slot_num, Int_t chan, UInt_t data);
167 
168 
169  protected:
170 
172  Bool_t fDEBUG;
173 
174  TString fRegion; /// Name of this subsystem (the region).
178 
179  static const UInt_t kMaxNumberOfModulesPerROC;
180  static const Int_t kF1ReferenceChannelNumber;
181 
184 
188 
189 
190 
191  // --- For F1TDC QwHit
192  void SubtractReferenceTimes(); // be executed in ProcessEvent()
193  void UpdateHits(); // be executed in ProcessEvent()
194 
195  std::vector< QwHit > fTDCHits;
196 
197  std::vector< std::vector< QwDetectorID > > fDetectorIDs;
198  // Indexed by module_index and Channel; and so on....
199  std::vector< std::pair<Int_t, Int_t> > fReferenceChannels;
200  // reference chans number <first:tdc_index, second:channel_number>
201  // fReferenceChannels[tdc_index,channel_number][ num of [tdc,chan] set]
202  std::vector< std::vector<Double_t> > fReferenceData;
203  // fReferenceData[bank_index][channel_number]
204  // --- For F1TDC QwHit
205 
206 
207  // For reference time substraction
210  Double_t fRefTime;
211 
212  Bool_t IsF1ReferenceChannel (Int_t slot, Int_t chan) {
213  return ( slot == fRefTime_SlotNum && chan == fRefTime_ChanNum) ;
214  };
215 
216 
217  // We need a mapping of module,channel into PMT index, ADC/TDC
218  std::vector< std::vector<QwPMT_Channel> > fPMTs; // for QDC/TDC and F1TDC
219 
220  std::vector<QwSIS3801D24_Channel> fSCAs;
221  std::map<TString,size_t> fSCAs_map;
222  std::vector<Int_t> fSCAs_offset;
223 
224  std::vector<QwVQWK_Channel> fADCs;
225  std::map<TString,size_t> fADCs_map;
226  std::vector<Int_t> fADCs_offset;
227 
228 
229 
230 
231 
232  void FillRawWord(Int_t bank_index, Int_t slot_num, Int_t chan, UInt_t data);
234  Int_t RegisterROCNumber(const UInt_t roc_id);
235  Int_t RegisterSubbank(const UInt_t bank_id);
236 
237  // Tells this object that it will decode data from the current bank
238  Int_t RegisterSlotNumber(const UInt_t slot_id);
239  EQwModuleType RegisterModuleType(TString moduletype);
240  Int_t GetModuleIndex(size_t bank_index, size_t slot_num) const;
241  Bool_t IsSlotRegistered(Int_t bank_index, Int_t slot_num) const
242  {
243  return (GetModuleIndex(bank_index,slot_num) != -1);
244  };
245 
246  Int_t LinkChannelToSignal(const UInt_t chan, const TString &name);
247  Int_t FindSignalIndex(const EQwModuleType modtype, const TString &name) const;
248 
249  std::vector< std::vector<Int_t> > fModuleIndex; /// Module index, indexed by bank_index and slot_number
250  std::vector< EQwModuleType > fModuleTypes;
251  std::vector< std::vector< std::pair< EQwModuleType, Int_t> > > fModulePtrs; // Indexed by Module_index and Channel
252 
254  {
255  return 0;
256  };//return the error flag to the main routine
257 
258  //update the error flag in the subsystem level from the top level routines related to stability checks.
259  // This will uniquely update the errorflag at each channel based on the error flag in the corresponding
260  // channel in the ev_error subsystem
261 
262  void UpdateErrorFlag(const VQwSubsystem *ev_error){
263  };
264 
265 
266  // scanner specified histograms
267  TProfile2D* fRateMapCM;
268  TProfile2D* fRateMapEM;
269 
270  std::vector<TString> fParameterFileNames;
272 
273  private:
274  // Double_t get_value( TH2* h, Double_t x, Double_t y, Int_t& checkvalidity);
275 
276  private:
277 
278  static const Bool_t bStoreRawData;
279 
281 
282  /// variables for calibrating and calculating scanner positions
284 
285  Double_t fHomePositionX;
286  Double_t fHomePositionY;
291 
296 
297  Double_t fPowSupply_VQWK;
298  Double_t fPositionX_VQWK;
299  Double_t fPositionY_VQWK;
300  Double_t fFrontSCA;
301  Double_t fBackSCA;
302  Double_t fCoincidenceSCA;
303  Double_t fFrontADC;
304  Double_t fFrontTDC;
305  Double_t fBackADC;
306  Double_t fBackTDC;
307  //Double_t fPowSupply_ADC;
308  Double_t fPositionX_ADC;
309  Double_t fPositionY_ADC;
310 
313 
314  UInt_t fBankID[4]; //bank ID's of 4 different modules for scanner
315  //fBankID[0] for V792/V775 QDC_Bank
316  //fBankID[1] for SIS3801 SCA_Bank
317  //fBankID[2] for F1TDC F1TDC_Bank
318  //fBankID[3] for VQWK VQWK_Bank
319 
320  };
321 
322 
323 #endif
324 
Int_t fRefTime_ChanNum
Definition: QwScanner.h:209
UInt_t GetEventcutErrorFlag()
Return the error flag to the top level routines related to stability checks and ErrorFlag updates...
Definition: QwScanner.h:253
Int_t RegisterROCNumber(const UInt_t roc_id)
Definition: QwScanner.cc:1621
Int_t RegisterSubbank(const UInt_t bank_id)
Definition: QwScanner.cc:1630
Int_t ProcessEvBuffer(const UInt_t roc_id, const UInt_t bank_id, UInt_t *buffer, UInt_t num_words)
TODO: The non-event-type-aware ProcessEvBuffer routine should be replaced with the event-type-aware v...
Definition: QwScanner.cc:593
void ConstructBranchAndVector(TTree *tree, TString &prefix, std::vector< Double_t > &values)
Construct the branch and tree vector.
Definition: QwScanner.cc:1325
std::vector< QwHit > fTDCHits
Definition: QwScanner.h:195
Double_t fRefTime
Definition: QwScanner.h:210
Int_t fRefTime_SlotNum
Definition: QwScanner.h:208
F1TDCs configuration and reference siganls container.
void DeaccumulateRunningSum(VQwSubsystem *value)
remove one entry from the running sums for devices
Definition: QwScanner.h:84
Double_t fCal_Factor_VQWK_X
Definition: QwScanner.h:292
void Scale(Double_t factor)
Definition: QwScanner.h:74
Bool_t Compare(VQwSubsystem *value)
Definition: QwScanner.cc:1489
Bool_t ApplySingleEventCuts()
Apply the single event cuts.
Definition: QwScanner.h:96
void FillHistograms()
Fill the histograms for this subsystem.
Definition: QwScanner.cc:1240
Double_t fHelicityFrequency
variables for calibrating and calculating scanner positions
Definition: QwScanner.h:283
void ClearEventData()
Definition: QwScanner.cc:429
Bool_t CheckRunningAverages(Bool_t)
Definition: QwScanner.h:106
void SubtractReferenceTimes()
Definition: QwScanner.cc:1896
Double_t fBackSCA
Definition: QwScanner.h:301
An options class.
Definition: QwOptions.h:133
Int_t RegisterSlotNumber(const UInt_t slot_id)
Definition: QwScanner.cc:1663
void UpdateHits()
Definition: QwScanner.cc:2015
VQwSubsystem & operator+=(VQwSubsystem *value)
Definition: QwScanner.cc:1557
std::vector< std::vector< std::pair< EQwModuleType, Int_t > > > fModulePtrs
Definition: QwScanner.h:251
TString fRegion
Definition: QwScanner.h:174
Double_t fHomePositionX
Definition: QwScanner.h:285
std::vector< QwVQWK_Channel > fADCs
Definition: QwScanner.h:224
Int_t LinkChannelToSignal(const UInt_t chan, const TString &name)
Definition: QwScanner.cc:1743
std::vector< Int_t > fADCs_offset
Definition: QwScanner.h:226
Int_t fCurrentBankIndex
Name of this subsystem (the region).
Definition: QwScanner.h:175
Double_t fPowSupply_VQWK
Definition: QwScanner.h:297
Int_t LoadInputParameters(TString parameterfile)
Mandatory parameter file definition.
Definition: QwScanner.cc:340
Double_t fCal_Factor_QDC_Y
Definition: QwScanner.h:295
Double_t fCoincidenceSCA
Definition: QwScanner.h:302
virtual ~QwScanner()
Virtual destructor.
Definition: QwScanner.cc:71
TProfile2D * fRateMapEM
Definition: QwScanner.h:268
Virtual base class for the parity subsystems.
static const Bool_t bStoreRawData
Definition: QwScanner.h:278
std::vector< std::vector< Double_t > > fReferenceData
Definition: QwScanner.h:202
void AccumulateRunningSum(VQwSubsystem *value)
Update the running sums for devices.
Definition: QwScanner.h:79
static const Int_t kF1ReferenceChannelNumber
Definition: QwScanner.h:180
void ReportConfiguration(Bool_t verbose)
Definition: QwScanner.cc:1446
EQwModuleType RegisterModuleType(TString moduletype)
Definition: QwScanner.cc:1697
std::vector< std::pair< Int_t, Int_t > > fReferenceChannels
Definition: QwScanner.h:199
Bool_t IsSlotRegistered(Int_t bank_index, Int_t slot_num) const
Definition: QwScanner.h:241
void FillTreeVector(std::vector< Double_t > &values) const
Fill the tree vector.
Definition: QwScanner.cc:1394
void InitializeChannel(TString name, TString datatosave)
Definition: QwScanner.cc:2108
virtual void ConstructHistograms()
Construct the histograms for this subsystem.
Definition: VQwSubsystem.h:209
void SetPedestal(Double_t ped)
Definition: QwScanner.cc:2095
Double_t fPositionY_VQWK
Definition: QwScanner.h:299
MQwF1TDC fF1TDCDecoder
Definition: QwScanner.h:186
void FillRawWord(Int_t bank_index, Int_t slot_num, Int_t chan, UInt_t data)
Definition: QwScanner.cc:1761
UInt_t fBankID[4]
Definition: QwScanner.h:314
Int_t ProcessConfigurationBuffer(const UInt_t roc_id, const UInt_t bank_id, UInt_t *buffer, UInt_t num_words)
Definition: QwScanner.cc:464
std::vector< Int_t > fSCAs_offset
Definition: QwScanner.h:222
Double_t fBackTDC
Definition: QwScanner.h:306
Double_t fPositionY_ADC
Definition: QwScanner.h:309
Double_t fCal_Factor_QDC_X
Definition: QwScanner.h:294
void ProcessEvent()
Definition: QwScanner.cc:929
Double_t fPositionX_VQWK
Definition: QwScanner.h:298
void Difference(VQwSubsystem *value1, VQwSubsystem *value2)
Definition: QwScanner.h:66
void ClearAllBankRegistrations()
Definition: QwScanner.cc:1607
Double_t fVoltage_Offset_X
Definition: QwScanner.h:287
Double_t fMeanPositionY_ADC
Definition: QwScanner.h:312
Draft skeleton for the decoding-to-QTR interface class.
void ProcessOptions(QwOptions &options)
Process the command line options.
Definition: QwScanner.cc:80
std::vector< TString > fParameterFileNames
Definition: QwScanner.h:270
Int_t fNumberOfModules
Definition: QwScanner.h:183
std::map< TString, size_t > fADCs_map
Definition: QwScanner.h:225
void UpdateErrorFlag(const VQwSubsystem *ev_error)
update the error flag in the subsystem level from the top level routines related to stability checks...
Definition: QwScanner.h:262
Double_t fHomePositionY
Definition: QwScanner.h:286
Double_t fFrontSCA
Definition: QwScanner.h:300
Int_t LoadEventCuts(TString filename)
Load the event cuts file.
Definition: QwScanner.h:92
TH1F * fParameterFileNamesHist
Definition: QwScanner.h:271
void FillHardwareErrorSummary()
Hardware error summary.
Definition: QwScanner.cc:2162
VQwSubsystem & operator=(VQwSubsystem *value)
Assignment Note: Must be called at the beginning of all subsystems routine call to operator=(VQwSubsy...
Definition: QwScanner.cc:1514
void PrintValue() const
Print values of all channels.
Definition: QwScanner.h:162
Int_t fCurrentSlot
Definition: QwScanner.h:176
std::vector< std::vector< QwPMT_Channel > > fPMTs
Definition: QwScanner.h:214
Int_t LoadGeometryDefinition(TString filename)
Optional geometry definition.
Definition: QwScanner.h:113
Double_t fChannel_Offset_X
Definition: QwScanner.h:289
Int_t GetModuleIndex(size_t bank_index, size_t slot_num) const
Definition: QwScanner.cc:2062
void IncrementErrorCounters()
Increment the error counters.
Definition: QwScanner.h:100
Double_t fChannel_Offset_Y
Definition: QwScanner.h:290
The pure virtual base class of all subsystems.
Definition: VQwSubsystem.h:59
EQwModuleType
Definition: QwTypes.h:148
TProfile2D * fRateMapCM
Definition: QwScanner.h:263
UInt_t kMaxNumberOfChannelsPerModule
Definition: QwScanner.h:182
Double_t fFrontTDC
Definition: QwScanner.h:304
Double_t fFrontADC
Definition: QwScanner.h:303
Double_t fCal_Factor_VQWK_Y
Definition: QwScanner.h:293
EQwModuleType fCurrentType
Definition: QwScanner.h:171
void FillDB(QwParityDB *db, TString type)
Fill the database.
Definition: QwScanner.h:139
void Ratio(VQwSubsystem *numer, VQwSubsystem *denom)
Definition: QwScanner.h:70
Int_t fCurrentModuleIndex
Definition: QwScanner.h:177
virtual void ConstructBranchAndVector(TTree *tree, TString &prefix, std::vector< Double_t > &values)=0
Construct the branch and tree vector.
void PrintInfo() const
Print some information about the subsystem.
Definition: QwScanner.cc:2118
void CalculateRunningAverage()
Calculate the average for all good events.
Definition: QwScanner.h:87
UInt_t fScaEventCounter
Definition: QwScanner.h:280
void PrintErrorCounters() const
Report the number of events failed due to HW and event cut failures.
Definition: QwScanner.h:103
std::vector< std::vector< QwDetectorID > > fDetectorIDs
Definition: QwScanner.h:197
Double_t fBackADC
Definition: QwScanner.h:305
static const UInt_t kMaxNumberOfModulesPerROC
Definition: QwScanner.h:179
Double_t fMeanPositionX_ADC
Definition: QwScanner.h:311
Bool_t IsF1ReferenceChannel(Int_t slot, Int_t chan)
Definition: QwScanner.h:212
Int_t LoadChannelMap(TString mapfile)
Mandatory map file definition.
Definition: QwScanner.cc:85
Bool_t fDEBUG
Definition: QwScanner.h:172
Double_t fPositionX_ADC
Definition: QwScanner.h:308
std::vector< std::vector< Int_t > > fModuleIndex
Definition: QwScanner.h:249
Int_t FindSignalIndex(const EQwModuleType modtype, const TString &name) const
Definition: QwScanner.cc:2077
void Append(const QwHitContainer &mylist)
std::vector< QwSIS3801D24_Channel > fSCAs
Definition: QwScanner.h:220
QwF1TDContainer * fF1TDContainer
Definition: QwScanner.h:187
VQwSubsystem & operator-=(VQwSubsystem *value)
Definition: QwScanner.cc:1582
Double_t fVoltage_Offset_Y
Definition: QwScanner.h:288
void FillRawTDCWord(Int_t bank_index, Int_t slot_num, Int_t chan, UInt_t data)
Definition: QwScanner.cc:1791
void GetHitList(QwHitContainer &grandHitContainer)
Get the hit list.
Definition: QwScanner.h:144
std::map< TString, size_t > fSCAs_map
Definition: QwScanner.h:221
QwScanner()
Private default constructor (not implemented, will throw linker error on use)
void Sum(VQwSubsystem *value1, VQwSubsystem *value2)
Definition: QwScanner.h:62
std::vector< EQwModuleType > fModuleTypes
Module index, indexed by bank_index and slot_number.
Definition: QwScanner.h:250
Bool_t ApplyHWChecks()
Definition: QwScanner.h:152
MQwV775TDC fQDCTDC
Definition: QwScanner.h:185
void SetCalibrationFactor(Double_t calib)
Definition: QwScanner.cc:2101