25 vector<double> locBeamPeriodVector;
26 locEventLoop->GetCalib(
"PHOTON_BEAM/RF/beam_period", locBeamPeriodVector);
30 map<string, double> locCCDBMap;
31 map<string, double>::iterator locIterator;
32 if(locEventLoop->GetCalib(
"/PHOTON_BEAM/RF/time_offset", locCCDBMap))
33 jout <<
"Error loading /PHOTON_BEAM/RF/time_offset !" << endl;
34 for(locIterator = locCCDBMap.begin(); locIterator != locCCDBMap.end(); ++locIterator)
41 if(locEventLoop->GetCalib(
"/PHOTON_BEAM/RF/time_offset_var", locCCDBMap))
42 jout <<
"Error loading /PHOTON_BEAM/RF/time_offset_var !" << endl;
43 for(locIterator = locCCDBMap.begin(); locIterator != locCCDBMap.end(); ++locIterator)
50 if(locEventLoop->GetCalib(
"/PHOTON_BEAM/RF/time_resolution_sq", locCCDBMap))
51 jout <<
"Error loading /PHOTON_BEAM/RF/time_resolution_sq !" << endl;
52 for(locIterator = locCCDBMap.begin(); locIterator != locCCDBMap.end(); ++locIterator)
58 string locSystemName =
"NULL";
59 gPARMS->SetDefaultParameter(
"RF:SOURCE_SYSTEM", locSystemName);
73 vector<const DRFTDCDigiTime*> locRFTDCDigiTimes;
74 locEventLoop->Get(locRFTDCDigiTimes);
77 locEventLoop->GetSingle(locTTabUtilities);
80 map<DetectorSystem_t, vector<double> > locRFTimesMap;
83 for(
size_t loc_i = 0; loc_i < locRFTDCDigiTimes.size(); ++loc_i)
90 locRFTimesMap[locSystem].push_back(locRFTime);
93 if(locRFTimesMap.empty())
107 double locBestResolution = 9.9E9;
111 if(locRFTimesMap.find(locSystem) == locRFTimesMap.end())
113 if(locResolutionIterator->second >= locBestResolution)
115 locBestResolution = locResolutionIterator->second;
116 locBestSystem = locResolutionIterator->first;
121 map<DetectorSystem_t, vector<double> >::iterator locTimeIterator = locRFTimesMap.begin();
122 while(locTimeIterator != locRFTimesMap.end())
124 if(locTimeIterator->first != locBestSystem)
125 locRFTimesMap.erase(locTimeIterator++);
130 if(locRFTimesMap.empty())
134 double locRFTimeVariance = 0.0;
138 locRFTime->
dTime = locAverageRFTime;
140 _data.push_back(locRFTime);
152 double locDeltaT = locTimeToStepTo - locTimeToStep;
153 int locNumBucketsToShift = (locDeltaT > 0.0) ? int(locDeltaT/locPeriod + 0.5) : int(locDeltaT/locPeriod - 0.5);
154 return (locTimeToStep + locPeriod*
double(locNumBucketsToShift));
159 double locRFTime = 0.0;
165 map<DetectorSystem_t, double>::const_iterator locIterator =
dTimeOffsetMap.find(locRFTDCDigiTime->
dSystem);
167 locRFTime -= locIterator->second;
179 map<DetectorSystem_t, vector<double> >::iterator locTimeIterator = locRFTimesMap.begin();
180 double locFirstTime = (locTimeIterator->second)[0];
190 double locSumOneOverTimeVariance = 0.0;
191 double locSumTimeOverTimeVariance = 0.0;
192 for(; locTimeIterator != locRFTimesMap.end(); ++locTimeIterator)
195 vector<double>& locRFTimes = locTimeIterator->second;
198 if(!(locSingleTimeVariance > 0.0))
200 locSumOneOverTimeVariance += double(locRFTimes.size()) / locSingleTimeVariance;
202 for(
size_t loc_i = 0; loc_i < locRFTimes.size(); ++loc_i)
205 locSumTimeOverTimeVariance += locShiftedRFTime / locSingleTimeVariance;
209 if(!(locSumOneOverTimeVariance > 0.0))
211 locRFTimeVariance = numeric_limits<double>::quiet_NaN();
212 return locRFTimesMap.begin()->second.front();
215 locRFTimeVariance = 1.0 / locSumOneOverTimeVariance;
216 double locAverageRFTime = locSumTimeOverTimeVariance * locRFTimeVariance;
217 return locAverageRFTime;
double Convert_DigiTimeToNs_F1TDC(const JObject *locTDCDigiHit) const
DetectorSystem_t dOverrideRFSourceSystem
jerror_t init(void)
Called once at program start.
double Convert_DigiTimeToNs_CAEN1290TDC(const JObject *locTDCDigiHit) const
double Convert_TDCToTime(const DRFTDCDigiTime *locRFTDCDigiTime, const DTTabUtilities *locTTabUtilities) const
jerror_t fini(void)
Called after last event of last event source has been processed.
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
map< DetectorSystem_t, double > dTimeOffsetMap
double Calc_WeightedAverageRFTime(map< DetectorSystem_t, vector< double > > &locRFTimesMap, double &locRFTimeVariance) const
DetectorSystem_t NameToSystem(const char *locSystemName)
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
map< DetectorSystem_t, double > dTimeResolutionSqMap
map< DetectorSystem_t, double > dTimeOffsetVarianceMap
double Step_TimeToNearInputTime(double locTimeToStep, double locTimeToStepTo) const