1 #ifndef _CSCCHIPSPEEDCORRECTIONDBCONDITIONS_H 2 #define _CSCCHIPSPEEDCORRECTIONDBCONDITIONS_H 30 typedef std::unique_ptr<CSCDBChipSpeedCorrection>
ReturnType;
62 printf(
"\n Generating fake DB constants for MC\n");
64 printf(
"\n Reading chip corrections from file %s \n", filename.data());
65 printf(
"my data offset value is %f \n", dataOffset);
70 const int CHIP_FACTOR = 100;
71 const int MAX_SIZE = 15768;
72 const int MAX_SHORT = 32767;
76 itemvector.resize(MAX_SIZE);
81 for (
int i = 0;
i < MAX_SIZE;
i++) {
82 itemvector[
i].speedCorr = 0;
88 FILE *
fin = fopen(filename.data(),
"r");
94 std::vector<int> new_index_id;
95 std::vector<float> new_chipPulse;
96 double runningTotal = 0;
101 int check = fscanf(fin,
102 "%d %d %d %d %d %d %f %f %d \n",
113 printf(
"The input file format is not as expected\n");
117 int serialChamber_safecopy = serialChamber;
130 if (serialChamber >= 235 && serialChamber <= 270)
131 serialChamber += 234;
133 if (serialChamber >= 271 && serialChamber <= 504)
142 int layer = (chip) / 5 + 1;
146 CSCDetId cscId_doubleCheck(endcap, station, ring, chamber, layer);
147 if (cscId != cscId_doubleCheck) {
148 printf(
"Why doesn't chamberSerial %d map to e: %d s: %d r: %d c: %d ? \n",
149 serialChamber_safecopy,
157 chip = (chip % 5) + 1;
164 if (endcap == 2 && station == 1 && ring == 1 && chip < 5) {
168 new_index_id.push_back(indexer.
chipIndex(cscId, chip));
169 new_chipPulse.push_back(t);
178 for (
int i = 0;
i < MAX_SIZE;
i++) {
179 itemvector[
i].speedCorr = 0;
182 for (
unsigned int i = 0;
i < new_index_id.size();
i++) {
183 if ((
short int)(fabs((dataOffset - new_chipPulse[
i]) * CHIP_FACTOR + 0.5)) < MAX_SHORT)
184 itemvector[new_index_id[
i] - 1].speedCorr =
185 (
short int)((dataOffset - new_chipPulse[i]) * CHIP_FACTOR + 0.5 * (dataOffset >= new_chipPulse[
i]) -
186 0.5 * (dataOffset < new_chipPulse[i]));
197 float ave = runningTotal / numNonZero;
198 for (
int i = 0;
i < MAX_SIZE;
i++) {
199 if (itemvector[
i].speedCorr == 0 || itemvector[
i].speedCorr == (
short int)(dataOffset * CHIP_FACTOR + 0.5))
200 itemvector[
i].speedCorr =
201 (
short int)((dataOffset - ave) * CHIP_FACTOR + 0.5 * (dataOffset >= ave) - 0.5 * (dataOffset < ave));
ChipSpeedContainer chipSpeedCorr
ReturnType produceDBChipSpeedCorrection(const CSCDBChipSpeedCorrectionRcd &)
CSCDetId detIdFromChamberIndex(IndexType ici) const
std::string dataCorrFileName
IndexType chipIndex(IndexType ie, IndexType is, IndexType ir, IndexType ic, IndexType il, IndexType ichip) const
~CSCChipSpeedCorrectionDBConditions() override
static CSCDBChipSpeedCorrection * prefillDBChipSpeedCorrection(bool isForMC, std::string dataCorrFileName, float dataOffse)
std::unique_ptr< CSCDBChipSpeedCorrection > ReturnType
std::vector< Item > ChipSpeedContainer
CSCChipSpeedCorrectionDBConditions(const edm::ParameterSet &)
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override
CSCDBChipSpeedCorrection * cndbChipCorr