107 #include "THaApparatus.h"
123 const char* name,
const char* description, THaApparatus* app
125 THaDetector(name, description, app),
THcHitList(),
127 fNumAdc(0), fNumTdc(0), fAdcNames(), fTdcNames(),
128 fTdcTimeRaw(), fTdcTime(),
129 fAdcPedRaw(), fAdcPulseIntRaw(), fAdcPulseAmpRaw(), fAdcPulseTimeRaw(),
130 fAdcPed(), fAdcPulseInt(), fAdcPulseAmp(), fAdcPulseTime(),
131 fTdcMultiplicity(), fAdcMultiplicity()
172 EStatus status = THaDetector::Init(date);
179 string EngineDID = string(GetApparatus()->
GetName()).substr(0, 1) +
GetName();
180 std::transform(EngineDID.begin(), EngineDID.end(), EngineDID.begin(), ::toupper);
182 static const char*
const here =
"Init()";
183 Error(Here(here),
"Error filling detectormap for %s.", EngineDID.c_str());
186 DBRequest listextra[]={
202 fPresentP = (
Bool_t *) vpresent->GetValuePointer();
211 THaAnalysisObject::Clear(opt);
215 for (
int i=0; i<
fNumAdc; ++i) {
226 for (
int i=0; i<
fNumTdc; ++i) {
249 while (iHit < numHits) {
274 else if (hit->
fPlane == 2) {
279 Int_t TimeDiff=1000000;
290 if (good_hit == 999 and closest_hit != 999) good_hit=closest_hit;
291 if (good_hit<rawTdcHit.
GetNHits()) {
298 throw std::out_of_range(
299 "`THcTrigDet::Decode`: only planes `1` and `2` available!"
312 string kwPrefix = string(GetApparatus()->
GetName()) +
"_" + name;
313 std::transform(kwPrefix.begin(), kwPrefix.end(), kwPrefix.begin(), ::tolower);
319 std::string adcNames, tdcNames;
320 std::string trigNames=
"pTRIG1_ROC1 pTRIG4_ROC1 pTRIG1_ROC2 pTRIG4_ROC2";
322 std::string RFNames=
"pRF hRF";
326 {
"_adcNames", &adcNames, kString},
327 {
"_tdcNames", &tdcNames, kString},
328 {
"_trigNames", &trigNames, kString,0,1},
329 {
"_RFNames", &RFNames, kString,0, 1},
375 for (
int i = 0; i <
fNumTdc; i++) {
381 cout <<
" Trig = " <<
fTrigNames.size() << endl;
391 for (
int i = 0; i <
fNumTdc; i++) {
406 if (mode == kDefine && fIsSetup)
return kOK;
407 fIsSetup = (mode == kDefine);
409 std::vector<RVarDef> vars;
412 std::vector<TString> adcPedRawTitle(fNumAdc), adcPedRawVar(fNumAdc);
413 std::vector<TString> adcPulseIntRawTitle(fNumAdc), adcPulseIntRawVar(fNumAdc);
414 std::vector<TString> adcPulseAmpRawTitle(fNumAdc), adcPulseAmpRawVar(fNumAdc);
415 std::vector<TString> adcPulseTimeRawTitle(fNumAdc), adcPulseTimeRawVar(fNumAdc);
416 std::vector<TString> adcPulseTimeTitle(fNumAdc), adcPulseTimeVar(fNumAdc);
417 std::vector<TString> adcPedTitle(fNumAdc), adcPedVar(fNumAdc);
418 std::vector<TString> adcPulseIntTitle(fNumAdc), adcPulseIntVar(fNumAdc);
419 std::vector<TString> adcPulseAmpTitle(fNumAdc), adcPulseAmpVar(fNumAdc);
420 std::vector<TString> adcMultiplicityTitle(fNumAdc), adcMultiplicityVar(fNumAdc);
422 TString RefTimeTitle=
"TdcRefTime";
423 TString RefTimeVar=
"fTdcRefTime";
424 RVarDef entryRefTime {
429 vars.push_back(entryRefTime);
431 for (
int i=0; i<
fNumAdc; ++i) {
432 adcPedRawTitle.at(i) =
fAdcNames.at(i) +
"_adcPedRaw";
435 adcPedRawTitle.at(i).Data(),
436 adcPedRawTitle.at(i).Data(),
437 adcPedRawVar.at(i).Data()
439 vars.push_back(entry1);
441 adcPulseIntRawTitle.at(i) =
fAdcNames.at(i) +
"_adcPulseIntRaw";
444 adcPulseIntRawTitle.at(i).Data(),
445 adcPulseIntRawTitle.at(i).Data(),
446 adcPulseIntRawVar.at(i).Data()
448 vars.push_back(entry2);
450 adcPulseAmpRawTitle.at(i) =
fAdcNames.at(i) +
"_adcPulseAmpRaw";
453 adcPulseAmpRawTitle.at(i).Data(),
454 adcPulseAmpRawTitle.at(i).Data(),
455 adcPulseAmpRawVar.at(i).Data()
457 vars.push_back(entry3);
459 adcPulseTimeRawTitle.at(i) =
fAdcNames.at(i) +
"_adcPulseTimeRaw";
462 adcPulseTimeRawTitle.at(i).Data(),
463 adcPulseTimeRawTitle.at(i).Data(),
464 adcPulseTimeRawVar.at(i).Data()
466 vars.push_back(entry4);
468 adcPedTitle.at(i) =
fAdcNames.at(i) +
"_adcPed";
471 adcPedTitle.at(i).Data(),
472 adcPedTitle.at(i).Data(),
473 adcPedVar.at(i).Data()
475 vars.push_back(entry5);
477 adcPulseIntTitle.at(i) =
fAdcNames.at(i) +
"_adcPulseInt";
480 adcPulseIntTitle.at(i).Data(),
481 adcPulseIntTitle.at(i).Data(),
482 adcPulseIntVar.at(i).Data()
484 vars.push_back(entry6);
486 adcPulseAmpTitle.at(i) =
fAdcNames.at(i) +
"_adcPulseAmp";
489 adcPulseAmpTitle.at(i).Data(),
490 adcPulseAmpTitle.at(i).Data(),
491 adcPulseAmpVar.at(i).Data()
493 vars.push_back(entry7);
495 adcMultiplicityTitle.at(i) =
fAdcNames.at(i) +
"_adcMultiplicity";
498 adcMultiplicityTitle.at(i).Data(),
499 adcMultiplicityTitle.at(i).Data(),
500 adcMultiplicityVar.at(i).Data()
502 vars.push_back(entry8);
504 adcPulseTimeTitle.at(i) =
fAdcNames.at(i) +
"_adcPulseTime";
507 adcPulseTimeTitle.at(i).Data(),
508 adcPulseTimeTitle.at(i).Data(),
509 adcPulseTimeVar.at(i).Data()
511 vars.push_back(entry9);
514 std::vector<TString> tdcTimeRawTitle(fNumTdc), tdcTimeRawVar(fNumTdc);
515 std::vector<TString> tdcTimeTitle(fNumTdc), tdcTimeVar(fNumTdc);
516 std::vector<TString> tdcMultiplicityTitle(fNumTdc), tdcMultiplicityVar(fNumTdc);
518 for (
int i=0; i<
fNumTdc; ++i) {
519 tdcTimeRawTitle.at(i) =
fTdcNames.at(i) +
"_tdcTimeRaw";
523 tdcTimeRawTitle.at(i).Data(),
524 tdcTimeRawTitle.at(i).Data(),
525 tdcTimeRawVar.at(i).Data()
527 vars.push_back(entry1);
529 tdcTimeTitle.at(i) =
fTdcNames.at(i) +
"_tdcTime";
532 tdcTimeTitle.at(i).Data(),
533 tdcTimeTitle.at(i).Data(),
534 tdcTimeVar.at(i).Data()
536 vars.push_back(entry2);
538 tdcMultiplicityTitle.at(i) =
fTdcNames.at(i) +
"_tdcMultiplicity";
541 tdcMultiplicityTitle.at(i).Data(),
542 tdcMultiplicityTitle.at(i).Data(),
543 tdcMultiplicityVar.at(i).Data()
545 vars.push_back(entry3);
551 return DefineVarsFromList(vars.data(), mode);
Int_t GetTimeRaw(UInt_t iHit=0) const
Gets raw TDC time. In channels.
std::string GetName(const std::string &scope_name)
virtual Int_t ReadDatabase(const TDatime &date)
Double_t fTdcTime[fMaxTdcChannels]
virtual Int_t FillMap(THaDetMap *detmap, const char *detectorname)
Int_t fAdcPulseTimeRaw[fMaxAdcChannels]
Int_t fAdcPedRaw[fMaxAdcChannels]
~THcTrigDet()
A destructor.
Int_t fAdcPulseAmpRaw[fMaxAdcChannels]
static const int fMaxAdcChannels
THcRawTdcHit & GetRawTdcHit()
Gets reference to THcRawTdcHit.
void MissReport(const char *name)
virtual void AddEvtType(int evtype)
Builds a Hall C ENGINE style list of raw hits from raw data.
Double_t * fTdcTimeWindowMin
Int_t fAdcPulseIntRaw[fMaxAdcChannels]
std::vector< std::string > fTrigNames
Int_t GetPulseTimeRaw(UInt_t iPulse=0) const
Gets raw pulse time. In subsamples.
virtual EStatus Init(const TDatime &date)
Initializes the detector variables.
Double_t * fAdcTimeWindowMax
UInt_t GetNHits() const
Gets the number of set hits.
Class representing a single raw TDC hit.
TClonesArray * fRawHitList
std::vector< std::string > fRFNames
Double_t fAdcPulseInt[fMaxAdcChannels]
const char * Data() const
Int_t fTdcTimeRaw[fMaxTdcChannels]
static TString Format(const char *fmt,...)
virtual Int_t DefineVariables(EMode mode=kDefine)
virtual void SetEvtType(int evtype)
Double_t GetPed() const
Gets sample pedestal. In channels.
void Error(const char *location, const char *msgfmt,...)
A mock detector to hold trigger related data.
std::vector< std::string > fTdcNames
Double_t fAdcPulseAmp[fMaxAdcChannels]
void InitHitList(THaDetMap *detmap, const char *hitclass, Int_t maxhits, Int_t tdcref_cut=0, Int_t adcref_cut=0)
Save the electronics module to detector mapping and initialize a hit array of hits of class hitclass...
virtual void SetSpectName(const char *name)
Int_t GetPulseAmpRaw(UInt_t iPulse=0) const
Gets raw pulse amplitude. In channels.
Int_t End(THaRunBase *run)
Double_t GetPulseAmp(UInt_t iPulse=0) const
Gets pedestal subtracted pulse amplitude. In channels.
Double_t GetPulseInt(UInt_t iPulse=0) const
Gets pedestal subtracted pulse integral. In channels.
Double_t fAdcPulseTime[fMaxAdcChannels]
Bool_t HasRefTime() const
Queries whether reference time has been set.
virtual Bool_t IsIgnoreType(Int_t evtype) const
char * Form(const char *fmt,...)
void CreateMissReportParms(const char *prefix)
std::vector< Int_t > eventtypes
virtual Bool_t HaveIgnoreList() const
Class representing a single raw hit for the THcTrigDet.
Double_t * fTdcTimeWindowMax
Int_t GetPulseIntRaw(UInt_t iPulse=0) const
Gets raw pulse integral. In channels.
R__EXTERN class THcDetectorMap * gHcDetectorMap
THcRawAdcHit & GetRawAdcHit()
Gets reference to THcRawAdcHit.
Int_t fAdcMultiplicity[fMaxAdcChannels]
Int_t LoadParmValues(const DBRequest *list, const char *prefix="")
Retrieve parameter values from the parameter cache.
Double_t fAdcPed[fMaxAdcChannels]
void TestTime(const Func &f)
Int_t GetTime(UInt_t iHit=0) const
Gets TDC time. In channels.
Int_t Decode(const THaEvData &evData)
Decodes and processes events.
UInt_t GetNPulses() const
Gets number of set pulses.
Double_t * fAdcTimeWindowMin
ClassImp(THcDCLookupTTDConv) THcDCLookupTTDConv
Int_t GetRefTime() const
Gets reference time. In channels.
Int_t GetPedRaw() const
Gets raw signal pedestal. In channels.
std::vector< std::string > fAdcNames
Int_t fTdcMultiplicity[fMaxTdcChannels]
Double_t GetPulseTime(UInt_t iPulse=0) const
R__EXTERN class THcParmList * gHcParms
TObject * At(Int_t idx) const
static const int fMaxTdcChannels
Class representing a single raw ADC hit.
void Setup(const char *name, const char *description)
virtual Int_t DecodeToHitList(const THaEvData &evdata, Bool_t suppress=kFALSE)
Populate the hitlist from the raw event data.
virtual void Clear(Option_t *opt="")
Clears variables before next event.