Skip to content

Commit 5b8f134

Browse files
Dmitri Peresunkoshahor02
authored andcommitted
TRU geometry fix; writing histos in energy calib
1 parent 2928a48 commit 5b8f134

3 files changed

Lines changed: 37 additions & 29 deletions

File tree

Detectors/PHOS/base/src/Geometry.cxx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ bool Geometry::truAbsToRelNumbering(short truId, short trigType, char* relid)
9797
relid[2] = 0;
9898
return false;
9999
}
100-
relid[1] = 16 * ((2 + ddl) % 4) + 13 - 2 * (truId % 7); // x index
100+
relid[1] = 16 * ((2 + ddl) % 4) + 1 + 2 * (truId % 7); // x index
101101
if (truId < 112) {
102102
relid[2] = 53 - 2 * (truId / 7); // z index branch 0
103103
} else {
104104
truId -= 112;
105105
relid[2] = 25 - 2 * (truId / 7); // z index branch 1
106106
}
107-
} else { // 2x2 trigger
108-
relid[1] = 16 * ((2 + ddl) % 4) + 15 - 2 * (truId % 8); // x index
107+
} else { // 2x2 trigger
108+
relid[1] = 16 * ((2 + ddl) % 4) + 1 + 2 * (truId % 8); // x index
109109
if (truId < 112) {
110110
relid[2] = 55 - 2 * (truId / 8); // z index branch 0
111111
} else {
@@ -127,7 +127,7 @@ short Geometry::truRelToAbsNumbering(const char* relId, short trigType)
127127
} else {
128128
absId = 112 + ((25 - relId[2]) / 2) * 7;
129129
}
130-
absId += ((13 - relId[1] % 16) / 2) % 7;
130+
absId += (((relId[1] - 1) % 16) / 2) % 7;
131131
absId += ddl * 224;
132132
return getTotalNCells() + absId + 1;
133133
} else { // 2x2
@@ -136,7 +136,7 @@ short Geometry::truRelToAbsNumbering(const char* relId, short trigType)
136136
} else {
137137
absId = 112 + ((27 - relId[2]) / 2) * 8;
138138
}
139-
absId += ((15 - (relId[1] % 16)) / 2) % 8;
139+
absId += (((relId[1] - 1) % 16) / 2) % 8;
140140
absId += ddl * 224;
141141
return getTotalNCells() + absId + 1;
142142
}

Detectors/PHOS/calib/include/PHOSCalibWorkflow/PHOSEnergyCalibDevice.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,21 @@ class PHOSEnergyCalibDevice : public o2::framework::Task
7272
float mEminLGTime = 5.;
7373
float mEDigMin = 0.05;
7474
float mECluMin = 0.4;
75-
std::string mOutputDir; /// where to write calibration digits
76-
std::string mFileName; /// file name of output calib digits
77-
std::string mMetaFileDir; /// where to store meta files
75+
std::string mOutputDir; /// where to write calibration digits
76+
std::string mFileName; /// file name of output calib digits
77+
std::string mHistoFileName; /// file name of output calib digits
78+
std::string mMetaFileDir; /// where to store meta files
7879
std::string mLHCPeriod;
7980
int mRunNumber = -1;
8081
std::unique_ptr<PHOSEnergyCalibrator> mCalibrator; /// Agregator of calibration TimeFrameSlots
8182
std::unique_ptr<const BadChannelsMap> mBadMap; /// Latest bad channels map
8283
std::unique_ptr<const CalibParams> mCalibParams; /// Latest bad channels map
8384
std::vector<uint32_t> mOutputDigits; /// accumulated output digits
8485
std::unique_ptr<TFile> mFileOut; /// File to store output calib digits
86+
std::unique_ptr<TFile> mHistoFileOut; /// File to store output histograms
8587
std::unique_ptr<TTree> mTreeOut; /// Tree to store output calib digits
8688
std::unique_ptr<o2::dataformats::FileMetaData> mFileMetaData;
89+
std::unique_ptr<o2::dataformats::FileMetaData> mHistoFileMetaData;
8790
std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
8891
};
8992

Detectors/PHOS/calib/src/PHOSEnergyCalibDevice.cxx

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,6 @@ void PHOSEnergyCalibDevice::endOfStream(o2::framework::EndOfStreamContext& ec)
130130
{
131131
mCalibrator->checkSlotsToFinalize(o2::calibration::INFINITE_TF);
132132
mCalibrator->endOfStream();
133-
if (mPostHistos) {
134-
postHistosCCDB(ec);
135-
}
136133
writeOutFile();
137134
}
138135

