Skip to content
Snippets Groups Projects
Commit cc3bae74 authored by Stephen A. Wood's avatar Stephen A. Wood
Browse files

Raw hit changes to deal with flash ADC data

  Raw hit reports # of expected signals and their types (ADC vs TDC)
  Raw hit accept and deliver flash ADC sample, and pulse data
     (pulse integral, dynamic pedestal, time and peak)
parent 0390fd3a
No related branches found
No related tags found
No related merge requests found
......@@ -26,6 +26,11 @@ public:
Int_t GetReference(Int_t signal);
Bool_t HasReference(Int_t signal) {return fHasRef;}
Int_t GetNSignals() { return 1;}
ESignalType GetSignalType(Int_t signal) {
return(kTDC);
}
virtual Bool_t IsSortable () const {return kTRUE; }
virtual Int_t Compare(const TObject* obj) const;
......
......@@ -20,6 +20,8 @@ public:
return *this; };
virtual ~THcRawHit() {}
enum ESignalType { kUndefined, kTDC, kADC};
// This line causes problem
// virtual void Clear( Option_t* opt="" )=0;
......@@ -28,8 +30,14 @@ public:
// virtual Bool_t operator!=( const THcRawHit& ) = 0;
virtual void SetData(Int_t signal, Int_t data) {};
virtual void SetSample(Int_t signal, Int_t data) {};
virtual void SetDataTimePedestalPeak(Int_t signal, Int_t data,
Int_t time, Int_t pedestal, Int_t peak) {};
virtual Int_t GetData(Int_t signal) {return 0;}; /* Ref time subtracted */
virtual Int_t GetRawData(Int_t signal) {return 0;} /* Ref time not subtracted */
virtual ESignalType GetSignalType(Int_t signal) {return kUndefined;}
virtual Int_t GetNSignals() { return 1;}
virtual void SetReference(Int_t signal, Int_t reference) {};
virtual Bool_t HasReference(Int_t signal) {return kFALSE;};
virtual Int_t GetReference(Int_t signal) {return 0;};
......@@ -42,7 +50,7 @@ public:
Int_t fPlane;
Int_t fCounter;
private:
ClassDef(THcRawHit,0) // Raw Hit Base Class
......
......@@ -23,26 +23,96 @@ using namespace std;
void THcRawHodoHit::SetData(Int_t signal, Int_t data) {
if(signal==0) {
if (fNRawHits[0] >= fMaxNSamplesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC+!");}
if (fNRawHits[0] >= fMaxNPulsesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC+!");}
fADC_pos[fNRawHits[0]++] = data;
} else if (signal==1) {
if (fNRawHits[1] >= fMaxNSamplesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC-!");}
if (fNRawHits[1] >= fMaxNPulsesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC-!");}
fADC_neg[fNRawHits[1]++] = data;
} else if(signal==2) {
if (fNRawHits[2] >= fMaxNSamplesTDC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` TDC+!");}
if (fNRawHits[2] >= fMaxNHitsTDC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` TDC+!");}
fTDC_pos[fNRawHits[2]++] = data;
} else if (signal==3) {
if (fNRawHits[3] >= fMaxNSamplesTDC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` TDC-!");}
if (fNRawHits[3] >= fMaxNHitsTDC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` TDC-!");}
fTDC_neg[fNRawHits[3]++] = data;
}
}
void THcRawHodoHit::SetDataTimePedestalPeak(Int_t signal, Int_t data, Int_t time,
Int_t pedestal, Int_t peak) {
if(signal==0) {
if (fNRawHits[0] >= fMaxNPulsesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC+!");}
fADC_pos[fNRawHits[0]] = data;
fADC_Time_pos[fNRawHits[0]] = time;
fADC_Pedestal_pos[fNRawHits[0]] = pedestal;
fADC_Peak_pos[fNRawHits[0]++] = peak;
fHasMulti[signal]=kTRUE;
// cout << fPlane << "/" << fCounter << "+ " << fNRawHits[0] << " " <<
// data << "/" << time << "/" << pedestal << "/" << peak << endl;
} else if (signal==1) {
if (fNRawHits[1] >= fMaxNPulsesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC-!");}
fADC_neg[fNRawHits[1]] = data;
fADC_Time_neg[fNRawHits[1]] = time;
fADC_Pedestal_neg[fNRawHits[1]] = pedestal;
fADC_Peak_neg[fNRawHits[1]++] = peak;
fHasMulti[signal]=kTRUE;
// cout << fPlane << "/" << fCounter << "- " << fNRawHits[0] << " " <<
// data << "/" << time << "/" << pedestal << "/" << peak << endl;
}
}
void THcRawHodoHit::SetSample(Int_t signal, Int_t data) {
if(signal==0) {
if (fNRawSamplesPos >= fMaxNSamplesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC+!");}
fADC_Samples_pos[fNRawSamplesPos++] = data;
} else if (signal==1) {
if (fNRawSamplesNeg >= fMaxNSamplesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC-!");}
fADC_Samples_neg[fNRawSamplesNeg++] = data;
}
}
Int_t THcRawHodoHit::GetIntegralPos() {
Int_t sum=0;
for(UInt_t i=0;i<fNRawSamplesPos;i++) {
sum += fADC_Samples_pos[i];
}
return(sum);
}
Int_t THcRawHodoHit::GetIntegralNeg() {
Int_t sum=0;
for(UInt_t i=0;i<fNRawSamplesNeg;i++) {
sum += fADC_Samples_neg[i];
}
return(sum);
}
Int_t THcRawHodoHit::GetPedestalPos() {
if(fHasMulti[0] && fNRawHits[0]>0) {
return(fADC_Pedestal_pos[0]);
} else {
return(0);
}
}
Int_t THcRawHodoHit::GetPedestalNeg() {
if(fHasMulti[1] && fNRawHits[1]>0) {
return(fADC_Pedestal_neg[0]);
} else {
return(0);
}
}
Int_t THcRawHodoHit::GetData(Int_t signal) {
return(GetData(signal,0));
}
Int_t THcRawHodoHit::GetData(Int_t signal, UInt_t ihit) {
Int_t value;
if(ihit > 0 && ihit>= fNRawHits[signal]) {
if(ihit>= fNRawHits[signal]) {
if(ihit==0) {
// We were not doing this, before, so we could have been sending
// stale data for missing tdc or adc hits
return(0);
}
cout << "THcRawHodoHit::GetData(): requested hit #" << ihit << " out of range: "
<< fNRawHits[signal] << endl;
return(-1);
......@@ -109,6 +179,9 @@ Int_t THcRawHodoHit::GetReference(Int_t signal) {
Bool_t THcRawHodoHit::HasReference(Int_t signal) {
return(fHasRef[signal]);
}
Bool_t THcRawHodoHit::HasMulti(Int_t signal) {
return(fHasMulti[signal]);
}
// Do we use this?
//_____________________________________________________________________________
......@@ -116,18 +189,26 @@ THcRawHodoHit& THcRawHodoHit::operator=( const THcRawHodoHit& rhs )
{
// Assignment operator.
cout << "operator=" << endl;
THcRawHit::operator=(rhs);
if ( this != &rhs ) {
for(Int_t is=0;is<4;is++) {
fReferenceTime[is] = rhs.fReferenceTime[is];
fNRawHits[is] = rhs.fNRawHits[is];
fHasRef[is] = rhs.fHasRef[is];
fHasMulti[is] = rhs.fHasMulti[is];
}
for(UInt_t ih=0;ih<fNRawHits[0];ih++) {
fADC_pos[ih] = rhs.fADC_pos[ih];
fADC_Time_pos[ih] = rhs.fADC_Time_pos[ih];
fADC_Pedestal_pos[ih] = rhs.fADC_Pedestal_pos[ih];
fADC_Peak_pos[ih] = rhs.fADC_Peak_pos[ih];
}
for(UInt_t ih=0;ih<fNRawHits[1];ih++) {
fADC_neg[ih] = rhs.fADC_neg[ih];
fADC_Time_neg[ih] = rhs.fADC_Time_neg[ih];
fADC_Pedestal_neg[ih] = rhs.fADC_Pedestal_neg[ih];
fADC_Peak_neg[ih] = rhs.fADC_Peak_neg[ih];
}
for(UInt_t ih=0;ih<fNRawHits[2];ih++) {
fTDC_pos[ih] = rhs.fTDC_pos[ih];
......@@ -135,6 +216,16 @@ THcRawHodoHit& THcRawHodoHit::operator=( const THcRawHodoHit& rhs )
for(UInt_t ih=0;ih<fNRawHits[3];ih++) {
fTDC_neg[ih] = rhs.fTDC_neg[ih];
}
fNRawSamplesPos = rhs.fNRawSamplesPos;
fNRawSamplesNeg = rhs.fNRawSamplesNeg;
for(UInt_t is=0;is<fNRawSamplesPos;is++) {
fADC_Samples_pos[is] = rhs.fADC_Samples_pos[is];
}
for(UInt_t is=0;is<fNRawSamplesNeg;is++) {
fADC_Samples_neg[is] = rhs.fADC_Samples_neg[is];
}
}
return *this;
}
......
......@@ -13,8 +13,11 @@ class THcRawHodoHit : public THcRawHit {
THcRawHodoHit(Int_t plane=0, Int_t counter=0) : THcRawHit(plane, counter) {
for(Int_t i=0;i<4;i++) {
fHasRef[i] = kFALSE;
fHasMulti[i] = kFALSE;
fNRawHits[i] = 0;
}
fNRawSamplesPos = 0;
fNRawSamplesNeg = 0;
}
THcRawHodoHit& operator=( const THcRawHodoHit& );
virtual ~THcRawHodoHit() {}
......@@ -22,10 +25,16 @@ class THcRawHodoHit : public THcRawHit {
virtual void Clear( Option_t* opt="" ) {
for(Int_t i=0;i<4;i++) {
fHasRef[i] = kFALSE;
fHasMulti[i] = kFALSE;
fNRawHits[i] = 0;
}
fNRawSamplesPos = 0;
fNRawSamplesNeg = 0;
}
void SetData(Int_t signal, Int_t data);
void SetDataTimePedestalPeak(Int_t signal, Int_t data, Int_t time,
Int_t pedestal, Int_t peak);
void SetSample(Int_t signal, Int_t data);
void SetReference(Int_t signal, Int_t reference);
Int_t GetData(Int_t signal);
Int_t GetData(Int_t signal, UInt_t ihit);
......@@ -33,6 +42,7 @@ class THcRawHodoHit : public THcRawHit {
Int_t GetRawData(Int_t signal, UInt_t ihit);
Int_t GetReference(Int_t signal);
Bool_t HasReference(Int_t signal);
Bool_t HasMulti(Int_t signal);
// virtual Bool_t IsSortable () const {return kTRUE; }
// virtual Int_t Compare(const TObject* obj) const;
......@@ -42,20 +52,43 @@ class THcRawHodoHit : public THcRawHit {
Int_t GetTDCPos() {return GetData(2, 0);}
Int_t GetTDCNeg() {return GetData(3, 0);}
UInt_t GetMaxNSamplesTDC() {return fMaxNSamplesTDC;}
UInt_t GetMaxNSamplesTDC() {return fMaxNHitsTDC;}
Int_t GetTDCPos(UInt_t ihit) {return GetData(2, ihit);}
Int_t GetTDCNeg(UInt_t ihit) {return GetData(3, ihit);}
Int_t GetIntegralPos();
Int_t GetIntegralNeg();
Int_t GetPedestalPos();
Int_t GetPedestalNeg();
Int_t GetNSignals() { return 4;}
ESignalType GetSignalType(Int_t signal) {
if(signal==0||signal==1) {return kADC;}
else {return kTDC;}
}
protected:
static const UInt_t fMaxNSamplesADC = 160;
static const UInt_t fMaxNSamplesTDC = 16;
Int_t fADC_pos[fMaxNSamplesADC];
Int_t fADC_neg[fMaxNSamplesADC];
Int_t fTDC_pos[fMaxNSamplesTDC];
Int_t fTDC_neg[fMaxNSamplesTDC];
static const UInt_t fMaxNPulsesADC = 4;
static const UInt_t fMaxNHitsTDC = 16;
Int_t fADC_pos[fMaxNPulsesADC];
Int_t fADC_neg[fMaxNPulsesADC];
Int_t fTDC_pos[fMaxNHitsTDC];
Int_t fTDC_neg[fMaxNHitsTDC];
Int_t fADC_Time_pos[fMaxNPulsesADC];
Int_t fADC_Time_neg[fMaxNPulsesADC];
Int_t fADC_Pedestal_pos[fMaxNPulsesADC];
Int_t fADC_Pedestal_neg[fMaxNPulsesADC];
Int_t fADC_Peak_pos[fMaxNPulsesADC];
Int_t fADC_Peak_neg[fMaxNPulsesADC];
Int_t fADC_Samples_pos[fMaxNSamplesADC];
Int_t fADC_Samples_neg[fMaxNSamplesADC];
Int_t fReferenceTime[4];
Bool_t fHasRef[4];
Bool_t fHasMulti[4];
UInt_t fNRawHits[4];
UInt_t fNRawSamplesPos;
UInt_t fNRawSamplesNeg;
private:
......
......@@ -28,6 +28,10 @@ class THcRawShowerHit : public THcRawHit {
Double_t GetPedestal(Int_t signal, Int_t isamplow, Int_t isamphigh);
Int_t GetNSamples(Int_t signal);
Int_t GetNSignals() { return 2;}
ESignalType GetSignalType(Int_t signal) {
return kADC;
}
// virtual Bool_t IsSortable () const {return kTRUE; }
// virtual Int_t Compare(const TObject* obj) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment