70 TString name =
GetElementName() + TString(
"_accum") + Form(
"%ld",i);
109 Bool_t fEventIsGood = kTRUE;
110 for (
size_t i = 0; i <
fSamples.size(); i++)
111 fEventIsGood &= (
fSamples[i].GetNumberOfSamples() > 0);
121 for (
size_t i = 0; i <
fSamples.size(); i++)
150 UInt_t words_read = 0;
162 UInt_t local_tag = (buffer[0] >> 16) & 0xFFFF;
163 if (local_tag != 0xFADC)
return words_read;
167 UInt_t local_channel = buffer[0] & 0xFF;
169 if (local_channel !=
fChannel)
return words_read;
179 UInt_t local_format = (buffer[1] >> 16) & 0xFFFF;
182 UInt_t local_setupmode = (buffer[1]) & 0xFF;
185 switch (local_format) {
189 QwWarning <<
"QwSIS3320_Channel: Expanded word format not implemented"
195 UInt_t numberofsamples, numberofevents_expected, numberofevents_actual;
196 UInt_t samplepointer;
197 switch (local_setupmode) {
203 samplepointer = buffer[2];
204 numberofsamples = buffer[3];
205 numberofevents_expected = buffer[4];
210 numberofevents_actual = 0;
213 fSamplesRaw[event].SetNumberOfSamples(numberofsamples);
214 fSamplesRaw[event].SetSamplePointer(samplepointer);
216 UInt_t samples_read =
fSamplesRaw[event].ProcessEvBuffer(&(buffer[words_read]), num_words_left-words_read);
218 if (samples_read == 0)
break;
220 words_read += samples_read;
221 numberofevents_actual++;
224 if (numberofevents_expected != numberofevents_actual) {
225 QwWarning <<
"QwSIS3320_Channel: Expected " << numberofevents_expected <<
" events, "
226 <<
"but only read " << numberofevents_actual <<
"." <<
QwLog::endl;
238 samplepointer = buffer[2];
239 numberofsamples = buffer[3];
240 numberofevents_expected = 1;
245 fSamplesRaw.at(0).SetNumberOfSamples(numberofsamples);
247 fSamplesRaw.at(0).ProcessEvBuffer(buffer, num_words_left, samplepointer);
253 QwError <<
"QwSIS3320_Channel: Received unknown sampling format: "
254 << std::hex << local_setupmode << std::dec <<
"." <<
QwLog::endl;
282 words_read +=
fAccumulatorsRaw[i].ProcessEvBuffer(&(buffer[words_read]), num_words_left-words_read);
291 packedtiming = buffer[words_read++];
322 QwError <<
"QwSIS3320_Channel: Received unknown mode: "
323 << std::hex << local_format << std::dec <<
"." <<
QwLog::endl;
330 QwError <<
"QwSIS3320_Channel: Not enough words while processing buffer!" <<
QwLog::endl;
339 std::vector<UInt_t> header;
340 std::vector<UInt_t> samples;
359 for (
size_t i = 0; i < header.size(); i++)
360 buffer.push_back(header.at(i));
361 for (
size_t i = 0; i < samples.size(); i++)
362 buffer.push_back(samples.at(i));
394 for (
size_t i = 0; i <
fSamples.size(); i++) {
404 for (
size_t i = 0; i <
fSamples.size(); i++) {
405 for (
size_t timewindow = 0; timewindow <
fTimeWindows.size(); timewindow++) {
469 for (
size_t i = 0; i <
fSamples.size(); i++)
488 for (
size_t i = 0; i <
fSamples.size(); i++)
506 for (
size_t i = 0; i <
fSamples.size(); i++)
524 for (
size_t i = 0; i <
fSamples.size(); i++)
542 for (
size_t i = 0; i <
fSamples.size(); i++)
592 for (
size_t i = 0; i <
fSamples.size(); i++)
606 for (
size_t i = 0; i <
fSamples.size(); i++)
618 if (folder != NULL) folder->cd();
677 fAccumulators[i].ConstructBranchAndVector(tree, prefix, values);
734 for (
size_t i = 0; i <
fSamples.size(); i++) {
758 const std::vector<TString> accums,
759 const std::vector<Double_t> weights)
765 for (
size_t i = 0; i < accums.size(); i++) {
static const Bool_t kDEBUG
#define QwMessage
Predefined log drain for regular messages.
const QwSIS3320_Channel operator+(const Double_t &value) const
Class for the decoding of the SIS3320 sampling ADC data.
#define QwOut
Predefined log drain for explicit output.
static const unsigned int MODE_MULTI_EVENT
static const unsigned int FORMAT_ACCUMULATOR
Int_t fAccumulatorTimingAfter5
Bool_t fHasAccumulatorData
const QwSIS3320_Channel operator-(const Double_t &value) const
Bool_t IsNameEmpty() const
Is the name of this element empty?
std::vector< QwSIS3320_Samples > fSamples
SIS3320 sampling ADC accumulator.
std::vector< TH1_ptr > fHistograms
Histograms associated with this data element.
QwSIS3320_Channel & operator=(const QwSIS3320_Channel &value)
SIS3320 sampling ADC accumulator.
Int_t fAccumulatorThreshold1
std::vector< QwSIS3320_Samples > fSamplesRaw
static const unsigned int MODE_SINGLE_EVENT
Double_t fMockGaussianSigma
Sigma of normal distribution.
UInt_t fSampleFormat
Number of triggered events.
void FillHistograms()
Fill the histograms for this data element.
static const unsigned int FORMAT_SHORT_WORD_SAMPLING
void ConstructHistograms(TDirectory *folder, TString &prefix)
Construct the histograms for this data element.
void InitializeChannel(UInt_t channel, TString name)
size_t GetNumberOfEvents() const
static const unsigned int FORMAT_LONG_WORD_SAMPLING
std::vector< QwSIS3320_Accumulator > fAccumulatorsRaw
std::vector< std::pair< UInt_t, UInt_t > > fTimeWindows
void ConstructBranchAndVector(TTree *tree, TString &prefix, std::vector< Double_t > &values)
QwSIS3320_Channel & operator-=(const Double_t &value)
void SetNumberOfSamples(const UInt_t nsamples)
A logfile class, based on an identical class in the Hermes analyzer.
void Offset(Double_t Offset)
static const Double_t kVoltsPerBit
Double_t fMockGaussianMean
Mean of normal distribution.
std::vector< QwSIS3320_LogicalAccumulator > fLogicalAccumulators
void Scale(Double_t Offset)
void EncodeEventData(std::vector< UInt_t > &buffer)
Encode the event data into a CODA buffer.
Int_t fAccumulatorTimingBefore5
Int_t ProcessEvBuffer(UInt_t *buffer, UInt_t num_words_left, UInt_t index=0)
void SetElementName(const TString &name)
Set the name of this element.
void Difference(QwSIS3320_Channel &value1, QwSIS3320_Channel &value2)
Double_t fMockAsymmetry
Helicity asymmetry.
void Sum(QwSIS3320_Channel &value1, QwSIS3320_Channel &value2)
QwSIS3320_Type GetSumInTimeWindow(const UInt_t start, const UInt_t stop) const
QwHistogramHelper gQwHists
Globally defined instance of the QwHistogramHelper class.
void Ratio(QwSIS3320_Channel &numer, QwSIS3320_Channel &denom)
void SetNumberOfDataWords(const UInt_t &numwords)
Set the number of data words in this data element.
void AddLogicalAccumulator(const TString name, const std::vector< TString > accums, const std::vector< Double_t > weights)
void SetNumberOfEvents(UInt_t nevents)
Int_t fAccumulatorTimingAfter6
void FillTreeVector(std::vector< Double_t > &values) const
std::vector< QwSIS3320_Accumulator > fAccumulators
UInt_t fNumberOfDataWords
Number of raw data words in this data element.
Int_t fAccumulatorThreshold2
static const unsigned int MODE_ACCUM_EVENT
std::vector< Double_t > fTimeWindowAverages
static std::ostream & endl(std::ostream &)
End of the line.
QwSIS3320_Samples fAverageSamples
virtual const TString & GetElementName() const
Get the name of this element.
QwSIS3320_Type GetSum() const
QwSIS3320_Samples fAverageSamplesRaw
void AddAccumulatorReference(QwSIS3320_Accumulator *accum, Double_t weight)
static const Double_t kNanoSecondsPerSample
#define QwWarning
Predefined log drain for warnings.
QwSIS3320_Channel & operator+=(const Double_t &value)
static const unsigned int MODE_NOTREADY
Double_t fCalibrationFactor
QwSIS3320_Type GetSample(size_t i) const
TH1F * Construct1DHist(const TString &inputfile, const TString &name_title)
Int_t fAccumulatorTimingBefore6
UInt_t fNumberOfEvents
Current triggered event (allow for negative sentinel)
#define QwError
Predefined log drain for errors.