@@ -156,6 +153,9 @@ void PHOSEnergyCalibDevice::fillOutputTree()
156153
mFileOut = std::make_unique<TFile>(mFileName.c_str(), "recreate");
157154
mTreeOut = std::make_unique<TTree>("phosCalibDig", "O2 PHOS calib tree");
158155
mFileMetaData = std::make_unique<o2::dataformats::FileMetaData>();
156+
mHistoFileName = mOutputDir + fmt::format("PHOS_CalibHistos_{}.root", mRunNumber);
157+
mHistoFileOut = std::make_unique<TFile>(mHistoFileName.c_str(), "recreate");
158+
mHistoFileMetaData = std::make_unique<o2::dataformats::FileMetaData>();
159159
}
160160
auto* br = mTreeOut->GetBranch("PHOSCalib");
161161
auto* pptr = &mOutputDigits;
@@ -202,24 +202,31 @@ void PHOSEnergyCalibDevice::writeOutFile()
202202
}
203203
LOG(info) << "Stored metadate file " << mFileName << ".done";
204204
mFileMetaData.reset();
205-
}
206-
void PHOSEnergyCalibDevice::postHistosCCDB(o2::framework::EndOfStreamContext& ec)
207-
{
208-
// prepare all info to be sent to CCDB
209-
auto flName = o2::ccdb::CcdbApi::generateFileName("TimeEnHistos");
210-
std::map<std::string, std::string> md;
211-
o2::ccdb::CcdbObjectInfo info("PHS/Calib/TimeEnHistos", "TimeEnHistos", flName, md, mRunStartTime, o2::ccdb::CcdbObjectInfo::INFINITE_TIMESTAMP);
212-
info.setMetaData(md);
213-
auto image = o2::ccdb::CcdbApi::createObjectImage(mCalibrator->getCollectedHistos(), &info);
214205

215-
LOG(info) << "Sending object " << info.getPath() << "/" << info.getFileName()
216-
<< " of size " << image->size()
217-
<< " bytes, valid for " << info.getStartValidityTimestamp()
218-
<< " : " << info.getEndValidityTimestamp();
206+
LOG(info) << "Writing calibration histograms";
207+
mHistoFileOut->cd();
208+
mHistoFileOut->WriteObjectAny(mCalibrator->getCollectedHistos(), "o2::phos::ETCalibHistos", "histos");
209+
mHistoFileOut->Close();
210+
mHistoFileOut.reset();
219211

220-
header::DataHeader::SubSpecificationType subSpec{(header::DataHeader::SubSpecificationType)0};
221-
ec.outputs().snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, "PHOS_TEHistos", subSpec}, *image.get());
222-
ec.outputs().snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, "PHOS_TEHistos", subSpec}, info);
212+
// write metaFile data
213+
mHistoFileMetaData->fillFileData(mHistoFileName);
214+
mHistoFileMetaData->setDataTakingContext(mDataTakingContext);
215+
mHistoFileMetaData->type = "calib";
216+
mHistoFileMetaData->priority = "high";
217+
218+
metaFileNameTmp = mMetaFileDir + fmt::format("PHOS_CalibHistos_{}.tmp", mRunNumber);
219+
metaFileName = mMetaFileDir + fmt::format("PHOS_CalibHistos_{}.done", mRunNumber);
220+
try {
221+
std::ofstream metaFileOut(metaFileNameTmp);
222+
metaFileOut << *mHistoFileMetaData.get();
223+
metaFileOut.close();
224+
std::filesystem::rename(metaFileNameTmp, metaFileName);
225+
} catch (std::exception const& e) {
226+
LOG(error) << "Failed to store PHOS histos meta data file " << metaFileName << ", reason: " << e.what();
227+
}
228+
LOG(info) << "Stored histos metadate file " << mHistoFileName << ".done";
229+
mHistoFileMetaData.reset();
223230
}
224231
o2::framework::DataProcessorSpec o2::phos::getPHOSEnergyCalibDeviceSpec(bool useCCDB)
225232
{
@@ -241,8 +248,6 @@ o2::framework::DataProcessorSpec o2::phos::getPHOSEnergyCalibDeviceSpec(bool use
241248
inputs);
242249
using clbUtils = o2::calibration::Utils;
243250
std::vector<OutputSpec> outputs;
244-
outputs.emplace_back(ConcreteDataTypeMatcher{clbUtils::gDataOriginCDBPayload, "PHOS_TEHistos"}, o2::framework::Lifetime::Sporadic);
245-
outputs.emplace_back(ConcreteDataTypeMatcher{clbUtils::gDataOriginCDBWrapper, "PHOS_TEHistos"}, o2::framework::Lifetime::Sporadic);
246251

247252
return o2::framework::DataProcessorSpec{"PHOSEnergyCalibDevice",
248253
inputs,

0 commit comments

Comments
 (0)