Compute the mean and the RMS of the t0 from the maps and write them to the DB with channel granularity.
286 cout <<
"[DTT0CalibrationPerLayer]Writing histos to file!" << endl;
292 wHisto.second.Write();
295 lHisto.second.Write();
299 cout <<
"[DTT0Calibration] Compute and store t0 and sigma per wire" << endl;
303 auto& wireId = wiret0.first;
317 auto unweighted_mean_function = [](
const std::list<double>&
values,
const std::list<double>& sigmas) {
319 for (
auto&
value : values) {
322 mean /= values.size();
324 double uncertainty = 0;
325 for (
auto&
value : values) {
326 uncertainty +=
pow(
value - mean, 2);
328 uncertainty /= values.size();
329 uncertainty =
sqrt(uncertainty);
330 return std::make_pair(mean, uncertainty);
334 std::map<DTSuperLayerId, std::pair<double, double> > mean_sigma_even;
335 std::map<DTSuperLayerId, std::pair<double, double> > mean_sigma_odd;
336 for (
const auto& superlayer :
dtGeom->superLayers()) {
337 const auto superlayer_id = superlayer->id();
338 std::list<double> values_even;
339 std::list<double> sigmas_even;
340 std::list<double> values_odd;
341 std::list<double> sigmas_odd;
343 for (
const auto& wiret0 : theAbsoluteT0PerWire) {
344 const auto& wireId = wiret0.first;
345 if (wireId.layerId().superlayerId() == superlayer_id) {
347 if (wireId.layerId().layer() % 2) {
348 values_odd.push_back(
t0);
351 values_even.push_back(
t0);
357 mean_sigma_even.emplace(superlayer_id, unweighted_mean_function(values_even, sigmas_even));
358 mean_sigma_odd.emplace(superlayer_id, unweighted_mean_function(values_odd, sigmas_odd));
362 for (
const auto& superlayer :
dtGeom->superLayers()) {
363 const auto superlayer_id = superlayer->id();
364 std::list<double> values_even;
365 std::list<double> sigmas_even;
366 std::list<double> values_odd;
367 std::list<double> sigmas_odd;
369 for (
const auto& wiret0 : theAbsoluteT0PerWire) {
370 const auto& wireId = wiret0.first;
371 if (wireId.layerId().superlayerId() == superlayer_id) {
373 if (wireId.layerId().layer() % 2 and
374 abs(
t0 - mean_sigma_odd[superlayer_id].
first) < 2 * mean_sigma_odd[superlayer_id].second) {
375 values_odd.push_back(
t0);
378 if (
abs(
t0 - mean_sigma_even[superlayer_id].
first) < 2 * mean_sigma_even[superlayer_id].
second) {
379 values_even.push_back(
t0);
386 mean_sigma_even[superlayer_id] = unweighted_mean_function(values_even, sigmas_even);
387 mean_sigma_odd[superlayer_id] = unweighted_mean_function(values_odd, sigmas_odd);
391 for (
auto& wiret0 : theAbsoluteT0PerWire) {
392 const auto& wire_id = wiret0.first;
393 const auto& superlayer_id = wiret0.first.layerId().superlayerId();
394 const auto&
layer = wiret0.first.layerId().layer();
395 auto&
t0 = wiret0.second;
400 t0 += mean_sigma_even[superlayer_id].first - mean_sigma_odd[superlayer_id].first;
402 pow(mean_sigma_odd[superlayer_id].
second, 2) +
pow(mean_sigma_even[superlayer_id].
second, 2);
406 std::map<DTChamberId, std::list<double> > values_per_chamber;
407 std::map<DTChamberId, std::list<double> > sigmas_per_chamber;
408 for (
const auto& wire_t0 : theAbsoluteT0PerWire) {
409 const auto& wire_id = wire_t0.first;
410 const auto& chamber_id = wire_id.chamberId();
411 const auto&
t0 = wire_t0.second;
412 values_per_chamber[chamber_id].push_back(
t0);
416 std::map<DTChamberId, std::pair<double, double> > mean_per_chamber;
417 for (
const auto& chamber_mean : values_per_chamber) {
418 const auto& chamber_id = chamber_mean.first;
419 const auto&
means = chamber_mean.second;
420 const auto& sigmas = sigmas_per_chamber[chamber_id];
421 mean_per_chamber.emplace(chamber_id, unweighted_mean_function(
means, sigmas));
425 for (
const auto& wire_t0 : theAbsoluteT0PerWire) {
426 const auto& wire_id = wire_t0.first;
427 const auto& chamber_id = wire_id.chamberId();
428 const auto&
t0 = wire_t0.second;
431 <<
" (relative, after even-odd layer corrections) "
436 const auto& wire_id = wire_t0.first;
437 const auto&
t0 = wire_t0.second;
443 cout <<
"[DTT0Calibration]Writing values in DB!" << endl;
445 string t0Record =
"DTT0Rcd";
448 delete t0sWRTChamber;
int set(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, float t0mean, float t0rms, DTTimeUnits::type unit)
std::map< DTLayerId, TH1I > theHistoLayerMap
std::map< DTWireId, double > theAbsoluteT0PerWire
static void writeToDB(std::string record, const T &payload)
edm::ESHandle< DTGeometry > dtGeom
constexpr std::array< uint8_t, layerIndexSize > layer
U second(std::pair< T, U > const &p)
std::map< DTWireId, double > theSigmaT0PerWire
Abs< T >::type abs(const T &t)
std::map< DTWireId, int > nDigiPerWire
std::map< DTWireId, double > theRelativeT0PerWire
std::map< DTWireId, double > qK
std::map< DTWireId, TH1I > theHistoWireMap
Power< A, B >::type pow(const A &a, const B &b)