86 if (gTools->getNumberOfLayers() == 0) {
87 B2WARNING(
"Missing geometry for VXD, check steering file.");
90 if (gTools->getNumberOfPXDLayers() == 0) {
91 B2WARNING(
"Missing geometry for PXD, PXD-masking is skipped.");
93 if (gTools->getNumberOfSVDLayers() == 0) {
94 B2WARNING(
"Missing geometry for SVD, SVD-masking is skipped.");
98 TDirectory* oldDir = gDirectory;
105 if (gTools->getNumberOfPXDLayers() != 0) {
109 for (
int i = 0; i < nPXDSensors; i++) {
110 VxdID id = gTools->getSensorIDFromPXDIndex(i);
112 int iLadder =
id.getLadderNumber();
113 int iSensor =
id.getSensorNumber();
114 VxdID sensorID(iLayer, iLadder, iSensor);
116 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
123 string name = str(format(
"PXD_%1%_PixelHitmap") % sensorDescr);
124 string title = str(format(
"PXD Sensor %1% Pixel Hitmap") % sensorDescr);
125 m_PXDHitMapUV[i] =
new TH2F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU, nPixelsV, 0, nPixelsV);
126 m_PXDHitMapUV[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
127 m_PXDHitMapUV[i]->GetYaxis()->SetTitle(
"v position [pitch units]");
130 name = str(format(
"PXD_%1%_PixelMaskmap") % sensorDescr);
131 title = str(format(
"PXD Sensor %1% Pixel Maskmap") % sensorDescr);
132 m_PXDMaskUV[i] =
new TH2F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU, nPixelsV, 0, nPixelsV);
133 m_PXDMaskUV[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
134 m_PXDMaskUV[i]->GetYaxis()->SetTitle(
"v position [pitch units]");
138 int nSVDSensors = gTools->getNumberOfSVDSensors();
139 if (gTools->getNumberOfPXDLayers() != 0) {
149 for (
int i = 0; i < nSVDSensors; i++) {
150 VxdID id = gTools->getSensorIDFromSVDIndex(i);
152 int iLadder =
id.getLadderNumber();
153 int iSensor =
id.getSensorNumber();
154 VxdID sensorID(iLayer, iLadder, iSensor);
156 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
163 string name = str(format(
"SVD_%1%_StripHitmapU") % sensorDescr);
164 string title = str(format(
"SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
165 m_SVDHitMapU[i] =
new TH1F(name.c_str(), title.c_str(), nStripsU, 0, nStripsU);
166 m_SVDHitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
168 name = str(format(
"SVD_%1%_StripHitmapV") % sensorDescr);
169 title = str(format(
"SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
170 m_SVDHitMapV[i] =
new TH1F(name.c_str(), title.c_str(), nStripsV, 0, nStripsV);
171 m_SVDHitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
174 name = str(format(
"SVD_%1%_StripMaskmapU") % sensorDescr);
175 title = str(format(
"SVD Sensor %1% Strip Maskmap in U") % sensorDescr);
176 m_SVDMaskU[i] =
new TH1F(name.c_str(), title.c_str(), nStripsU, 0, nStripsU);
177 m_SVDMaskU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
179 name = str(format(
"SVD_%1%_StripMaskmapV") % sensorDescr);
180 title = str(format(
"SVD Sensor %1% Strip Maskmap in V") % sensorDescr);
181 m_SVDMaskV[i] =
new TH1F(name.c_str(), title.c_str(), nStripsV, 0, nStripsV);
182 m_SVDMaskV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
185 name = str(format(
"SVD_%1%_StripHitmapU2") % sensorDescr);
186 title = str(format(
"SVD Sensor %1% Strip Hitmap 2 samples in U") % sensorDescr);
187 m_SVDHitMapU2[i] =
new TH1F(name.c_str(), title.c_str(), nStripsU, 0, nStripsU);
188 m_SVDHitMapU2[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
190 name = str(format(
"SVD_%1%_StripHitmapV2") % sensorDescr);
191 title = str(format(
"SVD Sensor %1% Strip Hitmap 2 samples in V") % sensorDescr);
192 m_SVDHitMapV2[i] =
new TH1F(name.c_str(), title.c_str(), nStripsV, 0, nStripsV);
193 m_SVDHitMapV2[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
196 name = str(format(
"SVD_%1%_StripMaskmapU2") % sensorDescr);
197 title = str(format(
"SVD Sensor %1% Strip Maskmap 2 samples in U") % sensorDescr);
198 m_SVDMaskU2[i] =
new TH1F(name.c_str(), title.c_str(), nStripsU, 0, nStripsU);
199 m_SVDMaskU2[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
201 name = str(format(
"SVD_%1%_StripMaskmapV2") % sensorDescr);
202 title = str(format(
"SVD Sensor %1% Strip Maskmap 2 samples in V") % sensorDescr);
203 m_SVDMaskV2[i] =
new TH1F(name.c_str(), title.c_str(), nStripsV, 0, nStripsV);
204 m_SVDMaskV2[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
252 if (gTools->getNumberOfPXDLayers() != 0) {
255 if (storePXDDigits && storePXDDigits.
getEntries()) {
256 int firstPXDLayer = gTools->getFirstPXDLayer();
257 int lastPXDLayer = gTools->getLastPXDLayer();
259 for (
const PXDDigit& digit : storePXDDigits) {
261 int iLayer = digit.getSensorID().getLayerNumber();
262 if ((iLayer < firstPXDLayer) || (iLayer > lastPXDLayer))
continue;
263 int iLadder = digit.getSensorID().getLadderNumber();
264 int iSensor = digit.getSensorID().getSensorNumber();
265 VxdID sensorID(iLayer, iLadder, iSensor);
266 int index = gTools->getPXDSensorIndex(sensorID);
272 if (gTools->getNumberOfSVDLayers() != 0) {
275 if (storeSVDDigits && storeSVDDigits.
getEntries()) {
276 int firstSVDLayer = gTools->getFirstSVDLayer();
277 int lastSVDLayer = gTools->getLastSVDLayer();
280 int iLayer = digit.getSensorID().getLayerNumber();
281 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
282 int iLadder = digit.getSensorID().getLadderNumber();
283 int iSensor = digit.getSensorID().getSensorNumber();
284 VxdID sensorID(iLayer, iLadder, iSensor);
285 int index = gTools->getSVDSensorIndex(sensorID);
288 if (digit.isUStrip()) {
291 float fCharge1 = samples[i];
304 float fCharge1 = samples[i];
326 TString message = Form(
"Not enough data: %li < 500, terminate without masking file create.",
m_nRealEventsProcess);
327 B2WARNING(message.Data());
345 int nPXDSensors = gTools->getNumberOfPXDSensors();
346 int nSVDSensors = gTools->getNumberOfSVDSensors();
347 if (gTools->getNumberOfPXDLayers() != 0) {
348 TString message = Form(
"Start to create masking from %i events (fraction: %6.3f)", (
int)
m_nRealEventsProcess,
350 B2INFO(message.Data());
353 std::string ignoredPixelsListName = str(format(
"%1%") % FileName);
354 std::unique_ptr<PXDIgnoredPixelsMap> m_ignoredPixelsBasicList = unique_ptr<PXDIgnoredPixelsMap>(
new PXDIgnoredPixelsMap(
355 ignoredPixelsListName));
357 ignoredPixelsListName = str(format(
"%1%") % FileName);
358 std::unique_ptr<PXDIgnoredPixelsMap> m_ignoredPixelsList = unique_ptr<PXDIgnoredPixelsMap>(
new PXDIgnoredPixelsMap(
359 ignoredPixelsListName));
360 MaskList = fopen(FileName.data(),
"w");
361 fprintf(MaskList,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
362 fprintf(MaskList,
"<Meta>\n");
363 fprintf(MaskList,
" <Date>19.02.2018</Date>\n");
364 fprintf(MaskList,
" <Description short=\"Ignore strip list for PXD planes in 2018 VXD phase2 and phase3\">\n");
365 fprintf(MaskList,
" Crude initial list of bad pixels\n");
366 fprintf(MaskList,
" </Description>\n");
367 fprintf(MaskList,
" <Author>Peter Kodys</Author>\n");
368 fprintf(MaskList,
"</Meta>\n");
369 fprintf(MaskList,
"<PXD>\n");
370 for (
int i = 0; i < nPXDSensors; i++) {
372 VxdID id = gTools->getSensorIDFromPXDIndex(i);
374 int iLadder =
id.getLadderNumber();
375 int iSensor =
id.getSensorNumber();
376 fprintf(MaskList,
" <layer n=\"%i\">\n", iLayer);
377 fprintf(MaskList,
" <ladder n=\"%i\">\n", iLadder);
378 fprintf(MaskList,
" <sensor n=\"%i\">\n", iSensor);
379 fprintf(MaskList,
" <!-- vxdDigitMasking rectangular parts of the sensor -->\n");
380 fprintf(MaskList,
" <!--pixels uStart = \"070\" uEnd = \"110\" vStart = \"0\" vEnd = \"500\"></pixels-->\n");
381 fprintf(MaskList,
"\n");
382 fprintf(MaskList,
" <!-- Individual pixels can be masked, too -->\n");
383 fprintf(MaskList,
" <!--pixels uStart = \"130\" vStart = \"500\"></pixels-->\n");
384 fprintf(MaskList,
"\n");
385 fprintf(MaskList,
" <!-- ROW is V / COLUMN is U -->\n");
386 fprintf(MaskList,
"\n");
387 fprintf(MaskList,
" <!-- Individual rows and columns can be masked, too -->\n");
388 fprintf(MaskList,
" <!--pixels vStart = \"500\"></pixels-->\n");
389 fprintf(MaskList,
" <!--pixels uStart = \"120\"></pixels-->\n");
390 fprintf(MaskList,
"\n");
391 fprintf(MaskList,
" <!-- Ranges of rows and columns can be masked, too -->\n");
392 fprintf(MaskList,
" <!--pixels vStart = \"100\" vEnd = \"120\"></pixels-->\n");
393 fprintf(MaskList,
" <!--pixels uStart = \"120\" uEnd = \"202\"></pixels-->\n");
394 fprintf(MaskList,
"\n");
395 for (
int i1 = 0; i1 <
m_PXDMaskUV[i]->GetNbinsX(); ++i1) {
396 for (
int i2 = 0; i2 <
m_PXDMaskUV[i]->GetNbinsY(); ++i2) {
406 if (ExistMask || (
m_PXDHitMapUV[i]->GetBinContent(i1 + 1, i2 + 1) > PXDCut)) {
407 fprintf(MaskList,
" <pixels uStart = \"%04i\" vStart = \"%04i\"></pixels>\n", i1, i2);
408 m_PXDMaskUV[i]->SetBinContent(i1 + 1, i2 + 1, 1 + ExistMask);
412 fprintf(MaskList,
"\n");
413 fprintf(MaskList,
" </sensor>\n");
414 fprintf(MaskList,
" </ladder>\n");
415 fprintf(MaskList,
" </layer>\n");
417 fprintf(MaskList,
"</PXD>\n");
421 if (gTools->getNumberOfSVDLayers() != 0) {
423 std::string ignoredPixelsListName = str(format(
"%1%") % FileName);
424 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsBasicList = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
425 ignoredPixelsListName));
427 string ignoredPixelsListName2 = str(format(
"%1%") % FileName2);
428 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsList = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
429 ignoredPixelsListName2));
430 MaskList = fopen(FileName2.data(),
"w");
431 fprintf(MaskList,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
432 fprintf(MaskList,
"<Meta>\n");
433 fprintf(MaskList,
" <Date>19.02.2018</Date>\n");
434 fprintf(MaskList,
" <Description short=\"Ignore strip list for SVD planes in 2018 VXD phase2 and phase3\">\n");
435 fprintf(MaskList,
" Crude initial list of bad strips\n");
436 fprintf(MaskList,
" </Description>\n");
437 fprintf(MaskList,
" <Author>Peter Kodys</Author>\n");
438 fprintf(MaskList,
"</Meta>\n");
439 fprintf(MaskList,
"<SVD>\n");
440 for (
int i = 0; i < nSVDSensors; i++) {
442 VxdID id = gTools->getSensorIDFromSVDIndex(i);
444 int iLadder =
id.getLadderNumber();
445 int iSensor =
id.getSensorNumber();
446 fprintf(MaskList,
" <layer n=\"%i\">\n", iLayer);
447 fprintf(MaskList,
" <ladder n=\"%i\">\n", iLadder);
448 fprintf(MaskList,
" <sensor n=\"%i\">\n", iSensor);
449 fprintf(MaskList,
" <side side=\"u\">\n");
450 fprintf(MaskList,
" <!-- stripsFromTo fromStrip = \"620\" toStrip = \"767\"></stripsFromTo-->\n");
451 fprintf(MaskList,
" <!-- Individual strips can be masked, too -->\n");
454 for (
int i1 = 0; i1 <
m_SVDMaskU[i]->GetNbinsX(); ++i1) {
457 if (!m_ignoredStripsBasicList->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
460 if (!m_ignoredStripsList->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
468 if (ExistMask || (sTS)) {
469 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i1);
470 m_SVDMaskU[i]->SetBinContent(i1 + 1, 1 + ExistMask);
474 fprintf(MaskList,
" </side>\n");
475 fprintf(MaskList,
" <side side=\"v\">\n");
476 for (
int i2 = 0; i2 <
m_SVDMaskV[i]->GetNbinsX(); ++i2) {
479 if (!m_ignoredStripsBasicList->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
482 if (!m_ignoredStripsList->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
490 if (ExistMask || (sTS)) {
491 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i2);
492 m_SVDMaskV[i]->SetBinContent(i2 + 1, 1 + ExistMask);
496 fprintf(MaskList,
" </side>\n");
497 fprintf(MaskList,
" </sensor>\n");
498 TString message = Form(
"SVD(%i,%i,%i) masked %i U strips in: %s", iLayer, iLadder, iSensor, nMaskedU, ignoredPixelsListName.data());
499 B2INFO(message.Data());
500 message = Form(
"SVD(%i,%i,%i) masked %i V strips in: %s", iLayer, iLadder, iSensor, nMaskedV, ignoredPixelsListName.data());
501 B2INFO(message.Data());
502 fprintf(MaskList,
" </ladder>\n");
503 fprintf(MaskList,
" </layer>\n");
505 fprintf(MaskList,
"</SVD>\n");
512 ignoredPixelsListName = str(format(
"%1%") % FileName);
513 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsBasicList2 = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
514 ignoredPixelsListName));
516 ignoredPixelsListName2 = str(format(
"%1%") % FileName2);
517 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsList2 = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
518 ignoredPixelsListName2));
519 MaskList = fopen(FileName2.data(),
"w");
520 fprintf(MaskList,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
521 fprintf(MaskList,
"<Meta>\n");
522 fprintf(MaskList,
" <Date>19.02.2018</Date>\n");
524 " <Description short=\"Ignore strip list for SVD planes for 2-samples and more over charge cut in 2018 VXD phase2 and phase3\">\n");
525 fprintf(MaskList,
" Crude initial list of bad strips\n");
526 fprintf(MaskList,
" </Description>\n");
527 fprintf(MaskList,
" <Author>Peter Kodys</Author>\n");
528 fprintf(MaskList,
"</Meta>\n");
529 fprintf(MaskList,
"<SVD>\n");
530 for (
int i = 0; i < nSVDSensors; i++) {
532 VxdID id = gTools->getSensorIDFromSVDIndex(i);
534 int iLadder =
id.getLadderNumber();
535 int iSensor =
id.getSensorNumber();
536 fprintf(MaskList,
" <layer n=\"%i\">\n", iLayer);
537 fprintf(MaskList,
" <ladder n=\"%i\">\n", iLadder);
538 fprintf(MaskList,
" <sensor n=\"%i\">\n", iSensor);
539 fprintf(MaskList,
" <side side=\"u\">\n");
540 fprintf(MaskList,
" <!-- stripsFromTo fromStrip = \"620\" toStrip = \"767\"></stripsFromTo-->\n");
541 fprintf(MaskList,
" <!-- Individual strips can be masked, too -->\n");
544 for (
int i1 = 0; i1 <
m_SVDMaskU2[i]->GetNbinsX(); ++i1) {
547 if (!m_ignoredStripsBasicList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
550 if (!m_ignoredStripsList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
558 if (ExistMask || (sTS)) {
559 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i1);
560 m_SVDMaskU2[i]->SetBinContent(i1 + 1, 1 + ExistMask);
564 fprintf(MaskList,
" </side>\n");
565 fprintf(MaskList,
" <side side=\"v\">\n");
566 for (
int i2 = 0; i2 <
m_SVDMaskV2[i]->GetNbinsX(); ++i2) {
569 if (!m_ignoredStripsBasicList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
572 if (!m_ignoredStripsList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
580 if (ExistMask || (sTS)) {
581 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i2);
582 m_SVDMaskV2[i]->SetBinContent(i2 + 1, 1 + ExistMask);
586 fprintf(MaskList,
" </side>\n");
587 fprintf(MaskList,
" </sensor>\n");
588 TString message = Form(
"SVD(%i,%i,%i) masked %i U strips in: %s", iLayer, iLadder, iSensor, nMaskedU, ignoredPixelsListName.data());
589 B2INFO(message.Data());
590 message = Form(
"SVD(%i,%i,%i) masked %i V strips in: %s", iLayer, iLadder, iSensor, nMaskedV, ignoredPixelsListName.data());
591 B2INFO(message.Data());
592 fprintf(MaskList,
" </ladder>\n");
593 fprintf(MaskList,
" </layer>\n");
595 fprintf(MaskList,
"</SVD>\n");