Skip to content
Snippets Groups Projects
Commit 4ffdc1aa authored by Stephen A. Wood's avatar Stephen A. Wood
Browse files

Use nominal particle mass in central and per track beta calculation

parent 3ba84214
No related branches found
No related tags found
No related merge requests found
......@@ -50,6 +50,11 @@ public:
Bool_t SetTrSorting( Bool_t set = kFALSE );
Bool_t GetTrSorting() const;
// Mass of nominal detected particle type
Double_t GetParticleMass() const {return fPartMass; }
Double_t GetBetaAtPcentral() const { return
fPcentral/TMath::Sqrt(fPcentral*fPcentral+fPartMass*fPartMass);}
protected:
void InitializeReconstruction();
......
......@@ -175,6 +175,10 @@ void THcHodoscope::Setup(const char* name, const char* description)
gHcParms->Define(Form("%shodo_did",prefix),"Total hodo tracks",fScinDid);
gHcParms->Define(Form("%shodo_should",prefix),"Total hodo triggers",fScinShould);
// Save the nominal particle mass
fPartMass = app->GetParticleMass();
fBetaNominal = app->GetBetaAtPcentral();
delete [] desc;
}
......@@ -752,10 +756,9 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
Int_t fJMax, fMaxHit;
Int_t fRawIndex = -1;
Double_t fScinTrnsCoord, fScinLongCoord, fScinCenter, fSumfpTime, fSlope;
Double_t fP, fXcoord, fYcoord, fTMin, fBestXpScin, fBestYpScin;
Double_t fXcoord, fYcoord, fTMin, fBestXpScin, fBestYpScin;
// -------------------------------------------------
Double_t hpartmass=0.00051099; // Fix it
fGoodScinHits = 0;
fScinShould = 0; fScinDid = 0;
......@@ -786,8 +789,8 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
// fTimeAtFP[itrack] = 0.;
fSumfpTime = 0.; // Line 138
fNScinHit.push_back(0);
fP = theTrack->GetP(); // Line 142
Double_t betaP = fP/( TMath::Sqrt( fP * fP + hpartmass * hpartmass) );
Double_t p = theTrack->GetP(); // Line 142
Double_t betaP = p/( TMath::Sqrt( p * p + fPartMass * fPartMass) );
//! Calculate all corrected hit times and histogram
//! This uses a copy of code below. Results are save in time_pos,neg
......
......@@ -58,6 +58,7 @@ public:
Double_t GetTdcMax() const {return fScinTdcMax;}
Double_t GetTofTolerance() const {return fTofTolerance;}
Double_t GetTdcToTime() const {return fScinTdcToTime;}
Double_t GetBetaNominal() const {return fBetaNominal;}
Double_t GetHodoPosPhcCoeff(Int_t iii) const {return fHodoPosPhcCoeff[iii];}
Double_t GetHodoNegPhcCoeff(Int_t iii) const {return fHodoNegPhcCoeff[iii];}
Double_t GetHodoPosMinPh(Int_t iii) const {return fHodoPosMinPh[iii];}
......@@ -135,6 +136,9 @@ protected:
Double_t* fHodoPosInvAdcAdc;
Double_t* fHodoNegInvAdcAdc;
Double_t fPartMass; // Nominal particle mass
Double_t fBetaNominal; // Beta for central ray of nominal particle type
THcScintillatorPlane** fPlanes; // List of plane objects
TClonesArray* fTrackProj; // projection of track onto scintillator plane
......
......@@ -374,7 +374,7 @@ Int_t THcScintillatorPlane::PulseHeightCorrection()
Double_t pos_ph[53],neg_ph[53],postime[53],negtime[53],scin_corrected_time[53]; // the 53 should go in a param file (was hmax_scin_hits originally)
// Bool_t keep_pos[53],keep_neg[53]; // are these all really needed?
Bool_t two_good_times[53];
Double_t dist_from_center,scint_center,hit_position,time_pos[100],time_neg[100],hbeta_pcent;
Double_t dist_from_center,scint_center,hit_position,time_pos[100],time_neg[100];
Int_t timehist[200],jmax,maxhit,nfound=0; // This seems as a pretty old-fashioned way of doing things. Is there a better way?
......@@ -397,9 +397,8 @@ Int_t THcScintillatorPlane::PulseHeightCorrection()
maxtdc=((THcHodoscope *)GetParent())->GetTdcMax();
tdctotime=((THcHodoscope *)GetParent())->GetTdcToTime();
toftolerance=((THcHodoscope *)GetParent())->GetTofTolerance();
// hbeta_pcent=(TH((THcHodoscope *)GetParent())->GetParent()
// Horrible hack until I find out where to get the central beta from momentum!! GN
hbeta_pcent=1.0;
Double_t betanominal=((THcHodoscope *)GetParent())->GetBetaNominal();
fpTime=-1e5;
for (i=0;i<fNScinHits;i++) {
if ((((THcSignalHit*) fPosTDCHits->At(i))->GetData()>=mintdc) &&
......@@ -440,8 +439,8 @@ Int_t THcScintillatorPlane::PulseHeightCorrection()
postime[i]=postime[i]-(fPosLeft-hit_position)/((THcHodoscope *)GetParent())->GetHodoVelLight(index);
negtime[i]=negtime[i]-(hit_position-fPosRight)/((THcHodoscope *)GetParent())->GetHodoVelLight(index);
time_pos[i]=postime[i]-(fZpos+(j%2)*fDzpos)/(29.979*hbeta_pcent);
time_neg[i]=negtime[i]-(fZpos+(j%2)*fDzpos)/(29.979*hbeta_pcent);
time_pos[i]=postime[i]-(fZpos+(j%2)*fDzpos)/(29.979*betanominal);
time_neg[i]=negtime[i]-(fZpos+(j%2)*fDzpos)/(29.979*betanominal);
nfound++;
for (int k=0;k<200;k++) {
tmin=0.5*(k+1);
......@@ -521,7 +520,7 @@ Int_t THcScintillatorPlane::PulseHeightCorrection()
j=((THcSignalHit*)fNegTDCHits->At(i))->GetPaddleNumber()-1;
index=((THcHodoscope *)GetParent())->GetScinIndex(fPlaneNum-1,j);
if (two_good_times[i]) { // both tubes fired
fpTimes[fNScinGoodHits]=scin_corrected_time[i]-(fZpos+(j%2)*fDzpos)/(29.979*hbeta_pcent);
fpTimes[fNScinGoodHits]=scin_corrected_time[i]-(fZpos+(j%2)*fDzpos)/(29.979*betanominal);
fScinTime[fNScinGoodHits]=scin_corrected_time[i];
fScinSigma[fNScinGoodHits]=TMath::Sqrt(((THcHodoscope *)GetParent())->GetHodoPosSigma(index)*((THcHodoscope *)GetParent())->GetHodoPosSigma(index)+((THcHodoscope *)GetParent())->GetHodoNegSigma(index)*((THcHodoscope *)GetParent())->GetHodoNegSigma(index)); // not ideal by any stretch!!!
fScinZpos[fNScinGoodHits]=fZpos+(j%2)*fDzpos; // see comment above
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment