11 #include "GaudiKernel/IEventProcessor.h"
31 while (std::getline(
ss,
line,
'\n'))
48 ATH_MSG_INFO(
"Using Python configuration for regions. All pixel layers -> first stage, all strip layers -> second stage");
60 return StatusCode::SUCCESS;
74 SmartIF<IEventProcessor> appMgr{service(
"ApplicationMgr")};
76 ATH_MSG_ERROR(
"Failed to retrieve ApplicationMgr as IEventProcessor");
77 return StatusCode::FAILURE;
79 return appMgr->stopRun();
85 return StatusCode::SUCCESS;
100 ATH_MSG_INFO(
"Cannot read more events from file, returning");
101 return StatusCode::SUCCESS;
108 return StatusCode::SUCCESS;
117 if (hit.getBarcodePt() == 0)
continue;
121 int lyr = hit.getPhysLayer();
122 int eta = hit.getEtaModule();
123 int phi = hit.getPhiModule();
125 if (hit.isPixel() && hit.isBarrel()) {
129 else if (hit.isPixel() && !hit.isBarrel()) {
132 eta = hit.getEtaModule();
133 lyr = hit.getPhysLayer();
139 else if (!hit.isPixel() && hit.isBarrel()) {
143 else if (!hit.isPixel() && !hit.isBarrel()) {
165 m_modules.insert(std::pair<FPGATrackSimModuleId, Module>(
mod.moduleId(),
mod));
174 return StatusCode::SUCCESS;
202 m_pmap <<
"! silicon endCap physDisk physLayer ['stereo' stripSide <strip only>] 'plane1' logiLayer1 'plane2' logiLayer2\n";
203 m_pmap <<
"\nregion " << reg <<
"\n";
206 for (
int lyr = 0; lyr <=
m_pbmax; lyr++) {
209 m_pmap <<
"pixel 0 -1 " << lyr <<
" plane1 " <<
p1 <<
" plane2 " <<
p2 <<
"\n";
211 for (
int lyr = 0; lyr <=
m_pemax[0]; lyr++) {
214 m_pmap <<
"pixel 1 " << lyr <<
" " << lyr <<
" plane1 " <<
p1 <<
" plane2 " <<
p2 <<
"\n";
216 for (
int lyr = 0; lyr <=
m_pemax[1]; lyr++) {
219 m_pmap <<
"pixel 2 " << lyr <<
" " << lyr <<
" plane1 " <<
p1 <<
" plane2 " <<
p2 <<
"\n";
221 for (
int lyr = 0; lyr <=
m_sbmax; lyr++) {
224 m_pmap <<
"SCT 0 -1 " << lyr <<
" stereo " << lyr % 2 <<
" plane1 " <<
p1 <<
" plane2 " <<
p2 <<
"\n";
226 for (
int lyr = 0; lyr <=
m_semax[0]; lyr++) {
229 m_pmap <<
"SCT 1 " << lyr/2 <<
" " << lyr <<
" stereo " << lyr % 2 <<
" plane1 " <<
p1 <<
" plane2 " <<
p2 <<
"\n";
231 for (
int lyr = 0; lyr <=
m_semax[1]; lyr++) {
234 m_pmap <<
"SCT 2 " << lyr/2 <<
" " << lyr <<
" stereo " << lyr % 2 <<
" plane1 " <<
p1 <<
" plane2 " <<
p2 <<
"\n";
241 m_rmap <<
"towers 1 phi 16\n\n0\n";
257 ATH_MSG_ERROR(
"Error: Unable to open file for reading: " << pmap_path);
258 return StatusCode::FAILURE;
261 std::ostringstream
buffer;
263 std::string fileContent =
buffer.str();
267 std::string newContent;
269 newContent += fileContent;
276 ATH_MSG_ERROR(
"Error: Unable to open file for writing: " << pmap_path);
277 return StatusCode::FAILURE;
283 return StatusCode::SUCCESS;
291 std::set<int> key_etamods;
293 float total_hits = 0;
295 total_hits +=
etamod.second;
297 ATH_MSG_INFO(
"Found " << total_hits <<
" hits in the key layer, applying global trim factor of " <<
m_globalTrim <<
"%");
302 key_etamods.insert(
etamod.first);
304 ATH_MSG_INFO(
"Eta module " <<
etamod.first <<
" only contains " <<
etamod.second <<
" out of " << total_hits <<
" hits, excluding from slices.");
310 std::vector<std::vector<int>> key_modules_for_slices;
313 std::vector<int> key_etas;
314 std::vector<int> key_etas2;
315 key_etas.insert(key_etas.end(), key_etamods.begin(), key_etamods.end());
317 for (
unsigned i = 0;
i < key_etas.size();
i++)
319 if (
i >= (key_modules_for_slices.size() * etasPerSlice)) key_modules_for_slices.push_back(std::vector<int>());
320 key_modules_for_slices.back().push_back(key_etas[
i]);
323 std::map<int, int> keymod2slice;
324 for (
unsigned s = 0;
s < key_modules_for_slices.size();
s++)
325 for (
unsigned e = 0;
e < key_modules_for_slices[
s].size();
e++)
326 keymod2slice[key_modules_for_slices[
s][
e]] =
s;
339 std::stringstream eta_slices;
340 for (
unsigned s = 0;
s < key_modules_for_slices.size();
s++){
341 for (
unsigned e = 0;
e < key_modules_for_slices[
s].size();
e++){
342 eta_slices << key_modules_for_slices[
s][
e] <<
" ";
353 std::vector<std::vector<int>> key_modules_for_slices2;
356 for (
unsigned i = 0;
i < key_etas2.size();
i++)
358 if (
i >= (key_modules_for_slices2.size() * etasPerSlice2)) key_modules_for_slices2.push_back(std::vector<int>());
359 key_modules_for_slices2.back().push_back(key_etas2[
i]);
362 std::map<int, int> keymod2slice2;
363 for (
unsigned s = 0;
s < key_modules_for_slices2.size();
s++)
364 for (
unsigned e = 0;
e < key_modules_for_slices2[
s].size();
e++)
365 keymod2slice2[key_modules_for_slices2[
s][
e]] =
s;
377 for (
auto&
m: pair.second)
380 if (keymod2slice[
m->eta] ==
s1)
key1 =
true;
383 if (keymod2slice2[
m->eta] ==
s2)
key2 =
true;
391 if (newSlice + 1 > new_nSlice) new_nSlice = newSlice + 1;
397 ATH_MSG_INFO(
"These slices were further divided based on the key layer 2: '" <<
key2 <<
"'. Now nSlices = " <<
m_nSlices.value());
408 if (
isOnKeyLayer(1,hit.getDetType(),hit.getDetectorZone(), hit.getPhysLayer()))
410 if (keymod2slice.count(hit.getEtaModule()) > 0) {
411 int s = keymod2slice[hit.getEtaModule()];
420 std::stringstream
trim;
421 std::stringstream gtrim;
422 trim << std::fixed << std::setprecision(3) <<
m_trim;
423 gtrim << std::fixed << std::setprecision(3) <<
m_globalTrim;
424 std::string str_trim =
trim.str();
425 std::string str_gtrim = gtrim.str();
426 int dot = str_trim.find_last_of(
".");
427 str_trim.replace(
dot,1,
"p");
428 str_gtrim.replace(str_gtrim.find_last_of(
"."), 1,
"p");
440 if (
m->numTracks.empty()) {
449 std::vector<std::vector<int>> slicedTracks (
m_nSlices.value());
452 slicedTracks[
s].push_back(trk);
466 for (
auto trk : slicedTracks[
s]) {
486 ATH_MSG_INFO(
"Trimmed off " << trimmed <<
" modules that were hit by less than " <<
m_trim <<
"% of tracks");
504 return StatusCode::SUCCESS;
509 std::stringstream
trim;
510 std::stringstream gtrim;
511 trim << std::fixed << std::setprecision(3) <<
m_trim;
512 gtrim << std::fixed << std::setprecision(3) <<
m_globalTrim;
513 std::string str_trim =
trim.str();
514 std::string str_gtrim = gtrim.str();
515 int dot = str_trim.find_last_of(
".");
516 str_trim.replace(
dot,1,
"p");
517 str_gtrim.replace(str_gtrim.find_last_of(
"."), 1,
"p");
519 std::string slicingType =
"";
520 if (
m_key2) slicingType =
"2D";
524 ATH_MSG_INFO(
"Creating eta patterns file: " << etapat_path);
529 for (
auto&
m: pair.second)
543 std::stringstream track_etapatts;
544 unsigned planesDone = 0;
548 if (
m->plane ==
static_cast<int>(
p))
550 track_etapatts << std::to_string(static_cast<int>(
m->det)) <<
"\t" <<
std::to_string(
static_cast<int>(
m->bec)) <<
"\t" <<
std::to_string(
m->eta) <<
"\t\t";
556 if (planesDone == (
m_planes)->size())
557 m_etapat << track_etapatts.str() <<
"\n";
561 return StatusCode::SUCCESS;
568 for (
const auto& hit: allHits)
572 int lyr = hit.getPhysLayer();
600 m_radfile << std::setprecision(3) << std::fixed <<
avg <<
" ";
622 m_radfile << std::setprecision(3) << std::fixed <<
avg <<
" ";
631 return StatusCode::SUCCESS;
637 m_z.resize(
m_nSlices.value(), std::vector<std::vector<float>>((
m_planes2)->size(),std::vector<float>(0)));
638 for (
const auto& hit: allHits)
642 int lyr = hit.getPhysLayer();
653 m_z[
slice][plane].push_back(hit.getZ());
668 float median = (minZ + maxZ)/2;
683 bool doneInitial =
false;
700 float median = (minZ + maxZ)/2;
711 return StatusCode::SUCCESS;
726 return StatusCode::SUCCESS;
737 std::vector<TH2F*> h_slicemap;
738 char *
hname =
new char[20];
742 sprintf(
hname,
"rz_slice%u",
i);
746 h_slicemap.push_back(
h);
749 for (
const auto& hit: allHits)
753 h_slicemap[
s]->Fill(hit.getZ(),hit.getR());
757 h_slicemap[
i]->Write();
764 int det =
static_cast<int>(t_det);
765 int bec =
static_cast<int>(t_bec);
780 for (
auto& plane : *planes) {
781 for (
auto&
layer : plane) {
791 std::stringstream rmap_line;
792 std::set<int>
etas, phis;
794 for(
int lyr = 0; lyr <=
max; lyr++)
798 for (
const auto& hit:
hits)
800 if(
static_cast<int>(hit.getPhysLayer()) == lyr && hit.getDetectorZone() ==
bec)
802 etas.insert(hit.getEtaModule());
803 phis.insert(hit.getPhiModule());
806 if (
etas.size() != 0) rmap_line << static_cast<int>(
det) <<
" " <<
static_cast<int>(
bec) <<
" " << lyr <<
" " << *phis.begin() <<
" " << *phis.rbegin() <<
" " << phis.size() <<
" " << *
etas.begin() <<
" " << *
etas.rbegin() <<
" " <<
etas.size() <<
"\n";
807 else rmap_line << static_cast<int>(
det) <<
" " <<
static_cast<int>(
bec) <<
" " << lyr <<
" 0 0 0 0 0 0\n";
811 return rmap_line.str();
819 std::string
det,
bec, lyr;
820 std::map <std::string, std::vector<std::string>> abrevs = { {
"pb",{
"pixel",
"barrel"}}, {
"pe",{
"pixel",
"endcap"}}, {
"sb",{
"strip",
"barrel"}}, {
"se",{
"strip",
"endcap"}} };
835 ATH_MSG_ERROR(
"Invalid KeyString: '" <<
m_keystring.value() <<
"'." <<
"Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
843 std::string plane =
s.substr(0,
s.find(
delimiter));
844 std::vector<std::string>
s = (
m_planes)->at(std::stoi(plane));
845 for (
unsigned i = 0;
i <
s.size();
i++){
846 std::string reg =
s[
i].substr(0, 2);
847 std::vector<std::string>
zone = abrevs[reg];
848 if (
s[
i].back() ==
'+')
zone[1] =
"posEndcap";
849 if (
s[
i].back() ==
'-')
zone[1] =
"negEndcap";
852 std::string lyr =
s[
i].substr(2);
859 ATH_MSG_ERROR(
"Invalid KeyString: '" <<
m_keystring.value() <<
"'." <<
"Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
882 ATH_MSG_ERROR(
"Invalid KeyString2: '" <<
m_keystring2.value() <<
"'." <<
"Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
890 std::string plane =
s.substr(0,
s.find(
delimiter));
891 std::vector<std::string>
s = (
m_planes)->at(std::stoi(plane));
892 for (
unsigned i = 0;
i <
s.size();
i++){
893 std::string reg =
s[
i].substr(0, 2);
894 std::vector<std::string>
zone = abrevs[reg];
895 if (
s[
i].back() ==
'+')
zone[1] =
"posEndcap";
896 if (
s[
i].back() ==
'-')
zone[1] =
"negEndcap";
899 std::string lyr =
s[
i].substr(2);
906 ATH_MSG_ERROR(
"Invalid KeyString2: '" <<
m_keystring2.value() <<
"'." <<
"Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
914 std::stringstream subrmap_line;
915 std::set<int>
etas, phis;
917 std::vector<Module*> mods;
921 for(
int lyr = 0; lyr <=
max; lyr++)
930 phis.insert(
mod->phi);
933 if (
etas.size() != 0) subrmap_line << static_cast<int>(
det) <<
" " <<
static_cast<int>(
bec) <<
" " << lyr <<
" " << *phis.begin() <<
" " << *phis.rbegin() <<
" " << phis.size() <<
" " << *
etas.begin() <<
" " << *
etas.rbegin() <<
" " <<
etas.size() <<
"\n";
934 else subrmap_line << static_cast<int>(
det) <<
" " <<
static_cast<int>(
bec) <<
" " << lyr <<
" 0 0 0 0 0 0\n";
938 return subrmap_line.str();