From 6b3151222cee55b04ca8121e43b41715b0cb7869 Mon Sep 17 00:00:00 2001 From: "Stephen A. Wood" <zviwood@gmail.com> Date: Mon, 31 Oct 2016 19:59:22 -0400 Subject: [PATCH] Restore ability to use old style TOF parameters. Default is to use new "invadc" parameters. Use old style by setting Xtofusinginvadc=0 --- examples/PARAM/general.param | 2 +- examples/PARAM/hhodo.param | 4 +- examples/PARAM/hhodo.param_v1 | 2 +- examples/PARAM/shodo.param | 1 + src/THcHodoscope.cxx | 34 +++++++++----- src/THcScintillatorPlane.cxx | 85 ++++++++++++++++++++++------------- src/THcScintillatorPlane.h | 13 +++--- 7 files changed, 90 insertions(+), 51 deletions(-) diff --git a/examples/PARAM/general.param b/examples/PARAM/general.param index f6d2f37..5383e6c 100644 --- a/examples/PARAM/general.param +++ b/examples/PARAM/general.param @@ -23,7 +23,7 @@ raddeg=3.14159265/180 #include "PARAM/sdc.pos" #include "PARAM/shodo.pos" #include "PARAM/scal.pos" -#include "PARAM/hhodo.param_v1" +#include "PARAM/hhodo.param" #include "PARAM/haero.param" #include "PARAM/hdc.param" #include "PARAM/hdriftmap.param" diff --git a/examples/PARAM/hhodo.param b/examples/PARAM/hhodo.param index 18f69a6..3305be2 100644 --- a/examples/PARAM/hhodo.param +++ b/examples/PARAM/hhodo.param @@ -11,7 +11,7 @@ ; new variable for picking good hits for tof fitting ; this should not be set tight until you are ready to fit ; tof and you figured out good values - htof_tolerance = 3.0 + htof_tolerance = 30.0 ; ; hms_tof_params ; hnum_scin_counters, hhodo_zpos, hhodo_center_coord, hhodo_width @@ -284,3 +284,5 @@ hhodo_neg_invadc_adc= 0.00, 0.00, 33.27, 0.00 78.19, 0.00, 51.72, 0.00 75.03, 0.00, 49.34, 0.00 0.00, 0.00, 53.40, 0.00 + +htofusinginvadc=0 diff --git a/examples/PARAM/hhodo.param_v1 b/examples/PARAM/hhodo.param_v1 index 80d5863..b4e2672 100644 --- a/examples/PARAM/hhodo.param_v1 +++ b/examples/PARAM/hhodo.param_v1 @@ -181,7 +181,7 @@ hhodo_neg_ped_limit = 1000,1000,1000,1000,1000,1000,1000,1000 ; use htofusinginvadc=1 if want invadc_offset ; invadc_linear, and invadc_adc to be used -htofusinginvadc=1 +htofusinginvadc=0 hhodo_pos_invadc_offset = 0.00, 0.00, -7.49, 0.00 0.00, -3.93, -1.33, 6.35 diff --git a/examples/PARAM/shodo.param b/examples/PARAM/shodo.param index 681cfd9..56e7cd0 100644 --- a/examples/PARAM/shodo.param +++ b/examples/PARAM/shodo.param @@ -190,3 +190,4 @@ shodo_neg_time_offset = -4.3414, -4.2570, 5.1140, -22.1772 1000,1000,1000,1000,1000,1000,1000,1000 1000,1000,1000,1000,1000,1000,1000,1000 +stofusinginvadc=0 diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx index bc5a6d8..185e097 100644 --- a/src/THcHodoscope.cxx +++ b/src/THcHodoscope.cxx @@ -1001,11 +1001,18 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) Double_t adc_pos = hit->GetPosADC(); Double_t pathp = fPlanes[ip]->GetPosLeft() - scinLongCoord; fTOFPInfo[ihhit].pathp = pathp; - Double_t timep = tdc_pos*fScinTdcToTime - - fHodoPosInvAdcOffset[fPIndex] - - pathp/fHodoPosInvAdcLinear[fPIndex] - - fHodoPosInvAdcAdc[fPIndex] - /TMath::Sqrt(TMath::Max(20.0,adc_pos)); + Double_t timep = tdc_pos*fScinTdcToTime; + if(fTofUsingInvAdc) { + timep -= fHodoPosInvAdcOffset[fPIndex] + + pathp/fHodoPosInvAdcLinear[fPIndex] + + fHodoPosInvAdcAdc[fPIndex] + /TMath::Sqrt(TMath::Max(20.0,adc_pos)); + } else { + timep -= fHodoPosPhcCoeff[fPIndex]* + TMath::Sqrt(TMath::Max(0.0,adc_pos/fHodoPosMinPh[fPIndex]-1.0)) + + pathp/fHodoVelLight[fPIndex] + + fHodoPosTimeOffset[fPIndex]; + } fTOFPInfo[ihhit].scin_pos_time = timep; timep -= zcor; fTOFPInfo[ihhit].time_pos = timep; @@ -1022,11 +1029,18 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) Double_t adc_neg = hit->GetNegADC(); Double_t pathn = scinLongCoord - fPlanes[ip]->GetPosRight(); fTOFPInfo[ihhit].pathn = pathn; - Double_t timen = tdc_neg*fScinTdcToTime - - fHodoNegInvAdcOffset[fPIndex] - - pathn/fHodoNegInvAdcLinear[fPIndex] - - fHodoNegInvAdcAdc[fPIndex] - /TMath::Sqrt(TMath::Max(20.0,adc_neg)); + Double_t timen = tdc_neg*fScinTdcToTime; + if(fTofUsingInvAdc) { + timen -= fHodoNegInvAdcOffset[fPIndex] + + pathn/fHodoNegInvAdcLinear[fPIndex] + + fHodoNegInvAdcAdc[fPIndex] + /TMath::Sqrt(TMath::Max(20.0,adc_neg)); + } else { + timen -= fHodoNegPhcCoeff[fPIndex]* + TMath::Sqrt(TMath::Max(0.0,adc_neg/fHodoNegMinPh[fPIndex]-1.0)) + + pathn/fHodoVelLight[fPIndex] + + fHodoNegTimeOffset[fPIndex]; + } fTOFPInfo[ihhit].scin_neg_time = timen; timen -= zcor; fTOFPInfo[ihhit].time_neg = timen; diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx index 4d3270d..ee48bb8 100644 --- a/src/THcScintillatorPlane.cxx +++ b/src/THcScintillatorPlane.cxx @@ -66,12 +66,12 @@ THcScintillatorPlane::~THcScintillatorPlane() delete [] fScinZpos; delete [] fPosCenter; - // delete [] fHodoPosMinPh; fHodoPosMinPh = NULL; - // delete [] fHodoNegMinPh; fHodoNegMinPh = NULL; - // delete [] fHodoPosPhcCoeff; fHodoPosPhcCoeff = NULL; - // delete [] fHodoNegPhcCoeff; fHodoNegPhcCoeff = NULL; - // delete [] fHodoPosTimeOffset; fHodoPosTimeOffset = NULL; - // delete [] fHodoNegTimeOffset; fHodoNegTimeOffset = NULL; + delete [] fHodoPosMinPh; fHodoPosMinPh = NULL; + delete [] fHodoNegMinPh; fHodoNegMinPh = NULL; + delete [] fHodoPosPhcCoeff; fHodoPosPhcCoeff = NULL; + delete [] fHodoNegPhcCoeff; fHodoNegPhcCoeff = NULL; + delete [] fHodoPosTimeOffset; fHodoPosTimeOffset = NULL; + delete [] fHodoNegTimeOffset; fHodoNegTimeOffset = NULL; delete [] fHodoPosInvAdcOffset; fHodoPosInvAdcOffset = NULL; delete [] fHodoNegInvAdcOffset; fHodoNegInvAdcOffset = NULL; delete [] fHodoPosInvAdcLinear; fHodoPosInvAdcLinear = NULL; @@ -154,8 +154,11 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date ) {Form("scin_%s_%s",GetName(),tmpright), &fPosRight,kDouble}, {Form("scin_%s_offset",GetName()), &fPosOffset, kDouble}, {Form("scin_%s_center",GetName()), fPosCenter,kDouble,fNelem}, + {"tofusinginvadc", &fTofUsingInvAdc, kInt, 0, 1}, {0} }; + + fTofUsingInvAdc = 1; gHcParms->LoadParmValues((DBRequest*)&list,prefix); // fetch the parameter from the temporary list @@ -171,12 +174,12 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date ) fStartTimeCenter=((THcHodoscope *)GetParent())->GetStartTimeCenter(); fStartTimeSlop=((THcHodoscope *)GetParent())->GetStartTimeSlop(); // Parameters for this plane - // fHodoPosMinPh = new Double_t[fNelem]; - // fHodoNegMinPh = new Double_t[fNelem]; - // fHodoPosPhcCoeff = new Double_t[fNelem]; - // fHodoNegPhcCoeff = new Double_t[fNelem]; - // fHodoPosTimeOffset = new Double_t[fNelem]; - // fHodoNegTimeOffset = new Double_t[fNelem]; + fHodoPosMinPh = new Double_t[fNelem]; + fHodoNegMinPh = new Double_t[fNelem]; + fHodoPosPhcCoeff = new Double_t[fNelem]; + fHodoNegPhcCoeff = new Double_t[fNelem]; + fHodoPosTimeOffset = new Double_t[fNelem]; + fHodoNegTimeOffset = new Double_t[fNelem]; fHodoVelLight = new Double_t[fNelem]; fHodoPosInvAdcOffset = new Double_t[fNelem]; fHodoNegInvAdcOffset = new Double_t[fNelem]; @@ -187,12 +190,12 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date ) fHodoSigma = new Double_t[fNelem]; for(Int_t j=0;j<(Int_t) fNelem;j++) { Int_t index=((THcHodoscope *)GetParent())->GetScinIndex(fPlaneNum-1,j); - // fHodoPosMinPh[j] = ((THcHodoscope *)GetParent())->GetHodoPosMinPh(index); - // fHodoNegMinPh[j] = ((THcHodoscope *)GetParent())->GetHodoNegMinPh(index); - // fHodoPosPhcCoeff[j] = ((THcHodoscope *)GetParent())->GetHodoPosPhcCoeff(index); - // fHodoNegPhcCoeff[j] = ((THcHodoscope *)GetParent())->GetHodoNegPhcCoeff(index); - // fHodoPosTimeOffset[j] = ((THcHodoscope *)GetParent())->GetHodoPosTimeOffset(index); - // fHodoNegTimeOffset[j] = ((THcHodoscope *)GetParent())->GetHodoNegTimeOffset(index); + fHodoPosMinPh[j] = ((THcHodoscope *)GetParent())->GetHodoPosMinPh(index); + fHodoNegMinPh[j] = ((THcHodoscope *)GetParent())->GetHodoNegMinPh(index); + fHodoPosPhcCoeff[j] = ((THcHodoscope *)GetParent())->GetHodoPosPhcCoeff(index); + fHodoNegPhcCoeff[j] = ((THcHodoscope *)GetParent())->GetHodoNegPhcCoeff(index); + fHodoPosTimeOffset[j] = ((THcHodoscope *)GetParent())->GetHodoPosTimeOffset(index); + fHodoNegTimeOffset[j] = ((THcHodoscope *)GetParent())->GetHodoNegTimeOffset(index); fHodoPosInvAdcOffset[j] = ((THcHodoscope *)GetParent())->GetHodoPosInvAdcOffset(index); fHodoNegInvAdcOffset[j] = ((THcHodoscope *)GetParent())->GetHodoNegInvAdcOffset(index); fHodoPosInvAdcLinear[j] = ((THcHodoscope *)GetParent())->GetHodoPosInvAdcLinear(index); @@ -402,12 +405,22 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) if(btdcraw_pos && btdcraw_neg) { // Do the pulse height correction to the time. (Position dependent corrections later) - Double_t timec_pos = tdc_pos*fScinTdcToTime - - fHodoPosInvAdcOffset[index] - - fHodoPosInvAdcAdc[index]/TMath::Sqrt(TMath::Max(20.0,adc_pos)); - Double_t timec_neg = tdc_neg*fScinTdcToTime - - fHodoNegInvAdcOffset[index] - - fHodoNegInvAdcAdc[index]/TMath::Sqrt(TMath::Max(20.0,adc_neg)); + Double_t timec_pos, timec_neg; + if(fTofUsingInvAdc) { + timec_pos = tdc_pos*fScinTdcToTime + - fHodoPosInvAdcOffset[index] + - fHodoPosInvAdcAdc[index]/TMath::Sqrt(TMath::Max(20.0,adc_pos)); + timec_neg = tdc_neg*fScinTdcToTime + - fHodoNegInvAdcOffset[index] + - fHodoNegInvAdcAdc[index]/TMath::Sqrt(TMath::Max(20.0,adc_neg)); + } else { // Old style + timec_pos = tdc_pos*fScinTdcToTime - fHodoPosPhcCoeff[index]* + TMath::Sqrt(TMath::Max(0.0,adc_pos/fHodoPosMinPh[index]-1.0)) + - fHodoPosTimeOffset[index]; + timec_neg = tdc_neg*fScinTdcToTime - fHodoNegPhcCoeff[index]* + TMath::Sqrt(TMath::Max(0.0,adc_neg/fHodoNegMinPh[index]-1.0)) + - fHodoNegTimeOffset[index]; + } // Find hit position using ADCs // If postime larger, then hit was nearer negative side. // Some incarnations use fixed velocity of 15 cm/nsec @@ -418,14 +431,22 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) hit_position=TMath::Min(hit_position,fPosLeft); hit_position=TMath::Max(hit_position,fPosRight); // Position depenent time corrections - timec_pos -= (fPosLeft-hit_position)/ - fHodoPosInvAdcLinear[index]; - timec_neg -= (hit_position-fPosRight)/ - fHodoNegInvAdcLinear[index]; - Double_t scin_corrected_time = 0.5*(timec_pos+timec_neg); - Double_t postime = timec_pos - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal); - Double_t negtime = timec_neg - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal); - + Double_t scin_corrected_time, postime, negtime; + if(fTofUsingInvAdc) { + timec_pos -= (fPosLeft-hit_position)/ + fHodoPosInvAdcLinear[index]; + timec_neg -= (hit_position-fPosRight)/ + fHodoNegInvAdcLinear[index]; + scin_corrected_time = 0.5*(timec_pos+timec_neg); + postime = timec_pos - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal); + negtime = timec_neg - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal); + } else { + postime=timec_pos-(fPosLeft-hit_position)/fHodoVelLight[index]; + negtime=timec_neg-(hit_position-fPosRight)/fHodoVelLight[index]; + scin_corrected_time = 0.5*(postime+negtime); + postime = postime-(fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal); + negtime = negtime-(fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal); + } ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetCorrectedTimes(timec_pos,timec_neg, postime, negtime, scin_corrected_time); diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h index c83fa43..270db31 100644 --- a/src/THcScintillatorPlane.h +++ b/src/THcScintillatorPlane.h @@ -94,12 +94,13 @@ class THcScintillatorPlane : public THaSubDetector { Double_t fScinTdcToTime; Double_t fTofTolerance; Double_t fBetaNominal; - // Double_t *fHodoPosMinPh; // Minimum pulse height per paddle for this plane - // Double_t *fHodoNegMinPh; // Minimum pulse height per paddle for this plane - // Double_t *fHodoPosPhcCoeff; // Pulse height to time coefficient per paddle for this plane - // Double_t *fHodoNegPhcCoeff; // Pulse height to time coefficient per paddlefor this plane - // Double_t *fHodoPosTimeOffset; - // Double_t *fHodoNegTimeOffset; + Double_t *fHodoPosMinPh; // Minimum pulse height per paddle for this plane + Double_t *fHodoNegMinPh; // Minimum pulse height per paddle for this plane + Double_t *fHodoPosPhcCoeff; // Pulse height to time coefficient per paddle for this plane + Double_t *fHodoNegPhcCoeff; // Pulse height to time coefficient per paddlefor this plane + Double_t *fHodoPosTimeOffset; + Double_t *fHodoNegTimeOffset; + Int_t fTofUsingInvAdc; Double_t *fHodoVelLight; Double_t *fHodoPosInvAdcOffset; Double_t *fHodoNegInvAdcOffset; -- GitLab