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]");
251 if (gTools->getNumberOfPXDLayers() != 0) {
254 if (storePXDDigits && storePXDDigits.
getEntries()) {
255 int firstPXDLayer = gTools->getFirstPXDLayer();
256 int lastPXDLayer = gTools->getLastPXDLayer();
258 for (
const PXDDigit& digit : storePXDDigits) {
260 int iLayer = digit.getSensorID().getLayerNumber();
261 if ((iLayer < firstPXDLayer) || (iLayer > lastPXDLayer))
continue;
262 int iLadder = digit.getSensorID().getLadderNumber();
263 int iSensor = digit.getSensorID().getSensorNumber();
264 VxdID sensorID(iLayer, iLadder, iSensor);
265 int index = gTools->getPXDSensorIndex(sensorID);
271 if (gTools->getNumberOfSVDLayers() != 0) {
274 if (storeSVDDigits && storeSVDDigits.
getEntries()) {
275 int firstSVDLayer = gTools->getFirstSVDLayer();
276 int lastSVDLayer = gTools->getLastSVDLayer();
277 int nPXDSensors = gTools->getNumberOfPXDSensors();
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 if (gTools->getNumberOfPXDLayers() != 0) {
347 TString message = Form(
"Start to create masking from %i events (fraction: %6.3f)", (
int)
m_nRealEventsProcess,
349 B2INFO(message.Data());
352 std::string ignoredPixelsListName = str(format(
"%1%") % FileName);
353 std::unique_ptr<PXDIgnoredPixelsMap> m_ignoredPixelsBasicList = unique_ptr<PXDIgnoredPixelsMap>(
new PXDIgnoredPixelsMap(
354 ignoredPixelsListName));
356 ignoredPixelsListName = str(format(
"%1%") % FileName);
357 std::unique_ptr<PXDIgnoredPixelsMap> m_ignoredPixelsList = unique_ptr<PXDIgnoredPixelsMap>(
new PXDIgnoredPixelsMap(
358 ignoredPixelsListName));
359 MaskList = fopen(FileName.data(),
"w");
360 if (MaskList ==
nullptr) {
361 B2ERROR(
"Cannot open the mask file for writing: " << FileName);
364 fprintf(MaskList,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
365 fprintf(MaskList,
"<Meta>\n");
366 fprintf(MaskList,
" <Date>19.02.2018</Date>\n");
367 fprintf(MaskList,
" <Description short=\"Ignore strip list for PXD planes in 2018 VXD phase2 and phase3\">\n");
368 fprintf(MaskList,
" Crude initial list of bad pixels\n");
369 fprintf(MaskList,
" </Description>\n");
370 fprintf(MaskList,
" <Author>Peter Kodys</Author>\n");
371 fprintf(MaskList,
"</Meta>\n");
372 fprintf(MaskList,
"<PXD>\n");
373 for (
int i = 0; i < nPXDSensors; i++) {
375 VxdID id = gTools->getSensorIDFromPXDIndex(i);
377 int iLadder =
id.getLadderNumber();
378 int iSensor =
id.getSensorNumber();
379 fprintf(MaskList,
" <layer n=\"%i\">\n", iLayer);
380 fprintf(MaskList,
" <ladder n=\"%i\">\n", iLadder);
381 fprintf(MaskList,
" <sensor n=\"%i\">\n", iSensor);
382 fprintf(MaskList,
" <!-- vxdDigitMasking rectangular parts of the sensor -->\n");
383 fprintf(MaskList,
" <!--pixels uStart = \"070\" uEnd = \"110\" vStart = \"0\" vEnd = \"500\"></pixels-->\n");
384 fprintf(MaskList,
"\n");
385 fprintf(MaskList,
" <!-- Individual pixels can be masked, too -->\n");
386 fprintf(MaskList,
" <!--pixels uStart = \"130\" vStart = \"500\"></pixels-->\n");
387 fprintf(MaskList,
"\n");
388 fprintf(MaskList,
" <!-- ROW is V / COLUMN is U -->\n");
389 fprintf(MaskList,
"\n");
390 fprintf(MaskList,
" <!-- Individual rows and columns can be masked, too -->\n");
391 fprintf(MaskList,
" <!--pixels vStart = \"500\"></pixels-->\n");
392 fprintf(MaskList,
" <!--pixels uStart = \"120\"></pixels-->\n");
393 fprintf(MaskList,
"\n");
394 fprintf(MaskList,
" <!-- Ranges of rows and columns can be masked, too -->\n");
395 fprintf(MaskList,
" <!--pixels vStart = \"100\" vEnd = \"120\"></pixels-->\n");
396 fprintf(MaskList,
" <!--pixels uStart = \"120\" uEnd = \"202\"></pixels-->\n");
397 fprintf(MaskList,
"\n");
398 for (
int i1 = 0; i1 <
m_PXDMaskUV[i]->GetNbinsX(); ++i1) {
399 for (
int i2 = 0; i2 <
m_PXDMaskUV[i]->GetNbinsY(); ++i2) {
409 if (ExistMask || (
m_PXDHitMapUV[i]->GetBinContent(i1 + 1, i2 + 1) > PXDCut)) {
410 fprintf(MaskList,
" <pixels uStart = \"%04i\" vStart = \"%04i\"></pixels>\n", i1, i2);
411 m_PXDMaskUV[i]->SetBinContent(i1 + 1, i2 + 1, 1 + ExistMask);
415 fprintf(MaskList,
"\n");
416 fprintf(MaskList,
" </sensor>\n");
417 fprintf(MaskList,
" </ladder>\n");
418 fprintf(MaskList,
" </layer>\n");
420 fprintf(MaskList,
"</PXD>\n");
424 if (gTools->getNumberOfSVDLayers() != 0) {
426 std::string ignoredPixelsListName = str(format(
"%1%") % FileName);
427 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsBasicList = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
428 ignoredPixelsListName));
430 string ignoredPixelsListName2 = str(format(
"%1%") % FileName2);
431 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsList = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
432 ignoredPixelsListName2));
433 MaskList = fopen(FileName2.data(),
"w");
434 if (MaskList ==
nullptr) {
435 B2ERROR(
"Cannot open the mask file for writing: " << FileName2);
438 fprintf(MaskList,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
439 fprintf(MaskList,
"<Meta>\n");
440 fprintf(MaskList,
" <Date>19.02.2018</Date>\n");
441 fprintf(MaskList,
" <Description short=\"Ignore strip list for SVD planes in 2018 VXD phase2 and phase3\">\n");
442 fprintf(MaskList,
" Crude initial list of bad strips\n");
443 fprintf(MaskList,
" </Description>\n");
444 fprintf(MaskList,
" <Author>Peter Kodys</Author>\n");
445 fprintf(MaskList,
"</Meta>\n");
446 fprintf(MaskList,
"<SVD>\n");
447 int nSVDSensors = gTools->getNumberOfSVDSensors();
448 for (
int i = 0; i < nSVDSensors; i++) {
450 VxdID id = gTools->getSensorIDFromSVDIndex(i);
452 int iLadder =
id.getLadderNumber();
453 int iSensor =
id.getSensorNumber();
454 fprintf(MaskList,
" <layer n=\"%i\">\n", iLayer);
455 fprintf(MaskList,
" <ladder n=\"%i\">\n", iLadder);
456 fprintf(MaskList,
" <sensor n=\"%i\">\n", iSensor);
457 fprintf(MaskList,
" <side side=\"u\">\n");
458 fprintf(MaskList,
" <!-- stripsFromTo fromStrip = \"620\" toStrip = \"767\"></stripsFromTo-->\n");
459 fprintf(MaskList,
" <!-- Individual strips can be masked, too -->\n");
462 for (
int i1 = 0; i1 <
m_SVDMaskU[i]->GetNbinsX(); ++i1) {
465 if (!m_ignoredStripsBasicList->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
468 if (!m_ignoredStripsList->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
476 if (ExistMask || (sTS)) {
477 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i1);
478 m_SVDMaskU[i]->SetBinContent(i1 + 1, 1 + ExistMask);
482 fprintf(MaskList,
" </side>\n");
483 fprintf(MaskList,
" <side side=\"v\">\n");
484 for (
int i2 = 0; i2 <
m_SVDMaskV[i]->GetNbinsX(); ++i2) {
487 if (!m_ignoredStripsBasicList->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
490 if (!m_ignoredStripsList->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
498 if (ExistMask || (sTS)) {
499 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i2);
500 m_SVDMaskV[i]->SetBinContent(i2 + 1, 1 + ExistMask);
504 fprintf(MaskList,
" </side>\n");
505 fprintf(MaskList,
" </sensor>\n");
506 TString message = Form(
"SVD(%i,%i,%i) masked %i U strips in: %s", iLayer, iLadder, iSensor, nMaskedU, ignoredPixelsListName.data());
507 B2INFO(message.Data());
508 message = Form(
"SVD(%i,%i,%i) masked %i V strips in: %s", iLayer, iLadder, iSensor, nMaskedV, ignoredPixelsListName.data());
509 B2INFO(message.Data());
510 fprintf(MaskList,
" </ladder>\n");
511 fprintf(MaskList,
" </layer>\n");
513 fprintf(MaskList,
"</SVD>\n");
520 ignoredPixelsListName = str(format(
"%1%") % FileName);
521 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsBasicList2 = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
522 ignoredPixelsListName));
524 ignoredPixelsListName2 = str(format(
"%1%") % FileName2);
525 std::unique_ptr<SVDIgnoredStripsMap> m_ignoredStripsList2 = unique_ptr<SVDIgnoredStripsMap>(
new SVDIgnoredStripsMap(
526 ignoredPixelsListName2));
527 MaskList = fopen(FileName2.data(),
"w");
528 if (MaskList ==
nullptr) {
529 B2ERROR(
"Cannot open the mask file for writing: " << FileName2);
532 fprintf(MaskList,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
533 fprintf(MaskList,
"<Meta>\n");
534 fprintf(MaskList,
" <Date>19.02.2018</Date>\n");
536 " <Description short=\"Ignore strip list for SVD planes for 2-samples and more over charge cut in 2018 VXD phase2 and phase3\">\n");
537 fprintf(MaskList,
" Crude initial list of bad strips\n");
538 fprintf(MaskList,
" </Description>\n");
539 fprintf(MaskList,
" <Author>Peter Kodys</Author>\n");
540 fprintf(MaskList,
"</Meta>\n");
541 fprintf(MaskList,
"<SVD>\n");
542 for (
int i = 0; i < nSVDSensors; i++) {
544 VxdID id = gTools->getSensorIDFromSVDIndex(i);
546 int iLadder =
id.getLadderNumber();
547 int iSensor =
id.getSensorNumber();
548 fprintf(MaskList,
" <layer n=\"%i\">\n", iLayer);
549 fprintf(MaskList,
" <ladder n=\"%i\">\n", iLadder);
550 fprintf(MaskList,
" <sensor n=\"%i\">\n", iSensor);
551 fprintf(MaskList,
" <side side=\"u\">\n");
552 fprintf(MaskList,
" <!-- stripsFromTo fromStrip = \"620\" toStrip = \"767\"></stripsFromTo-->\n");
553 fprintf(MaskList,
" <!-- Individual strips can be masked, too -->\n");
556 for (
int i1 = 0; i1 <
m_SVDMaskU2[i]->GetNbinsX(); ++i1) {
559 if (!m_ignoredStripsBasicList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
562 if (!m_ignoredStripsList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 1), (
unsigned short) i1)) {
570 if (ExistMask || (sTS)) {
571 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i1);
572 m_SVDMaskU2[i]->SetBinContent(i1 + 1, 1 + ExistMask);
576 fprintf(MaskList,
" </side>\n");
577 fprintf(MaskList,
" <side side=\"v\">\n");
578 for (
int i2 = 0; i2 <
m_SVDMaskV2[i]->GetNbinsX(); ++i2) {
581 if (!m_ignoredStripsBasicList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
584 if (!m_ignoredStripsList2->stripOK(
VxdID(iLayer, iLadder, iSensor, 0), (
unsigned short) i2)) {
592 if (ExistMask || (sTS)) {
593 fprintf(MaskList,
" <strip stripNo = \"%i\"></strip>\n", i2);
594 m_SVDMaskV2[i]->SetBinContent(i2 + 1, 1 + ExistMask);
598 fprintf(MaskList,
" </side>\n");
599 fprintf(MaskList,
" </sensor>\n");
600 TString message = Form(
"SVD(%i,%i,%i) masked %i U strips in: %s", iLayer, iLadder, iSensor, nMaskedU, ignoredPixelsListName.data());
601 B2INFO(message.Data());
602 message = Form(
"SVD(%i,%i,%i) masked %i V strips in: %s", iLayer, iLadder, iSensor, nMaskedV, ignoredPixelsListName.data());
603 B2INFO(message.Data());
604 fprintf(MaskList,
" </ladder>\n");
605 fprintf(MaskList,
" </layer>\n");
607 fprintf(MaskList,
"</SVD>\n");