Hall-D Software
alpha
|
Go to the source code of this file.
Namespaces | |
ExtractTrackBasedTimingNS | |
Functions | |
TH1I * | ExtractTrackBasedTimingNS::Get1DHistogram (const char *plugin, const char *directoryName, const char *name) |
TH2I * | ExtractTrackBasedTimingNS::Get2DHistogram (const char *plugin, const char *directoryName, const char *name) |
void | GetCCDBConstants (TString path, Int_t run, TString variation, vector< double > &container, Int_t column=1) |
void | GetCCDBConstants1 (TString path, Int_t run, TString variation, double &constant1) |
void | GetCCDBConstants2 (TString path, Int_t run, TString variation, double &constant1, double &constant2) |
int | GetCCDBIndexTAGM (unsigned int column, unsigned int row) |
int | GetF1TDCslotTAGH (int id) |
void | FindFDCPackageChamber (int plane, int &package, int &chamber) |
void | AdjustTiming (TString fileName="hd_root.root", int runNumber=10390, TString variation="default", bool verbose=false, TString prefix="") |
void AdjustTiming | ( | TString | fileName = "hd_root.root" , |
int | runNumber = 10390 , |
||
TString | variation = "default" , |
||
bool | verbose = false , |
||
TString | prefix = "" |
||
) |
DISABLE this - microscope calibrations are mostly handled in TAGM_TW. just need to align the main peak
if (useRF) thisHist = ExtractTrackBasedTimingNS::Get2DHistogram("HLDetectorTiming", "TRACKING", "TAGM - RFBunch Time"); if (thisHist != NULL){ Statistics on these histograms are really quite low we will have to rebin and do some interpolation outFile.open(prefix + "tagm_tdc_timing_offsets.txt", ios::out | ios::trunc); outFile.close(); // clear file outFile.open(prefix + "tagm_adc_timing_offsets.txt", ios::out | ios::trunc); outFile.close(); // clear file int nBinsX = thisHist->GetNbinsX(); int nBinsY = thisHist->GetNbinsY(); TH1D * selectedTAGMOffset = new TH1D("selectedTAGMOffset", "Selected TAGM Offset; Column; Offset [ns]", nBinsX, 0.5, nBinsX + 0.5); TH1I * TAGMOffsetDistribution = new TH1I("TAGMOffsetDistribution", "TAGM Offset; TAGM Offset [ns]; Entries", 500, -250, 250); for (int i = 1 ; i <= nBinsX; i++){ TH1D *projY = thisHist->ProjectionY("temp", i, i); Scan over the histogram chose the correct number of bins based on the histogram float nsPerBin = (projY->GetBinCenter(projY->GetNbinsX()) - projY->GetBinCenter(1)) / projY->GetNbinsX(); float timeWindow = 3; //ns (Full Width) int binWindow = int(timeWindow / nsPerBin); double maxEntries = 0; double maxMean = 0; for (int j = 1 ; j <= projY->GetNbinsX();j++){ int minBin = j; int maxBin = (j + binWindow) <= projY->GetNbinsX() ? (j + binWindow) : projY->GetNbinsX(); double sum = 0, nEntries = 0; for (int bin = minBin; bin <= maxBin; bin++){ sum += projY->GetBinContent(bin) * projY->GetBinCenter(bin); nEntries += projY->GetBinContent(bin); if (bin == maxBin){ if (nEntries > maxEntries) { maxMean = sum / nEntries; maxEntries = nEntries; } } } } In the case there is RF, our job is to pick just the number of the correct beam bunch, so that's really all we need. if(useRF) { int beamBucket = int((maxMean / RF_Period) + 0.5); // +0.5 to handle rounding correctly selectedTAGMOffset->SetBinContent(i, beamBucket); TAGMOffsetDistribution->Fill(beamBucket); } else{ selectedTAGMOffset->SetBinContent(i, maxMean); TAGMOffsetDistribution->Fill(maxMean); } } double meanOffset = TAGMOffsetDistribution->GetMean(); This might be in units of beam bunches, so we need to convert if (useRF) meanOffset *= RF_Period; if (verbose) { cout << "Dumping TAGM results...\n=======================================" << endl; cout << "TAGM mean Offset = " << meanOffset << endl; cout << "fADC Offsets" << endl; }
outFile.open(prefix + "tagm_adc_timing_offsets.txt", ios::out); for (int i = 1 ; i <= nBinsX; i++){ Loop over rows if (verbose) cout << "Column\tRow\tvalueToUse\toldValue\tmeanOffset\tTotal" << endl; for (unsigned int column = 1; column <= 102; column++){ int index = GetCCDBIndexTAGM(column, 0); double valueToUse = selectedTAGMOffset->GetBinContent(index); if (useRF) valueToUse *= RF_Period;
if (valueToUse == 0) valueToUse = meanOffset; outFile << "0 " << column << " " << valueToUse + tagm_fadc_time_offsets[index-1] - meanOffset<< endl; if (verbose) printf("0\t%i\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\n", column, valueToUse, tagm_fadc_time_offsets[index-1], meanOffset, valueToUse + tagm_fadc_time_offsets[index-1] - meanOffset); if (column == 9 || column == 27 || column == 81 || column == 99){ for (unsigned int row = 1; row <= 5; row++){ index = GetCCDBIndexTAGM(column, row); valueToUse = selectedTAGMOffset->GetBinContent(index); if (useRF) valueToUse *= RF_Period; if (valueToUse == 0) valueToUse = meanOffset; outFile << row << " " << column << " " << valueToUse + tagm_fadc_time_offsets[index-1] - meanOffset<< endl; if (verbose) printf("%i\t%i\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\n", row, column, valueToUse, tagm_fadc_time_offsets[index-1], meanOffset, valueToUse + tagm_fadc_time_offsets[index-1] - meanOffset); } } } outFile.close();
if (verbose) { cout << "TDC Offsets" << endl; cout << "Column\tRow\tvalueToUse\toldValue\tmeanOffset\tTotal" << endl; } outFile.open(prefix + "tagm_tdc_timing_offsets.txt", ios::out); for (int i = 1 ; i <= nBinsX; i++){ Loop over rows for (unsigned int column = 1; column <= 102; column++){ int index = GetCCDBIndexTAGM(column, 0); double valueToUse = selectedTAGMOffset->GetBinContent(index); if (useRF) valueToUse *= RF_Period; if (valueToUse == 0) valueToUse = meanOffset; outFile << "0 " << column << " " << valueToUse + tagm_tdc_time_offsets[index-1] - meanOffset << endl; if (verbose) printf("0\t%i\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\n", column, valueToUse, tagm_tdc_time_offsets[index-1], meanOffset, valueToUse + tagm_tdc_time_offsets[index-1] - meanOffset); if (column == 9 || column == 27 || column == 81 || column == 99){ for (unsigned int row = 1; row <= 5; row++){ index = GetCCDBIndexTAGM(column, row); valueToUse = selectedTAGMOffset->GetBinContent(index); if (useRF) valueToUse *= RF_Period; if (valueToUse == 0) valueToUse = meanOffset; outFile << row << " " << column << " " << valueToUse + tagm_tdc_time_offsets[index-1] - meanOffset << endl; if (verbose) printf("%i\t%i\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\n", row, column, valueToUse, tagm_tdc_time_offsets[index-1], meanOffset, valueToUse + tagm_tdc_time_offsets[index-1] - meanOffset); } } } outFile.close(); outFile.open(prefix + "tagm_base_time.txt", ios::out); if (verbose) { printf("TAGM ADC Base = %f - (%f) = %f\n", tagm_t_base_fadc, meanOffset, tagm_t_base_fadc - meanOffset); printf("TAGM TDC Base = %f - (%f) = %f\n", tagm_t_base_tdc, meanOffset, tagm_t_base_tdc - meanOffset); } outFile << tagm_t_base_fadc - meanOffset << " " << tagm_t_base_tdc - meanOffset << endl; outFile.close();
}
Definition at line 114 of file monitoring/timing_online/FitScripts/AdjustTiming.C.
References f, FindFDCPackageChamber(), ExtractTrackBasedTimingNS::Get1DHistogram(), ExtractTrackBasedTimingNS::Get2DHistogram(), GetCCDBConstants(), GetCCDBConstants1(), GetCCDBConstants2(), outFile, p0, printf(), sigma, sprintf(), sum, and ExtractTrackBasedTimingNS::thisFile.
void FindFDCPackageChamber | ( | int | plane, |
int & | package, | ||
int & | chamber | ||
) |
Definition at line 108 of file monitoring/timing_online/FitScripts/AdjustTiming.C.
void GetCCDBConstants | ( | TString | path, |
Int_t | run, | ||
TString | variation, | ||
vector< double > & | container, | ||
Int_t | column = 1 |
||
) |
void GetCCDBConstants1 | ( | TString | path, |
Int_t | run, | ||
TString | variation, | ||
double & | constant1 | ||
) |
Definition at line 53 of file monitoring/timing_online/FitScripts/AdjustTiming.C.
void GetCCDBConstants2 | ( | TString | path, |
Int_t | run, | ||
TString | variation, | ||
double & | constant1, | ||
double & | constant2 | ||
) |
Definition at line 72 of file monitoring/timing_online/FitScripts/AdjustTiming.C.
int GetCCDBIndexTAGM | ( | unsigned int | column, |
unsigned int | row | ||
) |
Definition at line 91 of file monitoring/timing_online/FitScripts/AdjustTiming.C.
int GetF1TDCslotTAGH | ( | int | id | ) |
Definition at line 101 of file monitoring/timing_online/FitScripts/AdjustTiming.C.