13 #include "THaDetMap.h"
16 #include "THaCutList.h"
19 #include "THaApparatus.h"
25 #include "THaTrackProj.h"
38 THaApparatus* apparatus ) :
39 THaNonTrackingDetector(name,description,apparatus), fPresentP(0),
40 fAdcPosTimeWindowMin(0), fAdcPosTimeWindowMax(0), fAdcNegTimeWindowMin(0),
41 fAdcNegTimeWindowMax(0),fPedNegDefault(0),fPedPosDefault(0),
42 fRegionValue(0), fPosGain(0), fNegGain(0),
43 frPosAdcPedRaw(0), frPosAdcPulseIntRaw(0), frPosAdcPulseAmpRaw(0),
44 frPosAdcPulseTimeRaw(0), frPosAdcPed(0), frPosAdcPulseInt(0),
45 frPosAdcPulseAmp(0), frPosAdcPulseTime(0), frNegAdcPedRaw(0),
46 frNegAdcPulseIntRaw(0), frNegAdcPulseAmpRaw(0), frNegAdcPulseTimeRaw(0),
47 frNegAdcPed(0), frNegAdcPulseInt(0), frNegAdcPulseAmp(0),
48 frNegAdcPulseTime(0), fPosAdcErrorFlag(0),
49 fNegAdcErrorFlag(0), fPosPedSum(0), fPosPedSum2(0), fPosPedLimit(0),
50 fPosPedCount(0), fNegPedSum(0), fNegPedSum2(0), fNegPedLimit(0), fNegPedCount(0),
51 fA_Pos(0), fA_Neg(0), fA_Pos_p(0), fA_Neg_p(0), fT_Pos(0), fT_Neg(0),
52 fPosPed(0), fPosSig(0), fPosThresh(0), fNegPed(0), fNegSig(0),
53 fNegThresh(0), fPosPedMean(0), fNegPedMean(0),
54 fPosTDCHits(0), fNegTDCHits(0), fPosADCHits(0), fNegADCHits(0)
60 THaNonTrackingDetector(),
61 fAdcPosTimeWindowMin(0), fAdcPosTimeWindowMax(0), fAdcNegTimeWindowMin(0),
62 fAdcNegTimeWindowMax(0),
63 fPedNegDefault(0),fPedPosDefault(0),fRegionValue(0), fPosGain(0), fNegGain(0),
64 frPosAdcPedRaw(0), frPosAdcPulseIntRaw(0), frPosAdcPulseAmpRaw(0),
65 frPosAdcPulseTimeRaw(0), frPosAdcPed(0), frPosAdcPulseInt(0),
66 frPosAdcPulseAmp(0), frPosAdcPulseTime(0), frNegAdcPedRaw(0),
67 frNegAdcPulseIntRaw(0), frNegAdcPulseAmpRaw(0), frNegAdcPulseTimeRaw(0),
68 frNegAdcPed(0), frNegAdcPulseInt(0), frNegAdcPulseAmp(0),
69 frNegAdcPulseTime(0), fPosAdcErrorFlag(0),
70 fNegAdcErrorFlag(0), fPosPedSum(0), fPosPedSum2(0), fPosPedLimit(0),
71 fPosPedCount(0), fNegPedSum(0), fNegPedSum2(0), fNegPedLimit(0), fNegPedCount(0),
72 fA_Pos(0), fA_Neg(0), fA_Pos_p(0), fA_Neg_p(0), fT_Pos(0), fT_Neg(0),
73 fPosPed(0), fPosSig(0), fPosThresh(0), fNegPed(0), fNegSig(0),
74 fNegThresh(0), fPosPedMean(0), fNegPedMean(0),
75 fPosTDCHits(0), fNegTDCHits(0), fPosADCHits(0), fNegADCHits(0)
167 char EngineDID[] =
"xAERO";
168 EngineDID[0] = toupper(GetApparatus()->
GetName()[0]);
170 static const char*
const here =
"Init()";
171 Error( Here(here),
"Error filling detectormap for %s.", EngineDID );
176 if( (status = THaNonTrackingDetector::Init( date )) )
177 return fStatus=status;
181 InitHitList(fDetMap,
"THcAerogelHit", fDetMap->GetTotNumChan()+1,
186 !(
fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector(
"hod"))) ) {
187 static const char*
const here =
"ReadDatabase()";
188 Warning(Here(here),
"Hodoscope \"%s\" not found. ",
"hod");
192 THaVar* vpresent = gHaVars->Find(
Form(
"%s.present",GetApparatus()->
GetName()));
196 return fStatus = kOK;
208 prefix[0]=tolower(GetApparatus()->
GetName()[0]);
215 DBRequest listextra[]={
216 {
"aero_num_pairs", &fNelem, kInt},
224 cout <<
"Created aerogel detector " << GetApparatus()->GetName() <<
"."
225 <<
GetName() <<
" with " << fNelem <<
" PMT pairs" << endl;
308 {
"aero_beta_min", &
fBetaMin, kDouble},
309 {
"aero_beta_max", &
fBetaMax, kDouble},
312 {
"aero_dp_min", &
fDpMin, kDouble},
313 {
"aero_dp_max", &
fDpMax, kDouble},
325 {
"aero_debug_adc", &
fDebugAdc, kInt, 0, 1},
329 {
"aero_tdc_offset", &
fTdcOffset, kInt, 0, optional},
335 for(
Int_t ip=0;ip<fNelem;ip++) {
360 {
"aero_min_peds", &
fMinPeds, kInt, 0, optional},
365 cout <<
"6 GeV Data Analysis Flag Set To TRUE" << endl;
389 if( mode == kDefine && fIsSetup )
return kOK;
390 fIsSetup = ( mode == kDefine );
399 {
"posGain",
"Positive PMT gains",
"fPosGain"},
400 {
"negGain",
"Negative PMT gains",
"fNegGain"},
402 {
"numPosAdcHits",
"Number of Positive ADC Hits Per PMT",
"fNumPosAdcHits"},
403 {
"totNumPosAdcHits",
"Total Number of Positive ADC Hits",
"fTotNumPosAdcHits"},
404 {
"numNegAdcHits",
"Number of Negative ADC Hits Per PMT",
"fNumNegAdcHits"},
405 {
"totNumNegAdcHits",
"Total Number of Negative ADC Hits",
"fTotNumNegAdcHits"},
406 {
"totnumAdcHits",
"Total Number of ADC Hits Per PMT",
"fTotNumAdcHits"},
408 {
"posAdcPedRaw",
"Positive Raw ADC pedestals",
"frPosAdcPedRaw.THcSignalHit.GetData()"},
409 {
"posAdcPulseIntRaw",
"Positive Raw ADC pulse integrals",
"frPosAdcPulseIntRaw.THcSignalHit.GetData()"},
410 {
"posAdcPulseAmpRaw",
"Positive Raw ADC pulse amplitudes",
"frPosAdcPulseAmpRaw.THcSignalHit.GetData()"},
411 {
"posAdcPulseTimeRaw",
"Positive Raw ADC pulse times",
"frPosAdcPulseTimeRaw.THcSignalHit.GetData()"},
412 {
"posAdcPed",
"Positive ADC pedestals",
"frPosAdcPed.THcSignalHit.GetData()"},
413 {
"posAdcPulseInt",
"Positive ADC pulse integrals",
"frPosAdcPulseInt.THcSignalHit.GetData()"},
414 {
"posAdcPulseAmp",
"Positive ADC pulse amplitudes",
"frPosAdcPulseAmp.THcSignalHit.GetData()"},
415 {
"posAdcPulseTime",
"Positive ADC pulse times",
"frPosAdcPulseTime.THcSignalHit.GetData()"},
417 {
"negAdcPedRaw",
"Negative Raw ADC pedestals",
"frNegAdcPedRaw.THcSignalHit.GetData()"},
418 {
"negAdcPulseIntRaw",
"Negative Raw ADC pulse integrals",
"frNegAdcPulseIntRaw.THcSignalHit.GetData()"},
419 {
"negAdcPulseAmpRaw",
"Negative Raw ADC pulse amplitudes",
"frNegAdcPulseAmpRaw.THcSignalHit.GetData()"},
420 {
"negAdcPulseTimeRaw",
"Negative Raw ADC pulse times",
"frNegAdcPulseTimeRaw.THcSignalHit.GetData()"},
421 {
"negAdcPed",
"Negative ADC pedestals",
"frNegAdcPed.THcSignalHit.GetData()"},
422 {
"negAdcPulseInt",
"Negative ADC pulse integrals",
"frNegAdcPulseInt.THcSignalHit.GetData()"},
423 {
"negAdcPulseAmp",
"Negative ADC pulse amplitudes",
"frNegAdcPulseAmp.THcSignalHit.GetData()"},
424 {
"negAdcPulseTime",
"Negative ADC pulse times",
"frNegAdcPulseTime.THcSignalHit.GetData()"},
427 DefineVarsFromList( vars, mode);
432 {
"apos",
"Positive Raw ADC Amplitudes",
"fA_Pos"},
433 {
"aneg",
"Negative Raw ADC Amplitudes",
"fA_Neg"},
434 {
"apos_p",
"Positive Ped-subtracted ADC Amplitudes",
"fA_Pos_p"},
435 {
"aneg_p",
"Negative Ped-subtracted ADC Amplitudes",
"fA_Neg_p"},
436 {
"tpos",
"Positive Raw TDC",
"fT_Pos"},
437 {
"tneg",
"Negative Raw TDC",
"fT_Neg"},
438 {
"ntdc_pos_hits",
"Number of Positive Tube Hits",
"fNTDCPosHits"},
439 {
"ntdc_neg_hits",
"Number of Negative Tube Hits",
"fNTDCNegHits"},
440 {
"posadchits",
"Positive ADC hits",
"fPosADCHits.THcSignalHit.GetPaddleNumber()"},
441 {
"negadchits",
"Negative ADC hits",
"fNegADCHits.THcSignalHit.GetPaddleNumber()"},
442 {
"postdchits",
"Positive TDC hits",
"fPosTDCHits.THcSignalHit.GetPaddleNumber()"},
443 {
"negtdchits",
"Negative TDC hits",
"fNegTDCHits.THcSignalHit.GetPaddleNumber()"},
444 {
"nGoodHits",
"Total number of good hits",
"fNGoodHits"},
445 {
"posNpeSixGev",
"Number of Positive PEs",
"fPosNpeSixGev"},
446 {
"negNpeSixGev",
"Number of Negative PEs",
"fNegNpeSixGev"},
447 {
"posNpeSumSixGev",
"Total Number of Positive PEs",
"fPosNpeSumSixGev"},
448 {
"negNpeSumSixGev",
"Total Number of Negative PEs",
"fNegNpeSumSixGev"},
449 {
"npeSumSixGev",
"Total Number of PEs",
"fNpeSumSixGev"},
452 DefineVarsFromList( vars, mode);
456 {
"posAdcCounter",
"Positive ADC counter numbers",
"frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"},
457 {
"negAdcCounter",
"Negative ADC counter numbers",
"frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"},
458 {
"posAdcErrorFlag",
"Error Flag for When FPGA Fails",
"fPosAdcErrorFlag.THcSignalHit.GetData()"},
459 {
"negAdcErrorFlag",
"Error Flag for When FPGA Fails",
"fNegAdcErrorFlag.THcSignalHit.GetData()"},
461 {
"numGoodPosAdcHits",
"Number of Good Positive ADC Hits Per PMT",
"fNumGoodPosAdcHits"},
462 {
"numGoodNegAdcHits",
"Number of Good Negative ADC Hits Per PMT",
"fNumGoodNegAdcHits"},
463 {
"totNumGoodPosAdcHits",
"Total Number of Good Positive ADC Hits",
"fTotNumGoodPosAdcHits"},
464 {
"totNumGoodNegAdcHits",
"Total Number of Good Negative ADC Hits",
"fTotNumGoodNegAdcHits"},
466 {
"totnumGoodAdcHits",
"TotalNumber of Good ADC Hits Per PMT",
"fTotNumGoodAdcHits"},
467 {
"numTracksMatched",
"Number of Tracks Matched Per Region",
"fNumTracksMatched"},
468 {
"numTracksFired",
"Number of Tracks that Fired Per Region",
"fNumTracksFired"},
469 {
"totNumTracksMatched",
"Total Number of Tracks Matched Per Region",
"fTotNumTracksMatched"},
470 {
"totNumTracksFired",
"Total Number of Tracks that Fired",
"fTotNumTracksFired"},
472 {
"xAtAero",
"Track X at Aero diffusion box",
"fXAtAero"},
473 {
"yAtAero",
"Track Y at Aero diffusion box",
"fYAtAero"},
475 {
"posNpe",
"Number of Positive PEs",
"fPosNpe"},
476 {
"negNpe",
"Number of Negative PEs",
"fNegNpe"},
477 {
"posNpeSum",
"Total Number of Positive PEs",
"fPosNpeSum"},
478 {
"negNpeSum",
"Total Number of Negative PEs",
"fNegNpeSum"},
479 {
"npeSum",
"Total Number of PEs",
"fNpeSum"},
481 {
"goodPosAdcPed",
"Good Negative ADC pedestals",
"fGoodPosAdcPed"},
482 {
"goodPosAdcMult",
"Good Positive ADC mult",
"fGoodPosAdcMult"},
483 {
"goodPosAdcPulseInt",
"Good Negative ADC pulse integrals",
"fGoodPosAdcPulseInt"},
484 {
"goodPosAdcPulseIntRaw",
"Good Negative ADC raw pulse integrals",
"fGoodPosAdcPulseIntRaw"},
485 {
"goodPosAdcPulseAmp",
"Good Negative ADC pulse amplitudes",
"fGoodPosAdcPulseAmp"},
486 {
"goodPosAdcPulseTime",
"Good Negative ADC pulse times",
"fGoodPosAdcPulseTime"},
487 {
"goodPosAdcTdcDiffTime",
"Good Positive hodo Start - ADC pulse times",
"fGoodPosAdcTdcDiffTime"},
489 {
"goodNegAdcPed",
"Good Negative ADC pedestals",
"fGoodNegAdcPed"},
490 {
"goodNegAdcMult",
"Good Negative ADC Mult",
"fGoodNegAdcMult"},
491 {
"goodNegAdcPulseInt",
"Good Negative ADC pulse integrals",
"fGoodNegAdcPulseInt"},
492 {
"goodNegAdcPulseIntRaw",
"Good Negative ADC raw pulse integrals",
"fGoodNegAdcPulseIntRaw"},
493 {
"goodNegAdcPulseAmp",
"Good Negative ADC pulse amplitudes",
"fGoodNegAdcPulseAmp"},
494 {
"goodNegAdcPulseTime",
"Good Negative ADC pulse times",
"fGoodNegAdcPulseTime"},
495 {
"goodNegAdcTdcDiffTime",
"Good Negative hodo Start - ADC pulse times",
"fGoodNegAdcTdcDiffTime"},
499 return DefineVarsFromList(vars, mode);
597 for(
Int_t itube = 0;itube < fNelem;itube++) {
619 if(gHaCuts->Result(
"Pedestal_event")) {
743 Double_t adctdcdiffTime = StartTime-pulseTime+OffsetTime;
776 Double_t adctdcdiffTime = StartTime-pulseTime+OffsetTime;
803 Int_t nPosTDCHits = 0;
804 Int_t nNegTDCHits = 0;
805 Int_t nPosADCHits = 0;
806 Int_t nNegADCHits = 0;
901 for (
Int_t itrack = 0; itrack < nTracks; itrack++) {
903 THaTrack* track =
dynamic_cast<THaTrack*
> (tracks[itrack]);
904 if (track->GetIndex() != 0)
continue;
906 Double_t trackChi2 = track->GetChi2();
907 Int_t trackNDoF = track->GetNDoF();
908 Double_t trackRedChi2 = trackChi2/trackNDoF;
909 Double_t trackBeta = track->GetBeta();
910 Double_t trackEnergy = track->GetEnergy();
912 Double_t trackENorm = trackEnergy/trackMom;
916 Double_t trackTheta = track->GetTheta();
917 Double_t trackPhi = track->GetPhi();
926 if (trackRedChi2Cut && trackBetaCut && trackENormCut && trackDpCut) {
986 for(
Int_t i = 0;i < fNelem; i++) {
1011 while(ihit < nrawhits) {
1044 for(
Int_t i=0; i<fNelem;i++) {
1076 THaNonTrackingDetector::Print(opt);
1081 cout <<
"Aerogel Pedestals" << endl;
1082 cout <<
"No. Neg Pos" << endl;
1083 for(
Int_t i=0; i<fNelem; i++)
1086 cout <<
" fMinPeds = " <<
fMinPeds << endl;
Double_t GetF250_PeakPedestalRatio()
std::string GetName(const std::string &scope_name)
virtual Int_t ApplyCorrections(void)
virtual Int_t FillMap(THaDetMap *detmap, const char *detectorname)
Int_t End(THaRunBase *run=0)
TClonesArray * frNegAdcPulseAmpRaw
virtual Int_t Decode(const THaEvData &)
TClonesArray * frNegAdcPulseAmp
virtual EStatus Init(const TDatime &run_time)
virtual void CalculatePedestals()
vector< Int_t > fNumNegAdcHits
TClonesArray * frPosAdcPulseAmpRaw
void MissReport(const char *name)
TClonesArray * frNegAdcPedRaw
vector< Int_t > fNumPosAdcHits
vector< Double_t > fPosNpe
virtual Int_t CoarseProcess(TClonesArray &tracks)
Int_t fTotNumTracksMatched
vector< Double_t > fGoodNegAdcPulseIntRaw
vector< Int_t > fNumTracksMatched
Double_t GetOffsetTime() const
TClonesArray * frPosAdcPulseTime
virtual Int_t FineProcess(TClonesArray &tracks)
Int_t GetPulseTimeRaw(UInt_t iPulse=0) const
Gets raw pulse time. In subsamples.
TClonesArray * frPosAdcPulseTimeRaw
UInt_t GetNHits() const
Gets the number of set hits.
TClonesArray * fRawHitList
virtual void InitializePedestals()
TClonesArray * frPosAdcPed
Int_t fTotNumGoodNegAdcHits
vector< Double_t > fGoodNegAdcMult
TClonesArray * fPosTDCHits
vector< Double_t > fGoodNegAdcPulseInt
TObject * ConstructedAt(Int_t idx)
TClonesArray * frPosAdcPulseInt
virtual void Set(Int_t paddle, Int_t data)
vector< Double_t > fGoodPosAdcPulseInt
TClonesArray * frNegAdcPulseInt
Class for an Aerogel detector consisting of pairs of PMT's attached to a diffuser box...
vector< Double_t > fGoodPosAdcPulseTime
Double_t GetPed() const
Gets sample pedestal. In channels.
void Error(const char *location, const char *msgfmt,...)
THcRawAdcHit & GetRawAdcHitNeg()
virtual void Clear(Option_t *option="")
THcRawTdcHit & GetRawTdcHitNeg()
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...
Double_t * fAdcNegTimeWindowMin
void DeletePedestalArrays()
Double_t fNegNpeSumSixGev
THcRawAdcHit & GetRawAdcHitPos()
TClonesArray * fNegTDCHits
Int_t GetPulseAmpRaw(UInt_t iPulse=0) const
Gets raw pulse amplitude. In channels.
TClonesArray * frNegAdcPulseIntRaw
Int_t GetIndex(Int_t nRegion, Int_t nValue)
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.
vector< Double_t > fGoodNegAdcTdcDiffTime
vector< Int_t > fNumTracksFired
TClonesArray * frNegAdcPulseTime
virtual Int_t ReadDatabase(const TDatime &date)
TClonesArray * frPosAdcPedRaw
virtual void AccumulatePedestals(TClonesArray *rawhits)
char * Form(const char *fmt,...)
void CreateMissReportParms(const char *prefix)
Double_t * fAdcPosTimeWindowMax
TClonesArray * frPosAdcPulseAmp
TClonesArray * fNegAdcErrorFlag
Double_t GetStartTime() const
void Warning(const char *location, const char *msgfmt,...)
TClonesArray * frNegAdcPed
TClonesArray * fNegADCHits
Int_t GetPulseIntRaw(UInt_t iPulse=0) const
Gets raw pulse integral. In channels.
R__EXTERN class THcDetectorMap * gHcDetectorMap
vector< Double_t > fNegNpeSixGev
vector< Double_t > fPosNpeSixGev
vector< Int_t > fNumGoodPosAdcHits
vector< Int_t > fNumGoodNegAdcHits
Int_t LoadParmValues(const DBRequest *list, const char *prefix="")
Retrieve parameter values from the parameter cache.
Double_t fPosNpeSumSixGev
Int_t GetTime(UInt_t iHit=0) const
Gets TDC time. In channels.
vector< Double_t > fGoodNegAdcPed
TClonesArray * frNegAdcPulseTimeRaw
UInt_t GetNPulses() const
Gets number of set pulses.
vector< Double_t > fGoodPosAdcPulseIntRaw
THcRawTdcHit & GetRawTdcHitPos()
ClassImp(THcDCLookupTTDConv) THcDCLookupTTDConv
TClonesArray * fPosADCHits
Double_t * fAdcNegTimeWindowMax
TClonesArray * fPosAdcErrorFlag
vector< Double_t > fGoodPosAdcMult
Int_t GetPedRaw() const
Gets raw signal pedestal. In channels.
Short_t Max(Short_t a, Short_t b)
vector< Double_t > fGoodNegAdcPulseTime
Double_t * fAdcPosTimeWindowMin
Double_t GetPulseTime(UInt_t iPulse=0) const
virtual void Print(const Option_t *opt) const
vector< Double_t > fNegNpe
virtual Int_t DefineVariables(EMode mode=kDefine)
R__EXTERN class THcParmList * gHcParms
TClonesArray * frPosAdcPulseIntRaw
TObject * At(Int_t idx) const
Int_t GetF250_NPedestalSamples()
void GetData(std::string s, double *x, double *y, double *ey)
vector< Double_t > fGoodPosAdcTdcDiffTime
vector< Double_t > fGoodPosAdcPed
Double_t GetAdcTopC() const
Class representing a single raw ADC hit.
static const Int_t MaxNumAdcPulse
vector< Double_t > fGoodNegAdcPulseAmp
virtual void Clear(Option_t *opt="")
virtual Int_t DecodeToHitList(const THaEvData &evdata, Bool_t suppress=kFALSE)
Populate the hitlist from the raw event data.
Int_t fTotNumGoodPosAdcHits
Double_t GetAdcTomV() const
A standard Hall C spectrometer apparatus.
vector< Double_t > fGoodPosAdcPulseAmp