Skip to content
Snippets Groups Projects
Commit 30c8c0ea authored by hallc-online's avatar hallc-online
Browse files

Modified THcCherenkov.cxx and THcCherenkov.h

Add array fADC_hit that is a flag if there is a hit in the ADC
fADC_hit is set in Decode method
The FADC has a threshold on accepting ADC hit
Modified CoarseProcess method to eliminate old FASTBUS bias in the analysis
parent 43a133a2
No related branches found
No related tags found
No related merge requests found
...@@ -60,9 +60,8 @@ THcCherenkov::THcCherenkov( const char* name, const char* description, ...@@ -60,9 +60,8 @@ THcCherenkov::THcCherenkov( const char* name, const char* description,
frAdcPulseInt = new TClonesArray("THcSignalHit", 16); frAdcPulseInt = new TClonesArray("THcSignalHit", 16);
frAdcPulseAmp = new TClonesArray("THcSignalHit", 16); frAdcPulseAmp = new TClonesArray("THcSignalHit", 16);
cout << "fADCHits " << fADCHits << endl;
InitArrays(); InitArrays();
cout << "fADCHits " << fADCHits << endl;
} }
...@@ -183,6 +182,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date ) ...@@ -183,6 +182,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
fCerNRegions = 3; fCerNRegions = 3;
fNPMT = new Int_t[fNelem]; fNPMT = new Int_t[fNelem];
fADC_hit = new Int_t[fNelem];
fADC = new Double_t[fNelem]; fADC = new Double_t[fNelem];
fADC_P = new Double_t[fNelem]; fADC_P = new Double_t[fNelem];
fNPE = new Double_t[fNelem]; fNPE = new Double_t[fNelem];
...@@ -192,15 +192,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date ) ...@@ -192,15 +192,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
fPedLimit = new Int_t[fNelem]; fPedLimit = new Int_t[fNelem];
fPedMean = new Double_t[fNelem]; fPedMean = new Double_t[fNelem];
fNPMT = new Int_t[fNelem];
fADC = new Double_t[fNelem];
fADC_P = new Double_t[fNelem];
fNPE = new Double_t[fNelem];
fCerWidth = new Double_t[fNelem];
fGain = new Double_t[fNelem];
fPedLimit = new Int_t[fNelem];
fPedMean = new Double_t[fNelem];
fCerTrackCounter = new Int_t [fCerNRegions]; fCerTrackCounter = new Int_t [fCerNRegions];
fCerFiredCounter = new Int_t [fCerNRegions]; fCerFiredCounter = new Int_t [fCerNRegions];
...@@ -265,6 +257,7 @@ Int_t THcCherenkov::DefineVariables( EMode mode ) ...@@ -265,6 +257,7 @@ Int_t THcCherenkov::DefineVariables( EMode mode )
RVarDef vars[] = { RVarDef vars[] = {
{"phototubes", "Nuber of Cherenkov photo tubes", "fNPMT"}, {"phototubes", "Nuber of Cherenkov photo tubes", "fNPMT"},
{"adc", "Raw ADC values", "fADC"}, {"adc", "Raw ADC values", "fADC"},
{"adc_hit", "ADC hit flag =1 means hit", "fADC_hit"},
{"adc_p", "Pedestal Subtracted ADC values", "fADC_P"}, {"adc_p", "Pedestal Subtracted ADC values", "fADC_P"},
{"npe", "Number of Photo electrons", "fNPE"}, {"npe", "Number of Photo electrons", "fNPE"},
{"npesum", "Sum of Number of Photo electrons", "fNPEsum"}, {"npesum", "Sum of Number of Photo electrons", "fNPEsum"},
...@@ -297,7 +290,7 @@ void THcCherenkov::Clear(Option_t* opt) ...@@ -297,7 +290,7 @@ void THcCherenkov::Clear(Option_t* opt)
// Clear Cherenkov variables from h_trans_cer.f // Clear Cherenkov variables from h_trans_cer.f
fNhits = 0; // Don't really need to do this. (Be sure this called before Decode) fNhits = 0;
fNPEsum = 0.0; fNPEsum = 0.0;
fNCherHit = 0; fNCherHit = 0;
...@@ -306,7 +299,8 @@ void THcCherenkov::Clear(Option_t* opt) ...@@ -306,7 +299,8 @@ void THcCherenkov::Clear(Option_t* opt)
fADC[itube] = 0; fADC[itube] = 0;
fADC_P[itube] = 0; fADC_P[itube] = 0;
fNPE[itube] = 0; fNPE[itube] = 0;
} fADC_hit[itube] = 0;
}
frAdcPedRaw->Clear(); frAdcPedRaw->Clear();
frAdcPulseIntRaw->Clear(); frAdcPulseIntRaw->Clear();
...@@ -359,7 +353,8 @@ Int_t THcCherenkov::Decode( const THaEvData& evdata ) ...@@ -359,7 +353,8 @@ Int_t THcCherenkov::Decode( const THaEvData& evdata )
((THcSignalHit*) frAdcPulseAmp->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseAmp(thit)); ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseAmp(thit));
((THcSignalHit*) frAdcPulseTimeRaw->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseTimeRaw(thit)); ((THcSignalHit*) frAdcPulseTimeRaw->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseTimeRaw(thit));
fADC_hit[padnum-1]=1; //
// cout << dec << "thit = " << thit << " " << padnum << " " << rawAdcHit.GetPulseInt(thit)<< " " << rawAdcHit.GetPulseIntRaw(thit) << " " << rawAdcHit.GetPedRaw() << " " << rawAdcHit.GetPedRaw()*28./4.<< endl;
++nrAdcHits; ++nrAdcHits;
} }
...@@ -388,35 +383,16 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray& ) //tracks ...@@ -388,35 +383,16 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray& ) //tracks
// Pedestal subtraction and gain adjustment // Pedestal subtraction and gain adjustment
// An ADC value of less than zero occurs when that particular
// channel has been sparsified away and has not been read.
// The NPE for that tube will be assigned zero by this code.
// An ADC value of greater than 8192 occurs when the ADC overflows on
// an input that is too large. Tubes with this characteristic will
// be assigned NPE = 100.0.
Int_t npmt = hit->fCounter - 1; // tube = hcer_tube_num(nhit) Int_t npmt = hit->fCounter - 1; // tube = hcer_tube_num(nhit)
// Should probably check that npmt is in range
// if ( ihit != npmt )
// cout << "ihit != npmt, ihit = " << ihit << ", npmt = " << npmt << ", fNhits = " << fNhits << endl;
fNPMT[npmt] = hit->fCounter; fNPMT[npmt] = hit->fCounter;
fADC[npmt] = hit->GetRawAdcHitPos().GetPulseIntRaw(); fADC[npmt] = hit->GetRawAdcHitPos().GetPulseIntRaw();
fADC_P[npmt] = hit->GetRawAdcHitPos().GetPulseIntRaw() - fPedMean[npmt]; fADC_P[npmt] = hit->GetRawAdcHitPos().GetPulseInt();
if ( ( fADC_P[npmt] > fCerWidth[npmt] ) && ( hit->GetRawAdcHitPos().GetPulseIntRaw() < 8000 ) ) {
fNPE[npmt] = fGain[npmt]*fADC_P[npmt];
fNCherHit ++;
} else if ( hit->GetRawAdcHitPos().GetPulseIntRaw() > 8000 ) {
fNPE[npmt] = 100.0;
} else {
fNPE[npmt] = 0.0;
}
fNPE[npmt] = fGain[npmt]*fADC_P[npmt];
fNCherHit ++;
fNPEsum += fNPE[npmt]; fNPEsum += fNPE[npmt];
} }
ApplyCorrections();
return 0; return 0;
} }
......
...@@ -51,6 +51,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList { ...@@ -51,6 +51,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
// Event information // Event information
Int_t fNhits; Int_t fNhits;
Int_t* fADC_hit; // [fNelem] Array of flag if ADC hit 1 means
Int_t* fNPMT; // [fNelem] Array of ADC amplitudes Int_t* fNPMT; // [fNelem] Array of ADC amplitudes
Double_t* fADC; // [fNelem] Array of ADC amplitudes Double_t* fADC; // [fNelem] Array of ADC amplitudes
Double_t* fADC_P; // [fNelem] Array of ADC amplitudes Double_t* fADC_P; // [fNelem] Array of ADC amplitudes
......
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