9 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
10 TString confGem =
"GemRunSpring2018.xml";
11 TString gPathGemConfig = gPathConfig +
"/parameters/gem/XMLConfigs/";
14 TString confSi =
"SiliconRunSpring2018.xml";
15 TString gPathSiConfig = gPathConfig +
"/parameters/silicon/XMLConfigs/";
18 TString confCsc =
"CSCRunSpring2018.xml";
19 TString gPathCscConfig = gPathConfig +
"/parameters/csc/XMLConfigs/";
40void BmnLambdaMisc::GEM() {
41 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
42 TString gPathFull = gPathConfig +
"/input/GEM_map_run7.txt";
44 Long_t commonSerial = 0x76D08B9;
47 ifstream g(gPathFull.Data());
49 TString gemId =
"", station =
"",
module = "", low = "", high = "", serial = "";
50 Int_t linesOmitted = 4;
53 for (
string line; getline(g, line);) {
55 if (counter > linesOmitted) {
56 g >> serial >> low >> high >> gemId >> station >>
module;
57 Long_t ser = (Long_t) serial.Atof();
60 vector <Int_t> key{station.Atoi(),
module.Atoi(), gemId.Atoi()};
61 vector <Long_t> value{low.Atoll(), high.Atoll(), ser};
62 if (ser == commonSerial)
63 corrMapCommonSerial[
key] = value;
65 corrMapNoCommonSerial[
key] = value;
68 fGemStatModId.push_back(key);
75void BmnLambdaMisc::SILICON() {
76 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
77 TString gPathFull = gPathConfig +
"/input/SILICON_map_run7.txt";
80 ifstream g(gPathFull.Data());
82 TString layer =
"", station =
"", modAdc =
"", modGeo =
"", low =
"", high =
"", serial =
"";
83 Int_t linesOmitted = 3;
86 for (
string line; getline(g, line);) {
88 if (counter > linesOmitted) {
89 g >> serial >> low >> high >> modAdc >> modGeo >> layer >> station;
90 Long_t ser = (Long_t) serial.Atof();
93 vector <Int_t>
key{station.Atoi(), modGeo.Atoi(), layer.Atoi(), modAdc.Atoi()};
94 vector <Long_t> value{low.Atoll(), high.Atoll(), ser};
96 serialsSilicon[
key] = value;
99 fSiliconStatModLayId.push_back(key);
106void BmnLambdaMisc::CSC() {
107 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
108 TString gPathFull = gPathConfig +
"/input/CSC_map_period7.txt";
111 ifstream g(gPathFull.Data());
113 TString zone =
"", layer =
"", station =
"",
module = "", low = "", high = "", serial = "";
114 Int_t linesOmitted = 1;
117 for (
string line; getline(g, line);) {
119 if (counter > linesOmitted) {
120 g >> serial >> low >> high >> zone >> station >>
module >> layer;
121 Long_t ser = (Long_t) serial.Atof();
124 vector <Int_t>
key{station.Atoi(),
module.Atoi(), layer.Atoi()};
125 vector <Long_t> value{low.Atoll(), high.Atoll(), ser};
127 serialsCsc[
key] = value;
130 fCscStatModLay.push_back(key);
136 TClonesArray* mapInfo =
new TClonesArray(
"MappingInfo");
139 const Int_t nParts = 2;
140 TString parts[nParts] = {
"Left",
"Right"};
142 for (Int_t iStat = 0; iStat < fDetectorGEM->
GetNStations(); iStat++) {
144 for (Int_t iPart = 0; iPart < nParts; iPart++) {
145 TString filename = (iStat == 0 || iStat == 1) ? TString::Format(
"GEM2_Y1_%s.txt", parts[iPart].Data()) :
146 TString::Format(
"GEM_Y1_Big_%s.txt", parts[iPart].Data());
148 map <Int_t, Int_t> stripGlobChan;
149 ParseStripChannelMapping(filename, iStat, stripGlobChan);
152 vector <Int_t> channels;
153 for (
auto it : stripGlobChan)
154 channels.push_back(it.second);
156 Int_t
min = *min_element(channels.begin(), channels.end());
157 Int_t
max = *max_element(channels.begin(), channels.end());
160 MappingInfo* info =
new ((*mapInfo)[mapInfo->GetEntriesFast()])
MappingInfo(iStat, filename, stripGlobChan);
167 const Int_t nStripsLeft = 1080;
168 const Int_t nStripsRight = 1129;
169 const Int_t addChanStart = 2048;
171 TClonesArray* mapInfoMainPart =
new TClonesArray(
"MappingInfo");
174 for (Int_t iStat = 0; iStat < fDetectorGEM->
GetNStations(); iStat++) {
177 for (Int_t iPart = 0; iPart < nParts; iPart++) {
178 TString filename = (iStat == 0 || iStat == 1) ? TString::Format(
"GEM2_Y1_%s.txt", parts[iPart].Data()) :
179 TString::Format(
"GEM_Y1_Big_%s.txt", parts[iPart].Data());
182 const Int_t nStrips = (filename.Contains(
"Left")) ? nStripsLeft : nStripsRight;
184 for (Int_t iStrip = 0; iStrip < nStrips; iStrip++) {
187 UInt_t channel = FindChannelByStrip(filename, iStrip);
190 if (channel > addChanStart - 1)
193 new ((*mapInfoMainPart)[mapInfoMainPart->GetEntriesFast()])
MappingInfo(iStat, filename, channel, iStrip);
203 delete mapInfoMainPart;
208void BmnLambdaMisc::ParseStripChannelMapping(TString filename, Int_t stat, map <Int_t, Int_t>& stripsGlobChannels) {
209 map <Int_t, Int_t> channelStrip;
211 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
212 TString gPathFull = gPathConfig +
"/input/" + filename;
213 ifstream
f(gPathFull.Data());
215 TString channelCur =
"";
217 Int_t stripCounter = 0;
220 channelStrip[channelCur.Atoi()] = stripCounter;
231 for (
auto it : corrMapCommonSerial) {
232 if (it.first[0] != stat)
236 Int_t
id = it.first[2];
237 if (
filename.Contains(
"Left") && (
id % 10 == 0))
238 chanShift += it.second[0];
240 else if (
filename.Contains(
"Right") && (
id % 10 != 0))
241 chanShift += it.second[0];
245 Int_t addChanStart = 2048;
247 for (
auto it : channelStrip) {
248 Int_t chan = it.first;
249 if (chan < addChanStart)
252 Int_t locChan = chan - addChanStart;
253 Int_t globChan = locChan + chanShift;
255 stripsGlobChannels[it.second] = globChan;
260 for (
auto it : corrMapNoCommonSerial) {
262 if (it.first[0] != stat || it.first[1] != mod || it.first[2] !=
id)
265 if (channel >= it.second[0] && channel <= it.second[1])
279 TString filename =
"";
281 for (
auto it : serialsCsc) {
282 vector <Int_t> statModLay = it.first;
284 if (stat != statModLay[0] || mod != statModLay[1] || lay != statModLay[2])
289 filename = TString::Format(
"CSC_m%dl%d.txt", mod, lay);
295 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
296 TString gPathFull = gPathConfig +
"/input/" + filename;
298 ifstream
f(gPathFull.Data());
300 map <Int_t, Int_t> stripChannels;
301 TString channel =
"";
303 Int_t stripCounter = 0;
306 stripChannels[stripCounter] = channel.Atoi();
310 Int_t chan = stripChannels.find(strip)->second;
323 for (
auto it : serialsSilicon) {
324 vector <Int_t> statModLay = it.first;
326 if (stat != statModLay[0] || mod != statModLay[1] || lay != statModLay[2])
329 Int_t chanShift = Int_t(strip / 128);
330 chan = it.second[0] + chanShift;
331 sample = Int_t(strip % 128);
332 serial = it.second[2];
344 TString layer = (lay == 0 || lay == 2) ?
"X" :
"Y";
346 TString LeftOrRight =
"";
347 TString filename =
"";
351 for (
auto it : fGemStatModId) {
352 vector <Int_t> vect = it;
358 LeftOrRight = (vect[2] % 10 == 0) ?
"Left" :
"Right";
361 hotOrBig = (lay == 2 || lay == 3) ? 0 : 1;
365 if (vect[1] == 2 || vect[1] == 3)
369 if (hotOrBig == 0 && vect[1] == 1)
371 else if (hotOrBig == 1 && vect[1] == 0)
374 if (vect[1] == 0 || vect[1] == 1)
378 if (hotOrBig == 0 && vect[1] == 3)
380 else if (hotOrBig == 1 && vect[1] == 2)
385 if ((stat == 0 || stat == 3 || stat == 5))
386 filename = TString::Format(
"GEM2_%s%d_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
389 filename = TString::Format(
"GEM_%s%d_Big_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
391 if ((stat == 0 || stat == 1))
392 filename = TString::Format(
"GEM2_%s%d_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
395 filename = TString::Format(
"GEM_%s%d_Big_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
417 TString layer = (lay == 0 || lay == 2) ?
"X" :
"Y";
419 TString LeftOrRight =
"";
420 TString filename =
"";
424 for (
auto it : fGemStatModId) {
425 vector <Int_t> vect = it;
431 LeftOrRight = (vect[2] % 10 == 0) ?
"Left" :
"Right";
434 hotOrBig = (lay == 2 || lay == 3) ? 0 : 1;
438 if (vect[1] == 2 || vect[1] == 3)
442 if (hotOrBig == 0 && vect[1] == 1)
444 else if (hotOrBig == 1 && vect[1] == 0)
447 if (vect[1] == 0 || vect[1] == 1)
451 if (hotOrBig == 0 && vect[1] == 3)
453 else if (hotOrBig == 1 && vect[1] == 2)
458 if ((stat == 0 || stat == 3 || stat == 5))
459 filename = TString::Format(
"GEM2_%s%d_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
462 filename = TString::Format(
"GEM_%s%d_Big_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
464 if ((stat == 0 || stat == 1))
465 filename = TString::Format(
"GEM2_%s%d_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
468 filename = TString::Format(
"GEM_%s%d_Big_%s.txt", layer.Data(), hotOrBig, LeftOrRight.Data());
475 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
476 TString gPathFull = gPathConfig +
"/input/" + filename;
478 ifstream
f(gPathFull.Data());
480 map <Int_t, Int_t> stripChannels;
481 TString channel =
"";
483 Int_t stripCounter = 0;
486 stripChannels[stripCounter] = channel.Atoi();
490 UInt_t chan = stripChannels.find(strip)->second;
493 UInt_t addChannelsStart = 2048;
494 if (chan >= addChannelsStart) {
495 for (
auto it : corrMapCommonSerial) {
496 Int_t station = it.first[0];
497 Int_t
module = it.first[1];
499 if (station != stat || module != modMakan)
502 UInt_t low = it.second[0];
503 UInt_t high = it.second[1];
505 chan = chan - addChannelsStart + low;
512 for (
auto itSerial : corrMapCommonSerial) {
513 serial = itSerial.second[2];
521UInt_t BmnLambdaMisc::FindChannelByStrip(TString
f, Int_t strip) {
522 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
523 TString gPathFull = gPathConfig +
"/input/" +
f;
525 ifstream file(gPathFull.Data());
526 map <Int_t, Int_t> stripChannels;
527 TString channel =
"";
529 Int_t stripCounter = 0;
530 while (!file.eof()) {
532 stripChannels[stripCounter] = channel.Atoi();
537 return stripChannels.find(strip)->second;
542 Int_t stat = digiChannel.first.GetStation();
543 Int_t mod = digiChannel.first.GetModule();
545 Int_t channel = digiChannel.second;
547 Int_t layer = digiChannel.first.GetStripLayer();
550 Bool_t isBig = (layer == 0 || layer == 1) ? kTRUE : kFALSE;
551 Bool_t isHot = (layer == 2 || layer == 3) ? kTRUE : kFALSE;
553 if (isBig && mod == 1)
555 else if (isBig && mod == 0)
557 else if (isHot && mod == 1)
559 else if (isHot && mod == 0)
564 for (
auto it : fGemStatModId) {
565 if (it[0] != stat || it[1] != mod)
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
void DrawHistos6(TClonesArray *, TClonesArray *)
TString GemDigiToMapping(BmnStripDigit *)
Int_t GemDigiToChannel(BmnStripDigit *, Long_t &)
void SiliconDigiToChannelSampleSerial(BmnStripDigit *, Int_t &, Int_t &, Long_t &)
void CheckStripOverlaps()
Int_t CscDigiToChannel(BmnStripDigit *, Long_t &)
Long_t GemDigiChannelToSerial(pair< BmnStripDigit, Int_t >)
Long_t GetGemSerial(Int_t, Int_t, Int_t, Int_t)
pair< Int_t, Int_t > channels