Skip to content

Commit

Permalink
Merge pull request #26432 from abdoulline/HBX_HEX_HcalCalibDetId
Browse files Browse the repository at this point in the history
HCAL: adding Phase 1 HBX/HEX channels to CalibDetId and ASCII conditions processing
  • Loading branch information
cmsbuild authored Apr 17, 2019
2 parents e5aead7 + 96c1075 commit ef2c8bf
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 14 deletions.
20 changes: 17 additions & 3 deletions CalibFormats/HcalObjects/src/HcalText2DetIdConverter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,17 @@ bool HcalText2DetIdConverter::init (DetId fId) {
setField (1, calibId.rm());
setField (2, calibId.fiber());
setField (3, calibId.channel());
}
} else if ( calibId.calibFlavor()==HcalCalibDetId::HBX) {
flavorName="HBX";
setField (1, calibId.ieta());
setField (2, calibId.iphi());
setField (3, -999);
} else if ( calibId.calibFlavor()==HcalCalibDetId::HEX) {
flavorName="HEX";
setField (1, calibId.ieta());
setField (2, calibId.iphi());
setField (3, -999);
}
}
else {
flavorName = "UNKNOWN_FLAVOR";
Expand Down Expand Up @@ -229,10 +239,14 @@ bool HcalText2DetIdConverter::init (const std::string& fFlavor, const std::strin
int channel = calibChannel (field3);
mId = HcalCalibDetId (sd, ieta,iphi,channel);
}
else if (flavorName=="HOX") {
else if (flavorName=="HOX" || flavorName=="HBX" || flavorName=="HEX") {
int ieta=getField(1);
int iphi=getField(2);
mId = HcalCalibDetId (ieta,iphi);
mId = (flavorName=="HOX")?
(HcalCalibDetId(HcalCalibDetId::HOCrosstalk,ieta,iphi)):
((flavorName=="HBX")?(HcalCalibDetId(HcalCalibDetId::HBX,ieta,iphi)):
(HcalCalibDetId(HcalCalibDetId::HEX,ieta,iphi))
);
}
else if (flavorName=="UMNQIE") {
int channel=getField(1);
Expand Down
24 changes: 17 additions & 7 deletions DataFormats/HcalDetId/interface/HcalCalibDetId.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/** \class HcalCalibDetId
*
* Contents of the HcalCalibDetId :
* [19:17] Calibration Category (1 = CalibUnit, 2 = HX, 3=uMNio/qie, 4=CastorRad)
* [19:17] Calibration Category (1 = CalibUnit, 2 = HOX, 3=uMNio/qie, 4=CastorRad, 5=LASMON, 6=HBX, 7=HEX)
*
* For CalibUnit:
* [16:14] Subdetector
Expand All @@ -29,13 +29,23 @@
* [9:5] fiber-in-rm
* [4:0] channel-on-fiber
*
* For Laser Monitoring channels:
* [16:10] ieta
* [9:5] iphi
* [3:0] cbox
*
* For HBX/HEX:
* [19:17] 6 or 7 (CalibType)
* [12:12] side (true = positive)
* [11:7] ieta (1-29)
* [6:0] iphi (1-72)
*
* \author J. Mans - Minnesota
*/
class HcalCalibDetId : public HcalOtherDetId {
public:
/** Type identifier within calibration det ids */
enum CalibDetType { CalibrationBox = 1, HOCrosstalk = 2, uMNqie = 3, CastorRadFacility = 4, LASERMON = 5 };
enum CalibDetType { CalibrationBox = 1, HOCrosstalk = 2, uMNqie = 3, CastorRadFacility = 4, LASERMON = 5, HBX = 6, HEX = 7 };

/** Create a null det id */
HcalCalibDetId();
Expand All @@ -46,21 +56,21 @@ class HcalCalibDetId : public HcalOtherDetId {
HcalCalibDetId& operator=(const DetId& id);
/** Construct a calibration box - channel detid */
HcalCalibDetId(HcalSubdetector subdet, int ieta, int iphi, int ctype);
/** Construct an HO Crosstalk id */
/** Construct an HOX/HBX/HEX Crosstalk id */
HcalCalibDetId(CalibDetType dt, int ieta, int iphi);
/** Keep old HOX constructor for back-compatibility */
HcalCalibDetId(int ieta, int iphi);
/** Construct a uMNqie id or other id which uses a single value plus a DetType */
HcalCalibDetId(CalibDetType dt, int value);
/** Construct a Castor radiation test facility id or other id which uses three values plus a DetType */
/** Construct a Castor radiation test facility id or other id which uses three values plus a DetType */
HcalCalibDetId(CalibDetType dt, int value1, int value2, int value3);

/// get the flavor of this calibration detid
CalibDetType calibFlavor() const { return (CalibDetType)((id_>>17)&0x7); }


/// get the HcalSubdetector (if relevant)
HcalSubdetector hcalSubdet() const;
/// get the rbx name (if relevant)
// std::string rbx() const;
/// std::string rbx() const;
/// get the "ieta" identifier (if relevant)
int ieta() const;
/// get the low-edge iphi (if relevant)
Expand Down
25 changes: 21 additions & 4 deletions DataFormats/HcalDetId/src/HcalCalibDetId.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,30 @@ HcalCalibDetId::HcalCalibDetId(HcalSubdetector subdet, int ieta, int iphi, int c
else id_|=((iphi&0x7F)<<4); // phi index, bits [4:10], simply allow all values from 0-127, shouldn't be any
}

// keep old HOX constructor for back-compatibility
HcalCalibDetId::HcalCalibDetId(int ieta, int iphi) : HcalOtherDetId(HcalCalibration) {
id_|=(HOCrosstalk<<17); // Calibration Category, bits [17:19] (= "2" for HOX)
id_|=(iphi&0x7F) // phi index, bits [0:6]
|((abs(ieta)&0xF)<<7) // eta index, bits [7:10]
|(((ieta > 0)?(1):(0))<<11); // z side, bit [11]
}

HcalCalibDetId::HcalCalibDetId(CalibDetType dt, int ieta, int iphi) : HcalOtherDetId(HcalCalibration) {
id_|=(dt<<17); // Calibration Category, bits [17:19] (= "2" for HOX, "6" for HBX, "7" for HEX)
id_|=(iphi&0x7F); // phi index, bits [0:6];

(dt==HOCrosstalk)?
(id_|=((abs(ieta)&0xF) <<7)|(((ieta > 0)?(1):(0))<<11)):
(id_|=((abs(ieta)&0x1F)<<7)|(((ieta > 0)?(1):(0))<<12));
}

HcalCalibDetId::HcalCalibDetId(CalibDetType dt, int value) : HcalOtherDetId(HcalCalibration) {
id_|=(dt<<17);
id_|=value&0xFF;
}

HcalCalibDetId::HcalCalibDetId(CalibDetType dt, int value1, int value2, int value3) : HcalOtherDetId(HcalCalibration) {
id_|=(dt<<17);
id_|=(dt<<17); // Calibration Category, bits [17:19]
id_|=(value1&0x3F)<<10;
id_|=(value2&0x1F)<<5;
id_|=(value3&0x1F);
Expand Down Expand Up @@ -75,15 +85,18 @@ HcalSubdetector HcalCalibDetId::hcalSubdet() const {
}

int HcalCalibDetId::ieta() const {
return (calibFlavor()==CalibrationBox)?(((id_>>11)&0x7)-2):((calibFlavor()==HOCrosstalk)?(((id_>>7)&0xF)*zside()):(calibFlavor()==LASERMON?((id_>>10)&0x3F):(0)));
CalibDetType cf = calibFlavor();
return (cf==CalibrationBox)?(((id_>>11)&0x7)-2):((cf==HOCrosstalk)?(((id_>>7)&0xF)*zside()):(cf==LASERMON?((id_>>10)&0x3F):(((cf==HBX || cf==HEX)?((id_>>10)&0x1F)*zside():(0)))));
}

int HcalCalibDetId::iphi() const {
return (calibFlavor()==CalibrationBox)?((id_>>4)&0x7F):((calibFlavor()==HOCrosstalk)?(id_&0x7F):(calibFlavor()==LASERMON?((id_>>5)&0x1F):(0)));
CalibDetType cf = calibFlavor();
return (cf==CalibrationBox)?((id_>>4)&0x7F):((cf==HOCrosstalk || cf==HBX || cf==HEX)?(id_&0x7F):(cf==LASERMON?((id_>>5)&0x1F):(0)));
}

int HcalCalibDetId::zside() const {
return (calibFlavor()==HOCrosstalk)?(((id_>>11)&0x1)?(1):(-1)):(0);
CalibDetType cf = calibFlavor();
return (cf==HOCrosstalk)?(((id_>>11)&0x1)?(1):(-1)):((cf==HBX || cf==HEX)?((id_>>12)&0x1)?(1):(-1):(0));
}

std::string HcalCalibDetId::cboxChannelString() const {
Expand Down Expand Up @@ -130,6 +143,10 @@ std::ostream& operator<<(std::ostream& s,const HcalCalibDetId& id) {
return s << "(LASERMON" << id.channel() << ')';
case (HcalCalibDetId::CastorRadFacility):
return s << "(CastorRadFacility " << id.rm() << " / " << id.fiber() << " / " << id.channel() << ')';
case (HcalCalibDetId::HBX):
return s << "(HBX " << id.ieta() << "," << id.iphi() << ")";
case (HcalCalibDetId::HEX):
return s << "(HEX " << id.ieta() << "," << id.iphi() << ")";
default: return s;
};
}

0 comments on commit ef2c8bf

Please sign in to comment.