diff --git a/src/THcAerogel.cxx b/src/THcAerogel.cxx index 3fa912a6682e3224e230bc8ef713322159f38b66..475873c51711564b9edd357903a0b28da804a9c2 100644 --- a/src/THcAerogel.cxx +++ b/src/THcAerogel.cxx @@ -6,6 +6,7 @@ */ #include "THcAerogel.h" +#include "THcHodoscope.h" #include "TClonesArray.h" #include "THcSignalHit.h" #include "THaEvData.h" @@ -23,6 +24,7 @@ #include "TMath.h" #include "THaTrackProj.h" #include "THcRawAdcHit.h" +#include "THcHallCSpectrometer.h" #include <cstring> #include <cstdio> @@ -190,6 +192,13 @@ THaAnalysisObject::EStatus THcAerogel::Init( const TDatime& date ) EStatus status; if( (status = THaNonTrackingDetector::Init( date )) ) return fStatus=status; + + THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus()); + if( !app || + !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) { + static const char* const here = "ReadDatabase()"; + Warning(Here(here),"Hodoscope \"%s\" not found. ","hod"); + } fPresentP = 0; THaVar* vpresent = gHaVars->Find(Form("%s.present",GetApparatus()->GetName())); @@ -274,11 +283,13 @@ Int_t THcAerogel::ReadDatabase( const TDatime& date ) fGoodPosAdcPulseIntRaw = vector<Double_t> (fNelem, 0.0); fGoodPosAdcPulseAmp = vector<Double_t> (fNelem, 0.0); fGoodPosAdcPulseTime = vector<Double_t> (fNelem, 0.0); + fGoodPosAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPed = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPulseInt = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPulseIntRaw = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPulseAmp = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPulseTime = vector<Double_t> (fNelem, 0.0); + fGoodNegAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0); // 6 GeV variables fPosTDCHits = new TClonesArray("THcSignalHit", fNelem*16); @@ -452,12 +463,14 @@ Int_t THcAerogel::DefineVariables( EMode mode ) {"goodPosAdcPulseIntRaw", "Good Negative ADC raw pulse integrals", "fGoodPosAdcPulseIntRaw"}, {"goodPosAdcPulseAmp", "Good Negative ADC pulse amplitudes", "fGoodPosAdcPulseAmp"}, {"goodPosAdcPulseTime", "Good Negative ADC pulse times", "fGoodPosAdcPulseTime"}, + {"goodPosAdcTdcDiffTime", "Good Positive hodo Start - ADC pulse times", "fGoodPosAdcTdcDiffTime"}, {"goodNegAdcPed", "Good Negative ADC pedestals", "fGoodNegAdcPed"}, {"goodNegAdcPulseInt", "Good Negative ADC pulse integrals", "fGoodNegAdcPulseInt"}, {"goodNegAdcPulseIntRaw", "Good Negative ADC raw pulse integrals", "fGoodNegAdcPulseIntRaw"}, {"goodNegAdcPulseAmp", "Good Negative ADC pulse amplitudes", "fGoodNegAdcPulseAmp"}, {"goodNegAdcPulseTime", "Good Negative ADC pulse times", "fGoodNegAdcPulseTime"}, + {"goodNegAdcTdcDiffTime", "Good Negative hodo Start - ADC pulse times", "fGoodNegAdcTdcDiffTime"}, { 0 } }; @@ -525,6 +538,7 @@ void THcAerogel::Clear(Option_t* opt) fGoodPosAdcPulseIntRaw.at(ielem) = 0.0; fGoodPosAdcPulseAmp.at(ielem) = 0.0; fGoodPosAdcPulseTime.at(ielem) = kBig; + fGoodPosAdcTdcDiffTime.at(ielem) = kBig; fPosNpe.at(ielem) = 0.0; } for (UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) { @@ -533,6 +547,7 @@ void THcAerogel::Clear(Option_t* opt) fGoodNegAdcPulseIntRaw.at(ielem) = 0.0; fGoodNegAdcPulseAmp.at(ielem) = 0.0; fGoodNegAdcPulseTime.at(ielem) = kBig; + fGoodNegAdcTdcDiffTime.at(ielem) = kBig; fNegNpe.at(ielem) = 0.0; } @@ -657,6 +672,8 @@ Int_t THcAerogel::ApplyCorrections( void ) //_____________________________________________________________________________ Int_t THcAerogel::CoarseProcess( TClonesArray& ) //tracks { + Double_t StartTime = 0.0; + if( fglHod ) StartTime = fglHod->GetStartTime(); // Loop over the elements in the TClonesArray for(Int_t ielem = 0; ielem < frPosAdcPulseInt->GetEntries(); ielem++) { @@ -667,8 +684,9 @@ Int_t THcAerogel::CoarseProcess( TClonesArray& ) //tracks Double_t pulseIntRaw = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); Double_t pulseAmp = ((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frPosAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; Bool_t errorFlag = ((THcSignalHit*) fPosAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = pulseTime > fAdcTimeWindowMin && pulseTime < fAdcTimeWindowMax; + Bool_t pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin && adctdcdiffTime < fAdcTimeWindowMax; // By default, the last hit within the timing cut will be considered "good" if (!errorFlag && pulseTimeCut) { @@ -677,6 +695,7 @@ Int_t THcAerogel::CoarseProcess( TClonesArray& ) //tracks fGoodPosAdcPulseIntRaw.at(npmt) = pulseIntRaw; fGoodPosAdcPulseAmp.at(npmt) = pulseAmp; fGoodPosAdcPulseTime.at(npmt) = pulseTime; + fGoodPosAdcTdcDiffTime.at(npmt) = adctdcdiffTime; fPosNpe.at(npmt) = fPosGain[npmt]*fGoodPosAdcPulseInt.at(npmt); fPosNpeSum += fPosNpe.at(npmt); @@ -696,8 +715,9 @@ Int_t THcAerogel::CoarseProcess( TClonesArray& ) //tracks Double_t pulseIntRaw = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); Double_t pulseAmp = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frNegAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; Bool_t errorFlag = ((THcSignalHit*) fNegAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = pulseTime > fAdcTimeWindowMin && pulseTime < fAdcTimeWindowMax; + Bool_t pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin && adctdcdiffTime < fAdcTimeWindowMax; // By default, the last hit within the timing cut will be considered "good" if (!errorFlag && pulseTimeCut) { @@ -706,6 +726,7 @@ Int_t THcAerogel::CoarseProcess( TClonesArray& ) //tracks fGoodNegAdcPulseIntRaw.at(npmt) = pulseIntRaw; fGoodNegAdcPulseAmp.at(npmt) = pulseAmp; fGoodNegAdcPulseTime.at(npmt) = pulseTime; + fGoodNegAdcTdcDiffTime.at(npmt) = adctdcdiffTime; fNegNpe.at(npmt) = fNegGain[npmt]*fGoodNegAdcPulseInt.at(npmt); fNegNpeSum += fNegNpe.at(npmt); diff --git a/src/THcAerogel.h b/src/THcAerogel.h index 6fb8e403f835a6f540907e46bb98e128dfa1e3d0..b084123101a0579cf55db6b13f47b16147fb12d3 100644 --- a/src/THcAerogel.h +++ b/src/THcAerogel.h @@ -11,6 +11,7 @@ #include "THaNonTrackingDetector.h" #include "THcHitList.h" #include "THcAerogelHit.h" +class THcHodoscope; class THcAerogel : public THaNonTrackingDetector, public THcHitList { @@ -113,11 +114,13 @@ class THcAerogel : public THaNonTrackingDetector, public THcHitList { vector<Double_t> fGoodPosAdcPulseIntRaw; vector<Double_t> fGoodPosAdcPulseAmp; vector<Double_t> fGoodPosAdcPulseTime; + vector<Double_t> fGoodPosAdcTdcDiffTime; vector<Double_t> fGoodNegAdcPed; vector<Double_t> fGoodNegAdcPulseInt; vector<Double_t> fGoodNegAdcPulseIntRaw; vector<Double_t> fGoodNegAdcPulseAmp; vector<Double_t> fGoodNegAdcPulseTime; + vector<Double_t> fGoodNegAdcTdcDiffTime; // 6 GeV era variables Int_t fAnalyzePedestals; @@ -166,6 +169,7 @@ class THcAerogel : public THaNonTrackingDetector, public THcHitList { void Setup(const char* name, const char* description); virtual void InitializePedestals( ); + THcHodoscope* fglHod; // Hodoscope to get start time ClassDef(THcAerogel,0) // Generic aerogel class } diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx index 27d081d391ea449cd18c1327de3d3eafa69b0cbe..a8e4dc644925d90451d916606de8d7d7ac070083 100644 --- a/src/THcCherenkov.cxx +++ b/src/THcCherenkov.cxx @@ -6,6 +6,7 @@ */ #include "THcCherenkov.h" +#include "THcHodoscope.h" #include "TClonesArray.h" #include "THcSignalHit.h" #include "THaEvData.h" @@ -22,6 +23,7 @@ #include "TClonesArray.h" #include "TMath.h" #include "THaTrackProj.h" +#include "THcHallCSpectrometer.h" #include <algorithm> #include <cstring> @@ -31,6 +33,7 @@ #include <string> #include <iomanip> + using namespace std; using std::cout; @@ -65,6 +68,7 @@ THcCherenkov::THcCherenkov( const char* name, const char* description, fGoodAdcPulseIntRaw = vector<Double_t> (MaxNumCerPmt, 0.0); fGoodAdcPulseAmp = vector<Double_t> (MaxNumCerPmt, 0.0); fGoodAdcPulseTime = vector<Double_t> (MaxNumCerPmt, 0.0); + fGoodAdcTdcDiffTime = vector<Double_t> (MaxNumCerPmt, 0.0); InitArrays(); } @@ -152,6 +156,13 @@ THaAnalysisObject::EStatus THcCherenkov::Init( const TDatime& date ) if((status = THaNonTrackingDetector::Init( date ))) return fStatus=status; + THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus()); + if( !app || + !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) { + static const char* const here = "ReadDatabase()"; + Warning(Here(here),"Hodoscope \"%s\" not found. ","hod"); + } + fPresentP = 0; THaVar* vpresent = gHaVars->Find(Form("%s.present",GetApparatus()->GetName())); if(vpresent) { @@ -290,7 +301,8 @@ Int_t THcCherenkov::DefineVariables( EMode mode ) {"goodAdcPulseIntRaw", "Good ADC raw pulse integrals", "fGoodAdcPulseIntRaw"}, {"goodAdcPulseAmp", "Good ADC pulse amplitudes", "fGoodAdcPulseAmp"}, {"goodAdcPulseTime", "Good ADC pulse times", "fGoodAdcPulseTime"}, - { 0 } + {"goodAdcTdcDiffTime", "Good Hodo Start - ADC pulse times", "fGoodAdcTdcDiffTime"}, + { 0 } }; return DefineVarsFromList(vars, mode); @@ -336,6 +348,7 @@ void THcCherenkov::Clear(Option_t* opt) fGoodAdcPulseIntRaw.at(ielem) = 0.0; fGoodAdcPulseAmp.at(ielem) = 0.0; fGoodAdcPulseTime.at(ielem) = kBig; + fGoodAdcTdcDiffTime.at(ielem) = kBig; fNpe.at(ielem) = 0.0; } @@ -406,6 +419,8 @@ Int_t THcCherenkov::ApplyCorrections( void ) //_____________________________________________________________________________ Int_t THcCherenkov::CoarseProcess( TClonesArray& ) { + Double_t StartTime = 0.0; + if( fglHod ) StartTime = fglHod->GetStartTime(); // Loop over the elements in the TClonesArray for(Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) { @@ -416,8 +431,9 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray& ) Double_t pulseIntRaw = ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData(); - Bool_t errorFlag = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = pulseTime > fAdcTimeWindowMin && pulseTime < fAdcTimeWindowMax; + Double_t adctdcdiffTime = StartTime-pulseTime; + Bool_t errorFlag = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData(); + Bool_t pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin && adctdcdiffTime < fAdcTimeWindowMax; // By default, the last hit within the timing cut will be considered "good" if (!errorFlag && pulseTimeCut) { @@ -426,6 +442,7 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray& ) fGoodAdcPulseIntRaw.at(npmt) = pulseIntRaw; fGoodAdcPulseAmp.at(npmt) = pulseAmp; fGoodAdcPulseTime.at(npmt) = pulseTime; + fGoodAdcTdcDiffTime.at(npmt) = adctdcdiffTime; fNpe.at(npmt) = fGain[npmt]*fGoodAdcPulseInt.at(npmt); fNpeSum += fNpe.at(npmt); diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h index 0c83a6c3aa066dd083dd538e93a373e70365d29a..3ea8c93565bc582d165cb431d3e7aa7768656d70 100644 --- a/src/THcCherenkov.h +++ b/src/THcCherenkov.h @@ -11,6 +11,7 @@ #include "THaNonTrackingDetector.h" #include "THcHitList.h" #include "THcCherenkovHit.h" +class THcHodoscope; class THcCherenkov : public THaNonTrackingDetector, public THcHitList { @@ -65,6 +66,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList { vector<Double_t> fGoodAdcPulseIntRaw; vector<Double_t> fGoodAdcPulseAmp; vector<Double_t> fGoodAdcPulseTime; + vector<Double_t> fGoodAdcTdcDiffTime; vector<Double_t> fNpe; Int_t fNRegions; @@ -110,6 +112,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList { void Setup(const char* name, const char* description); virtual void InitializePedestals( ); + THcHodoscope* fglHod; // Hodoscope to get start time ClassDef(THcCherenkov,0) // Generic cherenkov class }; diff --git a/src/THcShowerArray.cxx b/src/THcShowerArray.cxx index aca7f40565b95969aed38658cc471221ee1036d4..80a69bc27d9aa9a414285e89bb4f8f96c19fd824 100644 --- a/src/THcShowerArray.cxx +++ b/src/THcShowerArray.cxx @@ -6,6 +6,7 @@ */ #include "THcShowerArray.h" +#include "THcHodoscope.h" #include "TClonesArray.h" #include "THcSignalHit.h" #include "THcGlobals.h" @@ -107,6 +108,12 @@ THaAnalysisObject::EStatus THcShowerArray::Init( const TDatime& date ) // How to get information for parent // if( GetParent() ) // fOrigin = GetParent()->GetOrigin(); + THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus()); + if( !app || + !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) { + static const char* const here = "ReadDatabase()"; + Warning(Here(here),"Hodoscope \"%s\" not found. ","hod"); + } EStatus status; if( (status=THaSubDetector::Init( date )) ) @@ -346,6 +353,7 @@ Int_t THcShowerArray::ReadDatabase( const TDatime& date ) fGoodAdcPulseInt = vector<Double_t> (fNelem, 0.0); fGoodAdcPulseAmp = vector<Double_t> (fNelem, 0.0); fGoodAdcPulseTime = vector<Double_t> (fNelem, 0.0); + fGoodAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0); fBlock_ClusterID = new Int_t[fNelem]; @@ -431,6 +439,7 @@ Int_t THcShowerArray::DefineVariables( EMode mode ) {"goodAdcPulseInt", "Good ADC Pulse Integrals", "fGoodAdcPulseInt"}, //this is defined as pulseInt, which is the pedestal subtracted pulse integrals, and is defined if threshold is passed {"goodAdcPulseAmp", "Good ADC Pulse Amplitudes", "fGoodAdcPulseAmp"}, {"goodAdcPulseTime", "Good ADC Pulse Times", "fGoodAdcPulseTime"}, //this is defined as pulseInt, which is the pedestal subtracted pulse integrals, and is defined if threshold is passed + {"goodAdcTdcDiffTime", "Good Hodo Starttime - ADC Pulse Times", "fGoodAdcTdcDiffTime"}, {"e", "Energy Depositions per block", "fE"}, //defined as fE = fA_p*fGain = pulseInt * Gain @@ -484,6 +493,7 @@ void THcShowerArray::Clear( Option_t* ) fGoodAdcPulseInt.at(ielem) = 0.0; fGoodAdcPulseAmp.at(ielem) = 0.0; fGoodAdcPulseTime.at(ielem) = kBig; + fGoodAdcTdcDiffTime.at(ielem) = kBig; fNumGoodAdcHits.at(ielem) = 0.0; fE.at(ielem) = 0.0; } @@ -849,6 +859,8 @@ void THcShowerArray::FillADC_Standard() //_____________________________________________________________________________ void THcShowerArray::FillADC_DynamicPedestal() { + Double_t StartTime = 0.0; + if( fglHod ) StartTime = fglHod->GetStartTime(); for (Int_t ielem=0;ielem<frAdcPulseInt->GetEntries();ielem++) { Int_t npad = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; @@ -857,8 +869,9 @@ void THcShowerArray::FillADC_DynamicPedestal() Double_t pulseInt = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData(); Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; Bool_t errorflag = ((THcSignalHit*) frAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = (pulseTime > fAdcTimeWindowMin) && (pulseTime < fAdcTimeWindowMax); + Bool_t pulseTimeCut = (adctdcdiffTime > fAdcTimeWindowMin) && (adctdcdiffTime < fAdcTimeWindowMax); if (!errorflag && pulseTimeCut) { @@ -874,6 +887,7 @@ void THcShowerArray::FillADC_DynamicPedestal() fGoodAdcPed.at(npad) = pulsePed; fGoodAdcPulseAmp.at(npad) = pulseAmp; fGoodAdcPulseTime.at(npad) = pulseTime; + fGoodAdcTdcDiffTime.at(npad) = adctdcdiffTime; fNumGoodAdcHits.at(npad) = npad + 1; } diff --git a/src/THcShowerArray.h b/src/THcShowerArray.h index 8c7033dd99a60d1ed9fdf64d14f5161944bcfd23..40edca47fbfc24e6dbc7665619cd9923d1c99a8e 100644 --- a/src/THcShowerArray.h +++ b/src/THcShowerArray.h @@ -27,6 +27,7 @@ class THaEvData; class THaSignalHit; +class THcHodoscope; class THcShowerArray : public THaSubDetector { @@ -113,6 +114,7 @@ protected: vector<Double_t> fGoodAdcPulseInt; // [fNelem] good pedestal subtracted pulse integrals vector<Double_t> fGoodAdcPulseAmp; vector<Double_t> fGoodAdcPulseTime; + vector<Double_t> fGoodAdcTdcDiffTime; vector<Double_t> fE; //[fNelem] energy deposition in shower blocks @@ -208,6 +210,7 @@ protected: virtual Int_t ReadDatabase( const TDatime& date ); virtual Int_t DefineVariables( EMode mode = kDefine ); + THcHodoscope* fglHod; // Hodoscope to get start time ClassDef(THcShowerArray,0); // Fly;s Eye calorimeter array }; diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx index be73ef5afe69965234cb0013902fee935be6e70e..6f75b54a902b996a119f42515e15a98e8bba8841 100644 --- a/src/THcShowerPlane.cxx +++ b/src/THcShowerPlane.cxx @@ -6,6 +6,7 @@ One plane of shower blocks with side readout */ #include "THcShowerPlane.h" +#include "THcHodoscope.h" #include "TClonesArray.h" #include "THcSignalHit.h" #include "THcGlobals.h" @@ -152,6 +153,12 @@ THaAnalysisObject::EStatus THcShowerPlane::Init( const TDatime& date ) cout << "****** THcShowerPlane::Accumulate will be skipped ******" << endl; } + if( !app || + !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) { + static const char* const here = "ReadDatabase()"; + Warning(Here(here),"Hodoscope \"%s\" not found. ","hod"); + } + EStatus status; if( (status=THaSubDetector::Init( date )) ) return fStatus = status; @@ -253,11 +260,13 @@ Int_t THcShowerPlane::ReadDatabase( const TDatime& date ) fGoodPosAdcPulseInt = vector<Double_t> (fNelem, 0.0); fGoodPosAdcPulseAmp = vector<Double_t> (fNelem, 0.0); fGoodPosAdcPulseTime = vector<Double_t> (fNelem, 0.0); + fGoodPosAdcTdcDiffTime = 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); + fGoodNegAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0); // Energy depositions per block (not corrected for track coordinate) @@ -375,11 +384,13 @@ Int_t THcShowerPlane::DefineVariables( EMode mode ) {"goodPosAdcPulseInt", "Good Positive ADC integrals", "fGoodPosAdcPulseInt"}, {"goodPosAdcPulseAmp", "Good Positive ADC amplitudes", "fGoodPosAdcPulseAmp"}, {"goodPosAdcPulseTime","Good Positive ADC times", "fGoodPosAdcPulseTime"}, + {"goodPosAdcTdcDiffTime","Good Positive Hodo Start time-ADC times", "fGoodPosAdcTdcDiffTime"}, {"goodNegAdcPed", "Good Negative ADC pedestals", "fGoodNegAdcPed"}, {"goodNegAdcPulseInt", "Good Negative ADC integrals", "fGoodNegAdcPulseInt"}, {"goodNegAdcPulseAmp", "Good Negative ADC amplitudes", "fGoodNegAdcPulseAmp"}, {"goodNegAdcPulseTime","Good Negative ADC times", "fGoodNegAdcPulseTime"}, + {"goodNegAdcTdcDiffTime","Good Negative Hodo Start time-ADC times", "fGoodNegAdcTdcDiffTime"}, {"epos", "Energy Depositions from Positive Side PMTs", "fEpos"}, {"eneg", "Energy Depositions from Negative Side PMTs", "fEneg"}, @@ -431,6 +442,7 @@ void THcShowerPlane::Clear( Option_t* ) fGoodPosAdcPulseInt.at(ielem) = 0.0; fGoodPosAdcPulseAmp.at(ielem) = 0.0; fGoodPosAdcPulseTime.at(ielem) = kBig; + fGoodPosAdcTdcDiffTime.at(ielem) = kBig; fEpos.at(ielem) = 0.0; fNumGoodPosAdcHits.at(ielem) = 0.0; } @@ -441,6 +453,7 @@ void THcShowerPlane::Clear( Option_t* ) fGoodNegAdcPulseInt.at(ielem) = 0.0; fGoodNegAdcPulseAmp.at(ielem) = 0.0; fGoodNegAdcPulseTime.at(ielem) = kBig; + fGoodNegAdcTdcDiffTime.at(ielem) = kBig; fEneg.at(ielem) = 0.0; fNumGoodNegAdcHits.at(ielem) = 0.0; } @@ -723,6 +736,8 @@ void THcShowerPlane::FillADC_Standard() //_____________________________________________________________________________ void THcShowerPlane::FillADC_DynamicPedestal() { + Double_t StartTime = 0.0; + if( fglHod ) StartTime = fglHod->GetStartTime(); Double_t AdcTimeWindowMin=static_cast<THcShower*>(fParent)->GetAdcTimeWindowMin(); Double_t AdcTimeWindowMax=static_cast<THcShower*>(fParent)->GetAdcTimeWindowMax(); for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) { @@ -732,9 +747,10 @@ void THcShowerPlane::FillADC_DynamicPedestal() Double_t pulseAmp = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t pulseIntRaw = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frNegAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; Double_t threshold = ((THcSignalHit*) frNegAdcThreshold->ConstructedAt(ielem))->GetData(); Bool_t errorflag = ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = (pulseTime > AdcTimeWindowMin) && (pulseTime < AdcTimeWindowMax); + Bool_t pulseTimeCut = (adctdcdiffTime > AdcTimeWindowMin) && (adctdcdiffTime < AdcTimeWindowMax); if (!errorflag && pulseTimeCut) { fGoodNegAdcPulseIntRaw.at(npad) =pulseIntRaw; @@ -747,6 +763,7 @@ void THcShowerPlane::FillADC_DynamicPedestal() fGoodNegAdcPed.at(npad) = pulsePed; fGoodNegAdcPulseAmp.at(npad) = pulseAmp; fGoodNegAdcPulseTime.at(npad) = pulseTime; + fGoodNegAdcTdcDiffTime.at(npad) = adctdcdiffTime; fTotNumGoodAdcHits++; fTotNumGoodNegAdcHits++; @@ -765,8 +782,9 @@ void THcShowerPlane::FillADC_DynamicPedestal() Double_t pulseInt = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData(); Double_t pulseIntRaw = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frPosAdcPulseTime->ConstructedAt(ielem))->GetData(); - Bool_t errorflag = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = (pulseTime > AdcTimeWindowMin) && (pulseTime < AdcTimeWindowMax); + Double_t adctdcdiffTime = StartTime-pulseTime; + Bool_t errorflag = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData(); + Bool_t pulseTimeCut = (adctdcdiffTime > AdcTimeWindowMin) && (adctdcdiffTime < AdcTimeWindowMax); if (!errorflag && pulseTimeCut) { fGoodPosAdcPulseIntRaw.at(npad) = pulseIntRaw; @@ -780,6 +798,7 @@ void THcShowerPlane::FillADC_DynamicPedestal() fGoodPosAdcPed.at(npad) = pulsePed; fGoodPosAdcPulseAmp.at(npad) = pulseAmp; fGoodPosAdcPulseTime.at(npad) = pulseTime; + fGoodPosAdcTdcDiffTime.at(npad) = adctdcdiffTime; fTotNumGoodAdcHits++; fTotNumGoodPosAdcHits++; diff --git a/src/THcShowerPlane.h b/src/THcShowerPlane.h index ef68eca2e026c029127b9eaf94060e26dc8c2984..29a06e6156e3a0846a0276db17d8653b3a9df883 100644 --- a/src/THcShowerPlane.h +++ b/src/THcShowerPlane.h @@ -24,6 +24,7 @@ using namespace std; class THaEvData; class THaSignalHit; +class THcHodoscope; class THcShowerPlane : public THaSubDetector { @@ -153,11 +154,13 @@ protected: vector<Double_t> fGoodPosAdcPulseInt; vector<Double_t> fGoodPosAdcPulseAmp; vector<Double_t> fGoodPosAdcPulseTime; + vector<Double_t> fGoodPosAdcTdcDiffTime; vector<Double_t> fGoodNegAdcPed; vector<Double_t> fGoodNegAdcPulseInt; vector<Double_t> fGoodNegAdcPulseAmp; vector<Double_t> fGoodNegAdcPulseTime; + vector<Double_t> fGoodNegAdcTdcDiffTime; vector<Double_t> fGoodPosAdcPulseIntRaw; vector<Double_t> fGoodNegAdcPulseIntRaw; @@ -237,6 +240,8 @@ protected: vector<Int_t> fStatNumHit; Int_t fTotStatNumTrk; Int_t fTotStatNumHit; + + THcHodoscope* fglHod; // Hodoscope to get start time ClassDef(THcShowerPlane,0); // Calorimeter bars in a plane };