From cd82c303d195a8872ee7f9a75c45b0e67155a633 Mon Sep 17 00:00:00 2001 From: Carlos Yero <cyero002@fiu.edu> Date: Mon, 8 May 2017 08:15:52 -0400 Subject: [PATCH] Updates to THcShowerPlane Add "Good" variables to calorimeter class occupancies and multiplicities required to pass time and threshold cut Change some variables from arrays to vectors Modify how thresholds are calculated Remove obsolete variables: posadchits, negadchits Add flash adc debug flag Correctly delete pointers in destructor --- src/THcShowerPlane.cxx | 393 +++++++++++++++++++++++++++-------------- src/THcShowerPlane.h | 60 +++++-- 2 files changed, 304 insertions(+), 149 deletions(-) diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx index 53b1c82..0eb653f 100644 --- a/src/THcShowerPlane.cxx +++ b/src/THcShowerPlane.cxx @@ -24,6 +24,7 @@ One plane of shower blocks with side readout #include <iostream> #include <fstream> + using namespace std; ClassImp(THcShowerPlane) @@ -41,6 +42,7 @@ THcShowerPlane::THcShowerPlane( const char* name, frPosAdcErrorFlag = new TClonesArray("THcSignalHit", 16); frPosAdcPedRaw = new TClonesArray("THcSignalHit", 16); + frPosAdcThreshold = new TClonesArray("THcSignalHit", 16); frPosAdcPulseIntRaw = new TClonesArray("THcSignalHit", 16); frPosAdcPulseAmpRaw = new TClonesArray("THcSignalHit", 16); frPosAdcPulseTimeRaw = new TClonesArray("THcSignalHit", 16); @@ -51,6 +53,7 @@ THcShowerPlane::THcShowerPlane( const char* name, frNegAdcErrorFlag = new TClonesArray("THcSignalHit", 16); frNegAdcPedRaw = new TClonesArray("THcSignalHit", 16); + frNegAdcThreshold = new TClonesArray("THcSignalHit", 16); frNegAdcPulseIntRaw = new TClonesArray("THcSignalHit", 16); frNegAdcPulseAmpRaw = new TClonesArray("THcSignalHit", 16); frNegAdcPulseTimeRaw = new TClonesArray("THcSignalHit", 16); @@ -71,37 +74,52 @@ THcShowerPlane::THcShowerPlane( const char* name, THcShowerPlane::~THcShowerPlane() { // Destructor - delete fPosADCHits; - delete fNegADCHits; - - frPosAdcErrorFlag = NULL; - frPosAdcPedRaw = NULL; - frPosAdcPulseIntRaw = NULL; - frPosAdcPulseAmpRaw = NULL; - frPosAdcPulseTimeRaw = NULL; - - frPosAdcPed = NULL; - frPosAdcPulseInt = NULL; - frPosAdcPulseAmp = NULL; - - frNegAdcErrorFlag = NULL; - frNegAdcPedRaw = NULL; - frNegAdcPulseIntRaw = NULL; - frNegAdcPulseAmpRaw = NULL; - frNegAdcPulseTimeRaw = NULL; - - frNegAdcPed = NULL; - frNegAdcPulseInt = NULL; - frNegAdcPulseAmp = NULL; - - delete [] fA_Pos; - delete [] fA_Neg; - delete [] fA_Pos_p; - delete [] fA_Neg_p; - - delete [] fEpos; - delete [] fEneg; - delete [] fEmean; + delete fPosADCHits; fPosADCHits = NULL; + delete fNegADCHits; fNegADCHits = NULL; + + delete frPosAdcErrorFlag; frPosAdcErrorFlag = NULL; + delete frPosAdcPedRaw; frPosAdcPedRaw = NULL; + delete frPosAdcThreshold; frPosAdcThreshold = NULL; + delete frPosAdcPulseIntRaw; frPosAdcPulseIntRaw = NULL; + delete frPosAdcPulseAmpRaw; frPosAdcPulseAmpRaw = NULL; + delete frPosAdcPulseTimeRaw; frPosAdcPulseTimeRaw = NULL; + + delete frPosAdcPed; frPosAdcPed = NULL; + delete frPosAdcPulseInt; frPosAdcPulseInt = NULL; + delete frPosAdcPulseAmp; frPosAdcPulseAmp = NULL; + + delete frNegAdcErrorFlag; frNegAdcErrorFlag = NULL; + delete frNegAdcPedRaw; frNegAdcPedRaw = NULL; + delete frNegAdcThreshold; frNegAdcThreshold = NULL; + delete frNegAdcPulseIntRaw; frNegAdcPulseIntRaw = NULL; + delete frNegAdcPulseAmpRaw; frNegAdcPulseAmpRaw = NULL; + delete frNegAdcPulseTimeRaw; frNegAdcPulseTimeRaw = NULL; + + delete frNegAdcPed; frNegAdcPed = NULL; + delete frNegAdcPulseInt; frNegAdcPulseInt = NULL; + delete frNegAdcPulseAmp; frNegAdcPulseAmp = NULL; + + delete [] fPosPedSum; + delete [] fPosPedSum2; + delete [] fPosPedLimit; + delete [] fPosPedCount; + + delete [] fNegPedSum; + delete [] fNegPedSum2; + delete [] fNegPedLimit; + delete [] fNegPedCount; + + delete [] fPosPed; + delete [] fPosSig; + delete [] fPosThresh; + + delete [] fNegPed; + delete [] fNegSig; + delete [] fNegThresh; + +// delete [] fEpos; + // delete [] fEneg; + // delete [] fEmean; } //_____________________________________________________________________________ @@ -147,8 +165,12 @@ Int_t THcShowerPlane::ReadDatabase( const TDatime& date ) {"cal_ped_sample_high", &fPedSampHigh, kInt, 0, 1}, {"cal_data_sample_low", &fDataSampLow, kInt, 0, 1}, {"cal_data_sample_high", &fDataSampHigh, kInt, 0, 1}, + {"cal_debug_adc", &fDebugAdc, kInt, 0, 1}, {0} }; + + fDebugAdc = 0; // Set ADC debug parameter to false unless set in parameter file + gHcParms->LoadParmValues((DBRequest*)&list, prefix); // Retrieve more parameters we need from parent class @@ -196,18 +218,30 @@ Int_t THcShowerPlane::ReadDatabase( const TDatime& date ) InitializePedestals(); - // ADC amplitudes per channel. + fNumGoodPosAdcHits = vector<Int_t> (fNelem, 0.0); + fNumGoodNegAdcHits = vector<Int_t> (fNelem, 0.0); + + fGoodPosAdcPulseIntRaw = vector<Double_t> (fNelem, 0.0); + fGoodNegAdcPulseIntRaw = vector<Double_t> (fNelem, 0.0); - fA_Pos = new Double_t[fNelem]; - fA_Neg = new Double_t[fNelem]; - fA_Pos_p = new Double_t[fNelem]; - fA_Neg_p = new Double_t[fNelem]; + fGoodPosAdcPed = vector<Double_t> (fNelem, 0.0); + fGoodPosAdcPulseInt = vector<Double_t> (fNelem, 0.0); + fGoodPosAdcPulseAmp = vector<Double_t> (fNelem, 0.0); + fGoodPosAdcPulseTime = vector<Double_t> (fNelem, 0.0); + + fGoodNegAdcPed = vector<Double_t> (fNelem, 0.0); + fGoodNegAdcPulseInt = vector<Double_t> (fNelem, 0.0); + fGoodNegAdcPulseAmp = vector<Double_t> (fNelem, 0.0); + fGoodNegAdcPulseTime = vector<Double_t> (fNelem, 0.0); // Energy depositions per block (not corrected for track coordinate) - fEpos = new Double_t[fNelem]; - fEneg = new Double_t[fNelem]; - fEmean= new Double_t[fNelem]; + fEpos = vector<Double_t> (fNelem, 0.0); + fEneg = vector<Double_t> (fNelem, 0.0); + fEmean = vector<Double_t> (fNelem, 0.0); + // fEpos = new Double_t[fNelem]; + // fEneg = new Double_t[fNelem]; + // fEmean= new Double_t[fNelem]; // Debug output. @@ -245,58 +279,83 @@ Int_t THcShowerPlane::DefineVariables( EMode mode ) fIsSetup = ( mode == kDefine ); // Register variables in global list - RVarDef vars[] = { - {"posadchits", "List of Positive ADC hits","fPosADCHits.THcSignalHit.GetPaddleNumber()"}, - {"negadchits", "List of Negative ADC hits","fNegADCHits.THcSignalHit.GetPaddleNumber()"}, - {"apos", "Raw Positive ADC Amplitudes", "fA_Pos"}, - {"aneg", "Raw Negative ADC Amplitudes", "fA_Neg"}, - {"apos_p", "Ped-subtracted Positive ADC Amplitudes", "fA_Pos_p"}, - {"aneg_p", "Ped-subtracted Negative ADC Amplitudes", "fA_Neg_p"}, - {"epos", "Energy Depositions from Positive Side PMTs", "fEpos"}, - {"eneg", "Energy Depositions from Negative Side PMTs", "fEneg"}, - {"emean", "Mean Energy Depositions", "fEmean"}, - {"eplane", "Energy Deposition per plane", "fEplane"}, - {"eplane_pos", "Energy Deposition per plane from pos. PMTs","fEplane_pos"}, - {"eplane_neg", "Energy Deposition per plane from neg. PMTs","fEplane_neg"}, - - {"posAdcCounter", "List of positive ADC counter numbers.", "frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, - {"negAdcCounter", "List of negative ADC counter numbers.", "frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, - - {"posAdcErrorFlag", "List of positive raw ADC Error Flags", "frPosAdcErrorFlag.THcSignalHit.GetData()"}, - {"posAdcPedRaw", "List of positive raw ADC pedestals", "frPosAdcPedRaw.THcSignalHit.GetData()"}, - {"posAdcPulseIntRaw", "List of positive raw ADC pulse integrals.", "frPosAdcPulseIntRaw.THcSignalHit.GetData()"}, - {"posAdcPulseAmpRaw", "List of positive raw ADC pulse amplitudes.", "frPosAdcPulseAmpRaw.THcSignalHit.GetData()"}, - {"posAdcPulseTimeRaw", "List of positive raw ADC pulse times.", "frPosAdcPulseTimeRaw.THcSignalHit.GetData()"}, - - {"posAdcPed", "List of positive ADC pedestals", "frPosAdcPed.THcSignalHit.GetData()"}, - {"posAdcPulseInt", "List of positive ADC pulse integrals.", "frPosAdcPulseInt.THcSignalHit.GetData()"}, - {"posAdcPulseAmp", "List of positive ADC pulse amplitudes.", "frPosAdcPulseAmp.THcSignalHit.GetData()"}, - - {"negAdcErrorFlag", "List of negative raw ADC Error Flag ", "frNegAdcErrorFlag.THcSignalHit.GetData()"}, - {"negAdcPedRaw", "List of negative raw ADC pedestals", "frNegAdcPedRaw.THcSignalHit.GetData()"}, - {"negAdcPulseIntRaw", "List of negative raw ADC pulse integrals.", "frNegAdcPulseIntRaw.THcSignalHit.GetData()"}, - {"negAdcPulseAmpRaw", "List of negative raw ADC pulse amplitudes.", "frNegAdcPulseAmpRaw.THcSignalHit.GetData()"}, - {"negAdcPulseTimeRaw", "List of negative raw ADC pulse times.", "frNegAdcPulseTimeRaw.THcSignalHit.GetData()"}, - - {"negAdcPed", "List of negative ADC pedestals", "frNegAdcPed.THcSignalHit.GetData()"}, - {"negAdcPulseInt", "List of negative ADC pulse integrals.", "frNegAdcPulseInt.THcSignalHit.GetData()"}, - {"negAdcPulseAmp", "List of negative ADC pulse amplitudes.", "frNegAdcPulseAmp.THcSignalHit.GetData()"}, - - { 0 } - }; - - return DefineVarsFromList( vars, mode ); + vector<RVarDef> vars; + + vars.push_back(RVarDef{"posAdcErrorFlag", "List of positive raw ADC Error Flags", "frPosAdcErrorFlag.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"negAdcErrorFlag", "List of negative raw ADC Error Flags ", "frNegAdcErrorFlag.THcSignalHit.GetData()"}); + + vars.push_back(RVarDef{"posAdcCounter", "List of positive ADC counter numbers.", "frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}); //PreSh+ raw occupancy + vars.push_back(RVarDef{"negAdcCounter", "List of negative ADC counter numbers.", "frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}); //PreSh- raw occupancy + + vars.push_back(RVarDef{"totNumPosAdcHits", "Total Number of Positive ADC Hits", "fTotNumPosAdcHits"}); // PreSh+ raw multiplicity + vars.push_back(RVarDef{"totNumNegAdcHits", "Total Number of Negative ADC Hits", "fTotNumNegAdcHits"}); // PreSh+ raw multiplicity + vars.push_back(RVarDef{"totnumAdcHits", "Total Number of ADC Hits Per PMT", "fTotNumAdcHits"}); // PreSh raw multiplicity + + vars.push_back(RVarDef{"numGoodPosAdcHits", "Number of Good Positive ADC Hits Per PMT", "fNumGoodPosAdcHits"}); // PreSh occupancy + vars.push_back(RVarDef{"numGoodNegAdcHits", "Number of Good Negative ADC Hits Per PMT", "fNumGoodNegAdcHits"}); // PreSh occupancy + vars.push_back(RVarDef{"totNumGoodPosAdcHits", "Total Number of Good Positive ADC Hits", "fTotNumGoodPosAdcHits"}); // PreSh multiplicity + vars.push_back(RVarDef{"totNumGoodNegAdcHits", "Total Number of Good Negative ADC Hits", "fTotNumGoodNegAdcHits"}); // PreSh multiplicity + vars.push_back(RVarDef{"totnumGoodAdcHits", "TotalNumber of Good ADC Hits Per PMT", "fTotNumGoodAdcHits"}); // PreSh multiplicity + + vars.push_back(RVarDef{"goodPosAdcPulseIntRaw", "Good Positive Raw ADC Pulse Integrals", "fGoodPosAdcPulseIntRaw"}); + vars.push_back(RVarDef{"goodNegAdcPulseIntRaw", "Good Negative Raw ADC Pulse Integrals", "fGoodNegAdcPulseIntRaw"}); + + vars.push_back(RVarDef{"goodPosAdcPed", "Good Positive ADC pedestals", "fGoodPosAdcPed"}); + vars.push_back(RVarDef{"goodPosAdcPulseInt", "Good Positive ADC integrals", "fGoodPosAdcPulseInt"}); + vars.push_back(RVarDef{"goodPosAdcPulseAmp", "Good Positive ADC amplitudes", "fGoodPosAdcPulseAmp"}); + vars.push_back(RVarDef{"goodPosAdcPulseTime", "Good Positive ADC times", "fGoodPosAdcPulseTime"}); + + vars.push_back(RVarDef{"goodNegAdcPed", "Good Negative ADC pedestals", "fGoodNegAdcPed"}); + vars.push_back(RVarDef{"goodNegAdcPulseInt", "Good Negative ADC integrals", "fGoodNegAdcPulseInt"}); + vars.push_back(RVarDef{"goodNegAdcPulseAmp", "Good Negative ADC amplitudes", "fGoodNegAdcPulseAmp"}); + vars.push_back(RVarDef{"goodNegAdcPulseTime", "Good Negative ADC times", "fGoodNegAdcPulseTime"}); + + vars.push_back(RVarDef{"epos", "Energy Depositions from Positive Side PMTs", "fEpos"}); + vars.push_back(RVarDef{"eneg", "Energy Depositions from Negative Side PMTs", "fEneg"}); + vars.push_back(RVarDef{"emean", "Mean Energy Depositions", "fEmean"}); + vars.push_back(RVarDef{"eplane", "Energy Deposition per plane", "fEplane"}); + vars.push_back(RVarDef{"eplane_pos", "Energy Deposition per plane from pos. PMTs","fEplane_pos"}); + vars.push_back(RVarDef{"eplane_neg", "Energy Deposition per plane from neg. PMTs","fEplane_neg"}); + + + if (fDebugAdc) { + vars.push_back(RVarDef{"posAdcPedRaw", "List of positive raw ADC pedestals", "frPosAdcPedRaw.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"posAdcPulseIntRaw", "List of positive raw ADC pulse integrals.", "frPosAdcPulseIntRaw.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"posAdcPulseAmpRaw", "List of positive raw ADC pulse amplitudes.", "frPosAdcPulseAmpRaw.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"posAdcPulseTimeRaw", "List of positive raw ADC pulse times.", "frPosAdcPulseTimeRaw.THcSignalHit.GetData()"}); + + vars.push_back(RVarDef{"posAdcPed", "List of positive ADC pedestals", "frPosAdcPed.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"posAdcPulseInt", "List of positive ADC pulse integrals.", "frPosAdcPulseInt.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"posAdcPulseAmp", "List of positive ADC pulse amplitudes.", "frPosAdcPulseAmp.THcSignalHit.GetData()"}); + + vars.push_back(RVarDef{"negAdcPedRaw", "List of negative raw ADC pedestals", "frNegAdcPedRaw.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"negAdcPulseIntRaw", "List of negative raw ADC pulse integrals.", "frNegAdcPulseIntRaw.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"negAdcPulseAmpRaw", "List of negative raw ADC pulse amplitudes.", "frNegAdcPulseAmpRaw.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"negAdcPulseTimeRaw", "List of negative raw ADC pulse times.", "frNegAdcPulseTimeRaw.THcSignalHit.GetData()"}); + + vars.push_back(RVarDef{"negAdcPed", "List of negative ADC pedestals", "frNegAdcPed.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"negAdcPulseInt", "List of negative ADC pulse integrals.", "frNegAdcPulseInt.THcSignalHit.GetData()"}); + vars.push_back(RVarDef{"negAdcPulseAmp", "List of negative ADC pulse amplitudes.", "frNegAdcPulseAmp.THcSignalHit.GetData()"}); + + } + + RVarDef end {0}; + vars.push_back(end); + + return DefineVarsFromList(vars.data(), mode); } //_____________________________________________________________________________ void THcShowerPlane::Clear( Option_t* ) { // Clears the hit lists + fPosADCHits->Clear(); fNegADCHits->Clear(); frPosAdcErrorFlag->Clear(); frPosAdcPedRaw->Clear(); + frPosAdcThreshold->Clear(); frPosAdcPulseIntRaw->Clear(); frPosAdcPulseAmpRaw->Clear(); frPosAdcPulseTimeRaw->Clear(); @@ -307,6 +366,7 @@ void THcShowerPlane::Clear( Option_t* ) frNegAdcErrorFlag->Clear(); frNegAdcPedRaw->Clear(); + frNegAdcThreshold->Clear(); frNegAdcPulseIntRaw->Clear(); frNegAdcPulseAmpRaw->Clear(); frNegAdcPulseTimeRaw->Clear(); @@ -315,7 +375,40 @@ void THcShowerPlane::Clear( Option_t* ) frNegAdcPulseInt->Clear(); frNegAdcPulseAmp->Clear(); - // Debug output. + for (UInt_t ielem = 0; ielem < fGoodPosAdcPed.size(); ielem++) { + fGoodPosAdcPed.at(ielem) = 0.0; + fGoodPosAdcPulseIntRaw.at(ielem) = 0.0; + fGoodPosAdcPulseInt.at(ielem) = 0.0; + fGoodPosAdcPulseAmp.at(ielem) = 0.0; + fGoodPosAdcPulseTime.at(ielem) = 0.0; + fEpos.at(ielem) = 0.0; + fNumGoodPosAdcHits.at(ielem) = 0.0; + } + + for (UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) { + fGoodNegAdcPed.at(ielem) = 0.0; + fGoodNegAdcPulseIntRaw.at(ielem) = 0.0; + fGoodNegAdcPulseInt.at(ielem) = 0.0; + fGoodNegAdcPulseAmp.at(ielem) = 0.0; + fGoodNegAdcPulseTime.at(ielem) = 0.0; + fEneg.at(ielem) = 0.0; + fNumGoodNegAdcHits.at(ielem) = 0.0; + } + + for (UInt_t ielem = 0; ielem < fEmean.size(); ielem++) { + fEmean.at(ielem) = 0.0; + } + + fTotNumAdcHits = 0; + fTotNumPosAdcHits = 0; + fTotNumNegAdcHits = 0; + + fTotNumGoodAdcHits = 0; + fTotNumGoodPosAdcHits = 0; + fTotNumGoodNegAdcHits = 0; + + + // Debug output. if ( ((THcShower*) GetParent())->fdbg_decoded_cal ) { cout << "---------------------------------------------------------------\n"; cout << "Debug output from THcShowerPlane::Clear for " @@ -374,6 +467,7 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) frPosAdcErrorFlag->Clear(); frPosAdcPedRaw->Clear(); + frPosAdcThreshold->Clear(); frPosAdcPulseIntRaw->Clear(); frPosAdcPulseAmpRaw->Clear(); frPosAdcPulseTimeRaw->Clear(); @@ -384,6 +478,7 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) frNegAdcErrorFlag->Clear(); frNegAdcPedRaw->Clear(); + frNegAdcThreshold->Clear(); frNegAdcPulseIntRaw->Clear(); frNegAdcPulseAmpRaw->Clear(); frNegAdcPulseTimeRaw->Clear(); @@ -392,15 +487,14 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) frNegAdcPulseInt->Clear(); frNegAdcPulseAmp->Clear(); - for(Int_t i=0;i<fNelem;i++) { - fA_Pos[i] = 0; - fA_Neg[i] = 0; - fA_Pos_p[i] = 0; - fA_Neg_p[i] = 0; + /* + for(Int_t i=0;i<fNelem;i++) { + fEpos[i] = 0; fEneg[i] = 0; fEmean[i] = 0; } + */ fEplane = 0; fEplane_pos = 0; @@ -430,8 +524,7 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) THcRawAdcHit& rawPosAdcHit = hit->GetRawAdcHitPos(); for (UInt_t thit=0; thit<rawPosAdcHit.GetNPulses(); ++thit) { ((THcSignalHit*) frPosAdcPedRaw->ConstructedAt(nrPosAdcHits))->Set(padnum, rawPosAdcHit.GetPedRaw()); - fPosThresh[hit->fCounter -1]=rawPosAdcHit.GetPedRaw()*rawPosAdcHit.GetF250_PeakPedestalRatio()+fAdcPosThreshold; - + ((THcSignalHit*) frPosAdcThreshold->ConstructedAt(nrPosAdcHits))->Set(padnum,rawPosAdcHit.GetPedRaw()*rawPosAdcHit.GetF250_PeakPedestalRatio()+fAdcPosThreshold); ((THcSignalHit*) frPosAdcPed->ConstructedAt(nrPosAdcHits))->Set(padnum, rawPosAdcHit.GetPed()); ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(nrPosAdcHits))->Set(padnum, rawPosAdcHit.GetPulseIntRaw(thit)); @@ -447,11 +540,14 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(nrPosAdcHits))->Set(padnum,1); } ++nrPosAdcHits; + fTotNumAdcHits++; + fTotNumPosAdcHits++; + } THcRawAdcHit& rawNegAdcHit = hit->GetRawAdcHitNeg(); for (UInt_t thit=0; thit<rawNegAdcHit.GetNPulses(); ++thit) { ((THcSignalHit*) frNegAdcPedRaw->ConstructedAt(nrNegAdcHits))->Set(padnum, rawNegAdcHit.GetPedRaw()); - fNegThresh[hit->fCounter -1]=rawNegAdcHit.GetPedRaw()*rawNegAdcHit.GetF250_PeakPedestalRatio()+fAdcNegThreshold; + ((THcSignalHit*) frNegAdcThreshold->ConstructedAt(nrNegAdcHits))->Set(padnum,rawNegAdcHit.GetPedRaw()*rawNegAdcHit.GetF250_PeakPedestalRatio()+fAdcNegThreshold); ((THcSignalHit*) frNegAdcPed->ConstructedAt(nrNegAdcHits))->Set(padnum, rawNegAdcHit.GetPed()); ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(nrNegAdcHits))->Set(padnum, rawNegAdcHit.GetPulseIntRaw(thit)); @@ -467,12 +563,13 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(nrNegAdcHits))->Set(padnum,1); } ++nrNegAdcHits; + fTotNumAdcHits++; + fTotNumNegAdcHits++; + + } - ihit++; } - - return(ihit); } //_____________________________________________________________________________ @@ -552,23 +649,23 @@ void THcShowerPlane::FillADC_Standard() for (Int_t ielem=0;ielem<frNegAdcPulseIntRaw->GetEntries();ielem++) { Int_t npad = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetPaddleNumber() - 1; Double_t pulseIntRaw = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); - fA_Neg[npad] =pulseIntRaw; - if(fA_Neg[npad] > fNegThresh[npad]) { - fA_Neg_p[npad] = pulseIntRaw-fNegPed[npad]; - fEneg[npad] = fA_Neg_p[npad]*fParent->GetGain(npad,fLayerNum-1,1); - fEmean[npad] += fEneg[npad]; - fEplane_neg += fEneg[npad]; + fGoodNegAdcPulseIntRaw.at(npad) = pulseIntRaw; + if(fGoodNegAdcPulseIntRaw.at(npad) > fNegThresh[npad]) { + fGoodNegAdcPulseInt.at(npad) = pulseIntRaw-fNegPed[npad]; + fEneg.at(npad) = fGoodNegAdcPulseInt.at(npad)*fParent->GetGain(npad,fLayerNum-1,1); + fEmean.at(npad) += fEneg.at(npad); + fEplane_neg += fEneg.at(npad); } } for (Int_t ielem=0;ielem<frPosAdcPulseIntRaw->GetEntries();ielem++) { Int_t npad = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetPaddleNumber() - 1; Double_t pulseIntRaw = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); - fA_Pos[npad] =pulseIntRaw; - if(fA_Pos[npad] > fPosThresh[npad]) { - fA_Pos_p[npad] =pulseIntRaw-fPosPed[npad] ; - fEpos[npad] = fA_Pos_p[npad]*fParent->GetGain(npad,fLayerNum-1,0); - fEmean[npad] += fEpos[npad]; - fEplane_pos += fEpos[npad]; + fGoodPosAdcPulseIntRaw.at(npad) =pulseIntRaw; + if(fGoodPosAdcPulseIntRaw.at(npad) > fPosThresh[npad]) { + fGoodPosAdcPulseInt.at(npad) =pulseIntRaw-fPosPed[npad] ; + fEpos.at(npad) =fGoodPosAdcPulseInt.at(npad)*fParent->GetGain(npad,fLayerNum-1,0); + fEmean.at(npad) += fEpos.at(npad); + fEplane_pos += fEpos.at(npad); } } fEplane= fEplane_neg+fEplane_pos; @@ -581,40 +678,68 @@ void THcShowerPlane::FillADC_DynamicPedestal() Double_t AdcTimeWindowMin=fParent->GetAdcTimeWindowMin(); Double_t AdcTimeWindowMax=fParent->GetAdcTimeWindowMax(); for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) { - Int_t npad = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; - Double_t pulseInt = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetData(); - Double_t pulseIntRaw = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); - Double_t pulseTime = ((THcSignalHit*) frNegAdcPulseTimeRaw->ConstructedAt(ielem))->GetData(); - Double_t errorflag = ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = (pulseTime > AdcTimeWindowMin) && (pulseTime < AdcTimeWindowMax); - if (errorflag==0 && pulseTimeCut) { - fA_Neg[npad] =pulseIntRaw; - if(fA_Neg[npad] > fNegThresh[npad]) { - fA_Neg_p[npad] =pulseInt ; - fEneg[npad] = fA_Neg_p[npad]*fParent->GetGain(npad,fLayerNum-1,1); - fEmean[npad] += fEneg[npad]; - fEplane_neg += fEneg[npad]; + Int_t npad = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; + Double_t pulseInt = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetData(); + Double_t pulsePed = ((THcSignalHit*) frNegAdcPed->ConstructedAt(ielem))->GetData(); + Double_t pulseAmp = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData(); + Double_t pulseIntRaw = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); + Double_t pulseTime = ((THcSignalHit*) frNegAdcPulseTimeRaw->ConstructedAt(ielem))->GetData(); + Double_t threshold = ((THcSignalHit*) frNegAdcThreshold->ConstructedAt(ielem))->GetData(); + Bool_t errorflag = ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(ielem))->GetData(); + Bool_t pulseTimeCut = (pulseTime > AdcTimeWindowMin) && (pulseTime < AdcTimeWindowMax); + if (!errorflag && pulseTimeCut) { + fGoodNegAdcPulseIntRaw.at(npad) =pulseIntRaw; + + if(fGoodNegAdcPulseIntRaw.at(npad) > threshold && fGoodNegAdcPulseInt.at(npad)==0) { + fGoodNegAdcPulseInt.at(npad) =pulseInt ; + fEneg.at(npad) = fGoodNegAdcPulseInt.at(npad)*fParent->GetGain(npad,fLayerNum-1,1); + fEmean.at(npad) += fEneg.at(npad); + fEplane_neg += fEneg.at(npad); + + fGoodNegAdcPed.at(npad) = pulsePed; + fGoodNegAdcPulseAmp.at(npad) = pulseAmp; + fGoodNegAdcPulseTime.at(npad) = pulseTime; + + fTotNumGoodAdcHits++; + fTotNumGoodNegAdcHits++; + fNumGoodNegAdcHits.at(npad)++; + } - } - } + + } + } // for (Int_t ielem=0;ielem<frPosAdcPulseInt->GetEntries();ielem++) { - Int_t npad = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; - Double_t pulseInt = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData(); - Double_t pulseIntRaw = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); - Double_t pulseTime = ((THcSignalHit*) frPosAdcPulseTimeRaw->ConstructedAt(ielem))->GetData(); - Double_t errorflag = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = pulseTime > AdcTimeWindowMin && pulseTime < AdcTimeWindowMax; - if (errorflag==0 && pulseTimeCut) { - fA_Pos[npad] =pulseIntRaw; - if(fA_Pos[npad] > fPosThresh[npad]) { - fA_Pos_p[npad] =pulseInt ; - fEpos[npad] = fA_Pos_p[npad]*fParent->GetGain(npad,fLayerNum-1,0); - fEmean[npad] += fEpos[npad]; - fEplane_pos += fEpos[npad]; - } - } + Int_t npad = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; + Double_t pulsePed = ((THcSignalHit*) frPosAdcPed->ConstructedAt(ielem))->GetData(); + Double_t threshold = ((THcSignalHit*) frPosAdcThreshold->ConstructedAt(ielem))->GetData(); + Double_t pulseAmp = ((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(ielem))->GetData(); + Double_t pulseInt = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData(); + Double_t pulseIntRaw = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); + Double_t pulseTime = ((THcSignalHit*) frPosAdcPulseTimeRaw->ConstructedAt(ielem))->GetData(); + Bool_t errorflag = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData(); + Bool_t pulseTimeCut = (pulseTime > AdcTimeWindowMin) && (pulseTime < AdcTimeWindowMax); + if (!errorflag && pulseTimeCut) { + fGoodPosAdcPulseIntRaw.at(npad) = pulseIntRaw; + + if(fGoodPosAdcPulseIntRaw.at(npad) > threshold && fGoodPosAdcPulseInt.at(npad)==0) { + + fGoodPosAdcPulseInt.at(npad) =pulseInt ; + fEpos.at(npad) = fGoodPosAdcPulseInt.at(npad)*fParent->GetGain(npad,fLayerNum-1,0); + fEmean.at(npad) += fEpos[npad]; + fEplane_pos += fEpos.at(npad); + + fGoodPosAdcPed.at(npad) = pulsePed; + fGoodPosAdcPulseAmp.at(npad) = pulseAmp; + fGoodPosAdcPulseTime.at(npad) = pulseTime; + + fTotNumGoodAdcHits++; + fTotNumGoodPosAdcHits++; + fNumGoodPosAdcHits.at(npad)++; + } + } + } // fEplane= fEplane_neg+fEplane_pos; diff --git a/src/THcShowerPlane.h b/src/THcShowerPlane.h index 1c84d1a..967bd3e 100644 --- a/src/THcShowerPlane.h +++ b/src/THcShowerPlane.h @@ -16,9 +16,11 @@ #include "TClonesArray.h" #include <iostream> - +#include <vector> #include <fstream> +using namespace std; + class THaEvData; class THaSignalHit; @@ -76,19 +78,19 @@ public: }; Double_t GetAposP(Int_t i) { - return fA_Pos_p[i]; + return fGoodPosAdcPulseInt[i]; }; Double_t GetAnegP(Int_t i) { - return fA_Neg_p[i]; + return fGoodNegAdcPulseInt[i]; }; Double_t GetApos(Int_t i) { - return fA_Pos[i]; + return fGoodPosAdcPulseIntRaw[i]; }; Double_t GetAneg(Int_t i) { - return fA_Neg[i]; + return fGoodNegAdcPulseIntRaw[i]; }; Double_t GetPosThr(Int_t i) { @@ -118,24 +120,50 @@ protected: static const Int_t kADCDynamicPedestal=1; static const Int_t kADCSampleIntegral=2; static const Int_t kADCSampIntDynPed=3; - Int_t fPedSampLow; // Sample range for + + Int_t fDebugAdc; // fADC debug flag + Int_t fPedSampLow; // Sample range for Int_t fPedSampHigh; // dynamic pedestal Int_t fDataSampLow; // Sample range for Int_t fDataSampHigh; // sample integration Double_t fAdcNegThreshold; // Double_t fAdcPosThreshold; // - Double_t* fA_Pos; // [fNelem] ADC amplitudes of blocks - Double_t* fA_Neg; // [fNelem] ADC amplitudes of blocks - Double_t* fA_Pos_p; // [fNelem] pedestal subtracted ADC amplitudes - Double_t* fA_Neg_p; // [fNelem] pedestal subtracted ADC amplitudes - - Double_t* fEpos; // [fNelem] energy depositions seen by positive PMTs - Double_t* fEneg; // [fNelem] energy depositions seen by negative PMTs - Double_t* fEmean; // [fNelem] mean energy depositions (pos + neg) - Double_t fEplane; // Energy deposition in the plane + //counting variables + Int_t fTotNumPosAdcHits; + Int_t fTotNumNegAdcHits; + Int_t fTotNumAdcHits; + + Int_t fTotNumGoodPosAdcHits; + Int_t fTotNumGoodNegAdcHits; + Int_t fTotNumGoodAdcHits; + + //individual pmt data objects + vector<Int_t> fNumGoodPosAdcHits; + vector<Int_t> fNumGoodNegAdcHits; + + vector<Double_t> fGoodPosAdcPed; + vector<Double_t> fGoodPosAdcPulseInt; + vector<Double_t> fGoodPosAdcPulseAmp; + vector<Double_t> fGoodPosAdcPulseTime; + + vector<Double_t> fGoodNegAdcPed; + vector<Double_t> fGoodNegAdcPulseInt; + vector<Double_t> fGoodNegAdcPulseAmp; + vector<Double_t> fGoodNegAdcPulseTime; + + vector<Double_t> fGoodPosAdcPulseIntRaw; + vector<Double_t> fGoodNegAdcPulseIntRaw; + + + vector<Double_t> fEpos; // [fNelem] energy depositions seen by positive PMTs + vector<Double_t> fEneg; // [fNelem] energy depositions seen by negative PMTs + vector<Double_t> fEmean; // [fNelem] mean energy depositions (pos + neg) + + Double_t fEplane_pos; // Energy deposition in the plane from positive PMTs Double_t fEplane_neg; // Energy deposition in the plane from negative PMTs + Double_t fEplane; // These lists are not used actively for now. TClonesArray* fPosADCHits; // List of positive ADC hits @@ -163,6 +191,7 @@ protected: TClonesArray* frPosAdcErrorFlag; TClonesArray* frPosAdcPedRaw; + TClonesArray* frPosAdcThreshold; TClonesArray* frPosAdcPulseIntRaw; TClonesArray* frPosAdcPulseAmpRaw; TClonesArray* frPosAdcPulseTimeRaw; @@ -173,6 +202,7 @@ protected: TClonesArray* frNegAdcErrorFlag; TClonesArray* frNegAdcPedRaw; + TClonesArray* frNegAdcThreshold; TClonesArray* frNegAdcPulseIntRaw; TClonesArray* frNegAdcPulseAmpRaw; TClonesArray* frNegAdcPulseTimeRaw; -- GitLab