21 bool operator () (
DetId fFirst,
DetId fSecond)
const {
24 if (
first.genericSubdet () !=
second.genericSubdet ())
return first.genericSubdet () <
second.genericSubdet ();
25 if (
first.isHcalDetId ()) {
28 return f1.zside () != s1.zside () ?
f1.zside () < s1.zside () :
29 f1.iphi () != s1.iphi () ?
f1.iphi () < s1.iphi () :
30 f1.ietaAbs () != s1.ietaAbs () ?
f1.ietaAbs () < s1.ietaAbs () :
31 f1.depth () < s1.depth ();
38 class HcalElectronicsIdLess {
54 std::vector <std::string>
result;
57 for (
unsigned i = 0;
i <= fLine.size ();
i++) {
58 if (fLine [
i] ==
' ' ||
i == fLine.size ()) {
61 result.push_back (item);
67 if (empty) empty =
false;
74 std::vector <unsigned int>
result;
77 for (
unsigned i = 0;
i <= fLine.size ();
i++) {
78 if (fLine [
i] ==
',' ||
i == fLine.size ()) {
81 result.push_back (atoi (itemString.c_str()) );
87 if (empty) empty =
false;
94 std::vector <float>
result;
97 for (
unsigned i = 0;
i <= fLine.size ();
i++) {
98 if (fLine [
i] ==
',' ||
i == fLine.size ()) {
101 result.push_back (atof (itemString.c_str()) );
107 if (empty) empty =
false;
114 std::vector <double>
result;
117 for (
unsigned i = 0;
i <= fLine.size ();
i++) {
118 if (fLine [
i] ==
',' ||
i == fLine.size ()) {
121 result.push_back (atof (itemString.c_str()) );
127 if (empty) empty =
false;
135 return converter.getId ();
141 sprintf (buffer,
" %15s %15s %15s %15s",
142 converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str (),converter.getFlavor ().c_str ());
149 sprintf (buffer,
" %5s %4s %4s %10s",
150 converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str (),converter.getFlavor ().c_str ());
159 std::istringstream iss(s);
160 return !(iss >>
f >>
t).
fail();
163 template <
class T,
class S>
165 if (!fObject)
return false;
167 while (fInput.getline(buffer, 1024)) {
168 if (buffer [0] ==
'#')
continue;
170 if (items.size()==0)
continue;
171 if (items.size () < 8) {
172 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 8 items: eta, phi, depth, subdet, 4x values" << std::endl;
181 fCondObject =
new S(
id, atof (items [4].c_str()), atof (items [5].c_str()),
182 atof (items [6].c_str()), atof (items [7].c_str()));
183 fObject->addValues(*fCondObject);
194 sprintf (buffer,
"# %15s %15s %15s %15s %8s %8s %8s %8s %10s\n",
"eta",
"phi",
"dep",
"det",
"cap0",
"cap1",
"cap2",
"cap3",
"DetId");
196 std::vector<DetId> channels = fObject.getAllChannels ();
197 std::sort (channels.begin(), channels.end(), DetIdLess ());
198 for (std::vector<DetId>::iterator channel = channels.begin ();
199 channel != channels.end ();
201 const float*
values = fObject.getValues (*channel)->getValues ();
204 sprintf (buffer,
" %8.5f %8.5f %8.5f %8.5f %10X\n",
205 values[0], values[1], values[2], values[3], channel->rawId ());
212 template <
class T,
class S>
214 if (!fObject)
return false;
216 while (fInput.getline(buffer, 1024)) {
217 if (buffer [0] ==
'#')
continue;
219 if (items.size()==0)
continue;
220 if (items.size () < 5) {
221 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 5 items: eta, phi, depth, subdet, value" << std::endl;
230 fCondObject =
new S(
id, atof (items [4].c_str()) );
231 fObject->addValues(*fCondObject);
241 sprintf (buffer,
"# %15s %15s %15s %15s %8s %10s\n",
"eta",
"phi",
"dep",
"det",
"value",
"DetId");
243 std::vector<DetId> channels = fObject.getAllChannels ();
244 std::sort (channels.begin(), channels.end(), DetIdLess ());
245 for (std::vector<DetId>::iterator channel = channels.begin ();
246 channel != channels.end ();
248 const float value = fObject.getValues (*channel)->getValue ();
250 sprintf (buffer,
" %8.5f %10X\n",
251 value, channel->rawId ());
257 template <
class T,
class S>
259 if (!fObject)
return false;
261 while (fInput.getline(buffer, 1024)) {
262 if (buffer [0] ==
'#')
continue;
264 if (items.size()==0)
continue;
265 if (items.size () < 5) {
266 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 5 items: eta, phi, depth, subdet, value" << std::endl;
275 fCondObject =
new S(
id, atoi (items [4].c_str()) );
276 fObject->addValues(*fCondObject);
286 sprintf (buffer,
"# %15s %15s %15s %15s %8s %10s\n",
"eta",
"phi",
"dep",
"det",
"value",
"DetId");
288 std::vector<DetId> channels = fObject.getAllChannels ();
289 std::sort (channels.begin(), channels.end(), DetIdLess ());
290 for (std::vector<DetId>::iterator channel = channels.begin ();
291 channel != channels.end ();
293 const int value = fObject.getValues (*channel)->getValue ();
295 sprintf (buffer,
" %15d %10X\n",
296 value, channel->rawId ());
302 template <
class T,
class S>
304 if (!fObject)
return false;
306 while (fInput.getline(buffer, 1024)) {
307 if (buffer [0] ==
'#')
continue;
309 if (items.size()==0)
continue;
311 fCondObject =
new S(firstid.
rawId());
312 for(
int j = 0;
j != 10;
j++) fCondObject->setValue(atoi(items[4].c_str()), 0,
j, atof(items[
j+5].c_str()));
313 for(
int i = 1;
i != 40;
i++){
314 fInput.getline(buffer, 1024);
317 if(
id.rawId() != firstid.
rawId())
break;
318 for(
int j = 0;
j != 10;
j++) fCondObject->setValue(atoi(items[4].c_str()),
i%10,
j, atof(items[
j+5].c_str()));
320 fObject->addValues(*fCondObject);
329 sprintf (buffer,
"# %5s %5s %5s %5s %5s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n",
330 "eta",
"phi",
"dep",
"det",
"capid",
"c0",
"c1",
"c2",
"c3",
"c4",
"c5",
"c6",
"c7",
"c8",
"c9",
"DetId");
332 std::vector<DetId> channels = fObject.getAllChannels ();
333 std::sort (channels.begin(), channels.end(), DetIdLess ());
334 for (std::vector<DetId>::iterator channel = channels.begin ();
335 channel != channels.end ();
338 for(
int m = 0;
m != 4;
m++){
339 for(
int i = 0;
i != 10;
i++){
340 for(
int j = 0;
j != 10;
j++){
342 thisline[
j] = fObject.getValues(*channel)->getValue(
m,
i,
j);
346 sprintf(buffer,
" %5i %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
347 m, thisline[0], thisline[1], thisline[2], thisline[3], thisline[4], thisline[5], thisline[6], thisline[7],
348 thisline[8], thisline[9], channel->rawId());
390 if (!fObject)
return false;
392 while (fInput.getline(buffer, 1024)) {
393 if (buffer [0] ==
'#')
continue;
395 if (items.size()==0)
continue;
396 if (items.size () < 6) {
397 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 6 items: eta, phi, depth, subdet, param1, param2" << std::endl;
402 int packingScheme =0;
403 if(items.size ()>22) {
404 packingScheme = atoi (items [22].c_str());
409 if(packingScheme==0) {
410 param1=atoi (items [4].c_str());
411 param2=atoi (items [5].c_str());
414 if(packingScheme==1) {
416 int aabits[6]= {1,1, 8, 4, 4, 9};
417 int aamax[ 6]= {1,1,255,15,15,511};
419 int bbbits[10]={1, 4,1, 4,1, 4, 4, 4, 4, 4};
420 int bbmax [10]={1,15,1,15,1,15,15,15,15,15};
426 for(
int i=0;
i<6;
i++) {
429 float phase=atof (items [j].c_str());
430 float xphase=(phase+32.0)*4.0;
433 aa=atoi (items [j].c_str());
435 if(aa>aamax[
i] || aa<0) {
436 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n value for a"<<
i<<
" should be less than"<<aamax[
i]<< std::endl;
438 param1=param1|aa<<aashift;
439 aashift=aashift+aabits[
i];
445 for(
int i=0;
i<10;
i++) {
447 bb=atoi (items [j].c_str());
449 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n value for b"<<i<<
" should be less than"<<bbmax[
i]<< std::endl;
451 param2=param2|bb<<bbshift;
452 bbshift=bbshift+bbbits[
i];
473 std::sort (channels.begin(), channels.end(), DetIdLess ());
475 for (std::vector<DetId>::iterator channel = channels.begin ();
476 channel != channels.end ();
485 if(packingScheme==0) {
488 sprintf (buffer,
"# %15s %15s %15s %15s %18s %15s %10s\n",
"eta",
"phi",
"dep",
"det",
"firstSample",
"samplesToAdd",
"DetId");
491 sprintf (buffer,
" %15d %15d %16X\n",
496 if(packingScheme==1) {
499 char lineT[100],lineA[200],lineB[200];
501 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
502 sprintf (lineA,
" %31s",
"a0: correctForPhaseContainment"); fOutput << lineA;
503 sprintf (lineB,
" %36s",
"b0: useLeakCorrection\n"); fOutput << lineB;
505 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
506 sprintf (lineA,
" %31s",
"a1: correctForLeadingEdge"); fOutput << lineA;
507 sprintf (lineB,
" %36s",
"b1: leakCorrectionID\n"); fOutput << lineB;
509 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
510 sprintf (lineA,
" %31s",
"a2: correctionPhaseNS"); fOutput << lineA;
511 sprintf (lineB,
" %36s",
"b2: correctForTimeslew\n"); fOutput << lineB;
513 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
514 sprintf (lineA,
" %31s",
"a3: firstSample"); fOutput << lineA;
515 sprintf (lineB,
" %36s",
"b3: timeslewCorrectionID\n"); fOutput << lineB;
517 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
518 sprintf (lineA,
" %31s",
"a4: samplesToAdd"); fOutput << lineA;
519 sprintf (lineB,
" %36s",
"b4: correctTiming\n"); fOutput << lineB;
521 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
522 sprintf (lineA,
" %31s",
"a5: pulseShapeID"); fOutput << lineA;
523 sprintf (lineB,
" %36s",
"b5: firstAuxTS\n"); fOutput << lineB;
525 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
526 sprintf (lineA,
" %31s",
" "); fOutput << lineA;
527 sprintf (lineB,
" %36s",
"b6: specialCaseID\n"); fOutput << lineB;
529 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
530 sprintf (lineA,
" %31s",
" "); fOutput << lineA;
531 sprintf (lineB,
" %36s",
"b7: noiseFlaggingID\n"); fOutput << lineB;
533 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
534 sprintf (lineA,
" %31s",
" "); fOutput << lineA;
535 sprintf (lineB,
" %36s",
"b8: pileupCleaningID\n"); fOutput << lineB;
537 sprintf (lineT,
"#%50s",
" "); fOutput << lineT;
538 sprintf (lineA,
" %31s",
" "); fOutput << lineA;
539 sprintf (lineB,
" %36s",
"b9: packingScheme\n"); fOutput << lineB;
542 sprintf (lineT,
"# %5s %4s %4s %10s %11s %10s %10s",
"eta",
"phi",
"dep",
"det",
"param1",
"param2",
"DetId");
545 sprintf (lineA,
" %6s %4s %6s %4s %4s %4s",
"a0",
"a1",
"a2",
"a3",
"a4",
"a5");
548 sprintf (lineB,
" %6s %3s %3s %3s %3s %3s %3s %3s %3s\n",
"b0",
"b1",
"b2",
"b3",
"b4",
"b5",
"b6",
"b7",
"b8");
553 sprintf (buffer,
" %11d %10d %10X", param1, param2, channel->rawId ());
562 sprintf (buffer,
" %6d %4d %6.1f %4d %4d %4d",aa0,aa1,aa2,aa3,aa4,aa5);
575 sprintf(buffer,
" %6d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",bb0,bb1,bb2,bb3,bb4,bb5,bb6,bb7,bb8,bb9);
585 if (!fObject)
return false;
587 while (fInput.getline(buffer, 1024)) {
588 if (buffer [0] ==
'#')
continue;
590 if (items.size()==0)
continue;
591 if (items.size() < 5) {
592 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 6 items: eta, phi, depth, subdet, signalTSs, noiseTSs" << std::endl;
595 if (items.size() > 7) {
596 edm::LogWarning(
"Format Problem ?") <<
"Check line: " << buffer <<
"\n line must contain 6 items: eta, phi, depth, subdet, signalTSs, noiseTSs. "
597 <<
"\n ! signalTS and noiseTS must be of format <ts1,ts2,ts3,...> withOUT spaces. Ignoring line for safety" << std::endl;
613 if (!fObject)
return false;
615 while (fInput.getline(buffer, 1024)) {
616 if (buffer [0] ==
'#')
continue;
618 if (items.size()==0)
continue;
619 if (items.size () < 7) {
620 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 7 items: eta, phi, depth, subdet, nhit, phase, rms,detid" << std::endl;
642 sprintf (buffer,
"# %15s %15s %15s %15s %15s %15s %15s %15s\n",
"eta",
"phi",
"dep",
"det",
"nhit",
"mean",
"rms" ,
"DetId");
645 std::sort (channels.begin(), channels.end(), DetIdLess ());
646 for (std::vector<DetId>::iterator channel = channels.begin ();
647 channel != channels.end ();
650 sprintf (buffer,
" %15d %8.5f %8.5f %16X\n",
660 sprintf (buffer,
"# %15s %15s %15s %15s %10s %10s %10s\n",
"eta",
"phi",
"dep",
"det",
"signalTSs",
"noiseTSs",
"DetId");
663 std::sort (channels.begin(), channels.end(), DetIdLess ());
664 for (std::vector<DetId>::iterator channel = channels.begin ();
665 channel != channels.end ();
668 if (fId.isHcalZDCDetId())
671 std::vector<unsigned int> vNoiseTS = fObject.
getValues (*channel)->
noiseTS();
673 sprintf (buffer,
" ");
675 for (
unsigned int i=0;
i<vSignalTS.size();
i++)
677 if (
i>0) {sprintf (buffer,
","); fOutput << buffer;}
678 sprintf (buffer,
"%u", vSignalTS.at(
i));
681 sprintf (buffer,
" ");
683 for (
unsigned int i=0;
i<vNoiseTS.size();
i++)
685 if (
i>0) { sprintf (buffer,
","); fOutput << buffer;}
686 sprintf (buffer,
"%u", vNoiseTS.at(
i));
689 sprintf (buffer,
" %10X\n", channel->rawId ());
698 if (!fObject)
return false;
700 while (fInput.getline(buffer, 1024)) {
701 if (buffer [0] ==
'#')
continue;
703 if (items.size()==0)
continue;
704 if (items.size () < 5) {
705 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 5 items: eta, phi, depth, subdet, signalShape" << std::endl;
711 if(items.size ()>11) {
712 packingScheme = atoi (items [11].c_str());
716 if(packingScheme==0) {
717 param1=atoi (items [4].c_str());
720 if(packingScheme==1) {
721 int aabits[6]={ 9,1, 4, 8,5, 4};
722 int aamax [6]={511,1,15,255,1,16};
726 for(
int i=0;
i<6;
i++) {
729 float phase=atof (items [j].c_str());
730 float xphase=(phase+32.0)*4.0;
733 aa=atoi (items [j].c_str());
735 if(aa>aamax[
i] || aa<0) {
736 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n value for a"<<
i<<
" should be less than"<<aamax[
i]<< std::endl;
739 param1=param1|aa<<aashift;
740 aashift=aashift+aabits[
i];
756 std::sort (channels.begin(), channels.end(), DetIdLess ());
758 for (std::vector<DetId>::iterator channel = channels.begin ();
759 channel != channels.end ();
763 if(packingScheme==0) {
765 sprintf (buffer,
"# %15s %15s %15s %15s %14s %10s\n",
"eta",
"phi",
"dep",
"det",
"signalShape",
"DetId");
770 sprintf (buffer,
" %10d %17X\n", value, channel->rawId ());
773 if(packingScheme==1) {
775 char lineT[100],lineA[200];
777 sprintf (lineT,
"#%40s",
" "); fOutput << lineT;
778 sprintf (lineA,
" %31s",
"a0: signalShape\n"); fOutput << lineA;
779 sprintf (lineT,
"#%40s",
" "); fOutput << lineT;
780 sprintf (lineA,
" %31s",
"a1: syncPhase\n"); fOutput << lineA;
781 sprintf (lineT,
"#%40s",
" "); fOutput << lineT;
782 sprintf (lineA,
" %31s",
"a2: binOfMaximum\n"); fOutput << lineA;
783 sprintf (lineT,
"#%40s",
" "); fOutput << lineT;
784 sprintf (lineA,
" %31s",
"a3: timePhase\n"); fOutput << lineA;
785 sprintf (lineT,
"#%40s",
" "); fOutput << lineT;
786 sprintf (lineA,
" %31s",
"a4: timeSmearing\n"); fOutput << lineA;
787 sprintf (lineT,
"#%40s",
" "); fOutput << lineT;
788 sprintf (lineA,
" %31s",
"a5: packingScheme\n"); fOutput << lineA;
789 sprintf (lineT,
"# %5s %4s %4s %10s %11s %10s",
"eta",
"phi",
"dep",
"det",
"param1",
"DetId");
791 sprintf (lineA,
" %6s %4s %4s %6s %4s %4s\n",
"a0",
"a1",
"a2",
"a3",
"a4",
"a5");
796 sprintf (buffer,
" %11d %10X", param1, channel->rawId ());
804 sprintf (buffer,
"%6d %4d %4d %6.1f %4d %4d\n",aa0,aa1,aa2,aa3,aa4,aa5);
814 while (fInput.getline(buffer, 1024)) {
816 if (items.size()==0)
continue;
818 if (items[0] ==
"#U")
824 edm::LogWarning(
"Pedestal Unit Error") <<
"Unrecognized unit for pedestals. Assuming fC." << std::endl;
831 edm::LogWarning(
"Pedestal Unit Missing") <<
"The unit for the pedestals is missing in the txt file." << std::endl;
836 while (fInput.getline(buffer, 1024)) {
837 if (buffer [0] ==
'#')
continue;
839 if (items.size()==0)
continue;
840 if (items.size () < 8) {
841 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 8 items: eta, phi, depth, subdet, 4x values"
842 <<
" or 12 items: eta, phi, depth, subdet, 4x values for mean, 4x values for width"
853 if (items.size() < 12)
856 atof (items [6].c_str()), atof (items [7].c_str()),
864 atof (items [6].c_str()), atof (items [7].c_str()),
865 atof (items [8].c_str()), atof (items [9].c_str()),
866 atof (items [10].c_str()), atof (items [11].c_str()) );
879 if (fObject.
isADC() ) sprintf (buffer,
"#U ADC << this is the unit \n");
880 else sprintf (buffer,
"#U fC << this is the unit \n");
883 sprintf (buffer,
"# %15s %15s %15s %15s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n",
"eta",
"phi",
"dep",
"det",
"cap0",
"cap1",
"cap2",
"cap3",
"widthcap0",
"widthcap1",
"widthcap2",
"widthcap3",
"DetId");
887 std::sort (channels.begin(), channels.end(), DetIdLess ());
888 for (std::vector<DetId>::iterator channel = channels.begin ();
889 channel != channels.end ();
893 dumpId (fOutput, *channel);
894 sprintf (buffer,
" %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
895 values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], channel->rawId ());
906 if (!fObject)
return false;
908 while (fInput.getline(buffer, 1024)) {
909 if (buffer [0] ==
'#')
continue;
911 if (items.size()==0)
continue;
912 if (items.size () < 6) {
913 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 6 items: eta, phi, depth, subdet, base - either (hex) or (dec), value" << std::endl;
923 if (items[4] ==
"(hex)")
924 sscanf(items[5].c_str(),
"%X", &mystatus);
925 else if (items[4] ==
"(dec)")
926 sscanf(items[5].c_str(),
"%u", &mystatus);
929 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n value field must contain the base: one of (hex), (dec)" << std::endl;
944 sprintf (buffer,
"# %15s %15s %15s %15s %15s %10s\n",
"eta",
"phi",
"dep",
"det",
"(base) value",
"DetId");
947 std::sort (channels.begin(), channels.end(), DetIdLess ());
948 for (std::vector<DetId>::iterator channel = channels.begin ();
949 channel != channels.end ();
952 dumpId (fOutput, *channel);
953 sprintf (buffer,
"%6s %15X %10X\n",
"(hex)",
954 value, channel->rawId ());
966 while (fInput.getline(buffer, 1024)) {
967 if (buffer [0] ==
'#')
969 if (buffer [1] ==
'T')
975 if (buffer [1] ==
'A')
984 if (items.size()==0)
continue;
985 if (items.size () < 7) {
986 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 7 items: eta, phi, depth, subdet, pedestal, resp.corr.gain, flag" << std::endl;
1003 sprintf (buffer,
"#T %s << this is the tag name \n", fObject.
getTagString().c_str() );
1005 sprintf (buffer,
"#A %s << this is the algorithm name \n", fObject.
getAlgoString().c_str() );
1009 sprintf (buffer,
"# %15s %15s %15s %15s %8s %13s %8s %10s\n",
1010 "eta",
"phi",
"dep",
"det",
"ped",
"respcorrgain",
"flag",
1015 for (std::vector<DetId>::iterator channel = channels.begin ();
1016 channel != channels.end ();
1020 dumpId (fOutput, *channel);
1021 sprintf (buffer,
" %10.7f %10.7f %12d %10X\n",
1034 int linecounter = 0;
1036 while (fInput.getline(buffer, 1024)) {
1039 if (items.size()==0)
continue;
1047 edm::LogWarning(
"Pedestal Width Unit Error") <<
"Unrecognized unit for pedestal widths. Assuming fC." << std::endl;
1054 edm::LogWarning(
"Pedestal Width Unit Missing") <<
"The unit for the pedestal widths is missing in the txt file." << std::endl;
1060 while (fInput.getline(buffer, 1024)) {
1062 if (buffer [0] ==
'#')
continue;
1064 if (items.size()==0)
continue;
1065 if (items.size () < 14) {
1066 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line number: " << linecounter <<
"\n line must contain 14 items: eta, phi, depth, subdet, 10x correlations"
1067 <<
" or 20 items: eta, phi, depth, subdet, 16x correlations"
1078 if (items.size() < 20)
1081 values.setSigma (0, 0, atof (items [4].c_str()));
1082 values.setSigma (1, 0, atof (items [5].c_str()));
1083 values.setSigma (1, 1, atof (items [6].c_str()));
1084 values.setSigma (2, 0, atof (items [7].c_str()));
1085 values.setSigma (2, 1, atof (items [8].c_str()));
1086 values.setSigma (2, 2, atof (items [9].c_str()));
1087 values.setSigma (3, 0, atof (items [10].c_str()));
1088 values.setSigma (3, 1, atof (items [11].c_str()));
1089 values.setSigma (3, 2, atof (items [12].c_str()));
1090 values.setSigma (3, 3, atof (items [13].c_str()));
1091 values.setSigma (0, 1, 0.);
1092 values.setSigma (0, 2, 0.);
1093 values.setSigma (0, 3, 0.);
1094 values.setSigma (1, 2, 0.);
1095 values.setSigma (1, 3, 0.);
1096 values.setSigma (2, 3, 0.);
1102 values.setSigma (0, 0, atof (items [4].c_str()) );
1103 values.setSigma (0, 1, atof (items [5].c_str()) );
1104 values.setSigma (0, 2, atof (items [6].c_str()) );
1105 values.setSigma (0, 3, atof (items [7].c_str()) );
1106 values.setSigma (1, 0, atof (items [8].c_str()) );
1107 values.setSigma (1, 1, atof (items [9].c_str()) );
1108 values.setSigma (1, 2, atof (items [10].c_str()) );
1109 values.setSigma (1, 3, atof (items [11].c_str()) );
1110 values.setSigma (2, 0, atof (items [12].c_str()) );
1111 values.setSigma (2, 1, atof (items [13].c_str()) );
1112 values.setSigma (2, 2, atof (items [14].c_str()) );
1113 values.setSigma (2, 3, atof (items [15].c_str()) );
1114 values.setSigma (3, 0, atof (items [16].c_str()) );
1115 values.setSigma (3, 1, atof (items [17].c_str()) );
1116 values.setSigma (3, 2, atof (items [18].c_str()) );
1117 values.setSigma (3, 3, atof (items [19].c_str()) );
1128 if (fObject.
isADC() ) sprintf (buffer,
"#U ADC << this is the unit \n");
1129 else sprintf (buffer,
"#U fC << this is the unit \n");
1132 sprintf (buffer,
"# %15s %15s %15s %15s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n",
1133 "eta",
"phi",
"dep",
"det",
1134 "cov_0_0",
"cov_0_1",
"cov_0_2",
"cov_0_3",
"cov_1_0",
"cov_1_1",
"cov_1_2",
"cov_1_3",
"cov_2_0",
"cov_2_1",
"cov_2_2",
"cov_2_3",
"cov_3_0",
"cov_3_1",
"cov_3_2",
"cov_3_3",
1138 std::sort (channels.begin(), channels.end(), DetIdLess ());
1139 for (std::vector<DetId>::iterator channel = channels.begin ();
1140 channel != channels.end ();
1144 dumpId (fOutput, *channel);
1145 sprintf (buffer,
" %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
1160 while (fInput.getline(buffer, 1024)) {
1161 if (buffer [0] ==
'#')
continue;
1163 if (items.size()<1)
continue;
1164 if (items [0] ==
"SHAPE") {
1168 if (items.size () < 36) {
1169 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 36 items: eta, phi, depth, subdet, 4 capId x 4 Ranges x offsets, 4 capId x 4 Ranges x slopes" << std::endl;
1181 for (
unsigned capid = 0; capid < 4; capid++) {
1182 for (
unsigned range = 0; range < 4; range++) {
1183 coder.setOffset (capid, range, atof (items [index++].c_str ()));
1186 for (
unsigned capid = 0; capid < 4; capid++) {
1187 for (
unsigned range = 0; range < 4; range++) {
1188 coder.setSlope (capid, range, atof (items [index++].c_str ()));
1191 if (items.size()>36)
1192 coder.setQIEIndex(atoi(items[index++].c_str()));
1206 fOutput <<
"# QIE data" << std::endl;
1207 sprintf (buffer,
"# %15s %15s %15s %15s %36s %36s %36s %36s %36s %36s %36s %36s\n",
1208 "eta",
"phi",
"dep",
"det",
1209 "4 x offsets cap0",
"4 x offsets cap1",
"4 x offsets cap2",
"4 x offsets cap3",
1210 "4 x slopes cap0",
"4 x slopes cap1",
"4 x slopes cap2",
"4 x slopes cap3");
1213 std::sort (channels.begin(), channels.end(), DetIdLess ());
1214 for (std::vector<DetId>::iterator channel = channels.begin ();
1215 channel != channels.end ();
1218 dumpId (fOutput, *channel);
1219 for (
unsigned capid = 0; capid < 4; capid++) {
1220 for (
unsigned range = 0; range < 4; range++) {
1221 sprintf (buffer,
" %8.5f", coder->
offset (capid, range));
1225 for (
unsigned capid = 0; capid < 4; capid++) {
1226 for (
unsigned range = 0; range < 4; range++) {
1227 sprintf (buffer,
" %8.5f", coder->
slope (capid, range));
1231 sprintf (buffer,
" %2d", coder->
qieIndex());
1233 fOutput << std::endl;
1241 while (fInput.getline(buffer, 1024)) {
1242 if (buffer [0] ==
'#')
continue;
1244 if (items.size () < 36) {
1245 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 36 items: eta, phi, depth, subdet, 32 bin values" << std::endl;
1258 for (
unsigned bin = 0;
bin < 32;
bin++) {
1259 values[
bin] = atof (items [index++].c_str ());
1261 coder.setMinCharges (values);
1271 fOutput <<
"# QIE data in calibration mode" << std::endl;
1272 sprintf (buffer,
"# %15s %15s %15s %15s %288s\n",
1273 "eta",
"phi",
"dep",
"det",
"32 x charges");
1276 std::sort (channels.begin(), channels.end(), DetIdLess ());
1277 for (std::vector<DetId>::iterator channel = channels.begin ();
1278 channel != channels.end ();
1282 dumpId (fOutput, *channel);
1284 for (
unsigned bin = 0;
bin < 32;
bin++) {
1285 sprintf (buffer,
" %8.5f", lowEdge [
bin]);
1288 fOutput << std::endl;
1298 while (fInput.getline(buffer, 1024)) {
1299 if (buffer [0] ==
'#')
continue;
1301 if (items.size () < 12) {
1302 if (items.size()==0)
continue;
1303 if (items.size()<9) {
1304 edm::LogError(
"MapFormat") <<
"HcalElectronicsMap-> line too short: " << buffer;
1307 if (items[8]==
"NA" || items[8]==
"NT") {
1308 while (items.size()<12) items.push_back(
"");
1309 }
else if (items[8]==
"HT") {
1310 if (items.size()==11) items.push_back(
"");
1312 edm::LogError(
"MapFormat") <<
"HcalElectronicsMap-> Bad line: " << buffer
1313 <<
"\n HT line must contain at least 11 items: i cr sl tb dcc spigot fiber fiberchan subdet=HT ieta iphi";
1317 edm::LogError(
"MapFormat") <<
"HcalElectronicsMap-> Bad line: " << buffer
1318 <<
"\n line must contain 12 items: i cr sl tb dcc spigot fiber fiberchan subdet ieta iphi depth";
1323 int crate = atoi (items [1].c_str());
1324 int slot = atoi (items [2].c_str());
1326 if (items [3] ==
"b") top = 0;
1327 int dcc = atoi (items [4].c_str());
1328 int spigot = atoi (items [5].c_str());
1330 if (items[3][0] ==
'u') {
1331 int fiber = atoi (items [6].c_str());
1332 int fiberCh = atoi (items [7].c_str());
1333 bool isTrig=(items[8] ==
"HT" || items[8] ==
"NT");
1335 }
else if (items[8] ==
"HT" || items[8] ==
"NT") {
1336 int slb = atoi (items [6].c_str());
1337 int slbCh = atoi (items [7].c_str());
1340 int fiber = atoi (items [6].c_str());
1341 int fiberCh = atoi (items [7].c_str());
1344 elId.
setHTR (crate, slot, top);
1348 if (items [8] ==
"NA") {
1350 }
else if (items [8] ==
"NT") {
1354 if (converter.isHcalDetId ()) {
1357 else if (converter.isHcalTrigTowerDetId ()) {
1358 fObject->
mapEId2tId (elId, converter.getId ());
1360 else if (converter.isHcalCalibDetId ()) {
1363 else if (converter.isHcalZDCDetId ()) {
1367 edm::LogWarning(
"Format Error") <<
"HcalElectronicsMap-> Unknown subdetector: "
1368 << items [8] <<
'/' << items [9] <<
'/' << items [10] <<
'/' << items [11] << std::endl;
1381 sprintf (buf,
"# %7s %3s %3s %3s %4s %7s %10s %14s %7s %5s %5s %6s",
1382 "i",
"cr",
"sl",
"tb",
"dcc",
"spigot",
"fiber/slb",
"fibcha/slbcha",
"subdet",
"ieta",
"iphi",
"depth");
1383 fOutput << buf << std::endl;
1385 for (
unsigned i = 0;
i < eids.size ();
i++) {
1389 if (trigger.
rawId ()) {
1393 sprintf (buf,
" %7X %3d %3d %3c %4d %7d %10d %14d %7s %5s %5s %6s",
1395 converter.getId().rawId(),
1399 converter.getFlavor ().c_str (), converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str ()
1401 fOutput << buf << std::endl;
1405 if (channel.
rawId()) {
1410 sprintf (buf,
" %7X %3d %3d %3c %4d %7d %10d %14d %7s %5s %5s %6s",
1412 converter.getId().rawId(),
1414 converter.getFlavor ().c_str (), converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str ()
1417 sprintf (buf,
" %7X %3d %3d u %4d %7d %10d %14d %7s %5s %5s %6s",
1419 converter.getId().rawId(),
1421 converter.getFlavor ().c_str (), converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str ()
1424 fOutput << buf << std::endl;
1433 if (!fObject)
return false;
1435 while (fInput.getline(buffer, 1024)) {
1436 if (buffer [0] ==
'#')
continue;
1438 if (items.size()==0)
continue;
1440 if (items.size() > 1 &&
1441 items[0].find(
"RctLsb")!=std::string::npos){
1442 fObject->
setRctLsb( atof( items[1].c_str() ) );
1445 if (items.size() > 1 &&
1446 items[0].find(
"Gain")!=std::string::npos){
1451 if (items.size () < 7) {
1452 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 7 items: eta, phi, depth, subdet, Rcalib, LutGranularity, OutputLutThreshold" << std::endl;
1458 atof (items [4].c_str()),
1459 atoi (items [5].c_str()),
1460 atoi (items [6].c_str()));
1470 const float _rctLsb = fObject.
getRctLsb();
1472 sprintf (buffer,
"# %20s\n",
"Non-channel data");
1474 sprintf (buffer,
"%8s %8.5f\n",
"RctLsb", _rctLsb);
1476 sprintf (buffer,
"%8s %8.5f\n",
"Gain", _gain);
1478 sprintf (buffer,
"# %15s %15s %15s %15s %8s %15s %19s %10s\n",
"eta",
"phi",
"dep",
"det",
"Rcalib",
"LutGranularity",
"OutputLutThreshold",
"DetId");
1481 std::sort (channels.begin(), channels.end(), DetIdLess ());
1482 for (std::vector<DetId>::iterator channel = channels.begin ();
1483 channel != channels.end ();
1488 dumpId (fOutput, *channel);
1489 sprintf (buffer,
" %8.5f %15d %19d %10X\n",
1492 _outputLutThreshold,
1501 if (!fObject)
return false;
1503 while (getline(fInput, buffer)) {
1504 if (buffer.at(0) ==
'#')
continue;
1505 std::vector <std::string> items =
splitString (buffer);
1506 if (items.size()==0)
continue;
1508 if (items.size() < 9) {
1509 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain 9 items: subDet, side_ring, slice, type, subChannel, LS, Value, UpperLimit, LowerLimit" << std::endl;
1515 unsigned int slice, subchan;
1516 switch (items[0].
at(1)) {
1533 from_string<int>(sidering, items[1],
std::dec);
1534 from_string<unsigned int>(slice, items[2],
std::dec);
1536 from_string<unsigned int>(subchan, items[4],
std::dec);
1542 float val,
upper,lower;
1543 from_string<int>(LS, items[5],
std::dec);
1544 from_string<float>(val, items[6],
std::dec);
1546 from_string<float>(lower, items[8],
std::dec);
1554 if (!(fObject->
addValue(newVal))) {
1556 <<
"\nwas not added to the HcalDcsValues object." << std::endl;
1566 fOutput <<
"# subDet side_ring slice type subChan LS Value UpperLimit LowerLimit DcsId\n";
1572 for (HcalDcsValues::DcsSet::const_iterator val = vals.begin();
1573 val != vals.end(); ++val) {
1576 switch (valId.subdet()) {
1590 fOutput << valId.subdet() <<
' ';
1594 fOutput << valId.ring() <<
' ';
1596 fOutput << valId.zside() <<
' ';
1598 fOutput << valId.slice() <<
' '
1599 << valId.typeString(valId.type()) <<
' '
1600 << valId.subchannel() <<
' ';
1601 fOutput << val->LS() <<
' '
1602 << val->getValue() <<
' '
1603 << val->getUpperLimit() <<
' '
1604 << val->getLowerLimit() <<
' ';
1605 fOutput << std::hex << val->DcsId() <<
std::dec <<
'\n';
1624 while (fInput.getline(buffer, 1024)) {
1625 if (buffer [0] ==
'#')
continue;
1627 if (items.size () < 8) {
1628 if (items.size()==0)
continue;
1630 edm::LogError(
"MapFormat") <<
"HcalDcsMap-> Bad line: " << buffer
1631 <<
"\n line must contain 8 items: line side_ring slice subchannel subdet ieta iphi depth";
1637 int ring = atoi(items[1].c_str());
1638 unsigned int slice = atoi (items [2].c_str());
1639 unsigned int subchannel = atoi (items [3].c_str());
1685 if (items[4].
find(
"CALIB")!=std::string::npos){
1688 else if (items[4].
find(
"HB")!=std::string::npos){
1691 else if (items[4].
find(
"HE")!=std::string::npos){
1694 else if (items[4].
find(
"HO")!=std::string::npos){
1697 else if (items[4].
find(
"HF")!=std::string::npos){
1701 edm::LogError(
"MapFormat") <<
"HcalDcsMap-> Unknown subdetector, line is not accepted: " << items[5];
1704 HcalDcsDetId dcsId(subdet, ring, slice, type, subchannel);
1707 if (converter.isHcalDetId()){
1708 id = converter.getId();
1711 edm::LogWarning(
"Invalid HCAL channel") <<
"HcalDcsMap-> invalid channel: "
1715 << items [7] << std::endl;
1729 sprintf (buf,
"# %7s %10s %6s %8s %7s %5s %5s %6s",
1730 "i",
"side_ring",
"slice",
"subchan",
"subdet",
"ieta",
"iphi",
"depth");
1731 fOutput << buf << std::endl;
1733 unsigned int line_counter = 0;
1740 sprintf (buf,
" %8X %10d %6d %8d %7s %5s %5s %6s",
1745 _converter.getFlavor().c_str(),
1746 _converter.getField1().c_str(),
1747 _converter.getField2().c_str(),
1748 _converter.getField3().c_str()
1750 fOutput << buf << std::endl;
1760 if (!fObject)
return false;
1762 while (fInput.getline(buffer, 1024)) {
1763 if (buffer [0] ==
'#')
continue;
1765 if (items.size()==0)
continue;
1766 if (items.size () != 9) {
1767 edm::LogWarning(
"Format Error") <<
"Bad line: " << buffer <<
"\n line must contain at 9 least items: eta, phi, depth, subdet, firstSample, samplesToAdd, ExpectedPeak, MinEnergy, and a set of comma-separated coefficients" << std::endl;
1775 atoi (items [4].c_str()),
1776 atoi (items [5].c_str()),
1777 atoi (items [6].c_str()),
1778 atof (items [7].c_str()),
1790 sprintf (buffer,
"# %15s %15s %15s %15s %15s %15s %15s %15s %30s\n",
"eta",
"phi",
"dep",
"det",
"FirstSample",
"SamplesToAdd",
"ExpectedPeak",
"MinEnergy",
"Coefficients");
1793 std::sort (channels.begin(), channels.end(), DetIdLess ());
1794 for (std::vector<DetId>::iterator channel = channels.begin ();
1795 channel != channels.end ();
1800 sprintf (buffer,
" %15u %15u %15u %15f",
1815 if (
x<coef.size()-1)
1818 sprintf(buffer,
"\n");
void dumpIdShort(std::ostream &fOutput, DetId id)
float getPedestal() const
unsigned int firstSample() const
static const HcalDetId Undefined
void setAlgoString(std::string fAlgo)
int fiberIndex() const
get the fiber index. For VME 1-8 (which of eight fibers carried by a spigot), for uTCA fibers are zer...
void setUnitADC(bool isADC)
float slope(unsigned fCapId, unsigned fRange) const
tuple start
Check for commandline option errors.
uint32_t qieIndex() const
unsigned int param2() const
bool getHcalSingleIntObject(std::istream &fInput, T *fObject, S *fCondObject)
std::vector< unsigned int > signalTS() const
bool getHcalSingleFloatObject(std::istream &fInput, T *fObject, S *fCondObject)
static int slb(const HcalTriggerPrimitiveSample &theSample)
unsigned int pileupCleaningID() const
const HcalQIECoder * getCoder(DetId fId) const
get QIE parameters
bool timeSmearing() const
unsigned int packingScheme() const
float getSigma(int fCapId1, int fCapId2) const
get correlation element for capId1/2 = 0..3
bool mapGeomId2DcsId(HcalDetId fId, HcalDcsDetId fDcsId)
uint32_t HFdigiflagSamplesToAdd() const
bool getHcalMatrixObject(std::istream &fInput, T *fObject, S *fCondObject)
std::vector< float > splitStringToFloatByComma(const std::string &fLine)
DcsSet const & getAllSubdetValues(DcsSubDet subd) const
bool correctForPhaseContainment() const
int htrSlot() const
get the htr slot
std::vector< unsigned int > splitStringToIntByComma(const std::string &fLine)
const Item * getValues(DetId fId, bool throwOnFail=true) const
bool dumpHcalSingleFloatObject(std::ostream &fOutput, const T &fObject)
unsigned int noiseFlaggingID() const
bool mapEId2tId(HcalElectronicsId fElectronicsId, HcalTrigTowerDetId fTriggerId)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
const HcalCalibrationQIECoder * getCoder(DetId fId) const
get QIE parameters
std::vector< std::string > splitString(const std::string &fLine)
unsigned int leakCorrectionID() const
bool addCoder(const HcalQIECoder &fCoder)
int crateId() const
get the readout VME crate number
int readoutVMECrateId() const
get the readout VME crate number
void dumpId(std::ostream &fOutput, DetId id)
unsigned int param1() const
unsigned int specialCaseID() const
uint32_t rawId() const
get the raw id
U second(std::pair< T, U > const &p)
const_iterator endById(void) const
std::vector< HcalDcsValue > DcsSet
void setUnitADC(bool isADC)
float getRespGain() const
int htrTopBottom() const
get the htr top/bottom (1=top/0=bottom), valid for VME
float offset(unsigned fCapId, unsigned fRange) const
const_iterator beginById(void) const
std::vector< DetId > getAllChannels() const
unsigned int param1() const
unsigned int nhits() const
HcalDetId getHcalDetId(void)
bool correctForTimeslew() const
bool correctTiming() const
int dccid() const
get the (Hcal local) DCC id for VME, crate number for uTCA
HcalDcsDetId getHcalDcsDetId(void)
bool dumpHcalMatrixObject(std::ostream &fOutput, const T &fObject)
uint32_t HFdigiflagExpectedPeak() const
int fiberChanId() const
get the fiber channel id (which of channels on a fiber)
std::string getTagString() const
unsigned int samplesToAdd() const
bool mapEId2chId(HcalElectronicsId fElectronicsId, DetId fId)
float correctionPhaseNS() const
int spigot() const
get the spigot (input number on DCC, AMC card number for uTCA)
unsigned int pulseShapeID() const
static DcsType DcsTypeFromString(const std::string &str)
int slbChannelIndex() const
get the SLB channel index (valid only for VME trigger-chain ids)
std::vector< double > HFdigiflagCoefficients() const
void setHTR(int crate, int slot, int tb)
std::string getAlgoString() const
std::vector< HcalElectronicsId > allElectronicsId() const
uint32_t HFdigiflagFirstSample() const
int slot() const
get the htr or uHTR slot
double S(const TLorentzVector &, const TLorentzVector &)
bool isTriggerChainId() const
unsigned int signalShape() const
static const HcalTrigTowerDetId Undefined
bool addValue(HcalDcsValue const &newVal)
bool getHcalObject(std::istream &fInput, T *fObject, S *fCondObject)
bool getObject(std::istream &fInput, HcalPedestals *fObject)
DetId getId(const std::vector< std::string > &items)
unsigned int binOfMaximum() const
bool dumpObject(std::ostream &fOutput, const HcalPedestals &fObject)
int slbSiteNumber() const
get the SLB site number (valid only for VME trigger-chain ids)
unsigned int packingScheme() const
const float * getValues() const
get value for all capId = 0..3
bool dumpHcalObject(std::ostream &fOutput, const T &fObject)
std::vector< unsigned int > noiseTS() const
const DetId lookupTrigger(HcalElectronicsId fId) const
brief lookup the trigger logical detid associated with the given electronics id
unsigned int firstAuxTS() const
const float * minCharges() const
void setTagString(std::string fTag)
uint32_t getValue() const
bool correctForLeadingEdge() const
bool addCoder(const HcalCalibrationQIECoder &fCoder)
bool addValues(const Item &myItem)
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
bool dumpHcalSingleIntObject(std::ostream &fOutput, const T &fObject)
unsigned int timeslewCorrectionID() const
std::vector< double > splitStringToDoubleByComma(const std::string &fLine)
bool from_string(T &t, const std::string &s, std::ios_base &(*f)(std::ios_base &))
double HFdigiflagMinEThreshold() const
bool useLeakCorrection() const