From 76da59b96f11cae2cbbc0b7767dc0f4f89c1ba90 Mon Sep 17 00:00:00 2001 From: lietava Date: Fri, 29 Sep 2023 07:16:17 +0200 Subject: [PATCH 01/10] macro for chiara --- Detectors/CTP/macro/GetScalersForRun.C | 93 ++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 Detectors/CTP/macro/GetScalersForRun.C diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C new file mode 100644 index 0000000000000..653f467db4348 --- /dev/null +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -0,0 +1,93 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +#if !defined(__CLING__) || defined(__ROOTCLING__) +#include +#include +#endif +using namespace o2::ctp; + +void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) +{ + if (test == 0) { + return; + } + std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; + std::string mCCDBPathCTPConfig = "CTP/Config/Config"; + //o2::ccdb::CcdbApi api; + //api.init("http://alice-ccdb.cern.ch"); // alice-ccdb.cern.ch + //api.init("http://ccdb-test.cern.ch:8080"); + auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); + //ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); + auto soreor = ccdbMgr.getRunDuration(runNumber); + uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; + std::cout << "Timestamp:" << timeStamp << std::endl; + // + std::string sfill = std::to_string(fillN); + std::map metadata; + metadata["fillNumber"] = sfill; + auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); + auto bfilling = lhcifdata->getBunchFilling(); + std::vector bcs = bfilling.getFilledBCs(); + std::cout << "Number of interacting bc:" << bcs.size() << std::endl; + // + std::string srun = std::to_string(runNumber); + metadata.clear(); // can be empty + metadata["runNumber"] = srun; + ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); + auto ctpscalers = ccdbMgr.getSpecific(mCCDBPathCTPScalers, timeStamp, metadata); + if (ctpscalers == nullptr) { + LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; + } + auto ctpcfg = ccdbMgr.getSpecific(mCCDBPathCTPConfig, timeStamp, metadata); + if (ctpcfg == nullptr) { + LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; + } + std::cout << "all good" << std::endl; + ctpscalers->convertRawToO2(); + std::vector ctpcls = ctpcfg->getCTPClasses(); + int tsc = 255; + int tce = 255; + for(auto const& cls: ctpcls) { + if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { + tsc = cls.getIndex(); + std::cout << cls.name << ":" << tsc << std::endl; + } + if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { + tce = cls.getIndex(); + std::cout << cls.name << ":" << tsc << std::endl; + } + } + std::cout << "ZNC:"; + int inp = 26; + double_t nbc = bcs.size(); + double_t frev = 11245; + double_t sigmaratio = 28.; + std::vector recs = ctpscalers->getScalerRecordO2(); + double_t time0 = recs[0].epochTime; + double_t timeL = recs[recs.size() - 1].epochTime; + double_t Trun = timeL-time0; + double_t integral = recs[recs.size() - 1].scalersInps[inp - 1] - recs[0].scalersInps[inp - 1]; + double_t rate = integral/Trun; + double_t rat = integral/Trun/nbc/frev; + double_t mu = -TMath::Log(1-rat); + double_t pp = 1 - mu/(TMath::Exp(mu)-1); + double_t ratepp = mu*nbc*frev; + double_t integralpp = ratepp*Trun; + std::cout << "Rate:"<printInputRateAndIntegral(26); + // + std::cout << "TSC:"; + ctpscalers->printClassBRateAndIntegral(tsc+1); + std::cout << "TCE:"; + ctpscalers->printClassBRateAndIntegral(tce+1); +} From 5f98d69556cdd2e08ca75153bf3845fabdf1cb97 Mon Sep 17 00:00:00 2001 From: lietava Date: Mon, 2 Oct 2023 14:15:30 +0200 Subject: [PATCH 02/10] dev: macros for digits and lumi --- Detectors/CTP/macro/CheckAOD2CTPDigitsII.C | 183 +++++++++++++++++++++ Detectors/CTP/macro/GetScalersForRun.C | 3 +- Detectors/CTP/macro/PlotPbLumi.C | 91 ++++++++++ 3 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 Detectors/CTP/macro/CheckAOD2CTPDigitsII.C create mode 100644 Detectors/CTP/macro/PlotPbLumi.C diff --git a/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C b/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C new file mode 100644 index 0000000000000..a55c4529c3936 --- /dev/null +++ b/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C @@ -0,0 +1,183 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +/// \file checkAOD2CTPDigits.C +/// \brief create CTP config, test it and add to database +/// \author Roman Lietava + +#if !defined(__CLING__) || defined(__ROOTCLING__) + +#include +#include "TFile.h" +#include "TTree.h" +#include +#include +#include +#include "TKey.h" +#include "TTreeReader.h" +#include "TTreeReaderValue.h" +#include "CommonDataFormat/InteractionRecord.h" +#endif +// To produce CTP digits: +// o2-raw-tf-reader-workflow -b --onlyDet CTP,FT0 --input-data list.txt | o2-ctp-reco-workflow -b --use-verbose-mode +// To produce AOD: +// WORKFLOW_PARAMETERS="AOD" WORKFLOW_DETECTORS="CTP,FT0,FV0" IGNORE_EXISTING_SHMFILES=1 $O2_ROOT/prodtests/full-system-test/run-workflow-on-inputlist.sh TF list.txt +using namespace o2::ctp; +int CheckAOD2CTPDigits(bool files = 1) +{ + if (files == 0) { + return 0; + } + int fRunNumber; + ULong64_t fGlobalBC; + ULong64_t fTriggerMask; + ULong64_t fInputMask; + std::unique_ptr file(TFile::Open("AO2D.root")); + if(file == nullptr) { + std::cout << "Can not open file AO2D.root" << std::endl; + return 1; + } + file->ls(); + TIter keyList(file->GetListOfKeys()); + TKey* key; + TTree* tree; + std::map bc2classmask; + std::map bc2inputmask; + // Find aod trigger info + int i = 0; + while ((key = (TKey*)keyList())) { + std::cout << "loop:" << i << " " << key->GetName() << std::endl; + i++; + std::string name = key->GetName(); + if(name.find("metaData") != std::string::npos) { + std::cout << "Skipping:" << name << std::endl; + continue; + } + tree = (TTree*)file->Get(Form("%s/O2bc_001", key->GetName())); + if (tree != 0) { + std::cout << "found O2bc" << std::endl; + tree->SetBranchAddress("fRunNumber", &fRunNumber); + tree->SetBranchAddress("fGlobalBC", &fGlobalBC); + tree->SetBranchAddress("fTriggerMask", &fTriggerMask); + tree->SetBranchAddress("fInputMask", &fInputMask); + std::cout << "# of entries:" << tree->GetEntries() << std::endl; + int NN = tree->GetEntries(); + int Nloop = NN; + for (int n{0}; n < Nloop; ++n) { + tree->GetEvent(n); + if (fTriggerMask) { + bc2classmask[fGlobalBC] = fTriggerMask; + //std::cout << std::dec << n << " Run:" << fRunNumber << " GBC:" << std::hex << fGlobalBC << " TM:0x" << std::hex << fTriggerMask << " count:" << bc2classmask.count(fGlobalBC) << std::endl; + } + if(fInputMask) { + bc2inputmask[fGlobalBC] = fInputMask; + } + if(1) { + if(fInputMask || fTriggerMask) { + auto ir = o2::InteractionRecord::long2IR(fGlobalBC); + //auto bcc = ir.orbit; + //if(fTriggerMask) std::cout << "===>"; + //std::cout << std::hex << ir.orbit << " " << ir.bc << " " << fInputMask << " " << fTriggerMask << std::dec << " (" << ir.orbit << " " << ir.bc << ")" << std::endl; + } + } + } + } else { + std::cout << "return 1" << std::endl; + return 1; + } + } + //return 0; + // Read CTP digits and check if every class mask in digits is in AOD + // CTP digits + TFile* fileDigits = TFile::Open("ctpdigitsWOD.root"); + // + fileDigits->ls(); + o2::ctp::CTPDigit* dig = new o2::ctp::CTPDigit; + // + // tree->Print(); + TTreeReader reader("o2sim", fileDigits); + TTreeReaderValue> ctpdigs(reader, "CTPDigits"); + // TTreeReaderArray ctpdigs(reader,"CTPDigits"); + bool firstE = true; + // + std::cout << "Doing ctpdigits" << std::endl; + std::map bc2classmaskD; + std::map bc2inputmaskD; + std::bitset<48> tvxmask; + tvxmask.set(2); + int nnotfinp = 0; + int nokinp = 0; + int nnotf = 0; + int nok = 0; + while (reader.Next()) { + if (ctpdigs.GetSetupStatus() < 0) { + std::cout << "Error:" << std::dec << ctpdigs.GetSetupStatus() << " for:" << ctpdigs.GetBranchName() << std::endl; + return 1; + } + // std::cout << "size:" << std::dec << ctpdigs.GetSize() << std::endl; + //std::cout << "size:" << std::dec << ctpdigs->size() << std::endl; + for (auto const& dig : *ctpdigs) { + ULong64_t gbc = dig.intRecord.toLong(); + if (dig.CTPClassMask.count()) { + bc2classmaskD[gbc] = dig.CTPClassMask.to_ullong(); + // int del = 280+17; + //auto it = bc2classmask.find (gbc); + //if(it != bc2classmask.end()) { + if (bc2classmask.count(gbc)) { + //bc2classmask.erase(gbc); + nok++; + //std::cout << std::hex << gbc << " tc aod clsmask:" << bc2classmask[gbc] << " " << dig.CTPClassMask.to_ullong() << std::endl; + // dig.printStream(std::cout); + } else { + std::cout << std::dec << dig.intRecord.orbit << " " << dig.intRecord.bc << " " << std::hex << dig.intRecord.toLong() << " not found " << bc2classmask.count(gbc) << std::endl; + nnotf++; + } + } + if (dig.CTPInputMask.count()) { + bc2inputmaskD[gbc] = dig.CTPInputMask.to_ullong(); + //auto it = bc2inputmask.find (gbc); + //if(it != bc2inputmask.end()) { + if(bc2inputmask.count(gbc)){ + //bc2inputmask.erase(gbc); + nokinp++; + //std::cout << std::hex << gbc << " ir aod inpmask:" << bc2inputmask[gbc] << " " << dig.CTPInputMask.to_ullong() << std::endl; + } else { + std::cout << std::dec << dig.intRecord.orbit << " " << dig.intRecord.bc << " " << std::hex << dig.intRecord.toLong() << " not found " << bc2inputmask.count(gbc) << std::endl; + nnotfinp++; + } + } + } + } + std::cout << "TClasses ===> nok:" << nok << " NOT found in digits:" << nnotf << " left:" << bc2classmask.size() << std::endl; + std::cout << "Inputs ===> nok:" << nokinp << " NOT found in digits:" << nnotfinp << " left:" << bc2inputmask.size() << std::endl; + nok = 0; + nokinp = 0; + nnotf = 0; + nnotfinp = 0; + for(auto const& tm: bc2classmask) { + if(bc2classmaskD.count(tm.first)) { + nok++; + } else { + nnotf++; + } + } + for(auto const& tm: bc2inputmask) { + if(bc2inputmaskD.count(tm.first)) { + nokinp++; + } else { + nnotfinp++; + } + } + + std::cout << "TClasses ===> nok:" << nok << " NOT found in aod:" << nnotf << " left:" << bc2classmaskD.size() << std::endl; + std::cout << "Inputs ===> nok:" << nokinp << " NOT found in aod:" << nnotfinp << " left:" << bc2inputmaskD.size() << std::endl; + return 0; +} diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index 653f467db4348..6769ce4b806d3 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -63,7 +63,7 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) } if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { tce = cls.getIndex(); - std::cout << cls.name << ":" << tsc << std::endl; + std::cout << cls.name << ":" << tce << std::endl; } } std::cout << "ZNC:"; @@ -90,4 +90,5 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) ctpscalers->printClassBRateAndIntegral(tsc+1); std::cout << "TCE:"; ctpscalers->printClassBRateAndIntegral(tce+1); + std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; } diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C new file mode 100644 index 0000000000000..04f3110444a32 --- /dev/null +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -0,0 +1,91 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +/// \file TestCTPScalers.C +/// \brief create CTP scalers, test it and add to database +/// \author Roman Lietava +// root -b -q "GetScalers.C(\"519499\", 1656286373953)" +#if !defined(__CLING__) || defined(__ROOTCLING__) + +#include +#include "CCDB/CcdbApi.h" +#include "CCDB/BasicCCDBManager.h" +#include "DataFormatsCTP/Scalers.h" +#include "DataFormatsCTP/Configuration.h" +#include +#include +#include +#endif +using namespace o2::ctp; +void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") +{ + std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; + std::string mCCDBPathCTPConfig = "CTP/Config/Config"; + auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); + // + auto soreor = ccdbMgr.getRunDuration(runNumber); + uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; + std::cout << "Timestamp:" << timeStamp << std::endl; + // + std::string sfill = std::to_string(fillN); + std::map metadata; + metadata["fillNumber"] = sfill; + auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); + auto bfilling = lhcifdata->getBunchFilling(); + std::vector bcs = bfilling.getFilledBCs(); + std::cout << "Number of interacting bc:" << bcs.size() << std::endl; + // + std::string srun = std::to_string(runNumber); + metadata.clear(); // can be empty + metadata["runNumber"] = srun; + ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); + auto scl = ccdbMgr.getSpecific(mCCDBPathCTPScalers, timeStamp, metadata); + if (scl == nullptr) { + LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; + return; + } + // + //CTPConfiguration ctpcfg; + scl->convertRawToO2(); + std::vector recs = scl->getScalerRecordO2(); + std::cout << "TVX,TSC,TCE,ZNC:" << std::endl; + scl->printInputRateAndIntegral(3); + scl->printInputRateAndIntegral(4); + scl->printInputRateAndIntegral(5); + scl->printInputRateAndIntegral(26); + std::cout << " TVX,TVX&TCE,TVX&TSC,TVX&VCH:" << std::endl; + for(int i = 0; i<10; i++) { + scl->printClassBRateAndIntegral(i+1); + } + //scl.printLMBRateVsT(); + int n = recs.size()-1; + std::cout << "size n:" << n << std::endl; + std::cout << "size:" << n << ":" << recs[0].scalersInps[26] << ":" << recs[n].scalersInps[26] << std::endl; + int itsc = 4; + Double_t x[n-1],znc[n-1]; + for(int i = 0; i < n; i++) { + x[i] = (double_t)(recs[i+1].intRecord.orbit); + double_t tt = (double_t)(recs[i+1].intRecord.orbit - recs[i].intRecord.orbit ); + tt = tt*88e-6; + znc[i] = (double_t)(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])/28./tt; + auto had = recs[i+1].scalers[itsc+1].lmBefore - recs[i].scalers[itsc+1].lmBefore; + had += recs[i+1].scalers[itsc].lmBefore - recs[i].scalers[itsc].lmBefore; + //auto had = recs[i+1].scalers[itsc].lmBefore - recs[i].scalers[itsc].lmBefore; + double_t rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + //znc[i] = rat; + } + TGraph *gr1 = new TGraph(n,x,znc); + gr1->SetTitle("R=ZNC/28 rate [Hz]; time[Orbit]; R"); + //gr1->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[Orbit]; R"); + //gr1->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[Orbit]; R"); + TCanvas *c1 = new TCanvas("c1",srun.c_str(),200,10,600,400); + gr1->Draw("A*"); +} From ed5c53dc8c96ba31933b72688d5374319deb2db4 Mon Sep 17 00:00:00 2001 From: lietava Date: Sat, 7 Oct 2023 08:08:09 +0200 Subject: [PATCH 03/10] dev: modification and new macro for lumi --- Detectors/CTP/macro/CMakeLists.txt | 12 ++ Detectors/CTP/macro/GetScalersForRun.C | 13 +- Detectors/CTP/macro/PlotPbLumi.C | 128 +++++++++++++++----- Detectors/CTP/macro/PlotPbLumiII.C | 159 +++++++++++++++++++++++++ 4 files changed, 278 insertions(+), 34 deletions(-) create mode 100644 Detectors/CTP/macro/PlotPbLumiII.C diff --git a/Detectors/CTP/macro/CMakeLists.txt b/Detectors/CTP/macro/CMakeLists.txt index 8f8d4ae36720a..8aa0198adb065 100644 --- a/Detectors/CTP/macro/CMakeLists.txt +++ b/Detectors/CTP/macro/CMakeLists.txt @@ -33,6 +33,10 @@ o2_add_test_root_macro(CheckAOD2CTPDigits.C PUBLIC_LINK_LIBRARIES O2::DataFormatsCTP O2::CCDB LABELS ctp) +o2_add_test_root_macro(CheckAOD2CTPDigitsII.C + PUBLIC_LINK_LIBRARIES O2::DataFormatsCTP + O2::CCDB + LABELS ctp) o2_add_test_root_macro(TestConfig.C PUBLIC_LINK_LIBRARIES O2::DataFormatsCTP O2::CCDB @@ -49,3 +53,11 @@ o2_add_test_root_macro(ReadCTPRunScalersFromFile.C PUBLIC_LINK_LIBRARIES O2::DataFormatsCTP O2::CCDB LABELS ctp) +o2_add_test_root_macro(GetScalersForRun.C + PUBLIC_LINK_LIBRARIES O2::DataFormatsCTP + O2::CCDB + LABELS ctp) +o2_add_test_root_macro(PlotPbLumi.C + PUBLIC_LINK_LIBRARIES O2::DataFormatsCTP + O2::CCDB + LABELS ctp) diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index 6769ce4b806d3..3380785b0563d 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -56,6 +56,7 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) std::vector ctpcls = ctpcfg->getCTPClasses(); int tsc = 255; int tce = 255; + int vch = 255; for(auto const& cls: ctpcls) { if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { tsc = cls.getIndex(); @@ -65,6 +66,14 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) tce = cls.getIndex(); std::cout << cls.name << ":" << tce << std::endl; } + if(cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { + vch = cls.getIndex(); + std::cout << cls.name << ":" << vch << std::endl; + } + } + if(vch == 255) { + std::cout << "VCH not found" << std::endl; + return; } std::cout << "ZNC:"; int inp = 26; @@ -90,5 +99,7 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) ctpscalers->printClassBRateAndIntegral(tsc+1); std::cout << "TCE:"; ctpscalers->printClassBRateAndIntegral(tce+1); - std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; + //std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; + std::cout << "VCH:"; + ctpscalers->printClassBRateAndIntegral(vch+1); } diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index 04f3110444a32..90c69c3017703 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -25,24 +25,28 @@ #include #endif using namespace o2::ctp; -void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") -{ +void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") +{ // + // what = 1: znc rate + // what = 2: (TCE+TSC)/ZNC + // what = 3: TCE/ZNC std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; std::string mCCDBPathCTPConfig = "CTP/Config/Config"; auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); - // + // Timestamp auto soreor = ccdbMgr.getRunDuration(runNumber); uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; std::cout << "Timestamp:" << timeStamp << std::endl; - // + // Filling std::string sfill = std::to_string(fillN); std::map metadata; metadata["fillNumber"] = sfill; auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); auto bfilling = lhcifdata->getBunchFilling(); std::vector bcs = bfilling.getFilledBCs(); - std::cout << "Number of interacting bc:" << bcs.size() << std::endl; - // + int nbc = bcs.size(); + std::cout << "Number of interacting bc:" << nbc << std::endl; + // Scalers std::string srun = std::to_string(runNumber); metadata.clear(); // can be empty metadata["runNumber"] = srun; @@ -52,40 +56,98 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; return; } - // - //CTPConfiguration ctpcfg; scl->convertRawToO2(); std::vector recs = scl->getScalerRecordO2(); - std::cout << "TVX,TSC,TCE,ZNC:" << std::endl; - scl->printInputRateAndIntegral(3); - scl->printInputRateAndIntegral(4); - scl->printInputRateAndIntegral(5); - scl->printInputRateAndIntegral(26); - std::cout << " TVX,TVX&TCE,TVX&TSC,TVX&VCH:" << std::endl; - for(int i = 0; i<10; i++) { - scl->printClassBRateAndIntegral(i+1); + // + //CTPConfiguration ctpcfg; + auto ctpcfg = ccdbMgr.getSpecific(mCCDBPathCTPConfig, timeStamp, metadata); + if (ctpcfg == nullptr) { + LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; + return; + } + std::vector ctpcls = ctpcfg->getCTPClasses(); + int tsc = 255; + int tce = 255; + int vch = 255; + for(auto const& cls: ctpcls) { + if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { + tsc = cls.getIndex(); + std::cout << cls.name << ":" << tsc << std::endl; + } + if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { + tce = cls.getIndex(); + std::cout << cls.name << ":" << tce << std::endl; + } + if(cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { + vch = cls.getIndex(); + std::cout << cls.name << ":" << vch << std::endl; + } } - //scl.printLMBRateVsT(); + // + // Anal + // + // Times + double_t frev = 11245; + double_t time0 = recs[0].epochTime; + double_t timeL = recs[recs.size() - 1].epochTime; + double_t Trun = timeL-time0; + double_t orbit0 = recs[0].intRecord.orbit; int n = recs.size()-1; - std::cout << "size n:" << n << std::endl; - std::cout << "size:" << n << ":" << recs[0].scalersInps[26] << ":" << recs[n].scalersInps[26] << std::endl; - int itsc = 4; - Double_t x[n-1],znc[n-1]; + std::cout << " Run duration:" << Trun << " Scalers size:" << n+1 << std::endl; + Double_t x[n],znc[n],zncpp[n]; for(int i = 0; i < n; i++) { - x[i] = (double_t)(recs[i+1].intRecord.orbit); + x[i] = (double_t)(recs[i+1].intRecord.orbit + recs[i].intRecord.orbit)/2.-orbit0; + x[i] *= 88e-6; + //x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; double_t tt = (double_t)(recs[i+1].intRecord.orbit - recs[i].intRecord.orbit ); tt = tt*88e-6; - znc[i] = (double_t)(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])/28./tt; - auto had = recs[i+1].scalers[itsc+1].lmBefore - recs[i].scalers[itsc+1].lmBefore; - had += recs[i+1].scalers[itsc].lmBefore - recs[i].scalers[itsc].lmBefore; - //auto had = recs[i+1].scalers[itsc].lmBefore - recs[i].scalers[itsc].lmBefore; - double_t rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - //znc[i] = rat; + // + //std::cout << recs[i+1].scalersInps[25] << std::endl; + double_t znci = (double_t)(recs[i+1].scalersInps[25] - recs[i].scalersInps[25]); + double_t mu = -TMath::Log(1.-znci/tt/nbc/frev); + double_t zncipp = mu*nbc*frev; + zncpp[i] = zncipp/28.; + // + double_t rat = 0; + if(what == 1) { + rat = znci/28./tt; + } else if(what == 2) { + auto had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + //std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; + had += recs[i+1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + rat = (double_t)(had)/zncpp[i]/tt; + } else if(what == 3) { + auto had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + rat = (double_t)(had)/zncpp[i]/tt; + } else if(what ==4) { + auto had = recs[i+1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + rat = (double_t)(had)/zncpp[i]/tt; + } + znc[i] = rat; } TGraph *gr1 = new TGraph(n,x,znc); - gr1->SetTitle("R=ZNC/28 rate [Hz]; time[Orbit]; R"); - //gr1->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[Orbit]; R"); - //gr1->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[Orbit]; R"); - TCanvas *c1 = new TCanvas("c1",srun.c_str(),200,10,600,400); - gr1->Draw("A*"); + //TGraph *gr2 = new TGraph(n,x,zncpp); + gr1->SetMarkerStyle(22); + //gr2->SetMarkerStyle(21); + if ( what == 1) { + gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); + } else if(what == 2) { + gr1->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); + //gr1->GetHistogram()->SetMaximum(1.2); + //gr1->GetHistogram()->SetMinimum(0.8); + } else if(what == 3){ + gr1->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); + gr1->GetHistogram()->SetMaximum(0.6); + gr1->GetHistogram()->SetMinimum(0.5); + } else { + gr1->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); + gr1->GetHistogram()->SetMaximum(0.6); + gr1->GetHistogram()->SetMinimum(0.5); + } + TCanvas *c1 = new TCanvas("c1",srun.c_str(),200,10,800,500); + gr1->Draw("AP"); + //gr2->Draw("P"); } diff --git a/Detectors/CTP/macro/PlotPbLumiII.C b/Detectors/CTP/macro/PlotPbLumiII.C new file mode 100644 index 0000000000000..3e8f0d0b53c6e --- /dev/null +++ b/Detectors/CTP/macro/PlotPbLumiII.C @@ -0,0 +1,159 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +/// \file TestCTPScalers.C +/// \brief create CTP scalers, test it and add to database +/// \author Roman Lietava +// root -b -q "GetScalers.C(\"519499\", 1656286373953)" +#if !defined(__CLING__) || defined(__ROOTCLING__) + +#include +#include "CCDB/CcdbApi.h" +#include "CCDB/BasicCCDBManager.h" +#include "DataFormatsCTP/Scalers.h" +#include "DataFormatsCTP/Configuration.h" +#include +#include +#include +#endif +using namespace o2::ctp; +void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") +{ // + // what = 1: znc rate + // what = 2: (TCE+TSC)/ZNC + // what = 3: TCE/ZNC + std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; + std::string mCCDBPathCTPConfig = "CTP/Config/Config"; + auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); + // Timestamp + auto soreor = ccdbMgr.getRunDuration(runNumber); + uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; + std::cout << "Timestamp:" << timeStamp << std::endl; + // Filling + std::string sfill = std::to_string(fillN); + std::map metadata; + metadata["fillNumber"] = sfill; + auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); + auto bfilling = lhcifdata->getBunchFilling(); + std::vector bcs = bfilling.getFilledBCs(); + int nbc = bcs.size(); + std::cout << "Number of interacting bc:" << nbc << std::endl; + // Scalers + std::string srun = std::to_string(runNumber); + metadata.clear(); // can be empty + metadata["runNumber"] = srun; + ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); + auto scl = ccdbMgr.getSpecific(mCCDBPathCTPScalers, timeStamp, metadata); + if (scl == nullptr) { + LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; + return; + } + scl->convertRawToO2(); + std::vector recs = scl->getScalerRecordO2(); + // + //CTPConfiguration ctpcfg; + auto ctpcfg = ccdbMgr.getSpecific(mCCDBPathCTPConfig, timeStamp, metadata); + if (ctpcfg == nullptr) { + LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; + return; + } + std::vector ctpcls = ctpcfg->getCTPClasses(); + int tsc = 255; + int tce = 255; + int vch = 255; + for(auto const& cls: ctpcls) { + if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { + tsc = cls.getIndex(); + std::cout << cls.name << ":" << tsc << std::endl; + } + if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { + tce = cls.getIndex(); + std::cout << cls.name << ":" << tce << std::endl; + } + if(cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { + vch = cls.getIndex(); + std::cout << cls.name << ":" << vch << std::endl; + } + } + if(tsc == 255 || tce == 255 || vch == 255) { + std::cout << " One of dcalers not available, check config to find alternative)" << std::endl; + return; + } + // + // Anal + // + // Times + double_t frev = 11245; + double_t time0 = recs[0].epochTime; + double_t timeL = recs[recs.size() - 1].epochTime; + double_t Trun = timeL-time0; + double_t orbit0 = recs[0].intRecord.orbit; + int n = recs.size()-1; + std::cout << " Run duration:" << Trun << " Scalers size:" << n+1 << std::endl; + Double_t x[n],znc[n],zncpp[n]; + Double_t tcetsctoznc[n],tcetoznc[n],vchtoznc[n]; + for(int i = 0; i < n; i++) { + x[i] = (double_t)(recs[i+1].intRecord.orbit + recs[i].intRecord.orbit)/2.-orbit0; + x[i] *= 88e-6; + //x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; + double_t tt = (double_t)(recs[i+1].intRecord.orbit - recs[i].intRecord.orbit ); + tt = tt*88e-6; + // + //std::cout << recs[i+1].scalersInps[25] << std::endl; + double_t znci = (double_t)(recs[i+1].scalersInps[25] - recs[i].scalersInps[25]); + double_t mu = -TMath::Log(1.-znci/tt/nbc/frev); + double_t zncipp = mu*nbc*frev; + zncpp[i] = zncipp/28.; + znc[i] = znci/28./tt; + // + auto had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + //std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; + had += recs[i+1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetsctoznc[i] = (double_t)(had)/zncpp[i]/tt; + had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetoznc[i]= (double_t)(had)/zncpp[i]/tt; + had = recs[i+1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + vchtoznc[i] = (double_t)(had)/zncpp[i]/tt; + } + // + gStyle->SetMarkerSize(0.75); + TGraph *gr1 = new TGraph(n,x,znc); + TGraph *gr2 = new TGraph(n,x,tcetsctoznc); + TGraph *gr3 = new TGraph(n,x,tcetoznc); + TGraph *gr4 = new TGraph(n,x,vchtoznc); + gr1->SetMarkerStyle(20); + gr2->SetMarkerStyle(21); + gr3->SetMarkerStyle(22); + gr4->SetMarkerStyle(23); + gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); + gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); + gr2->GetHistogram()->SetMaximum(1.5); + gr2->GetHistogram()->SetMinimum(0.9); + gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); + gr3->GetHistogram()->SetMaximum(0.6); + gr3->GetHistogram()->SetMinimum(0.4); + gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); + gr4->GetHistogram()->SetMaximum(0.6); + gr4->GetHistogram()->SetMinimum(0.4); + TCanvas *c1 = new TCanvas("c1",srun.c_str(),200,10,800,500); + c1->Divide(2,2); + c1->cd(1); + gr1->Draw("AP"); + c1->cd(2); + gr2->Draw("AP"); + c1->cd(3); + gr3->Draw("AP"); + c1->cd(4); + gr4->Draw("AP"); +} From 5e858dc981ed9f24e811158a0206078870d194ad Mon Sep 17 00:00:00 2001 From: lietava Date: Sat, 7 Oct 2023 08:08:48 +0200 Subject: [PATCH 04/10] clang --- Detectors/CTP/macro/CheckAOD2CTPDigitsII.C | 100 ++++++++++----------- Detectors/CTP/macro/GetScalersForRun.C | 52 +++++------ Detectors/CTP/macro/PlotPbLumi.C | 96 ++++++++++---------- Detectors/CTP/macro/PlotPbLumiII.C | 82 ++++++++--------- 4 files changed, 165 insertions(+), 165 deletions(-) diff --git a/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C b/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C index a55c4529c3936..14e60194bdd82 100644 --- a/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C +++ b/Detectors/CTP/macro/CheckAOD2CTPDigitsII.C @@ -41,7 +41,7 @@ int CheckAOD2CTPDigits(bool files = 1) ULong64_t fTriggerMask; ULong64_t fInputMask; std::unique_ptr file(TFile::Open("AO2D.root")); - if(file == nullptr) { + if (file == nullptr) { std::cout << "Can not open file AO2D.root" << std::endl; return 1; } @@ -54,11 +54,11 @@ int CheckAOD2CTPDigits(bool files = 1) // Find aod trigger info int i = 0; while ((key = (TKey*)keyList())) { - std::cout << "loop:" << i << " " << key->GetName() << std::endl; + std::cout << "loop:" << i << " " << key->GetName() << std::endl; i++; std::string name = key->GetName(); - if(name.find("metaData") != std::string::npos) { - std::cout << "Skipping:" << name << std::endl; + if (name.find("metaData") != std::string::npos) { + std::cout << "Skipping:" << name << std::endl; continue; } tree = (TTree*)file->Get(Form("%s/O2bc_001", key->GetName())); @@ -75,28 +75,28 @@ int CheckAOD2CTPDigits(bool files = 1) tree->GetEvent(n); if (fTriggerMask) { bc2classmask[fGlobalBC] = fTriggerMask; - //std::cout << std::dec << n << " Run:" << fRunNumber << " GBC:" << std::hex << fGlobalBC << " TM:0x" << std::hex << fTriggerMask << " count:" << bc2classmask.count(fGlobalBC) << std::endl; + // std::cout << std::dec << n << " Run:" << fRunNumber << " GBC:" << std::hex << fGlobalBC << " TM:0x" << std::hex << fTriggerMask << " count:" << bc2classmask.count(fGlobalBC) << std::endl; } - if(fInputMask) { + if (fInputMask) { bc2inputmask[fGlobalBC] = fInputMask; - } - if(1) { - if(fInputMask || fTriggerMask) { - auto ir = o2::InteractionRecord::long2IR(fGlobalBC); - //auto bcc = ir.orbit; - //if(fTriggerMask) std::cout << "===>"; - //std::cout << std::hex << ir.orbit << " " << ir.bc << " " << fInputMask << " " << fTriggerMask << std::dec << " (" << ir.orbit << " " << ir.bc << ")" << std::endl; - } - } + } + if (1) { + if (fInputMask || fTriggerMask) { + auto ir = o2::InteractionRecord::long2IR(fGlobalBC); + // auto bcc = ir.orbit; + // if(fTriggerMask) std::cout << "===>"; + // std::cout << std::hex << ir.orbit << " " << ir.bc << " " << fInputMask << " " << fTriggerMask << std::dec << " (" << ir.orbit << " " << ir.bc << ")" << std::endl; + } + } } } else { - std::cout << "return 1" << std::endl; + std::cout << "return 1" << std::endl; return 1; } } - //return 0; - // Read CTP digits and check if every class mask in digits is in AOD - // CTP digits + // return 0; + // Read CTP digits and check if every class mask in digits is in AOD + // CTP digits TFile* fileDigits = TFile::Open("ctpdigitsWOD.root"); // fileDigits->ls(); @@ -123,61 +123,61 @@ int CheckAOD2CTPDigits(bool files = 1) return 1; } // std::cout << "size:" << std::dec << ctpdigs.GetSize() << std::endl; - //std::cout << "size:" << std::dec << ctpdigs->size() << std::endl; + // std::cout << "size:" << std::dec << ctpdigs->size() << std::endl; for (auto const& dig : *ctpdigs) { ULong64_t gbc = dig.intRecord.toLong(); if (dig.CTPClassMask.count()) { - bc2classmaskD[gbc] = dig.CTPClassMask.to_ullong(); + bc2classmaskD[gbc] = dig.CTPClassMask.to_ullong(); // int del = 280+17; - //auto it = bc2classmask.find (gbc); - //if(it != bc2classmask.end()) { + // auto it = bc2classmask.find (gbc); + // if(it != bc2classmask.end()) { if (bc2classmask.count(gbc)) { - //bc2classmask.erase(gbc); - nok++; - //std::cout << std::hex << gbc << " tc aod clsmask:" << bc2classmask[gbc] << " " << dig.CTPClassMask.to_ullong() << std::endl; - // dig.printStream(std::cout); + // bc2classmask.erase(gbc); + nok++; + // std::cout << std::hex << gbc << " tc aod clsmask:" << bc2classmask[gbc] << " " << dig.CTPClassMask.to_ullong() << std::endl; + // dig.printStream(std::cout); } else { std::cout << std::dec << dig.intRecord.orbit << " " << dig.intRecord.bc << " " << std::hex << dig.intRecord.toLong() << " not found " << bc2classmask.count(gbc) << std::endl; - nnotf++; + nnotf++; } } - if (dig.CTPInputMask.count()) { - bc2inputmaskD[gbc] = dig.CTPInputMask.to_ullong(); - //auto it = bc2inputmask.find (gbc); - //if(it != bc2inputmask.end()) { - if(bc2inputmask.count(gbc)){ - //bc2inputmask.erase(gbc); - nokinp++; - //std::cout << std::hex << gbc << " ir aod inpmask:" << bc2inputmask[gbc] << " " << dig.CTPInputMask.to_ullong() << std::endl; - } else { - std::cout << std::dec << dig.intRecord.orbit << " " << dig.intRecord.bc << " " << std::hex << dig.intRecord.toLong() << " not found " << bc2inputmask.count(gbc) << std::endl; - nnotfinp++; + if (dig.CTPInputMask.count()) { + bc2inputmaskD[gbc] = dig.CTPInputMask.to_ullong(); + // auto it = bc2inputmask.find (gbc); + // if(it != bc2inputmask.end()) { + if (bc2inputmask.count(gbc)) { + // bc2inputmask.erase(gbc); + nokinp++; + // std::cout << std::hex << gbc << " ir aod inpmask:" << bc2inputmask[gbc] << " " << dig.CTPInputMask.to_ullong() << std::endl; + } else { + std::cout << std::dec << dig.intRecord.orbit << " " << dig.intRecord.bc << " " << std::hex << dig.intRecord.toLong() << " not found " << bc2inputmask.count(gbc) << std::endl; + nnotfinp++; + } } } - } } - std::cout << "TClasses ===> nok:" << nok << " NOT found in digits:" << nnotf << " left:" << bc2classmask.size() << std::endl; - std::cout << "Inputs ===> nok:" << nokinp << " NOT found in digits:" << nnotfinp << " left:" << bc2inputmask.size() << std::endl; + std::cout << "TClasses ===> nok:" << nok << " NOT found in digits:" << nnotf << " left:" << bc2classmask.size() << std::endl; + std::cout << "Inputs ===> nok:" << nokinp << " NOT found in digits:" << nnotfinp << " left:" << bc2inputmask.size() << std::endl; nok = 0; nokinp = 0; nnotf = 0; nnotfinp = 0; - for(auto const& tm: bc2classmask) { - if(bc2classmaskD.count(tm.first)) { + for (auto const& tm : bc2classmask) { + if (bc2classmaskD.count(tm.first)) { nok++; } else { - nnotf++; + nnotf++; } } - for(auto const& tm: bc2inputmask) { - if(bc2inputmaskD.count(tm.first)) { + for (auto const& tm : bc2inputmask) { + if (bc2inputmaskD.count(tm.first)) { nokinp++; } else { - nnotfinp++; + nnotfinp++; } } - std::cout << "TClasses ===> nok:" << nok << " NOT found in aod:" << nnotf << " left:" << bc2classmaskD.size() << std::endl; - std::cout << "Inputs ===> nok:" << nokinp << " NOT found in aod:" << nnotfinp << " left:" << bc2inputmaskD.size() << std::endl; + std::cout << "TClasses ===> nok:" << nok << " NOT found in aod:" << nnotf << " left:" << bc2classmaskD.size() << std::endl; + std::cout << "Inputs ===> nok:" << nokinp << " NOT found in aod:" << nnotfinp << " left:" << bc2inputmaskD.size() << std::endl; return 0; } diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index 3380785b0563d..0651614b0c9d7 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -15,24 +15,24 @@ #endif using namespace o2::ctp; -void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) +void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) { if (test == 0) { return; } std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; std::string mCCDBPathCTPConfig = "CTP/Config/Config"; - //o2::ccdb::CcdbApi api; - //api.init("http://alice-ccdb.cern.ch"); // alice-ccdb.cern.ch - //api.init("http://ccdb-test.cern.ch:8080"); + // o2::ccdb::CcdbApi api; + // api.init("http://alice-ccdb.cern.ch"); // alice-ccdb.cern.ch + // api.init("http://ccdb-test.cern.ch:8080"); auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); - //ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); + // ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); auto soreor = ccdbMgr.getRunDuration(runNumber); - uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; + uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first; std::cout << "Timestamp:" << timeStamp << std::endl; // std::string sfill = std::to_string(fillN); - std::map metadata; + std::map metadata; metadata["fillNumber"] = sfill; auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); auto bfilling = lhcifdata->getBunchFilling(); @@ -57,21 +57,21 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) int tsc = 255; int tce = 255; int vch = 255; - for(auto const& cls: ctpcls) { - if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { + for (auto const& cls : ctpcls) { + if (cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { tsc = cls.getIndex(); std::cout << cls.name << ":" << tsc << std::endl; } - if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { + if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { tce = cls.getIndex(); std::cout << cls.name << ":" << tce << std::endl; } - if(cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { + if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { vch = cls.getIndex(); std::cout << cls.name << ":" << vch << std::endl; } } - if(vch == 255) { + if (vch == 255) { std::cout << "VCH not found" << std::endl; return; } @@ -83,23 +83,23 @@ void GetScalersForRun(int runNumber = 0,int fillN = 0, bool test = 1) std::vector recs = ctpscalers->getScalerRecordO2(); double_t time0 = recs[0].epochTime; double_t timeL = recs[recs.size() - 1].epochTime; - double_t Trun = timeL-time0; + double_t Trun = timeL - time0; double_t integral = recs[recs.size() - 1].scalersInps[inp - 1] - recs[0].scalersInps[inp - 1]; - double_t rate = integral/Trun; - double_t rat = integral/Trun/nbc/frev; - double_t mu = -TMath::Log(1-rat); - double_t pp = 1 - mu/(TMath::Exp(mu)-1); - double_t ratepp = mu*nbc*frev; - double_t integralpp = ratepp*Trun; - std::cout << "Rate:"<printInputRateAndIntegral(26); + double_t rate = integral / Trun; + double_t rat = integral / Trun / nbc / frev; + double_t mu = -TMath::Log(1 - rat); + double_t pp = 1 - mu / (TMath::Exp(mu) - 1); + double_t ratepp = mu * nbc * frev; + double_t integralpp = ratepp * Trun; + std::cout << "Rate:" << rate / sigmaratio << " Integral:" << integral << " mu:" << mu << " Pileup prob:" << pp; + std::cout << " Integralpp:" << integralpp << " Ratepp:" << ratepp / sigmaratio << std::endl; + // ctpscalers->printInputRateAndIntegral(26); // std::cout << "TSC:"; - ctpscalers->printClassBRateAndIntegral(tsc+1); + ctpscalers->printClassBRateAndIntegral(tsc + 1); std::cout << "TCE:"; - ctpscalers->printClassBRateAndIntegral(tce+1); - //std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; + ctpscalers->printClassBRateAndIntegral(tce + 1); + // std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; std::cout << "VCH:"; - ctpscalers->printClassBRateAndIntegral(vch+1); + ctpscalers->printClassBRateAndIntegral(vch + 1); } diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index 90c69c3017703..1012fdff629c6 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -25,7 +25,7 @@ #include #endif using namespace o2::ctp; -void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") +void PlotPbLumi(int runNumber, int fillN, int what = 1, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") { // // what = 1: znc rate // what = 2: (TCE+TSC)/ZNC @@ -35,11 +35,11 @@ void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "h auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); // Timestamp auto soreor = ccdbMgr.getRunDuration(runNumber); - uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; + uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first; std::cout << "Timestamp:" << timeStamp << std::endl; // Filling std::string sfill = std::to_string(fillN); - std::map metadata; + std::map metadata; metadata["fillNumber"] = sfill; auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); auto bfilling = lhcifdata->getBunchFilling(); @@ -59,7 +59,7 @@ void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "h scl->convertRawToO2(); std::vector recs = scl->getScalerRecordO2(); // - //CTPConfiguration ctpcfg; + // CTPConfiguration ctpcfg; auto ctpcfg = ccdbMgr.getSpecific(mCCDBPathCTPConfig, timeStamp, metadata); if (ctpcfg == nullptr) { LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; @@ -69,16 +69,16 @@ void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "h int tsc = 255; int tce = 255; int vch = 255; - for(auto const& cls: ctpcls) { - if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { + for (auto const& cls : ctpcls) { + if (cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { tsc = cls.getIndex(); std::cout << cls.name << ":" << tsc << std::endl; } - if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { + if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { tce = cls.getIndex(); std::cout << cls.name << ":" << tce << std::endl; } - if(cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { + if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { vch = cls.getIndex(); std::cout << cls.name << ":" << vch << std::endl; } @@ -90,55 +90,55 @@ void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "h double_t frev = 11245; double_t time0 = recs[0].epochTime; double_t timeL = recs[recs.size() - 1].epochTime; - double_t Trun = timeL-time0; + double_t Trun = timeL - time0; double_t orbit0 = recs[0].intRecord.orbit; - int n = recs.size()-1; - std::cout << " Run duration:" << Trun << " Scalers size:" << n+1 << std::endl; - Double_t x[n],znc[n],zncpp[n]; - for(int i = 0; i < n; i++) { - x[i] = (double_t)(recs[i+1].intRecord.orbit + recs[i].intRecord.orbit)/2.-orbit0; + int n = recs.size() - 1; + std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; + Double_t x[n], znc[n], zncpp[n]; + for (int i = 0; i < n; i++) { + x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0; x[i] *= 88e-6; - //x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; - double_t tt = (double_t)(recs[i+1].intRecord.orbit - recs[i].intRecord.orbit ); - tt = tt*88e-6; + // x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; + double_t tt = (double_t)(recs[i + 1].intRecord.orbit - recs[i].intRecord.orbit); + tt = tt * 88e-6; // - //std::cout << recs[i+1].scalersInps[25] << std::endl; - double_t znci = (double_t)(recs[i+1].scalersInps[25] - recs[i].scalersInps[25]); - double_t mu = -TMath::Log(1.-znci/tt/nbc/frev); - double_t zncipp = mu*nbc*frev; - zncpp[i] = zncipp/28.; + // std::cout << recs[i+1].scalersInps[25] << std::endl; + double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]); + double_t mu = -TMath::Log(1. - znci / tt / nbc / frev); + double_t zncipp = mu * nbc * frev; + zncpp[i] = zncipp / 28.; // double_t rat = 0; - if(what == 1) { - rat = znci/28./tt; - } else if(what == 2) { - auto had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - //std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; - had += recs[i+1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; - //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - rat = (double_t)(had)/zncpp[i]/tt; - } else if(what == 3) { - auto had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - rat = (double_t)(had)/zncpp[i]/tt; - } else if(what ==4) { - auto had = recs[i+1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - rat = (double_t)(had)/zncpp[i]/tt; + if (what == 1) { + rat = znci / 28. / tt; + } else if (what == 2) { + auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; + had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + rat = (double_t)(had) / zncpp[i] / tt; + } else if (what == 3) { + auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + rat = (double_t)(had) / zncpp[i] / tt; + } else if (what == 4) { + auto had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + rat = (double_t)(had) / zncpp[i] / tt; } znc[i] = rat; } - TGraph *gr1 = new TGraph(n,x,znc); - //TGraph *gr2 = new TGraph(n,x,zncpp); + TGraph* gr1 = new TGraph(n, x, znc); + // TGraph *gr2 = new TGraph(n,x,zncpp); gr1->SetMarkerStyle(22); - //gr2->SetMarkerStyle(21); - if ( what == 1) { + // gr2->SetMarkerStyle(21); + if (what == 1) { gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); - } else if(what == 2) { + } else if (what == 2) { gr1->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - //gr1->GetHistogram()->SetMaximum(1.2); - //gr1->GetHistogram()->SetMinimum(0.8); - } else if(what == 3){ + // gr1->GetHistogram()->SetMaximum(1.2); + // gr1->GetHistogram()->SetMinimum(0.8); + } else if (what == 3) { gr1->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); gr1->GetHistogram()->SetMaximum(0.6); gr1->GetHistogram()->SetMinimum(0.5); @@ -147,7 +147,7 @@ void PlotPbLumi(int runNumber, int fillN, int what =1, std::string ccdbHost = "h gr1->GetHistogram()->SetMaximum(0.6); gr1->GetHistogram()->SetMinimum(0.5); } - TCanvas *c1 = new TCanvas("c1",srun.c_str(),200,10,800,500); + TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); gr1->Draw("AP"); - //gr2->Draw("P"); + // gr2->Draw("P"); } diff --git a/Detectors/CTP/macro/PlotPbLumiII.C b/Detectors/CTP/macro/PlotPbLumiII.C index 3e8f0d0b53c6e..2094dc2444180 100644 --- a/Detectors/CTP/macro/PlotPbLumiII.C +++ b/Detectors/CTP/macro/PlotPbLumiII.C @@ -35,11 +35,11 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); // Timestamp auto soreor = ccdbMgr.getRunDuration(runNumber); - uint64_t timeStamp = (soreor.second - soreor.first) /2 + soreor.first; + uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first; std::cout << "Timestamp:" << timeStamp << std::endl; // Filling std::string sfill = std::to_string(fillN); - std::map metadata; + std::map metadata; metadata["fillNumber"] = sfill; auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); auto bfilling = lhcifdata->getBunchFilling(); @@ -59,7 +59,7 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- scl->convertRawToO2(); std::vector recs = scl->getScalerRecordO2(); // - //CTPConfiguration ctpcfg; + // CTPConfiguration ctpcfg; auto ctpcfg = ccdbMgr.getSpecific(mCCDBPathCTPConfig, timeStamp, metadata); if (ctpcfg == nullptr) { LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; @@ -69,21 +69,21 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- int tsc = 255; int tce = 255; int vch = 255; - for(auto const& cls: ctpcls) { - if(cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { + for (auto const& cls : ctpcls) { + if (cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { tsc = cls.getIndex(); std::cout << cls.name << ":" << tsc << std::endl; } - if(cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { + if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { tce = cls.getIndex(); std::cout << cls.name << ":" << tce << std::endl; } - if(cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { + if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { vch = cls.getIndex(); std::cout << cls.name << ":" << vch << std::endl; } } - if(tsc == 255 || tce == 255 || vch == 255) { + if (tsc == 255 || tce == 255 || vch == 255) { std::cout << " One of dcalers not available, check config to find alternative)" << std::endl; return; } @@ -94,44 +94,44 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- double_t frev = 11245; double_t time0 = recs[0].epochTime; double_t timeL = recs[recs.size() - 1].epochTime; - double_t Trun = timeL-time0; + double_t Trun = timeL - time0; double_t orbit0 = recs[0].intRecord.orbit; - int n = recs.size()-1; - std::cout << " Run duration:" << Trun << " Scalers size:" << n+1 << std::endl; - Double_t x[n],znc[n],zncpp[n]; - Double_t tcetsctoznc[n],tcetoznc[n],vchtoznc[n]; - for(int i = 0; i < n; i++) { - x[i] = (double_t)(recs[i+1].intRecord.orbit + recs[i].intRecord.orbit)/2.-orbit0; + int n = recs.size() - 1; + std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; + Double_t x[n], znc[n], zncpp[n]; + Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n]; + for (int i = 0; i < n; i++) { + x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0; x[i] *= 88e-6; - //x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; - double_t tt = (double_t)(recs[i+1].intRecord.orbit - recs[i].intRecord.orbit ); - tt = tt*88e-6; + // x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; + double_t tt = (double_t)(recs[i + 1].intRecord.orbit - recs[i].intRecord.orbit); + tt = tt * 88e-6; // - //std::cout << recs[i+1].scalersInps[25] << std::endl; - double_t znci = (double_t)(recs[i+1].scalersInps[25] - recs[i].scalersInps[25]); - double_t mu = -TMath::Log(1.-znci/tt/nbc/frev); - double_t zncipp = mu*nbc*frev; - zncpp[i] = zncipp/28.; - znc[i] = znci/28./tt; + // std::cout << recs[i+1].scalersInps[25] << std::endl; + double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]); + double_t mu = -TMath::Log(1. - znci / tt / nbc / frev); + double_t zncipp = mu * nbc * frev; + zncpp[i] = zncipp / 28.; + znc[i] = znci / 28. / tt; // - auto had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - //std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; - had += recs[i+1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; - //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - tcetsctoznc[i] = (double_t)(had)/zncpp[i]/tt; - had = recs[i+1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - tcetoznc[i]= (double_t)(had)/zncpp[i]/tt; - had = recs[i+1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - //rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - vchtoznc[i] = (double_t)(had)/zncpp[i]/tt; + auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; + had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetsctoznc[i] = (double_t)(had) / zncpp[i] / tt; + had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetoznc[i] = (double_t)(had) / zncpp[i] / tt; + had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + vchtoznc[i] = (double_t)(had) / zncpp[i] / tt; } // gStyle->SetMarkerSize(0.75); - TGraph *gr1 = new TGraph(n,x,znc); - TGraph *gr2 = new TGraph(n,x,tcetsctoznc); - TGraph *gr3 = new TGraph(n,x,tcetoznc); - TGraph *gr4 = new TGraph(n,x,vchtoznc); + TGraph* gr1 = new TGraph(n, x, znc); + TGraph* gr2 = new TGraph(n, x, tcetsctoznc); + TGraph* gr3 = new TGraph(n, x, tcetoznc); + TGraph* gr4 = new TGraph(n, x, vchtoznc); gr1->SetMarkerStyle(20); gr2->SetMarkerStyle(21); gr3->SetMarkerStyle(22); @@ -146,8 +146,8 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); gr4->GetHistogram()->SetMaximum(0.6); gr4->GetHistogram()->SetMinimum(0.4); - TCanvas *c1 = new TCanvas("c1",srun.c_str(),200,10,800,500); - c1->Divide(2,2); + TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); + c1->Divide(2, 2); c1->cd(1); gr1->Draw("AP"); c1->cd(2); From 9bf495d05efe3e26037b20a3d5d4b02dd1804bdd Mon Sep 17 00:00:00 2001 From: lietava Date: Thu, 12 Oct 2023 14:40:31 +0200 Subject: [PATCH 05/10] lumi macros dev --- Detectors/CTP/macro/GetScalersForRun.C | 33 ++++++++++++++++++-------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index 0651614b0c9d7..b32dca187abc5 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -57,6 +57,7 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) int tsc = 255; int tce = 255; int vch = 255; + int iznc = 255; for (auto const& cls : ctpcls) { if (cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { tsc = cls.getIndex(); @@ -70,10 +71,10 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) vch = cls.getIndex(); std::cout << cls.name << ":" << vch << std::endl; } - } - if (vch == 255) { - std::cout << "VCH not found" << std::endl; - return; + if (cls.name.find("C1ZNC-B-NOPF-CRU") != std::string::npos) { + iznc = cls.getIndex(); + std::cout << cls.name << ":" << iznc << std::endl; + } } std::cout << "ZNC:"; int inp = 26; @@ -95,11 +96,23 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) std::cout << " Integralpp:" << integralpp << " Ratepp:" << ratepp / sigmaratio << std::endl; // ctpscalers->printInputRateAndIntegral(26); // - std::cout << "TSC:"; - ctpscalers->printClassBRateAndIntegral(tsc + 1); - std::cout << "TCE:"; - ctpscalers->printClassBRateAndIntegral(tce + 1); + if( tsc != 255) { + std::cout << "TSC:"; + ctpscalers->printClassBRateAndIntegral(tsc + 1); + } + if( tce != 255 ) { + std::cout << "TCE:"; + ctpscalers->printClassBRateAndIntegral(tce + 1); + } // std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; - std::cout << "VCH:"; - ctpscalers->printClassBRateAndIntegral(vch + 1); + if( vch != 255) { + std::cout << "VCH:"; + ctpscalers->printClassBRateAndIntegral(vch + 1); + } + if( iznc != 255) { + std::cout << "ZNC class:"; + int integral = recs[recs.size() - 1].scalers[iznc].l1After - recs[0].scalers[iznc].l1After; + std::cout << integral << std::endl; + + } } From f7790231ed9084e5e2ee5d78eb3a9b3b4b359891 Mon Sep 17 00:00:00 2001 From: lietava Date: Wed, 18 Oct 2023 20:05:02 +0200 Subject: [PATCH 06/10] fix: class index in scalers --- .../CTP/include/DataFormatsCTP/Scalers.h | 1 + DataFormats/Detectors/CTP/src/Scalers.cxx | 27 +++++++++-- Detectors/CTP/macro/GetScalersForRun.C | 17 +++++-- Detectors/CTP/macro/PlotPbLumiII.C | 47 +++++++++++++------ 4 files changed, 70 insertions(+), 22 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h index 526e79f00f65d..4580edf7d955b 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h @@ -93,6 +93,7 @@ class CTPRunScalers void printFromZero(std::ostream& stream) const; void printClasses(std::ostream& stream) const; std::vector getClassIndexes() const; + int getScalerIndexForClass(int cls) const; std::vector& getScalerRecordO2() { return mScalerRecordO2; }; int readScalers(const std::string& rawscalers); int convertRawToO2(); diff --git a/DataFormats/Detectors/CTP/src/Scalers.cxx b/DataFormats/Detectors/CTP/src/Scalers.cxx index ca313bccf6fdb..02927c707f567 100644 --- a/DataFormats/Detectors/CTP/src/Scalers.cxx +++ b/DataFormats/Detectors/CTP/src/Scalers.cxx @@ -147,6 +147,24 @@ std::vector CTPRunScalers::getClassIndexes() const } return indexes; } +// cls counted from 0 +int CTPRunScalers::getScalerIndexForClass(int cls) const +{ + if(cls < 0 || cls >= 64) { + LOG(error) << "Class index out of range:" << cls; + return 255; + } + std::vector clslist = getClassIndexes(); + int i = 0; + for(auto const& clsl: clslist) { + if(cls == clsl) { + return i; + } + i++; + } + LOG(error) << " Class not found:" << cls; + return 255; +} int CTPRunScalers::readScalers(const std::string& rawscalers) { LOG(info) << "Loading CTP scalers."; @@ -561,10 +579,11 @@ int CTPRunScalers::printClassBRateAndIntegral(int icls) } double_t time0 = mScalerRecordO2[0].epochTime; double_t timeL = mScalerRecordO2[mScalerRecordO2.size() - 1].epochTime; - if (mScalerRecordO2[0].scalers.size() < icls) { - LOG(error) << "class number bigger than expected for this run:" << icls << "expexted smaller than:" << mScalerRecordO2[0].scalers.size(); - return 1; - } else { + //if (mScalerRecordO2[0].scalers.size() < 64) { + //LOG(error) << "class number bigger than expected for this run:" << icls << "expexted smaller than:" << mScalerRecordO2[0].scalers.size(); + //return 1; + //} else + { int integral = mScalerRecordO2[mScalerRecordO2.size() - 1].scalers[icls - 1].lmBefore - mScalerRecordO2[0].scalers[icls - 1].lmBefore; std::cout << "Scaler Integrals for run:" << mRunNumber << " duration:" << timeL - time0; std::cout << " Class " << icls << " integral:" << integral << " rate:" << integral / (timeL - time0) << std::endl; diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index b32dca187abc5..932cd35ce8eb6 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -54,6 +54,17 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) std::cout << "all good" << std::endl; ctpscalers->convertRawToO2(); std::vector ctpcls = ctpcfg->getCTPClasses(); + //std::vector clslist = ctpcfg->getTriggerClassList(); + std::vector clslist = ctpscalers->getClassIndexes(); + std::map clsIndexToScaler; + std::cout << "Classes:"; + int i = 0; + for(auto const& cls: clslist) { + std::cout << cls << " "; + clsIndexToScaler[cls]=i; + i++; + } + std::cout << std::endl; int tsc = 255; int tce = 255; int vch = 255; @@ -98,16 +109,16 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) // if( tsc != 255) { std::cout << "TSC:"; - ctpscalers->printClassBRateAndIntegral(tsc + 1); + ctpscalers->printClassBRateAndIntegral(clsIndexToScaler[tsc] + 1); } if( tce != 255 ) { std::cout << "TCE:"; - ctpscalers->printClassBRateAndIntegral(tce + 1); + ctpscalers->printClassBRateAndIntegral(clsIndexToScaler[tce] + 1); } // std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; if( vch != 255) { std::cout << "VCH:"; - ctpscalers->printClassBRateAndIntegral(vch + 1); + ctpscalers->printClassBRateAndIntegral(clsIndexToScaler[vch] + 1); } if( iznc != 255) { std::cout << "ZNC class:"; diff --git a/Detectors/CTP/macro/PlotPbLumiII.C b/Detectors/CTP/macro/PlotPbLumiII.C index 2094dc2444180..caa87332416d8 100644 --- a/Detectors/CTP/macro/PlotPbLumiII.C +++ b/Detectors/CTP/macro/PlotPbLumiII.C @@ -65,22 +65,39 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; return; } + std::vector clslist = ctpcfg->getTriggerClassList(); + //std::vector clslist = scl->getClassIndexes(); + std::map clsIndexToScaler; + std::cout << "Classes:"; + int i = 0; + for(auto const& cls: clslist) { + std::cout << cls << " "; + clsIndexToScaler[cls]=i; + i++; + } + std::cout << std::endl; std::vector ctpcls = ctpcfg->getCTPClasses(); int tsc = 255; int tce = 255; int vch = 255; for (auto const& cls : ctpcls) { - if (cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { - tsc = cls.getIndex(); - std::cout << cls.name << ":" << tsc << std::endl; + if (cls.name.find("CMTVXTSC-B-NOPF") != std::string::npos && tsc == 255) { + int itsc = cls.getIndex(); + tsc = clsIndexToScaler[itsc]; + //tsc = scl->getScalerIndexForClass(itsc); + std::cout << cls.name << ":" << tsc << ":" << itsc << std::endl; } if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { - tce = cls.getIndex(); - std::cout << cls.name << ":" << tce << std::endl; + int itce = cls.getIndex(); + tce = clsIndexToScaler[itce]; + //tce = scl->getScalerIndexForClass(itce); + std::cout << cls.name << ":" << tce << ":" << itce << std::endl; } if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { - vch = cls.getIndex(); - std::cout << cls.name << ":" << vch << std::endl; + int ivch = cls.getIndex(); + vch = clsIndexToScaler[ivch]; + //vch = scl->getScalerIndexForClass(ivch); + std::cout << cls.name << ":" << vch << ":" << ivch << std::endl; } } if (tsc == 255 || tce == 255 || vch == 255) { @@ -127,25 +144,25 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- vchtoznc[i] = (double_t)(had) / zncpp[i] / tt; } // - gStyle->SetMarkerSize(0.75); + gStyle->SetMarkerSize(0.5); TGraph* gr1 = new TGraph(n, x, znc); TGraph* gr2 = new TGraph(n, x, tcetsctoznc); TGraph* gr3 = new TGraph(n, x, tcetoznc); TGraph* gr4 = new TGraph(n, x, vchtoznc); gr1->SetMarkerStyle(20); gr2->SetMarkerStyle(21); - gr3->SetMarkerStyle(22); + gr3->SetMarkerStyle(23); gr4->SetMarkerStyle(23); gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - gr2->GetHistogram()->SetMaximum(1.5); - gr2->GetHistogram()->SetMinimum(0.9); + //gr2->GetHistogram()->SetMaximum(1.1); + //gr2->GetHistogram()->SetMinimum(0.9); gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); - gr3->GetHistogram()->SetMaximum(0.6); - gr3->GetHistogram()->SetMinimum(0.4); + //gr3->GetHistogram()->SetMaximum(0.6); + //gr3->GetHistogram()->SetMinimum(0.4); gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); - gr4->GetHistogram()->SetMaximum(0.6); - gr4->GetHistogram()->SetMinimum(0.4); + //gr4->GetHistogram()->SetMaximum(0.6); + //gr4->GetHistogram()->SetMinimum(0.4); TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); c1->Divide(2, 2); c1->cd(1); From 6a3091d5c537e2ed3c66a3c2c3497e3a4e00f4de Mon Sep 17 00:00:00 2001 From: lietava Date: Fri, 20 Oct 2023 09:00:10 +0200 Subject: [PATCH 07/10] fix --- Detectors/CTP/macro/GetScalersForRun.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index 932cd35ce8eb6..69f7d18b30f61 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -55,7 +55,7 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) ctpscalers->convertRawToO2(); std::vector ctpcls = ctpcfg->getCTPClasses(); //std::vector clslist = ctpcfg->getTriggerClassList(); - std::vector clslist = ctpscalers->getClassIndexes(); + std::vector clslist = ctpscalers->getClassIndexes(); std::map clsIndexToScaler; std::cout << "Classes:"; int i = 0; From c2e5d4bd18d8455133e75a7d130217735b076e89 Mon Sep 17 00:00:00 2001 From: lietava Date: Mon, 30 Oct 2023 13:39:16 +0100 Subject: [PATCH 08/10] clang --- Detectors/CTP/macro/PlotPbLumi.C | 115 +++++++++++-------- Detectors/CTP/macro/PlotPbLumiII.C | 176 ----------------------------- 2 files changed, 69 insertions(+), 222 deletions(-) delete mode 100644 Detectors/CTP/macro/PlotPbLumiII.C diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index 1012fdff629c6..caa87332416d8 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -25,7 +25,7 @@ #include #endif using namespace o2::ctp; -void PlotPbLumi(int runNumber, int fillN, int what = 1, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") +void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") { // // what = 1: znc rate // what = 2: (TCE+TSC)/ZNC @@ -65,24 +65,45 @@ void PlotPbLumi(int runNumber, int fillN, int what = 1, std::string ccdbHost = " LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; return; } + std::vector clslist = ctpcfg->getTriggerClassList(); + //std::vector clslist = scl->getClassIndexes(); + std::map clsIndexToScaler; + std::cout << "Classes:"; + int i = 0; + for(auto const& cls: clslist) { + std::cout << cls << " "; + clsIndexToScaler[cls]=i; + i++; + } + std::cout << std::endl; std::vector ctpcls = ctpcfg->getCTPClasses(); int tsc = 255; int tce = 255; int vch = 255; for (auto const& cls : ctpcls) { - if (cls.name.find("CMTVXTSC-B-NOPF-CRU") != std::string::npos) { - tsc = cls.getIndex(); - std::cout << cls.name << ":" << tsc << std::endl; + if (cls.name.find("CMTVXTSC-B-NOPF") != std::string::npos && tsc == 255) { + int itsc = cls.getIndex(); + tsc = clsIndexToScaler[itsc]; + //tsc = scl->getScalerIndexForClass(itsc); + std::cout << cls.name << ":" << tsc << ":" << itsc << std::endl; } if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { - tce = cls.getIndex(); - std::cout << cls.name << ":" << tce << std::endl; + int itce = cls.getIndex(); + tce = clsIndexToScaler[itce]; + //tce = scl->getScalerIndexForClass(itce); + std::cout << cls.name << ":" << tce << ":" << itce << std::endl; } if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { - vch = cls.getIndex(); - std::cout << cls.name << ":" << vch << std::endl; + int ivch = cls.getIndex(); + vch = clsIndexToScaler[ivch]; + //vch = scl->getScalerIndexForClass(ivch); + std::cout << cls.name << ":" << vch << ":" << ivch << std::endl; } } + if (tsc == 255 || tce == 255 || vch == 255) { + std::cout << " One of dcalers not available, check config to find alternative)" << std::endl; + return; + } // // Anal // @@ -95,6 +116,7 @@ void PlotPbLumi(int runNumber, int fillN, int what = 1, std::string ccdbHost = " int n = recs.size() - 1; std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; Double_t x[n], znc[n], zncpp[n]; + Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n]; for (int i = 0; i < n; i++) { x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0; x[i] *= 88e-6; @@ -107,47 +129,48 @@ void PlotPbLumi(int runNumber, int fillN, int what = 1, std::string ccdbHost = " double_t mu = -TMath::Log(1. - znci / tt / nbc / frev); double_t zncipp = mu * nbc * frev; zncpp[i] = zncipp / 28.; + znc[i] = znci / 28. / tt; // - double_t rat = 0; - if (what == 1) { - rat = znci / 28. / tt; - } else if (what == 2) { - auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; - had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - rat = (double_t)(had) / zncpp[i] / tt; - } else if (what == 3) { - auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - rat = (double_t)(had) / zncpp[i] / tt; - } else if (what == 4) { - auto had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - rat = (double_t)(had) / zncpp[i] / tt; - } - znc[i] = rat; + auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; + had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetsctoznc[i] = (double_t)(had) / zncpp[i] / tt; + had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetoznc[i] = (double_t)(had) / zncpp[i] / tt; + had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + vchtoznc[i] = (double_t)(had) / zncpp[i] / tt; } + // + gStyle->SetMarkerSize(0.5); TGraph* gr1 = new TGraph(n, x, znc); - // TGraph *gr2 = new TGraph(n,x,zncpp); - gr1->SetMarkerStyle(22); - // gr2->SetMarkerStyle(21); - if (what == 1) { - gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); - } else if (what == 2) { - gr1->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - // gr1->GetHistogram()->SetMaximum(1.2); - // gr1->GetHistogram()->SetMinimum(0.8); - } else if (what == 3) { - gr1->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); - gr1->GetHistogram()->SetMaximum(0.6); - gr1->GetHistogram()->SetMinimum(0.5); - } else { - gr1->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); - gr1->GetHistogram()->SetMaximum(0.6); - gr1->GetHistogram()->SetMinimum(0.5); - } + TGraph* gr2 = new TGraph(n, x, tcetsctoznc); + TGraph* gr3 = new TGraph(n, x, tcetoznc); + TGraph* gr4 = new TGraph(n, x, vchtoznc); + gr1->SetMarkerStyle(20); + gr2->SetMarkerStyle(21); + gr3->SetMarkerStyle(23); + gr4->SetMarkerStyle(23); + gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); + gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); + //gr2->GetHistogram()->SetMaximum(1.1); + //gr2->GetHistogram()->SetMinimum(0.9); + gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); + //gr3->GetHistogram()->SetMaximum(0.6); + //gr3->GetHistogram()->SetMinimum(0.4); + gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); + //gr4->GetHistogram()->SetMaximum(0.6); + //gr4->GetHistogram()->SetMinimum(0.4); TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); + c1->Divide(2, 2); + c1->cd(1); gr1->Draw("AP"); - // gr2->Draw("P"); + c1->cd(2); + gr2->Draw("AP"); + c1->cd(3); + gr3->Draw("AP"); + c1->cd(4); + gr4->Draw("AP"); } diff --git a/Detectors/CTP/macro/PlotPbLumiII.C b/Detectors/CTP/macro/PlotPbLumiII.C deleted file mode 100644 index caa87332416d8..0000000000000 --- a/Detectors/CTP/macro/PlotPbLumiII.C +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2019-2020 CERN and copyright holders of ALICE O2. -// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. -// All rights not expressly granted are reserved. -// -// This software is distributed under the terms of the GNU General Public -// License v3 (GPL Version 3), copied verbatim in the file "COPYING". -// -// In applying this license CERN does not waive the privileges and immunities -// granted to it by virtue of its status as an Intergovernmental Organization -// or submit itself to any jurisdiction. - -/// \file TestCTPScalers.C -/// \brief create CTP scalers, test it and add to database -/// \author Roman Lietava -// root -b -q "GetScalers.C(\"519499\", 1656286373953)" -#if !defined(__CLING__) || defined(__ROOTCLING__) - -#include -#include "CCDB/CcdbApi.h" -#include "CCDB/BasicCCDBManager.h" -#include "DataFormatsCTP/Scalers.h" -#include "DataFormatsCTP/Configuration.h" -#include -#include -#include -#endif -using namespace o2::ctp; -void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") -{ // - // what = 1: znc rate - // what = 2: (TCE+TSC)/ZNC - // what = 3: TCE/ZNC - std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; - std::string mCCDBPathCTPConfig = "CTP/Config/Config"; - auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); - // Timestamp - auto soreor = ccdbMgr.getRunDuration(runNumber); - uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first; - std::cout << "Timestamp:" << timeStamp << std::endl; - // Filling - std::string sfill = std::to_string(fillN); - std::map metadata; - metadata["fillNumber"] = sfill; - auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); - auto bfilling = lhcifdata->getBunchFilling(); - std::vector bcs = bfilling.getFilledBCs(); - int nbc = bcs.size(); - std::cout << "Number of interacting bc:" << nbc << std::endl; - // Scalers - std::string srun = std::to_string(runNumber); - metadata.clear(); // can be empty - metadata["runNumber"] = srun; - ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); - auto scl = ccdbMgr.getSpecific(mCCDBPathCTPScalers, timeStamp, metadata); - if (scl == nullptr) { - LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; - return; - } - scl->convertRawToO2(); - std::vector recs = scl->getScalerRecordO2(); - // - // CTPConfiguration ctpcfg; - auto ctpcfg = ccdbMgr.getSpecific(mCCDBPathCTPConfig, timeStamp, metadata); - if (ctpcfg == nullptr) { - LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp; - return; - } - std::vector clslist = ctpcfg->getTriggerClassList(); - //std::vector clslist = scl->getClassIndexes(); - std::map clsIndexToScaler; - std::cout << "Classes:"; - int i = 0; - for(auto const& cls: clslist) { - std::cout << cls << " "; - clsIndexToScaler[cls]=i; - i++; - } - std::cout << std::endl; - std::vector ctpcls = ctpcfg->getCTPClasses(); - int tsc = 255; - int tce = 255; - int vch = 255; - for (auto const& cls : ctpcls) { - if (cls.name.find("CMTVXTSC-B-NOPF") != std::string::npos && tsc == 255) { - int itsc = cls.getIndex(); - tsc = clsIndexToScaler[itsc]; - //tsc = scl->getScalerIndexForClass(itsc); - std::cout << cls.name << ":" << tsc << ":" << itsc << std::endl; - } - if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { - int itce = cls.getIndex(); - tce = clsIndexToScaler[itce]; - //tce = scl->getScalerIndexForClass(itce); - std::cout << cls.name << ":" << tce << ":" << itce << std::endl; - } - if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { - int ivch = cls.getIndex(); - vch = clsIndexToScaler[ivch]; - //vch = scl->getScalerIndexForClass(ivch); - std::cout << cls.name << ":" << vch << ":" << ivch << std::endl; - } - } - if (tsc == 255 || tce == 255 || vch == 255) { - std::cout << " One of dcalers not available, check config to find alternative)" << std::endl; - return; - } - // - // Anal - // - // Times - double_t frev = 11245; - double_t time0 = recs[0].epochTime; - double_t timeL = recs[recs.size() - 1].epochTime; - double_t Trun = timeL - time0; - double_t orbit0 = recs[0].intRecord.orbit; - int n = recs.size() - 1; - std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; - Double_t x[n], znc[n], zncpp[n]; - Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n]; - for (int i = 0; i < n; i++) { - x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0; - x[i] *= 88e-6; - // x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; - double_t tt = (double_t)(recs[i + 1].intRecord.orbit - recs[i].intRecord.orbit); - tt = tt * 88e-6; - // - // std::cout << recs[i+1].scalersInps[25] << std::endl; - double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]); - double_t mu = -TMath::Log(1. - znci / tt / nbc / frev); - double_t zncipp = mu * nbc * frev; - zncpp[i] = zncipp / 28.; - znc[i] = znci / 28. / tt; - // - auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; - had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - tcetsctoznc[i] = (double_t)(had) / zncpp[i] / tt; - had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - tcetoznc[i] = (double_t)(had) / zncpp[i] / tt; - had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - vchtoznc[i] = (double_t)(had) / zncpp[i] / tt; - } - // - gStyle->SetMarkerSize(0.5); - TGraph* gr1 = new TGraph(n, x, znc); - TGraph* gr2 = new TGraph(n, x, tcetsctoznc); - TGraph* gr3 = new TGraph(n, x, tcetoznc); - TGraph* gr4 = new TGraph(n, x, vchtoznc); - gr1->SetMarkerStyle(20); - gr2->SetMarkerStyle(21); - gr3->SetMarkerStyle(23); - gr4->SetMarkerStyle(23); - gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); - gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - //gr2->GetHistogram()->SetMaximum(1.1); - //gr2->GetHistogram()->SetMinimum(0.9); - gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); - //gr3->GetHistogram()->SetMaximum(0.6); - //gr3->GetHistogram()->SetMinimum(0.4); - gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); - //gr4->GetHistogram()->SetMaximum(0.6); - //gr4->GetHistogram()->SetMinimum(0.4); - TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); - c1->Divide(2, 2); - c1->cd(1); - gr1->Draw("AP"); - c1->cd(2); - gr2->Draw("AP"); - c1->cd(3); - gr3->Draw("AP"); - c1->cd(4); - gr4->Draw("AP"); -} From adf096f2ebb0fe477fe6204de3ad83bb526f90b7 Mon Sep 17 00:00:00 2001 From: lietava Date: Mon, 30 Oct 2023 15:36:44 +0100 Subject: [PATCH 09/10] dev:scalers infrastructure --- .../CTP/include/DataFormatsCTP/Scalers.h | 4 ++- DataFormats/Detectors/CTP/src/Scalers.cxx | 31 ++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h index 4580edf7d955b..aaa60a17456ab 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h @@ -107,7 +107,9 @@ class CTPRunScalers int printRates(); int printIntegrals(); int printInputRateAndIntegral(int inp); - int printClassBRateAndIntegral(int icls); + int printClassBRateAndIntegralII(int icls); + int printClassBRateAndIntegral(int iclsinscalers); + // // static constexpr uint32_t NCOUNTERS = 1052; // v1 diff --git a/DataFormats/Detectors/CTP/src/Scalers.cxx b/DataFormats/Detectors/CTP/src/Scalers.cxx index 02927c707f567..a4a63a2ceb6dc 100644 --- a/DataFormats/Detectors/CTP/src/Scalers.cxx +++ b/DataFormats/Detectors/CTP/src/Scalers.cxx @@ -571,7 +571,7 @@ int CTPRunScalers::printInputRateAndIntegral(int inp) } // Prints class before counters for lumi // Class counting 1..64 -int CTPRunScalers::printClassBRateAndIntegral(int icls) +int CTPRunScalers::printClassBRateAndIntegralII(int iclsindex) { if (mScalerRecordO2.size() == 0) { LOG(info) << "ScalerRecord is empty, doing nothing"; @@ -579,14 +579,31 @@ int CTPRunScalers::printClassBRateAndIntegral(int icls) } double_t time0 = mScalerRecordO2[0].epochTime; double_t timeL = mScalerRecordO2[mScalerRecordO2.size() - 1].epochTime; - //if (mScalerRecordO2[0].scalers.size() < 64) { - //LOG(error) << "class number bigger than expected for this run:" << icls << "expexted smaller than:" << mScalerRecordO2[0].scalers.size(); - //return 1; - //} else + int iscalerindex = getScalerIndexForClass(iclsindex); + if(iscalerindex != 255) { - int integral = mScalerRecordO2[mScalerRecordO2.size() - 1].scalers[icls - 1].lmBefore - mScalerRecordO2[0].scalers[icls - 1].lmBefore; + int integral = mScalerRecordO2[mScalerRecordO2.size() - 1].scalers[iscalerindex].lmBefore - mScalerRecordO2[0].scalers[iscalerindex].lmBefore; std::cout << "Scaler Integrals for run:" << mRunNumber << " duration:" << timeL - time0; - std::cout << " Class " << icls << " integral:" << integral << " rate:" << integral / (timeL - time0) << std::endl; + std::cout << " Class index" << iclsindex << " integral:" << integral << " rate:" << integral / (timeL - time0) << std::endl; + return 0; + } + return 1; +} +// Prints class before counters for lumi +// Scaler Index Class counting 1..64 +// getScalerIndexForClass(int cls) shpild be called before to convert class index to scaler class index +int CTPRunScalers::printClassBRateAndIntegral(int iclsscalerindex) +{ + if (mScalerRecordO2.size() == 0) { + LOG(info) << "ScalerRecord is empty, doing nothing"; + return 1; + } + double_t time0 = mScalerRecordO2[0].epochTime; + double_t timeL = mScalerRecordO2[mScalerRecordO2.size() - 1].epochTime; + { + int integral = mScalerRecordO2[mScalerRecordO2.size() - 1].scalers[iclsscalerindex - 1].lmBefore - mScalerRecordO2[0].scalers[iclsscalerindex - 1].lmBefore; + std::cout << "Scaler Integrals for run:" << mRunNumber << " duration:" << timeL - time0; + std::cout << " Class scaler index:" << iclsscalerindex << " integral:" << integral << " rate:" << integral / (timeL - time0) << std::endl; } return 0; } From 5feb49f216755f1cc03b9c8be8bd5bdb432c2b59 Mon Sep 17 00:00:00 2001 From: lietava Date: Mon, 30 Oct 2023 15:37:50 +0100 Subject: [PATCH 10/10] clang --- DataFormats/Detectors/CTP/src/Scalers.cxx | 9 ++++---- Detectors/CTP/macro/GetScalersForRun.C | 17 +++++++-------- Detectors/CTP/macro/PlotPbLumi.C | 26 +++++++++++------------ 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/DataFormats/Detectors/CTP/src/Scalers.cxx b/DataFormats/Detectors/CTP/src/Scalers.cxx index a4a63a2ceb6dc..0f93f3ce5a4f8 100644 --- a/DataFormats/Detectors/CTP/src/Scalers.cxx +++ b/DataFormats/Detectors/CTP/src/Scalers.cxx @@ -150,14 +150,14 @@ std::vector CTPRunScalers::getClassIndexes() const // cls counted from 0 int CTPRunScalers::getScalerIndexForClass(int cls) const { - if(cls < 0 || cls >= 64) { + if (cls < 0 || cls >= 64) { LOG(error) << "Class index out of range:" << cls; return 255; } std::vector clslist = getClassIndexes(); int i = 0; - for(auto const& clsl: clslist) { - if(cls == clsl) { + for (auto const& clsl : clslist) { + if (cls == clsl) { return i; } i++; @@ -580,8 +580,7 @@ int CTPRunScalers::printClassBRateAndIntegralII(int iclsindex) double_t time0 = mScalerRecordO2[0].epochTime; double_t timeL = mScalerRecordO2[mScalerRecordO2.size() - 1].epochTime; int iscalerindex = getScalerIndexForClass(iclsindex); - if(iscalerindex != 255) - { + if (iscalerindex != 255) { int integral = mScalerRecordO2[mScalerRecordO2.size() - 1].scalers[iscalerindex].lmBefore - mScalerRecordO2[0].scalers[iscalerindex].lmBefore; std::cout << "Scaler Integrals for run:" << mRunNumber << " duration:" << timeL - time0; std::cout << " Class index" << iclsindex << " integral:" << integral << " rate:" << integral / (timeL - time0) << std::endl; diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index 69f7d18b30f61..e10d00e79c353 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -54,14 +54,14 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) std::cout << "all good" << std::endl; ctpscalers->convertRawToO2(); std::vector ctpcls = ctpcfg->getCTPClasses(); - //std::vector clslist = ctpcfg->getTriggerClassList(); + // std::vector clslist = ctpcfg->getTriggerClassList(); std::vector clslist = ctpscalers->getClassIndexes(); - std::map clsIndexToScaler; + std::map clsIndexToScaler; std::cout << "Classes:"; int i = 0; - for(auto const& cls: clslist) { + for (auto const& cls : clslist) { std::cout << cls << " "; - clsIndexToScaler[cls]=i; + clsIndexToScaler[cls] = i; i++; } std::cout << std::endl; @@ -107,23 +107,22 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) std::cout << " Integralpp:" << integralpp << " Ratepp:" << ratepp / sigmaratio << std::endl; // ctpscalers->printInputRateAndIntegral(26); // - if( tsc != 255) { + if (tsc != 255) { std::cout << "TSC:"; ctpscalers->printClassBRateAndIntegral(clsIndexToScaler[tsc] + 1); } - if( tce != 255 ) { + if (tce != 255) { std::cout << "TCE:"; ctpscalers->printClassBRateAndIntegral(clsIndexToScaler[tce] + 1); } // std::cout << "TCE input:" << ctpscalers->printInputRateAndIntegral(5) << std::endl;; - if( vch != 255) { + if (vch != 255) { std::cout << "VCH:"; ctpscalers->printClassBRateAndIntegral(clsIndexToScaler[vch] + 1); } - if( iznc != 255) { + if (iznc != 255) { std::cout << "ZNC class:"; int integral = recs[recs.size() - 1].scalers[iznc].l1After - recs[0].scalers[iznc].l1After; std::cout << integral << std::endl; - } } diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index caa87332416d8..bf30169929b45 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -66,13 +66,13 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- return; } std::vector clslist = ctpcfg->getTriggerClassList(); - //std::vector clslist = scl->getClassIndexes(); - std::map clsIndexToScaler; + // std::vector clslist = scl->getClassIndexes(); + std::map clsIndexToScaler; std::cout << "Classes:"; int i = 0; - for(auto const& cls: clslist) { + for (auto const& cls : clslist) { std::cout << cls << " "; - clsIndexToScaler[cls]=i; + clsIndexToScaler[cls] = i; i++; } std::cout << std::endl; @@ -84,19 +84,19 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- if (cls.name.find("CMTVXTSC-B-NOPF") != std::string::npos && tsc == 255) { int itsc = cls.getIndex(); tsc = clsIndexToScaler[itsc]; - //tsc = scl->getScalerIndexForClass(itsc); + // tsc = scl->getScalerIndexForClass(itsc); std::cout << cls.name << ":" << tsc << ":" << itsc << std::endl; } if (cls.name.find("CMTVXTCE-B-NOPF-CRU") != std::string::npos) { int itce = cls.getIndex(); tce = clsIndexToScaler[itce]; - //tce = scl->getScalerIndexForClass(itce); + // tce = scl->getScalerIndexForClass(itce); std::cout << cls.name << ":" << tce << ":" << itce << std::endl; } if (cls.name.find("CMTVXVCH-B-NOPF-CRU") != std::string::npos) { int ivch = cls.getIndex(); vch = clsIndexToScaler[ivch]; - //vch = scl->getScalerIndexForClass(ivch); + // vch = scl->getScalerIndexForClass(ivch); std::cout << cls.name << ":" << vch << ":" << ivch << std::endl; } } @@ -155,14 +155,14 @@ void PlotPbLumiII(int runNumber, int fillN, std::string ccdbHost = "http://ccdb- gr4->SetMarkerStyle(23); gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - //gr2->GetHistogram()->SetMaximum(1.1); - //gr2->GetHistogram()->SetMinimum(0.9); + // gr2->GetHistogram()->SetMaximum(1.1); + // gr2->GetHistogram()->SetMinimum(0.9); gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); - //gr3->GetHistogram()->SetMaximum(0.6); - //gr3->GetHistogram()->SetMinimum(0.4); + // gr3->GetHistogram()->SetMaximum(0.6); + // gr3->GetHistogram()->SetMinimum(0.4); gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R"); - //gr4->GetHistogram()->SetMaximum(0.6); - //gr4->GetHistogram()->SetMinimum(0.4); + // gr4->GetHistogram()->SetMaximum(0.6); + // gr4->GetHistogram()->SetMinimum(0.4); TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); c1->Divide(2, 2); c1->cd(1);