Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
monitoring/timing_online/FitScripts/AdjustTiming.C File Reference

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="")
 

Function Documentation

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 
)
void GetCCDBConstants ( TString  path,
Int_t  run,
TString  variation,
vector< double > &  container,
Int_t  column = 1 
)

Definition at line 27 of file monitoring/timing_online/FitScripts/AdjustTiming.C.

References column, counter, run, and sprintf().

void GetCCDBConstants1 ( TString  path,
Int_t  run,
TString  variation,
double &  constant1 
)

Definition at line 53 of file monitoring/timing_online/FitScripts/AdjustTiming.C.

References run, and sprintf().

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.

References run, and sprintf().

int GetCCDBIndexTAGM ( unsigned int  column,
unsigned int  row 
)
int GetF1TDCslotTAGH ( int  id)