Skip to content
Snippets Groups Projects
Commit a4f28135 authored by hallc-online's avatar hallc-online Committed by Mark K Jones
Browse files

Updated THcTrigDet

1) Have time cut on TrigDet reference time for TDC and ADC,
       to select reference time from multiple hits

2) Have time window to select best TDC or ADC reference time subtracted
   time  hit for each channel.
parent 0eec2a5a
No related branches found
No related tags found
No related merge requests found
......@@ -136,7 +136,13 @@ THcTrigDet::THcTrigDet(
}
THcTrigDet::~THcTrigDet() {}
THcTrigDet::~THcTrigDet() {
delete [] fAdcTimeWindowMin; fAdcTimeWindowMin = NULL;
delete [] fAdcTimeWindowMax; fAdcTimeWindowMax = NULL;
delete [] fTdcTimeWindowMin; fTdcTimeWindowMin = NULL;
delete [] fTdcTimeWindowMax; fTdcTimeWindowMax = NULL;
}
THaAnalysisObject::EStatus THcTrigDet::Init(const TDatime& date) {
......@@ -180,7 +186,7 @@ THaAnalysisObject::EStatus THcTrigDet::Init(const TDatime& date) {
}
// Initialize hitlist part of the class.
// printf(" Init trig det hitlist\n");
InitHitList(fDetMap, "THcTrigRawHit", 100);
InitHitList(fDetMap, "THcTrigRawHit", 200,fTDC_RefTimeCut,fADC_RefTimeCut);
CreateMissReportParms(fKwPrefix.c_str());
fPresentP = 0;
......@@ -237,24 +243,41 @@ Int_t THcTrigDet::Decode(const THaEvData& evData) {
Int_t cnt = hit->fCounter-1;
if (hit->fPlane == 1) {
THcRawAdcHit rawAdcHit = hit->GetRawAdcHit();
fAdcPedRaw[cnt] = rawAdcHit.GetPedRaw();
fAdcPulseIntRaw[cnt] = rawAdcHit.GetPulseIntRaw();
fAdcPulseAmpRaw[cnt] = rawAdcHit.GetPulseAmpRaw();
fAdcPulseTimeRaw[cnt] = rawAdcHit.GetPulseTimeRaw();
fAdcPulseTime[cnt] = rawAdcHit.GetPulseTime()+fAdcTdcOffset;
fAdcPed[cnt] = rawAdcHit.GetPed();
fAdcPulseInt[cnt] = rawAdcHit.GetPulseInt();
fAdcPulseAmp[cnt] = rawAdcHit.GetPulseAmp();
fAdcMultiplicity[cnt] = rawAdcHit.GetNPulses();
UInt_t good_hit=999;
if (rawAdcHit.GetNPulses()>1) {
for (UInt_t thit=0; thit<rawAdcHit.GetNPulses(); ++thit) {
Int_t TestTime=rawAdcHit.GetPulseTime(thit)+fAdcTdcOffset;
if (TestTime>fAdcTimeWindowMin[cnt]&&TestTime<fAdcTimeWindowMax[cnt]&&good_hit==999) {
good_hit=thit;
}
}
}
if (good_hit==999) good_hit=0;
fAdcPedRaw[cnt] = rawAdcHit.GetPedRaw();
fAdcPulseIntRaw[cnt] = rawAdcHit.GetPulseIntRaw(good_hit);
fAdcPulseAmpRaw[cnt] = rawAdcHit.GetPulseAmpRaw(good_hit);
fAdcPulseTimeRaw[cnt] = rawAdcHit.GetPulseTimeRaw(good_hit);
fAdcPulseTime[cnt] = rawAdcHit.GetPulseTime(good_hit)+fAdcTdcOffset;
fAdcPed[cnt] = rawAdcHit.GetPed();
fAdcPulseInt[cnt] = rawAdcHit.GetPulseInt(good_hit);
fAdcPulseAmp[cnt] = rawAdcHit.GetPulseAmp(good_hit);
}
else if (hit->fPlane == 2) {
THcRawTdcHit rawTdcHit = hit->GetRawTdcHit();
fTdcTimeRaw[cnt] = rawTdcHit.GetTimeRaw();
fTdcTime[cnt] = rawTdcHit.GetTime()*fTdcChanperNS+fTdcOffset;
UInt_t good_hit=999;
if (rawTdcHit.GetNHits()>1) {
for (UInt_t thit=0; thit<rawTdcHit.GetNHits(); ++thit) {
Int_t TestTime=rawTdcHit.GetTime(thit)*fTdcChanperNS+fTdcOffset;
if (TestTime>fTdcTimeWindowMin[cnt]&&TestTime<fTdcTimeWindowMax[cnt]&&good_hit==999) {
good_hit=thit;
}
}
}
if (good_hit==999) good_hit=0;
fTdcTimeRaw[cnt] = rawTdcHit.GetTimeRaw(good_hit);
fTdcTime[cnt] = rawTdcHit.GetTime(good_hit)*fTdcChanperNS+fTdcOffset;
fTdcMultiplicity[cnt] = rawTdcHit.GetNHits();
}
......@@ -281,7 +304,6 @@ void THcTrigDet::Setup(const char* name, const char* description) {
Int_t THcTrigDet::ReadDatabase(const TDatime& date) {
std::string adcNames, tdcNames;
DBRequest list[] = {
{"_numAdc", &fNumAdc, kInt}, // Number of ADC channels.
{"_numTdc", &fNumTdc, kInt}, // Number of TDC channels.
......@@ -290,12 +312,38 @@ Int_t THcTrigDet::ReadDatabase(const TDatime& date) {
{"_tdcoffset", &fTdcOffset, kDouble,0,1}, // Offset of tdc channels
{"_adc_tdc_offset", &fTdcOffset, kDouble,0,1}, // Offset of Adc Pulse time (ns)
{"_tdcchanperns", &fTdcChanperNS, kDouble,0,1}, // Convert channesl to ns
{"_trig_tdcrefcut", &fTDC_RefTimeCut, kInt, 0, 1},
{"_trig_adcrefcut", &fADC_RefTimeCut, kInt, 0, 1},
{0}
};
fTdcChanperNS=0.1;
fTdcOffset=300.;
fAdcTdcOffset=200.;
fTDC_RefTimeCut=-1000.;
fADC_RefTimeCut=-1000.;
gHcParms->LoadParmValues(list, fKwPrefix.c_str());
//
fAdcTimeWindowMin = new Double_t [fNumAdc];
fAdcTimeWindowMax = new Double_t [fNumAdc];
fTdcTimeWindowMin = new Double_t [fNumTdc];
fTdcTimeWindowMax = new Double_t [fNumTdc];
for(Int_t ip=0;ip<fNumAdc;ip++) { // Set a large default window
fAdcTimeWindowMin[ip]=-1000;
fAdcTimeWindowMax[ip]=1000;
}
for(Int_t ip=0;ip<fNumTdc;ip++) { // Set a large default window
fTdcTimeWindowMin[ip]=-1000;
fTdcTimeWindowMax[ip]=1000;
}
DBRequest list2[]={
{"_AdcTimeWindowMin", fAdcTimeWindowMin, kDouble, (UInt_t) fNumAdc, 1},
{"_AdcTimeWindowMax", fAdcTimeWindowMax, kDouble, (UInt_t) fNumAdc, 1},
{"_TdcTimeWindowMin", fTdcTimeWindowMin, kDouble, (UInt_t) fNumAdc, 1},
{"_TdcTimeWindowMax", fTdcTimeWindowMax, kDouble, (UInt_t) fNumAdc, 1},
{0}
};
gHcParms->LoadParmValues(list2, fKwPrefix.c_str());
// Split the names to std::vector<std::string>.
fAdcNames = vsplit(adcNames);
......
......@@ -55,7 +55,15 @@ class THcTrigDet : public THaDetector, public THcHitList {
Int_t fTdcTimeRaw[fMaxTdcChannels];
Double_t fTdcTime[fMaxTdcChannels];
Int_t fTDC_RefTimeCut;
Int_t fADC_RefTimeCut;
Double_t *fAdcTimeWindowMin;
Double_t *fAdcTimeWindowMax;
Double_t *fTdcTimeWindowMin;
Double_t *fTdcTimeWindowMax;
Int_t fAdcPedRaw[fMaxAdcChannels];
Int_t fAdcPulseIntRaw[fMaxAdcChannels];
Int_t fAdcPulseAmpRaw[fMaxAdcChannels];
......
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