310 const int Nsensors = 172;
313 float residU[Nsensors];
314 float residV[Nsensors];
315 float misU[Nsensors];
316 float misV[Nsensors];
319 float effU[Nsensors];
320 float effV[Nsensors];
321 float effUErr[Nsensors];
322 float effVErr[Nsensors];
323 TString sensorU[Nsensors];
324 TString sensorV[Nsensors];
326 for (
int i = 0; i < Nsensors; i++) {
343 TH1F* h_residU =
new TH1F(
"hResidU",
"U Residuals", 1, 0, 1);
344 h_residU->SetCanExtend(TH1::kAllAxes);
345 h_residU->SetStats(0);
346 h_residU->GetXaxis()->SetTitle(
"sensor");
347 h_residU->GetYaxis()->SetTitle(
"U residuals (#mum)");
348 TH1F* h_residV =
new TH1F(
"hResidV",
"V Residuals", 1, 0, 1);
349 h_residV->SetCanExtend(TH1::kAllAxes);
350 h_residV->SetStats(0);
351 h_residV->GetXaxis()->SetTitle(
"sensor");
352 h_residV->GetYaxis()->SetTitle(
"V residuals (#mum)");
354 TH1F* h_statU =
new TH1F(
"hStatU",
"U Intercept Statistical Error", 1, 0, 1);
355 h_statU->SetCanExtend(TH1::kAllAxes);
356 h_statU->SetStats(0);
357 h_statU->GetXaxis()->SetTitle(
"sensor");
358 h_statU->GetYaxis()->SetTitle(
"U extrap. error (#mum)");
359 TH1F* h_statV =
new TH1F(
"hStatV",
"V Intercept Statistical Error", 1, 0, 1);
360 h_statV->SetCanExtend(TH1::kAllAxes);
361 h_statV->SetStats(0);
362 h_statV->GetXaxis()->SetTitle(
"sensor");
363 h_statV->GetYaxis()->SetTitle(
"V extrap. error (#mum)");
365 TH1F* h_misU =
new TH1F(
"hMisU",
"U Residual Misalignment", 1, 0, 1);
366 h_misU->SetCanExtend(TH1::kAllAxes);
368 h_misU->GetXaxis()->SetTitle(
"sensor");
369 h_misU->GetYaxis()->SetTitle(
"U misalignment (#mum)");
370 TH1F* h_misV =
new TH1F(
"hMisV",
"V Residual Misalignment", 1, 0, 1);
371 h_misV->SetCanExtend(TH1::kAllAxes);
373 h_misV->GetXaxis()->SetTitle(
"sensor");
374 h_misV->GetYaxis()->SetTitle(
"V misalignment (#mum)");
377 TH1F* h_effU =
new TH1F(
"hEffU", Form(
"U-Side Summary, %.1f#sigma or #pm%.1f mm",
m_nSigma,
m_halfWidth * 10), 1, 0, 1);
378 h_effU->SetCanExtend(TH1::kAllAxes);
380 h_effU->GetXaxis()->SetTitle(
"sensor");
381 h_effU->GetYaxis()->SetTitle(
"U efficiency");
382 TH1F* h_effV =
new TH1F(
"hEffV", Form(
"V-Side Summary, %.1f#sigma or #pm%.1f mm",
m_nSigma,
m_halfWidth * 10), 1, 0, 1);
383 h_effV->SetCanExtend(TH1::kAllAxes);
385 h_effV->GetXaxis()->SetTitle(
"sensor");
386 h_effV->GetYaxis()->SetTitle(
"V efficiency");
388 TDirectory* oldDir = gDirectory;
393 int currentLayer = layer.getLayerNumber();
399 TString interName = Form(
"interceptsL%d", layer.getLayerNumber());
400 TString clsName = Form(
"clustersL%d", layer.getLayerNumber());
401 TString residName = Form(
"residualsL%d", layer.getLayerNumber());
402 TDirectory* dir_inter = oldDir->mkdir(interName.Data());
403 TDirectory* dir_cls = oldDir->mkdir(clsName.Data());
404 TDirectory* dir_resid = oldDir->mkdir(residName.Data());
405 for (
auto ladder :
m_geoCache.getLadders(layer))
412 for (
int view = SVDHistograms<TH1F>::VIndex ; view < SVDHistograms<TH1F>::UIndex + 1; view++) {
414 (
m_clsCoor->getHistogram(sensor, view))->Write();
417 float stat = (
m_interSigma->getHistogram(sensor, view))->GetMean();
426 if (view == SVDHistograms<TH1F>::UIndex) {
427 sensorU[s] = Form(
"%d.%d.%dU", currentLayer, ladder.getLadderNumber(), sensor.getSensorNumber());
428 B2DEBUG(10,
"U-side efficiency for " << currentLayer <<
"." << ladder.getLadderNumber() <<
"." << sensor.getSensorNumber());
430 if (res->GetEntries() > 0) {
432 res->GetQuantiles(1, &median, &q);
437 float halfWindow =
m_nSigma * residU[s];
441 int binMin = res->FindBin(misU[s] - halfWindow);
442 int binMax = res->FindBin(misU[s] + halfWindow);
443 B2DEBUG(10,
"from " << misU[s] - halfWindow <<
" -> binMin = " << binMin);
444 B2DEBUG(10,
"to " << misU[s] + halfWindow <<
" -> binMax = " << binMax);
447 for (
int bin = binMin; bin < binMax + 1; bin++)
448 num = num + res->GetBinContent(bin);
451 for (
int bin = 1; bin < binMin; bin++)
452 bkg = bkg + res->GetBinContent(bin);
453 for (
int bin = binMax; bin < res->GetNbinsX() + 1; bin++)
454 bkg = bkg + res->GetBinContent(bin);
456 num = num - bkg * (binMax - binMin + 1.) / (binMin + res->GetNbinsX() - binMax - 1);
461 h_effU->Fill(sensorU[s], effU[s]);
463 B2WARNING(
"something is wrong! efficiency greater than 1: " << num <<
"/" <<
ms_nIntercepts);
466 B2DEBUG(10,
"num = " << num);
468 B2RESULT(
"U-side efficiency for " << currentLayer <<
"." << ladder.getLadderNumber() <<
"." << sensor.getSensorNumber() <<
" = " <<
469 effU[s] <<
" ± " << effUErr[s]);
493 sensorV[s] = Form(
"%d.%d.%dV", currentLayer, ladder.getLadderNumber(), sensor.getSensorNumber());
494 B2DEBUG(10,
"V-side efficiency for " << currentLayer <<
"." << ladder.getLadderNumber() <<
"." << sensor.getSensorNumber());
496 if (res->GetEntries() > 0) {
498 res->GetQuantiles(1, &median, &q);
504 float halfWindow =
m_nSigma * residV[s];
508 int binMin = res->FindBin(misV[s] - halfWindow);
509 int binMax = res->FindBin(misV[s] + halfWindow);
510 B2DEBUG(10,
"from " << misV[s] - halfWindow <<
" -> binMin = " << binMin);
511 B2DEBUG(10,
"to " << misV[s] + halfWindow <<
" -> binMax = " << binMax);
515 for (
int bin = binMin; bin < binMax + 1; bin++)
516 num = num + res->GetBinContent(bin);
519 for (
int bin = 1; bin < binMin; bin++)
520 bkg = bkg + res->GetBinContent(bin);
521 for (
int bin = binMax; bin < res->GetNbinsX() + 1; bin++)
522 bkg = bkg + res->GetBinContent(bin);
524 num = num - bkg * (binMax - binMin + 1.) / (binMin + res->GetNbinsX() - binMax - 1);
529 h_effV->Fill(sensorV[s], effV[s]);
531 B2WARNING(
"something is wrong! efficiency greater than 1: " << num <<
"/" <<
ms_nIntercepts);
534 B2DEBUG(10,
"num = " << num);
536 B2RESULT(
"V-side efficiency for " << currentLayer <<
"." << ladder.getLadderNumber() <<
"." << sensor.getSensorNumber() <<
" = " <<
537 effV[s] <<
" ± " << effVErr[s]);
562 B2DEBUG(50,
"writing out resid histograms for " << sensor.getLayerNumber() <<
"." << sensor.getLadderNumber() <<
"." <<
563 sensor.getSensorNumber() <<
"." << view);
564 (
m_clsResid->getHistogram(sensor, view))->Write();
580 for (
int bin = 0; bin < h_residU->GetNbinsX(); bin++)
581 h_residU->SetBinError(bin, 0.);
583 for (
int bin = 0; bin < h_residV->GetNbinsX(); bin++)
584 h_residV->SetBinError(bin, 0.);
586 for (
int bin = 0; bin < h_statU->GetNbinsX(); bin++)
587 h_statU->SetBinError(bin, 0.);
589 for (
int bin = 0; bin < h_statV->GetNbinsX(); bin++)
590 h_statV->SetBinError(bin, 0.);
592 for (
int bin = 0; bin < h_misU->GetNbinsX(); bin++)
593 h_misU->SetBinError(bin, 0.);
595 for (
int bin = 0; bin < h_misV->GetNbinsX(); bin++)
596 h_misV->SetBinError(bin, 0.);
598 for (
int bin = 0; bin < h_effU->GetNbinsX(); bin++)
599 h_effU->SetBinError(bin, 0.);
601 for (
int bin = 0; bin < h_effV->GetNbinsX(); bin++)
602 h_effV->SetBinError(bin, 0.);
705 TH1F h_clresidU_LargeSensor(
"clsResidU_LS_L@layerL@ladderS@sensor@view",
706 "U Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
708 NbinsU, -range, range);
709 h_clresidU_LargeSensor.GetXaxis()->SetTitle(
"residual (cm)");
711 TH1F h_clresidV_LargeSensor(
"clsResidV_LS_L@layerL@ladderS@sensor@view",
712 "V Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
714 NbinsV, -range, range);
715 h_clresidV_LargeSensor.GetXaxis()->SetTitle(
"residual (cm)");
717 TH1F h_clresidU_SmallSensor(
"clsResidU_SS_L@layerL@ladderS@sensor@view",
718 "U Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
720 NbinsU, -range, range);
721 h_clresidU_SmallSensor.GetXaxis()->SetTitle(
"residual (cm)");
723 TH1F h_clresidV_SmallSensor(
"clsResidV_SS_L@layerL@ladderS@sensor@view",
724 "V Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
726 NbinsU, -range, range);
727 h_clresidV_SmallSensor.GetXaxis()->SetTitle(
"residual (cm)");
732 h_clresidV_LargeSensor);
738 TH2F h2_clresidU_LargeSensor(
"clsResid2DU_LS_L@layerL@ladderS@sensor@view",
739 "U Cluster Residuals VS U Cluster Position(layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
741 h2_clresidU_LargeSensor.GetYaxis()->SetTitle(
"residual (cm)");
742 h2_clresidU_LargeSensor.GetXaxis()->SetTitle(
"cluster position (cm)");
744 TH2F h2_clresidV_LargeSensor(
"clsResid2DV_LS_L@layerL@ladderS@sensor@view",
745 "V Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
747 h2_clresidV_LargeSensor.GetYaxis()->SetTitle(
"residual (cm)");
748 h2_clresidV_LargeSensor.GetXaxis()->SetTitle(
"cluster position (cm)");
750 TH2F h2_clresidU_SmallSensor(
"clsResid2DU_SS_L@layerL@ladderS@sensor@view",
751 "U Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
753 h2_clresidU_SmallSensor.GetYaxis()->SetTitle(
"residual (cm)");
754 h2_clresidU_SmallSensor.GetXaxis()->SetTitle(
"cluster position (cm)");
756 TH2F h2_clresidV_SmallSensor(
"clsResid2DV_SS_L@layerL@ladderS@sensor@view",
757 "V Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
759 h2_clresidV_SmallSensor.GetYaxis()->SetTitle(
"residual (cm)");
760 h2_clresidV_SmallSensor.GetXaxis()->SetTitle(
"cluster position (cm)");
763 h2_clresidV_LargeSensor);
767 TH1F h_clminresidU_LargeSensor(
"clsMinResidU_LS_L@layerL@ladderS@sensor@view",
768 "U Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
770 NbinsU, -range, range);
771 h_clminresidU_LargeSensor.GetXaxis()->SetTitle(
"residual (cm)");
773 TH1F h_clminresidV_LargeSensor(
"clsMinResidV_LS_L@layerL@ladderS@sensor@view",
774 "V Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
776 NbinsV, -range, range);
777 h_clminresidV_LargeSensor.GetXaxis()->SetTitle(
"residual (cm)");
779 TH1F h_clminresidU_SmallSensor(
"clsMinResidU_SS_L@layerL@ladderS@sensor@view",
780 "U Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
782 NbinsU, -range, range);
783 h_clminresidU_SmallSensor.GetXaxis()->SetTitle(
"residual (cm)");
785 TH1F h_clminresidV_SmallSensor(
"clsMinResidV_SS_L@layerL@ladderS@sensor@view",
786 "V Cluster Residuals (layer @layer, ladder @ladder, sensor @sensor, side@view/@side)",
788 NbinsU, -range, range);
789 h_clminresidV_SmallSensor.GetXaxis()->SetTitle(
"residual (cm)");
794 h_clminresidV_LargeSensor);