From a63891a87b527e2fdda609f30fbd8444b0478c03 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 2 Nov 2022 15:49:00 +0000 Subject: [PATCH 01/17] gagiks speedup for BankHists --- Clas12Root/templateBankHistAction.C | 32 +++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Clas12Root/templateBankHistAction.C b/Clas12Root/templateBankHistAction.C index 79252bc..0c3b817 100644 --- a/Clas12Root/templateBankHistAction.C +++ b/Clas12Root/templateBankHistAction.C @@ -29,20 +29,30 @@ namespace clas12root{ hipo::event event; Long64_t nevents=0; - while(reader.next()==true){ - if(++nevents==NENTRIESTOPROCESS) break; - reader.read(event); //read event - event.getStructure(bank); //get particle data + int nrec = reader.getNRecords(); + hipo::record record; - int nrows = bank.getRows(); - for(int i = 0; i < nrows; i++){ - bank.setBankEntry(i); - ////if(CCCC)hists->at(IIII)->Fill(XXXX); + for(int i =0 ;i < nrec; i++){ + reader.loadRecord(record,i); + int nevt = record.getEventCount(); + //printf("event size = %d\n", nevt); + for(int r = 0; r < nevt; r++){ + record.read(bank,r); + + if(++nevents==NENTRIESTOPROCESS) break; + // reader.read(event); //read event + //event.getStructure(bank); //get particle data + + int nrows = bank.getRows(); + for(int i = 0; i < nrows; i++){ + bank.setBankEntry(i); + ////if(CCCC)hists->at(IIII)->Fill(XXXX); + + } } - } - } + } - + } }; } From 009c617c1e2914e68866f23dacba435be938a2fd Mon Sep 17 00:00:00 2001 From: rtysonCLAS12 Date: Fri, 17 Feb 2023 21:49:35 +0000 Subject: [PATCH 02/17] Added quick charge calculation to QADB reader --- Clas12Banks/qadb_reader.cpp | 91 ++++++++++++++-------- Clas12Banks/qadb_reader.h | 1 + RunRoot/Ex9_QualityAssurance.C | 26 ++++--- RunRoot/Ex9_QualityAssurance_quickLookup.C | 25 ++++++ 4 files changed, 99 insertions(+), 44 deletions(-) create mode 100644 RunRoot/Ex9_QualityAssurance_quickLookup.C diff --git a/Clas12Banks/qadb_reader.cpp b/Clas12Banks/qadb_reader.cpp index 17d39c9..9a071a9 100644 --- a/Clas12Banks/qadb_reader.cpp +++ b/Clas12Banks/qadb_reader.cpp @@ -21,48 +21,73 @@ namespace clas12 { //std::cout<<"DEBUG qadb_reader::passQAReqs "<<_runNb<<" "< Runs){ + //loop over runs in run list + + for (auto runNb:Runs){ + setRun(runNb); + //std::cout<<"Reading Run "<<_runNb< Runs); private: QA::QADB _qa;//! diff --git a/RunRoot/Ex9_QualityAssurance.C b/RunRoot/Ex9_QualityAssurance.C index f4b5723..c2ef2db 100644 --- a/RunRoot/Ex9_QualityAssurance.C +++ b/RunRoot/Ex9_QualityAssurance.C @@ -12,13 +12,9 @@ void Ex9_QualityAssurance(){ //clas12reader declared as usual. clas12reader c12("/path/to/data.hipo"); - /* - * applyQA specifies to the clas12reader that quality assurance - * cuts will be applied, based on the .json file given as an - * argument. This file should contain the Clas12 Quality Assurance - * database. - */ - c12.applyQA(); + /*c12reader needs a database*/ + clas12databases db; + c12.connectDataBases(&db); /* * Several quality assurance requirements can be specified. @@ -32,10 +28,18 @@ void Ex9_QualityAssurance(){ * See RGA analysis note and clasqaDB github repository for * additional information. */ - c12.qadb()->requireOkForAsymmetry(true); - c12.qadb()->requireGolden(true); - c12.qadb()->addQARequirement("MarginalOutlier"); - c12.qadb()->addQARequirement("TotalOutlier"); + c12.db()->qadb_requireOkForAsymmetry(true); + c12.db()->qadb_requireGolden(true); + c12.db()->qadb_addQARequirement("MarginalOutlier"); + c12.db()->qadb_addQARequirement("TotalOutlier"); + + /* + * applyQA specifies to the clas12reader that quality assurance + * cuts will be applied, based on the .json file given as an + * argument. This file should contain the Clas12 Quality Assurance + * database. + */ + c12.applyQA(); //The analysis can then proceed as usual. while(c12.next()) { diff --git a/RunRoot/Ex9_QualityAssurance_quickLookup.C b/RunRoot/Ex9_QualityAssurance_quickLookup.C new file mode 100644 index 0000000..f2c550b --- /dev/null +++ b/RunRoot/Ex9_QualityAssurance_quickLookup.C @@ -0,0 +1,25 @@ +#include +#include +#include "qadb_reader.h" + +using namespace clas12; +using namespace std; + +void Ex9_QualityAssurance_quickLookup(){ + + /*Create a list of runs. + 6598, 6597 used as examples here.*/ + std::vector Runs; + Runs.push_back(6598); + Runs.push_back(6597); + + /*Set up qadb_reader, can pass any run number (here 0), this isn't used*/ + qadb_reader qa(0); + + /*Set up the requirements.*/ + qa.requireGolden(true); + + /*Ask for the accumulated charge in the list of runs.*/ + double charge=qa.getChargeForRunlist(Runs); + cout<<"Accumulated Charge "< Date: Fri, 17 Feb 2023 21:56:27 +0000 Subject: [PATCH 03/17] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b661c2a..23ba97f 100644 --- a/README.md +++ b/README.md @@ -500,6 +500,10 @@ Or if using a HipoChain More information on the Quality Assurance process can be found in the RGA analysis note. +### Fast Accumulated Charge Lookup + +The qadb_reader used by the clas12reader to read the Quality Assurance Database can also perform a fast lookup of the accumulated charge of a given list of runs. An example is given in [https://github.com/dglazier/clas12root/blob/qadb_update/RunRoot/Ex9_QualityAssurance_quickLookup.C Example 9, Quality Assurance quick lookup script]. + ### Using databases with HipoSelector In your run script you must just set the paths to the data as normal and configure the QADB conditions as above. @@ -545,4 +549,4 @@ To create a clas12reader and go straight o a particular event in the file, } -Note the event number is just its position in the file, not the DST RUN::Config::Event. \ No newline at end of file +Note the event number is just its position in the file, not the DST RUN::Config::Event. From d17bf7525af2d566a506033ba2fb3679f7554407 Mon Sep 17 00:00:00 2001 From: Richard Tyson <58739511+rtysonCLAS12@users.noreply.github.com> Date: Fri, 17 Feb 2023 21:57:55 +0000 Subject: [PATCH 04/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23ba97f..4a4d7f3 100644 --- a/README.md +++ b/README.md @@ -502,7 +502,7 @@ More information on the Quality Assurance process can be found in the RGA analys ### Fast Accumulated Charge Lookup -The qadb_reader used by the clas12reader to read the Quality Assurance Database can also perform a fast lookup of the accumulated charge of a given list of runs. An example is given in [https://github.com/dglazier/clas12root/blob/qadb_update/RunRoot/Ex9_QualityAssurance_quickLookup.C Example 9, Quality Assurance quick lookup script]. +The qadb_reader used by the clas12reader to read the Quality Assurance Database can also perform a fast lookup of the accumulated charge of a given list of runs. An example is given in Example 9, Quality Assurance quick lookup script here https://github.com/dglazier/clas12root/blob/qadb_update/RunRoot/Ex9_QualityAssurance_quickLookup.C. ### Using databases with HipoSelector From b67ec6fade05eef3eefd28c4e9f56404b24fd5ae Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 20 Feb 2023 13:48:20 +0000 Subject: [PATCH 05/17] add Utracks bank --- Clas12Banks/#region_fdet.h# | 130 ++++++++++++++++++++++++++++++++ Clas12Banks/.#region_fdet.h | 1 + Clas12Banks/CMakeLists.txt | 4 +- Clas12Banks/Clas12LinkDef.h | 2 + Clas12Banks/clas12reader.cpp | 4 + Clas12Banks/clas12reader.h | 10 ++- Clas12Banks/region_band.cpp | 4 +- Clas12Banks/region_band.h | 3 +- Clas12Banks/region_cdet.cpp | 14 ++-- Clas12Banks/region_cdet.h | 12 +-- Clas12Banks/region_fdet.cpp | 4 +- Clas12Banks/region_fdet.h | 12 ++- Clas12Banks/region_ft.cpp | 4 +- Clas12Banks/region_ft.h | 3 +- Clas12Banks/region_particle.cpp | 61 +++++++-------- Clas12Banks/region_particle.h | 25 +++--- Clas12Banks/utracker.cpp | 24 ++++++ Clas12Banks/utracker.h | 108 ++++++++++++++++++++++++++ 18 files changed, 347 insertions(+), 78 deletions(-) create mode 100644 Clas12Banks/#region_fdet.h# create mode 120000 Clas12Banks/.#region_fdet.h create mode 100644 Clas12Banks/utracker.cpp create mode 100644 Clas12Banks/utracker.h diff --git a/Clas12Banks/#region_fdet.h# b/Clas12Banks/#region_fdet.h# new file mode 100644 index 0000000..6f41895 --- /dev/null +++ b/Clas12Banks/#region_fdet.h# @@ -0,0 +1,130 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_fdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FDET_H +#define REGION_FDET_H + +#include "clas12defs.h" +#include "region_particle.h" + +namespace clas12 { + + + class region_fdet : public region_particle { + + + public: + + // region_fdet()=default; + region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, + cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, + traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, + mcpar_ptr mcp=nullptr); + ~region_fdet() final =default; + + + bool sort() final; + + cal_ptr cal(ushort lay) const final; + scint_ptr sci(ushort lay) const final; + traj_ptr traj(ushort det,ushort layer=0) const final; + trck_ptr trk(ushort lay) const final + { + _trck->setIndex(_ptrck);return _trck; + } + utrck_ptr utrk(ushort lay) const final + { + _utrck->setIndex(_ptrck);return _utrck; + } + cher_ptr che(ushort lay) const final; + + + + double getTime() final{ + if(_ptof>-1){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _cal->setIndex(_pcal); + return _cal->getTime(); + } + double getPath() final{ + if(_ptof>-1){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _cal->setIndex(_pcal); + return _cal->getPath(); + } + + double getDetEnergy() final{ + _cal->setIndex(_ppre); + double energy=_cal->getEnergy(); + _cal->setIndex(_pin); + energy+=_cal->getEnergy(); + _cal->setIndex(_pout); + energy+=_cal->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + if(_ptrck>-1){ + _trck->setIndex(_ptrck); + return _trck->getSector(); + } + if(_ptof>-1){ + _scint->setIndex(_ptof); + return _scint->getSector(); + } + _cal->setIndex(_pcal); + return _cal->getSector(); + } + + double getCalPhotonE(){return 0;} + private: + + + + //calorimeter indices + short _pcal=-1; + short _ppre=-1; + short _pin=-1; + short _pout=-1; + //scintillator indices + short _ptof=-1; + short _ptof1=-1; + short _ptof2=-1; + short _ptof3=-1; + //track index + short _ptrck=-1; + //traj index + // short _ptraj=-1; + //cherenkov indices + short _phtcc=-1; + short _pltcc=-1; + + + + }; + + using region_fdet_ptr=clas12::region_fdet*; + using region_fdet_uptr=std::unique_ptr; + +} + +#endif /* REGION_FDET_H */ diff --git a/Clas12Banks/.#region_fdet.h b/Clas12Banks/.#region_fdet.h new file mode 120000 index 0000000..8e2d9e7 --- /dev/null +++ b/Clas12Banks/.#region_fdet.h @@ -0,0 +1 @@ +dglazier@npglazier.17186:1676883291 \ No newline at end of file diff --git a/Clas12Banks/CMakeLists.txt b/Clas12Banks/CMakeLists.txt index ab743d1..713a523 100644 --- a/Clas12Banks/CMakeLists.txt +++ b/Clas12Banks/CMakeLists.txt @@ -1,9 +1,9 @@ -set(CLASS_LIST_CPP helflip.cpp helonline.cpp vertdoca.cpp runconfig.cpp event.cpp ftbevent.cpp particle.cpp ftbparticle.cpp mcparticle.cpp mcevent.cpp mcmatch.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp scintextras.cpp tracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp region_band.cpp clas12writer.cpp clas12reader.cpp mesonex_trigger.cpp scaler_reader.cpp clas12databases.cpp qadb_reader.cpp ccdb_reader.cpp rcdb_reader.cpp) +set(CLASS_LIST_CPP helflip.cpp helonline.cpp vertdoca.cpp runconfig.cpp event.cpp ftbevent.cpp particle.cpp ftbparticle.cpp mcparticle.cpp mcevent.cpp mcmatch.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp scintextras.cpp tracker.cpp utracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp region_band.cpp clas12writer.cpp clas12reader.cpp mesonex_trigger.cpp scaler_reader.cpp clas12databases.cpp qadb_reader.cpp ccdb_reader.cpp rcdb_reader.cpp) -set(CLASS_LIST_H helflip.h helonline.h vertdoca.h runconfig.h event.h ftbevent.h particle.h ftbparticle.h mcparticle.h mcevent.h mcmatch.h scaler.h vtp.h particle_detector.h scintillator.h scintextras.h tracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h region_band.h clas12writer.h clas12reader.h mesonex_trigger.h scaler_reader.h clas12databases.h qadb_reader.h ccdb_reader.h rcdb_reader.h) +set(CLASS_LIST_H helflip.h helonline.h vertdoca.h runconfig.h event.h ftbevent.h particle.h ftbparticle.h mcparticle.h mcevent.h mcmatch.h scaler.h vtp.h particle_detector.h scintillator.h scintextras.h tracker.h utracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h region_band.h clas12writer.h clas12reader.h mesonex_trigger.h scaler_reader.h clas12databases.h qadb_reader.h ccdb_reader.h rcdb_reader.h) IF (DEFINED ENV{QADB}) set(CLASS_LIST_CPP ${CLASS_LIST_CPP} jsonFileMerger.cpp) diff --git a/Clas12Banks/Clas12LinkDef.h b/Clas12Banks/Clas12LinkDef.h index 404323d..53daa49 100644 --- a/Clas12Banks/Clas12LinkDef.h +++ b/Clas12Banks/Clas12LinkDef.h @@ -20,6 +20,7 @@ #pragma link C++ class clas12::vertdoca+; #pragma link C++ class clas12::particle_detector+; #pragma link C++ class clas12::scintillator+; +#pragma link C++ class clas12::utracker+; #pragma link C++ class clas12::tracker+; #pragma link C++ class clas12::traj+; #pragma link C++ class clas12::forwardtagger+; @@ -30,6 +31,7 @@ #pragma link C++ class clas12::region_ft+; #pragma link C++ class clas12::region_fdet+; #pragma link C++ class clas12::region_cdet+; +#pragma link C++ class clas12::region_band+; #pragma link C++ class clas12::clas12writer+; #pragma link C++ class clas12::clas12reader+; #pragma link C++ class clas12::rcdb_reader+; diff --git a/Clas12Banks/clas12reader.cpp b/Clas12Banks/clas12reader.cpp index c257cc7..4117b0d 100644 --- a/Clas12Banks/clas12reader.cpp +++ b/Clas12Banks/clas12reader.cpp @@ -83,6 +83,8 @@ namespace clas12 { } if(_factory.hasSchema("REC::Track")) _btrck.reset(new tracker{_factory.getSchema("REC::Track")}); + if(_factory.hasSchema("REC::UTrack")) + _butrck.reset(new utracker{_factory.getSchema("REC::UTrack")}); if(_factory.hasSchema("REC::Traj")) _btraj.reset(new traj{_factory.getSchema("REC::Traj")}); if(_factory.hasSchema("REC::Cherenkov")) @@ -336,6 +338,7 @@ namespace clas12 { if(_bscint.get())_event.getStructure(*_bscint.get()); if(_bscint->getExtras())_event.getStructure(*_bscint->getExtras()); if(_btrck.get())_event.getStructure(*_btrck.get()); + if(_butrck.get())_event.getStructure(*_butrck.get()); if(_btraj.get())_event.getStructure(*_btraj.get()); if(_bcher.get())_event.getStructure(*_bcher.get()); if(_bft.get())_event.getStructure(*_bft.get()); @@ -595,6 +598,7 @@ namespace clas12 { if(_bscint->getExtras())_allBanks.push_back(_bscint->getExtras()); } if(_btrck.get())_allBanks.push_back(_btrck.get()); + if(_butrck.get())_allBanks.push_back(_butrck.get()); if(_btraj.get())_allBanks.push_back(_btraj.get()); if(_bcher.get())_allBanks.push_back(_bcher.get()); if(_bft.get())_allBanks.push_back(_bft.get()); diff --git a/Clas12Banks/clas12reader.h b/Clas12Banks/clas12reader.h index f475db5..25398cc 100644 --- a/Clas12Banks/clas12reader.h +++ b/Clas12Banks/clas12reader.h @@ -17,6 +17,7 @@ #include "calorimeter.h" #include "scintillator.h" #include "tracker.h" +#include "utracker.h" #include "traj.h" #include "cherenkov.h" #include "event.h" @@ -88,26 +89,26 @@ namespace clas12 { void addARegionFDet(){ //Forward detector needs particles, calorimeter, scintillator, //track, cherenkov - region_fdet_uptr reg{new region_fdet{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; + region_fdet_uptr reg{new region_fdet{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_butrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; if(_useFTBased)reg->useFTBPid(); _rfdets.push_back(std::move(reg)); } void addARegionCDet(){ //Forward detector needs particles, calorimeter, scintillator, //track, cherenkov - region_cdet_uptr reg{new region_cdet{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; + region_cdet_uptr reg{new region_cdet{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_butrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; if(_useFTBased)reg->useFTBPid(); _rcdets.push_back(std::move(reg)); } void addARegionFT(){ //Forward tagger needs particles and forward tagger - region_ft_uptr reg{new region_ft{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; + region_ft_uptr reg{new region_ft{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_butrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; if(_useFTBased)reg->useFTBPid(); _rfts.push_back(std::move(reg)); } void addARegionBAND(){ //Forward tagger needs particles and forward tagger - region_band_uptr reg{new region_band{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; + region_band_uptr reg{new region_band{_bparts.get(),_bftbparts.get(),_bcovmat.get(),_bcal.get(),_bscint.get(),_btrck.get(),_butrck.get(),_btraj.get(),_bcher.get(),_bft.get(),_bevent.get(),_bmcparts.get()}}; if(_useFTBased)reg->useFTBPid(); _rbands.push_back(std::move(reg)); } @@ -258,6 +259,7 @@ namespace clas12 { cal_uptr _bcal;//! scint_uptr _bscint;//! trck_uptr _btrck;//! + utrck_uptr _butrck;//! traj_uptr _btraj;//! cher_uptr _bcher;//! ft_uptr _bft;//! diff --git a/Clas12Banks/region_band.cpp b/Clas12Banks/region_band.cpp index 8d526d5..b96b903 100644 --- a/Clas12Banks/region_band.cpp +++ b/Clas12Banks/region_band.cpp @@ -12,8 +12,8 @@ namespace clas12 { /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FD - region_band::region_band(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): - region_particle(pars,ftbpars,cm,calp,scp,trp,trj,chp,ftp,event,mcp) + region_band::region_band(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): + region_particle(pars,ftbpars,cm,calp,scp,trp,utrp,trj,chp,ftp,event,mcp) { _region=clas12::BD; } diff --git a/Clas12Banks/region_band.h b/Clas12Banks/region_band.h index 601dc7b..198b3d7 100644 --- a/Clas12Banks/region_band.h +++ b/Clas12Banks/region_band.h @@ -15,7 +15,6 @@ #include "clas12defs.h" #include "region_particle.h" -#include "forwardtagger.h" namespace clas12 { @@ -27,7 +26,7 @@ namespace clas12 { public: region_band(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, - cal_ptr calp, scint_ptr scp,trck_ptr trp, + cal_ptr calp, scint_ptr scp,trck_ptr trp,utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp=nullptr); ~region_band() final=default; diff --git a/Clas12Banks/region_cdet.cpp b/Clas12Banks/region_cdet.cpp index 60de298..de37900 100644 --- a/Clas12Banks/region_cdet.cpp +++ b/Clas12Banks/region_cdet.cpp @@ -10,16 +10,16 @@ namespace clas12 { /////////////////////////////////////////////////////// /// constructor used for stand-alone - region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): - region_particle(pars,cm,scp,trp,trj) - { - _region=clas12::CD; - } + // region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): + // region_particle(pars,cm,scp,trp,trj) + // { + // _region=clas12::CD; + // } /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FT - region_cdet::region_cdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): - region_particle(pars,ftbpars,cm,calp,scp,trp,trj,chp,ftp,event,mcp) + region_cdet::region_cdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp,utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): + region_particle(pars,ftbpars,cm,calp,scp,trp,utrp,trj,chp,ftp,event,mcp) { _region=clas12::CD; } diff --git a/Clas12Banks/region_cdet.h b/Clas12Banks/region_cdet.h index 2a24251..df686d9 100644 --- a/Clas12Banks/region_cdet.h +++ b/Clas12Banks/region_cdet.h @@ -16,11 +16,6 @@ #include "clas12defs.h" #include "region_particle.h" -#include "calorimeter.h" -#include "scintillator.h" -#include "tracker.h" -#include "traj.h" -#include "cherenkov.h" namespace clas12 { @@ -31,10 +26,10 @@ namespace clas12 { public: - region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, - trck_ptr trp,traj_ptr trj); + // region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, + // trck_ptr trp,traj_ptr trj); region_cdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, - trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, + trck_ptr trp,utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp=nullptr); ~region_cdet() final=default; @@ -44,6 +39,7 @@ namespace clas12 { scint_ptr sci(ushort lay) const final; traj_ptr traj(ushort det,ushort layer=0) const final; trck_ptr trk(ushort lay) const final{_trck->setIndex(_ptrck);return _trck;}; + utrck_ptr utrk(ushort lay) const final{_utrck->setIndex(_ptrck);return _utrck;}; diff --git a/Clas12Banks/region_fdet.cpp b/Clas12Banks/region_fdet.cpp index 696e6ac..b69f69b 100644 --- a/Clas12Banks/region_fdet.cpp +++ b/Clas12Banks/region_fdet.cpp @@ -10,8 +10,8 @@ namespace clas12 { /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FT - region_fdet::region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj,cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): - region_particle(pars,ftbpars,cm,calp,scp,trp,trj,chp,ftp,event,mcp) + region_fdet::region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj,cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): + region_particle(pars,ftbpars,cm,calp,scp,trp,utrp,trj,chp,ftp,event,mcp) { _region=clas12::FD; } diff --git a/Clas12Banks/region_fdet.h b/Clas12Banks/region_fdet.h index 208f423..369b8dd 100644 --- a/Clas12Banks/region_fdet.h +++ b/Clas12Banks/region_fdet.h @@ -16,12 +16,6 @@ #include "clas12defs.h" #include "region_particle.h" -#include "calorimeter.h" -#include "scintillator.h" -#include "tracker.h" -#include "traj.h" -#include "cherenkov.h" - namespace clas12 { @@ -33,7 +27,7 @@ namespace clas12 { // region_fdet()=default; region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, - cal_ptr calp, scint_ptr scp, trck_ptr trp, + cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp=nullptr); ~region_fdet() final =default; @@ -48,6 +42,10 @@ namespace clas12 { { _trck->setIndex(_ptrck);return _trck; } + utrck_ptr utrk(ushort lay) const final + { + _utrck->setIndex(_ptrck);return _utrck; + } cher_ptr che(ushort lay) const final; diff --git a/Clas12Banks/region_ft.cpp b/Clas12Banks/region_ft.cpp index b3b6595..5eafe7c 100644 --- a/Clas12Banks/region_ft.cpp +++ b/Clas12Banks/region_ft.cpp @@ -12,8 +12,8 @@ namespace clas12 { /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FD - region_ft::region_ft(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): - region_particle(pars,ftbpars,cm,calp,scp,trp,trj,chp,ftp,event,mcp) + region_ft::region_ft(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event,mcpar_ptr mcp): + region_particle(pars,ftbpars,cm,calp,scp,trp,utrp,trj,chp,ftp,event,mcp) { _region=clas12::FT; } diff --git a/Clas12Banks/region_ft.h b/Clas12Banks/region_ft.h index 47272ab..4a8493b 100644 --- a/Clas12Banks/region_ft.h +++ b/Clas12Banks/region_ft.h @@ -15,7 +15,6 @@ #include "clas12defs.h" #include "region_particle.h" -#include "forwardtagger.h" namespace clas12 { @@ -27,7 +26,7 @@ namespace clas12 { public: region_ft(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, - cal_ptr calp, scint_ptr scp,trck_ptr trp, + cal_ptr calp, scint_ptr scp,trck_ptr trp,utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp=nullptr); ~region_ft() final=default; diff --git a/Clas12Banks/region_particle.cpp b/Clas12Banks/region_particle.cpp index d86e62d..36a41ce 100644 --- a/Clas12Banks/region_particle.cpp +++ b/Clas12Banks/region_particle.cpp @@ -9,45 +9,46 @@ namespace clas12 { - region_particle::region_particle(par_ptr pars,covmat_ptr cm): - _parts(pars), - _covmat(cm) - { - } - region_particle::region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp): - _parts(pars), - _covmat(cm), - _ft(ftp) - { + // region_particle::region_particle(par_ptr pars,covmat_ptr cm): + // _parts(pars), + // _covmat(cm) + // { + // } + // region_particle::region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + // _parts(pars), + // _covmat(cm), + // _ft(ftp) + // { - } - region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): - _parts(pars), - _covmat(cm), - _scint(scp), - _trck(trp), - _traj(trj) - { + // } + // region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): + // _parts(pars), + // _covmat(cm), + // _scint(scp), + // _trck(trp), + // _traj(trj) + // { - } - region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp): - _parts(pars), - _covmat(cm), - _cal(calp), - _scint(scp), - _trck(trp), - _traj(trj), - _cher(chp) - { + // } + // region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp): + // _parts(pars), + // _covmat(cm), + // _cal(calp), + // _scint(scp), + // _trck(trp), + // _traj(trj), + // _cher(chp) + // { - } - region_particle::region_particle(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp): + // } + region_particle::region_particle(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp): _parts(pars), _ftbparts(ftbpars), _covmat(cm), _cal(calp), _scint(scp), _trck(trp), + _utrck(utrp), _traj(trj), _cher(chp), _ft(ftp), diff --git a/Clas12Banks/region_particle.h b/Clas12Banks/region_particle.h index 1911f0c..5126c6d 100644 --- a/Clas12Banks/region_particle.h +++ b/Clas12Banks/region_particle.h @@ -20,6 +20,7 @@ #include "calorimeter.h" #include "scintillator.h" #include "tracker.h" +#include "utracker.h" #include "traj.h" #include "event.h" #include "cherenkov.h" @@ -37,18 +38,18 @@ namespace clas12 { region_particle()=default; - region_particle(par_ptr pars,covmat_ptr cm); - //For region_ft - region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp); - //For region_cdet - region_particle(par_ptr pars,covmat_ptr cm, - scint_ptr scp, trck_ptr trp, traj_ptr trj); - //For region_fdet - region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, - scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp); + // region_particle(par_ptr pars,covmat_ptr cm); + // //For region_ft + // region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + // //For region_cdet + // region_particle(par_ptr pars,covmat_ptr cm, + // scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj); + // //For region_fdet + // region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + // scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp); //For all regions region_particle(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, - scint_ptr scp, trck_ptr trp, traj_ptr trj, + scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp=nullptr); @@ -92,6 +93,8 @@ namespace clas12 { return _useFTBPid*_ftbparts->getRows()?_ftbparts->getBeta():_parts->getBeta(); } + virtual double getCalPhotonE(){return 0;} + virtual double getTime()=0; virtual double getPath()=0; virtual double getDetEnergy()=0; @@ -105,6 +108,7 @@ namespace clas12 { virtual cal_ptr cal(ushort lay) const{_cal->setIndex(-1);return _cal;}; virtual scint_ptr sci(ushort lay) const{_scint->setIndex(-1);return _scint;}; virtual trck_ptr trk(ushort lay) const{_trck->setIndex(-1);return _trck;}; + virtual utrck_ptr utrk(ushort lay) const{_utrck->setIndex(-1);return _utrck;}; virtual traj_ptr traj(ushort det,ushort layer=0) const{_traj->setIndex(-1);return _traj;}; virtual cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;}; virtual ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;}; @@ -142,6 +146,7 @@ namespace clas12 { cal_ptr _cal={nullptr}; scint_ptr _scint={nullptr}; trck_ptr _trck={nullptr}; + utrck_ptr _utrck={nullptr}; traj_ptr _traj={nullptr}; cher_ptr _cher={nullptr}; event_ptr _event={nullptr}; diff --git a/Clas12Banks/utracker.cpp b/Clas12Banks/utracker.cpp new file mode 100644 index 0000000..4a7cfbd --- /dev/null +++ b/Clas12Banks/utracker.cpp @@ -0,0 +1,24 @@ +#include "utracker.h" + + +namespace clas12 { + + + utracker::utracker(hipo::schema __schema): clas12::particle_detector(__schema) { + + if(useItem("sector"))_sector_order = __schema.getEntryOrder("sector"); + if(useItem("status"))_status_order = __schema.getEntryOrder("status"); + if(useItem("NDF"))_NDF_order = __schema.getEntryOrder("NDF"); + if(useItem("q"))_q_order = __schema.getEntryOrder("q"); + if(useItem("chi2"))_chi2_order = __schema.getEntryOrder("chi2"); + if(useItem("px"))_px_order = __schema.getEntryOrder("px"); + if(useItem("py"))_py_order = __schema.getEntryOrder("py"); + if(useItem("pz"))_pz_order = __schema.getEntryOrder("pz"); + if(useItem("vx"))_vx_order = __schema.getEntryOrder("vx"); + if(useItem("vy"))_vy_order = __schema.getEntryOrder("vy"); + if(useItem("vz"))_vz_order = __schema.getEntryOrder("vz"); + + } + + +} diff --git a/Clas12Banks/utracker.h b/Clas12Banks/utracker.h new file mode 100644 index 0000000..b4712f1 --- /dev/null +++ b/Clas12Banks/utracker.h @@ -0,0 +1,108 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: utracker.h + * Author: dglazier + * + * Created on February 20, 2023 + */ + +#ifndef CLAS12_UTRACKER_H +#define CLAS12_UTRACKER_H + +#include "particle_detector.h" + + +namespace clas12 { + + class utracker : public particle_detector { + + + public: + + + utracker()=default; + + utracker(hipo::schema __schema); + + ~utracker() override=default; + + //getter funtions for items in utracker bank + int getNDF() const noexcept { + if(_index>-1)return getShort(_NDF_order,_index); + return 0; + } + int getSector() const noexcept { + if(_index>-1)return getByte(_sector_order,_index); + return 0; + } + int getStatus() const noexcept { + if(_index>-1)return getShort(_status_order,_index); + return 0; + } + int getCharge() const noexcept { + if(_index>-1)return getByte(_q_order,_index); + return 0; + } + double getChi2() const noexcept { + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + double getChi2N() const noexcept { + auto N=getNDF(); + if(N)return getChi2()/N; + return 0; + } + double getPx() const noexcept { + if(_index>-1)return getFloat(_px_order,_index); + return 0; + } + double getPy() const noexcept { + if(_index>-1)return getFloat(_py_order,_index); + return 0; + } + double getPz() const noexcept { + if(_index>-1)return getFloat(_pz_order,_index); + return 0; + } + double getVx() const noexcept { + if(_index>-1)return getFloat(_vx_order,_index); + return 0; + } + double getVy() const noexcept { + if(_index>-1)return getFloat(_vy_order,_index); + return 0; + } + double getVz() const noexcept { + if(_index>-1)return getFloat(_vz_order,_index); + return 0; + } + + private: + + int _NDF_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _q_order=-1; + int _chi2_order=-1; + int _px_order=-1; + int _py_order=-1; + int _pz_order=-1; + int _vx_order=-1; + int _vy_order=-1; + int _vz_order=-1; + + + + }; //class utracker + + using utrck_ptr=clas12::utracker*; + using utrck_uptr=std::unique_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ From f6ea766f9f3874cb74e5fb7a89e36e6c56b98768 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 20 Feb 2023 13:48:51 +0000 Subject: [PATCH 06/17] add Utracks bank --- Clas12Banks/#region_fdet.h# | 130 ------------------------------------ Clas12Banks/.#region_fdet.h | 1 - 2 files changed, 131 deletions(-) delete mode 100644 Clas12Banks/#region_fdet.h# delete mode 120000 Clas12Banks/.#region_fdet.h diff --git a/Clas12Banks/#region_fdet.h# b/Clas12Banks/#region_fdet.h# deleted file mode 100644 index 6f41895..0000000 --- a/Clas12Banks/#region_fdet.h# +++ /dev/null @@ -1,130 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -/* - * File: region_fdet.h - * Author: dglazier - * - * Created on April 27, 2017, 10:01 AM - */ - -#ifndef REGION_FDET_H -#define REGION_FDET_H - -#include "clas12defs.h" -#include "region_particle.h" - -namespace clas12 { - - - class region_fdet : public region_particle { - - - public: - - // region_fdet()=default; - region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, - cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, - traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, - mcpar_ptr mcp=nullptr); - ~region_fdet() final =default; - - - bool sort() final; - - cal_ptr cal(ushort lay) const final; - scint_ptr sci(ushort lay) const final; - traj_ptr traj(ushort det,ushort layer=0) const final; - trck_ptr trk(ushort lay) const final - { - _trck->setIndex(_ptrck);return _trck; - } - utrck_ptr utrk(ushort lay) const final - { - _utrck->setIndex(_ptrck);return _utrck; - } - cher_ptr che(ushort lay) const final; - - - - double getTime() final{ - if(_ptof>-1){ - _scint->setIndex(_ptof); - return _scint->getTime(); - } - _cal->setIndex(_pcal); - return _cal->getTime(); - } - double getPath() final{ - if(_ptof>-1){ - _scint->setIndex(_ptof); - return _scint->getPath(); - } - _cal->setIndex(_pcal); - return _cal->getPath(); - } - - double getDetEnergy() final{ - _cal->setIndex(_ppre); - double energy=_cal->getEnergy(); - _cal->setIndex(_pin); - energy+=_cal->getEnergy(); - _cal->setIndex(_pout); - energy+=_cal->getEnergy(); - return energy; - } - - double getDeltaEnergy() final{ - _scint->setIndex(_ptof); - return _scint->getEnergy(); - } - - short getSector() final{ - if(_ptrck>-1){ - _trck->setIndex(_ptrck); - return _trck->getSector(); - } - if(_ptof>-1){ - _scint->setIndex(_ptof); - return _scint->getSector(); - } - _cal->setIndex(_pcal); - return _cal->getSector(); - } - - double getCalPhotonE(){return 0;} - private: - - - - //calorimeter indices - short _pcal=-1; - short _ppre=-1; - short _pin=-1; - short _pout=-1; - //scintillator indices - short _ptof=-1; - short _ptof1=-1; - short _ptof2=-1; - short _ptof3=-1; - //track index - short _ptrck=-1; - //traj index - // short _ptraj=-1; - //cherenkov indices - short _phtcc=-1; - short _pltcc=-1; - - - - }; - - using region_fdet_ptr=clas12::region_fdet*; - using region_fdet_uptr=std::unique_ptr; - -} - -#endif /* REGION_FDET_H */ diff --git a/Clas12Banks/.#region_fdet.h b/Clas12Banks/.#region_fdet.h deleted file mode 120000 index 8e2d9e7..0000000 --- a/Clas12Banks/.#region_fdet.h +++ /dev/null @@ -1 +0,0 @@ -dglazier@npglazier.17186:1676883291 \ No newline at end of file From 5380acff8e885b1ff380e58f5978453dbe63d882 Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 21 Feb 2023 14:36:37 +0000 Subject: [PATCH 07/17] get sampling fraction pars and introduce ccdb()->getFDPhotonEnergy(p) --- Clas12Banks/ccdb_reader.cpp | 13 +++++++++++++ Clas12Banks/ccdb_reader.h | 19 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Clas12Banks/ccdb_reader.cpp b/Clas12Banks/ccdb_reader.cpp index 167ca37..4a1e95a 100644 --- a/Clas12Banks/ccdb_reader.cpp +++ b/Clas12Banks/ccdb_reader.cpp @@ -14,6 +14,7 @@ namespace clas12 { setRun(runNb); + #ifdef CLAS_CCDB ccdb::CalibrationGenerator gen; @@ -112,6 +113,11 @@ namespace clas12 { tableEntry.second.clear(); //empty the vector (required for GetCalib) _calib->GetCalib(tableEntry.second, nameWithRun(tableEntry.first) ); } + //Hack as the collaboration did not want to store + //the photon energy for FD in the case the neutral was + //PIDed as a photon + getSamplingFactionPars(); + #endif @@ -124,4 +130,11 @@ namespace clas12 { return temp; } + void ccdb_reader::getSamplingFactionPars(){ + auto& ccdbPhSF = requestTableDoubles("/calibration/eb/photon_sf"); + _sfPa=ccdbPhSF[0][3]; //0.250 + _sfPb=ccdbPhSF[0][4]; //1.029 + _sfPc=ccdbPhSF[0][5]; //-0.015 + _sfPd=ccdbPhSF[0][6]; // 0.00012 + } } diff --git a/Clas12Banks/ccdb_reader.h b/Clas12Banks/ccdb_reader.h index 8ea0932..8fa87ab 100644 --- a/Clas12Banks/ccdb_reader.h +++ b/Clas12Banks/ccdb_reader.h @@ -1,6 +1,7 @@ #ifndef CCDB_READER_H #define CCDB_READER_H +#include "region_particle.h" #ifdef CLAS_CCDB #include "CCDB/CalibrationGenerator.h" #include "CCDB/Calibration.h" @@ -29,7 +30,17 @@ namespace clas12 { void setRun(int nb){_runNb=nb; _srunNb=std::to_string(nb);} std::string nameWithRun(const std::string& tableName); - + void getSamplingFactionPars(); + + double getFDPhotonEnergy(region_particle* p){ + if(p->getRegion()!=FD) return 0.; + auto edep = p->getDetEnergy(); + return edep/getMeanSF(edep); + } + double getMeanSF(float Edep){ + return _sfPa*(_sfPb+(_sfPc/Edep)+(_sfPd/(Edep*Edep))); + } + private: ccdb_reader()=default; @@ -54,6 +65,12 @@ namespace clas12 { std::vector< TableRecord_t > _localTable; + // Photon Sampling Fraction Parameters + double _sfPa={0}; + double _sfPb={0}; + double _sfPc={0}; + double _sfPd={0}; + #ifdef CLAS_CCDB std::unique_ptr _calib ={nullptr}; From ccddafac359b5353e0742f6a991b108eb0d7549e Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 21 Feb 2023 14:37:41 +0000 Subject: [PATCH 08/17] add ignoreBank options and SetRecParticleOnly() for faster processing --- Clas12Banks/clas12reader.cpp | 166 ++++++++++++++++++++++++++--------- Clas12Banks/clas12reader.h | 44 +++++++++- 2 files changed, 168 insertions(+), 42 deletions(-) diff --git a/Clas12Banks/clas12reader.cpp b/Clas12Banks/clas12reader.cpp index fa0e820..bf8e826 100644 --- a/Clas12Banks/clas12reader.cpp +++ b/Clas12Banks/clas12reader.cpp @@ -36,7 +36,15 @@ namespace clas12 { _reader.setTags(tags); initReader(); - _givenPids=other._givenPids; + std::cout<<"copy useBanks"<getExtras())_event.getStructure(*_bcal->getExtras()); - if(_bscint.get())_event.getStructure(*_bscint.get()); - if(_bscint->getExtras())_event.getStructure(*_bscint->getExtras()); - if(_btrck.get())_event.getStructure(*_btrck.get()); - if(_butrck.get())_event.getStructure(*_butrck.get()); - if(_btraj.get())_event.getStructure(*_btraj.get()); - if(_bcher.get())_event.getStructure(*_bcher.get()); - if(_bft.get())_event.getStructure(*_bft.get()); - if(_bvtp.get())_event.getStructure(*_bvtp.get()); - if(_bhelonline.get())_event.getStructure(*_bhelonline.get()); - if(_bvertdoca.get())_event.getStructure(*_bvertdoca.get()); - - if(_bmcparts.get()){ + if(_useCovmat==true)_event.getStructure(*_bcovmat.get()); + if(_useEvent==true)_event.getStructure(*_bevent.get()); + if(_useFTBEvent==true)_event.getStructure(*_bftbevent.get()); + if(_useCal==true)_event.getStructure(*_bcal.get()); + if(_useCalExtras==true)_event.getStructure(*_bcal->getExtras()); + if(_useScint==true)_event.getStructure(*_bscint.get()); + if(_useScintExtras==true)_event.getStructure(*_bscint->getExtras()); + if(_useTrck==true)_event.getStructure(*_btrck.get()); + if(_useUTrck==true)_event.getStructure(*_butrck.get()); + if(_useTraj==true)_event.getStructure(*_btraj.get()); + if(_useCher==true)_event.getStructure(*_bcher.get()); + if(_useFT==true)_event.getStructure(*_bft.get()); + if(_useVTP==true)_event.getStructure(*_bvtp.get()); + if(_useHelonline==true)_event.getStructure(*_bhelonline.get()); + if(_useVertdoca==true)_event.getStructure(*_bvertdoca.get()); + + if(_useMCparts==true){ _event.getStructure(*_bmcparts.get()); if(_bmcevent.get())_event.getStructure(*_bmcevent.get()); if(_bmcparts->getMatch())_event.getStructure(*_bmcparts->getMatch()); @@ -444,14 +513,26 @@ namespace clas12 { _detParticles.clear(); _detParticles.reserve(_nparts); - //Loop over particles and find their region for(ushort i=0;i<_nparts;i++){ _bparts->setEntry(i); - - //Check if FDet particle + if(_rfdets.empty()) addARegionFDet(); - if(_rfdets[_n_rfdets]->sort()){ + if(_justParticleAna){ + _rfdets[_n_rfdets]->region_particle::sort(); + // Just analysing REC::Particle, Use FD for convenience + _detParticles.emplace_back(_rfdets[_n_rfdets].get()); + _n_rfdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfdets==_rfdets.size()) + addARegionFDet(); + + continue; + } + //Check if FDet particle + if(_rfdets[_n_rfdets]->sort()){ // add a FDet particle to the event list _detParticles.emplace_back(_rfdets[_n_rfdets].get()); _n_rfdets++; @@ -460,6 +541,7 @@ namespace clas12 { //less particles than this if(_n_rfdets==_rfdets.size()) addARegionFDet(); + continue; } @@ -474,6 +556,7 @@ namespace clas12 { //less particles than this if(_n_rcdets==_rcdets.size()) addARegionCDet(); + continue; } @@ -488,6 +571,7 @@ namespace clas12 { //less particles than this if(_n_rfts==_rfts.size()) addARegionFT(); + continue; } //Check if BAND particle diff --git a/Clas12Banks/clas12reader.h b/Clas12Banks/clas12reader.h index 25398cc..6ca60c6 100644 --- a/Clas12Banks/clas12reader.h +++ b/Clas12Banks/clas12reader.h @@ -346,8 +346,50 @@ namespace clas12 { } //double sumChargeFromQA(); - + void ignoreBank(const string& bnk ){ + if(_bankInUse.at(bnk)) + (*_bankInUse[bnk])=false; + } + + void SetRecParticleOnly(){ + _justParticleAna=true; + ignoreBank("REC::CovMat"); + ignoreBank("REC::Traj"); + ignoreBank("REC::Calorimeter"); + ignoreBank("REC::Scintillator"); + ignoreBank("REC::CaloExtras"); + ignoreBank("REC::ScintExtras"); + ignoreBank("REC::Track"); + ignoreBank("REC::UTrack"); + ignoreBank("REC::ForwardTagger"); + ignoreBank("REC::VertDoca"); + ignoreBank("REC::Cherenkov"); + ignoreBank("HEL::online"); + ignoreBank("RAW::vtp"); + + } private: + + std::map _bankInUse; + bool _useCovmat={false}; + bool _useEvent={false}; + bool _useRunconfig={false}; + bool _useFTBEvent={false}; + bool _useCal={false}; + bool _useCalExtras={false}; + bool _useScint={false}; + bool _useScintExtras={false}; + bool _useTrck={false}; + bool _useUTrck={false}; + bool _useTraj={false}; + bool _useCher={false}; + bool _useFT={false}; + bool _useVTP={false}; + bool _useHelonline={false}; + bool _useVertdoca={false}; + bool _useMCparts={false}; + bool _useMCevent={false}; + bool _justParticleAna={false}; /////////////////////////////// }; From c2ab0c7c284c2384ef7dd2fbf06c936429aa4019 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 22 Feb 2023 17:31:46 +0000 Subject: [PATCH 09/17] rejig chargeAccumulation, should now work in chain and selector --- Clas12Banks/clas12reader.cpp | 18 +++++--- Clas12Banks/clas12reader.h | 15 ++++++- Clas12Banks/qadb_reader.cpp | 53 ++++++++++++------------ Clas12Banks/qadb_reader.h | 13 ++++-- Clas12Banks/region_fdet.cpp | 1 - Clas12Banks/region_fdet.h | 3 +- Clas12Banks/region_particle.h | 1 - Clas12Root/Clas12RootLinkDef.h | 1 + Clas12Root/HipoChain.cpp | 9 ++++ Clas12Root/HipoChain.h | 21 ++++++---- Clas12Root/HipoSelector.cpp | 27 ++++++++++-- Clas12Root/HipoSelector.h | 15 ++++++- Clas12Root/templateBankHistAction.C.SAVE | 48 +++++++++++++++++++++ 13 files changed, 171 insertions(+), 54 deletions(-) create mode 100644 Clas12Root/templateBankHistAction.C.SAVE diff --git a/Clas12Banks/clas12reader.cpp b/Clas12Banks/clas12reader.cpp index bf8e826..e8a7ac2 100644 --- a/Clas12Banks/clas12reader.cpp +++ b/Clas12Banks/clas12reader.cpp @@ -38,9 +38,10 @@ namespace clas12 { std::cout<<"copy useBanks"<qa()!=nullptr){ - //accumulate charge even if no conditions given - _db->qa()->accumulateCharge(_brunconfig->getEvent()); + //accumulate charge even if no conditions given + _db->qa()->accumulateCharge(_brunconfig->getEvent()); } } return true; @@ -408,7 +409,14 @@ namespace clas12 { //Second check qa //Special run banks - if(_brunconfig.get())_event.getStructure(*_brunconfig.get()); + if(_useRunconfig==true)_event.getStructure(*_brunconfig.get()); + //Keep track of run which have been processed + auto currRun=_brunconfig->getRun(); + if(currRun!=_runNo){ + if(currRun!=0 )_runNumbers.insert(currRun); + _runNo=currRun; + } + if(checkQA()==false) return false; //Third check if event is of the right type diff --git a/Clas12Banks/clas12reader.h b/Clas12Banks/clas12reader.h index 6ca60c6..8885a89 100644 --- a/Clas12Banks/clas12reader.h +++ b/Clas12Banks/clas12reader.h @@ -40,6 +40,7 @@ #include "dictionary.h" #include +#include #include #include #include @@ -196,13 +197,22 @@ namespace clas12 { } int getRunNumber()const {return _runNo;}//works if connectDatabases called + std::set getRunNumbers() const {return _runNumbers;} double getCurrApproxCharge(){return _runBeamCharge*_nevent/_reader.getEntries();} void summary(){ - std::cout<<"for file "<<_filename<<"\n read "<<_nevent<<" events from which "<<_nselected<< " passed filtering conditions."<qa())cout<<"Accumulated charge past QA: "<qa()->getAccCharge()<<" nC"<qa()){ + auto prev = db()->qa()->getPreviousCharge(); + //Just charge for this file + // double charge=db()->qa()->getChargeForRunlist(getRunNumbers()) - prev; + double charge=db()->qa()->getAccCharge(); + db()->qa()->setPreviousCharge(charge); + charge-= prev; + cout<<"\t accumulated charge past QA: "< _runNumbers; clas12databases *_db={nullptr}; // bool _applyQA=false; diff --git a/Clas12Banks/qadb_reader.cpp b/Clas12Banks/qadb_reader.cpp index 9a071a9..3152a9d 100644 --- a/Clas12Banks/qadb_reader.cpp +++ b/Clas12Banks/qadb_reader.cpp @@ -18,12 +18,13 @@ namespace clas12 { /////////////////////////////////////////////////////// ///Checks if an event passes all the QA requirements bool qadb_reader::passQAReqs(int evNb){ - //std::cout<<"DEBUG qadb_reader::passQAReqs "<<_runNb<<" "< Runs){ + double qadb_reader::getChargeForRunlist(std::set Runs){ //loop over runs in run list - for (auto runNb:Runs){ setRun(runNb); - //std::cout<<"Reading Run "<<_runNb< #include #include +#include namespace clas12 { using std::string; @@ -39,7 +40,8 @@ namespace clas12 { void copySettings(const qadb_reader& other); - + double getChargeForRunlist(std::set Runs); + private: qadb_reader()=default; @@ -78,8 +80,7 @@ namespace clas12 { void addMask(const char * defectName, bool maskBit){_qa.SetMaskBit(defectName,maskBit);}; void addAllMasks(); double getAccCharge(){return _qa.GetAccumulatedCharge();}; - double getChargeForRunlist(std::vector Runs); - + private: QA::QADB _qa;//! @@ -87,9 +88,13 @@ namespace clas12 { public: double getAccCharge(){return 0.0;}; void accumulateCharge(int evNb){} - #endif + private: + double _prevSumCharge=0.0; + public: + double getPreviousCharge() const {return _prevSumCharge;} + void setPreviousCharge(double val) {_prevSumCharge=val;} }; diff --git a/Clas12Banks/region_fdet.cpp b/Clas12Banks/region_fdet.cpp index b69f69b..dd55b79 100644 --- a/Clas12Banks/region_fdet.cpp +++ b/Clas12Banks/region_fdet.cpp @@ -20,7 +20,6 @@ namespace clas12 { /// check if any FD detectors associated with /// current particle and store the detector indices bool region_fdet::sort(){ - region_particle::sort(); _ptof=-1; _pcal=-1; diff --git a/Clas12Banks/region_fdet.h b/Clas12Banks/region_fdet.h index 369b8dd..4d02fc0 100644 --- a/Clas12Banks/region_fdet.h +++ b/Clas12Banks/region_fdet.h @@ -95,8 +95,7 @@ namespace clas12 { return _cal->getSector(); } - - private: + private: diff --git a/Clas12Banks/region_particle.h b/Clas12Banks/region_particle.h index 21454f9..fdb25f9 100644 --- a/Clas12Banks/region_particle.h +++ b/Clas12Banks/region_particle.h @@ -95,7 +95,6 @@ namespace clas12 { return _useFTBPid*_ftbparts->getRows()?_ftbparts->getBeta():_parts->getBeta(); } - virtual double getCalPhotonE(){return 0;} virtual double getTime()=0; virtual double getPath()=0; diff --git a/Clas12Root/Clas12RootLinkDef.h b/Clas12Root/Clas12RootLinkDef.h index 78eb04a..cbfc035 100644 --- a/Clas12Root/Clas12RootLinkDef.h +++ b/Clas12Root/Clas12RootLinkDef.h @@ -15,4 +15,5 @@ #pragma link C++ class clas12root::ParticleTree+; #pragma link C++ class clas12root::ParticleHist+; #pragma link C++ class clas12root::HipoROOTOut+; +#pragma link C++ class clas12root::NumbersObject+; #endif diff --git a/Clas12Root/HipoChain.cpp b/Clas12Root/HipoChain.cpp index b01542a..d360db9 100644 --- a/Clas12Root/HipoChain.cpp +++ b/Clas12Root/HipoChain.cpp @@ -116,9 +116,18 @@ namespace clas12root { /////Warning any changes to this function should ////also be considered for HipoSelector::Process std::cout<<"HipoChain::FirstFile() "<<_idxFile<<" out of "<getRunNumbers(); + InsertRunNumbers(procNumbers); + } + + if(_idxFile>=GetNFiles()){ return kFALSE;//no more files } + + //open next file, using previously configured reader _c12.reset(new clas12::clas12reader{*GetC12Reader(),GetFileName(_idxFile).Data(),_readerTags}); ConnectDataBases(); diff --git a/Clas12Root/HipoChain.h b/Clas12Root/HipoChain.h index 66cc443..52061a6 100644 --- a/Clas12Root/HipoChain.h +++ b/Clas12Root/HipoChain.h @@ -57,20 +57,23 @@ namespace clas12root { clas12::clas12reader* GetC12Reader(); const std::unique_ptr& C12ref()const {return _c12;} - //void AddBeamCharge(Double_t bc){_totBeamCharge+=bc;} - // Double_t TotalBeamCharge() const noexcept{return _totBeamCharge;} - Double_t TotalBeamCharge() const noexcept{ - //check if set manually (e.g. from HipoSelector) - if(_totBeamCharge!=0) return _totBeamCharge; - //or check if we have qadb + Double_t TotalBeamCharge() noexcept{ + if(_db.qa()){ - return _db.qa()->getAccCharge(); + return _totBeamCharge=_db.qa()->getChargeForRunlist(GetRunNumbers()); } - //else do not try and get it ourselves (so accidents do not occur) + return 0.; } + Double_t GetTotalBeamCharge() const noexcept{return _totBeamCharge;} + void SetTotalBeamCharge(Double_t bc){_totBeamCharge=bc;} + std::set GetRunNumbers() const {return _runNumbers;} + void InsertRunNumbers(const std::set& ns ){ + _runNumbers.insert(ns.begin(),ns.end()); + } + clas12::clas12databases* db() {return &_db;} void ConnectDataBases(){_c12->connectDataBases(&_db);} @@ -114,6 +117,8 @@ namespace clas12root { Double_t _totBeamCharge{0}; + std::set _runNumbers; + TString _rcdbFileName; ClassDef(clas12root::HipoChain,1); diff --git a/Clas12Root/HipoSelector.cpp b/Clas12Root/HipoSelector.cpp index e735b98..321927d 100644 --- a/Clas12Root/HipoSelector.cpp +++ b/Clas12Root/HipoSelector.cpp @@ -85,10 +85,13 @@ namespace clas12root{ _iRecord=entry-_NfileRecords; //get record to analyse,subtract records of previous files //Check if we need a new file + auto newFile=false; if( _iRecord>=_NcurrRecords ){ + newFile=true; _iFile=_chain->GetFileFromRecord(entry); _NfileRecords=_chain->GetRecordsToHere(_iFile); //Add records from previous file to give offset - + //accumulate run numbers from previous file + _c12.reset(new clas12::clas12reader{*_chain->GetC12Reader(),_chain->GetFileName(_iFile).Data(),_chain->ReaderTags()}); _c12->connectDataBases(_chain->db()); _NcurrRecords= _c12->getReader().getNRecords(); //records in this file @@ -98,7 +101,7 @@ namespace clas12root{ Notify(); } - } + } //load a record from the file _c12->getReader().loadRecord(_iRecord); @@ -107,17 +110,33 @@ namespace clas12root{ //abtract function to be supplied by user base class ProcessEvent(); } + + auto procNumbers= _c12->getRunNumbers(); + _chain->InsertRunNumbers(procNumbers); + + return kTRUE; } void HipoSelector::SlaveTerminate() { - + _runNumbers._theset = _chain->GetRunNumbers(); + _runNumbers.SetName("HIPORUNS"); + _runNumbers.PrintNumbers(); + + //create object for output list + auto listNumbers = new NumbersObject(_runNumbers); + listNumbers->SetName("HIPORUNS"); + fOutput->Add(listNumbers); //fOutput will own } void HipoSelector::Terminate() { - + _runNumbers = *(dynamic_cast(fOutput->FindObject("HIPORUNS"))); + _chain->InsertRunNumbers(_runNumbers._theset); + + auto totCharge =_chain->TotalBeamCharge(); + cout<<" HipoSelector::Terminate() total charge = "< _theset; + void PrintNumbers(){ + std::cout<<"clas12root::NumbersObject Numbers in "< +#include +#include +#include + +namespace clas12root{ + using namespace clas12; + + class NNNNN : public HipoRootAction{ + + void Action(clas12root::HipoROOTOut *hiprout) final{ + auto bhist=dynamic_cast(hiprout); + + auto hists=bhist->Hists(); + + hipo::reader reader; + reader.open(bhist->NextFile().Data()); + + hipo::dictionary factory; + reader.readDictionary(factory); + + clas12::BBBB bank(factory.getSchema(bhist->GetBankName().Data())); + hipo::event event; + + Long64_t nevents=0; + while(reader.next()==true){ + if(++nevents==NENTRIESTOPROCESS) break; + reader.read(event); //read event + event.getStructure(bank); //get particle data + + int nrows = bank.getRows(); + for(int i = 0; i < nrows; i++){ + bank.setBankEntry(i); + ////if(CCCC)hists->at(IIII)->Fill(XXXX); + + } + } + } + + + }; +} From ea97d5bc413d96f411d52c8cff966cc50930d0f5 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 22 Feb 2023 17:32:01 +0000 Subject: [PATCH 10/17] rejig chargeAccumulation, should now work in chain and selector --- Clas12Root/templateBankHistAction.C.SAVE | 48 ------------------------ 1 file changed, 48 deletions(-) delete mode 100644 Clas12Root/templateBankHistAction.C.SAVE diff --git a/Clas12Root/templateBankHistAction.C.SAVE b/Clas12Root/templateBankHistAction.C.SAVE deleted file mode 100644 index 79252bc..0000000 --- a/Clas12Root/templateBankHistAction.C.SAVE +++ /dev/null @@ -1,48 +0,0 @@ - -#include "HipoRootAction.h" -#include "BankHist.h" -#include "clas12reader.h" -#include "clas12defs.h" -#include "region_particle.h" -#include -#include -#include -#include - -namespace clas12root{ - using namespace clas12; - - class NNNNN : public HipoRootAction{ - - void Action(clas12root::HipoROOTOut *hiprout) final{ - auto bhist=dynamic_cast(hiprout); - - auto hists=bhist->Hists(); - - hipo::reader reader; - reader.open(bhist->NextFile().Data()); - - hipo::dictionary factory; - reader.readDictionary(factory); - - clas12::BBBB bank(factory.getSchema(bhist->GetBankName().Data())); - hipo::event event; - - Long64_t nevents=0; - while(reader.next()==true){ - if(++nevents==NENTRIESTOPROCESS) break; - reader.read(event); //read event - event.getStructure(bank); //get particle data - - int nrows = bank.getRows(); - for(int i = 0; i < nrows; i++){ - bank.setBankEntry(i); - ////if(CCCC)hists->at(IIII)->Fill(XXXX); - - } - } - } - - - }; -} From f6318c8abe5bff249397f3493e6e9b2cfd6f89e8 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 22 Feb 2023 17:40:10 +0000 Subject: [PATCH 11/17] rejig chargeAccumulation, should now work in chain and selector --- Clas12Banks/clas12reader.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Clas12Banks/clas12reader.cpp b/Clas12Banks/clas12reader.cpp index e8a7ac2..6e380ba 100644 --- a/Clas12Banks/clas12reader.cpp +++ b/Clas12Banks/clas12reader.cpp @@ -36,9 +36,7 @@ namespace clas12 { _reader.setTags(tags); initReader(); - std::cout<<"copy useBanks"< Date: Wed, 22 Feb 2023 17:40:37 +0000 Subject: [PATCH 12/17] rejig chargeAccumulation, should now work in chain and selector --- RunRoot/Ex9_QualityAssurance_quickLookup.C | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/RunRoot/Ex9_QualityAssurance_quickLookup.C b/RunRoot/Ex9_QualityAssurance_quickLookup.C index f2c550b..b4cfa47 100644 --- a/RunRoot/Ex9_QualityAssurance_quickLookup.C +++ b/RunRoot/Ex9_QualityAssurance_quickLookup.C @@ -9,9 +9,9 @@ void Ex9_QualityAssurance_quickLookup(){ /*Create a list of runs. 6598, 6597 used as examples here.*/ - std::vector Runs; - Runs.push_back(6598); - Runs.push_back(6597); + std::set Runs; + Runs.insert(6598); + Runs.insert(6597); /*Set up qadb_reader, can pass any run number (here 0), this isn't used*/ qadb_reader qa(0); @@ -21,5 +21,5 @@ void Ex9_QualityAssurance_quickLookup(){ /*Ask for the accumulated charge in the list of runs.*/ double charge=qa.getChargeForRunlist(Runs); - cout<<"Accumulated Charge "< Date: Wed, 22 Feb 2023 17:47:04 +0000 Subject: [PATCH 13/17] update Ex1 --- RunRoot/Ex1_CLAS12ReaderChain.C | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/RunRoot/Ex1_CLAS12ReaderChain.C b/RunRoot/Ex1_CLAS12ReaderChain.C index 5475f30..f42dbd6 100644 --- a/RunRoot/Ex1_CLAS12ReaderChain.C +++ b/RunRoot/Ex1_CLAS12ReaderChain.C @@ -59,8 +59,14 @@ void Ex1_CLAS12ReaderChain(){ // config_c12->addExactPid(2212,1); //exactly 1 proton // config_c12->addExactPid(22,2); //exactly 2 gamma //////config_c12->addZeroOfRestPid(); //nothing else + + //////config_c12->useFTBased(); //and use the Pids from RECFT - //////chain.db()->turnOffQADB(); //partiuclarly useful if does not exist for run period + //////chain.db()->turnOffQADB(); //particularly useful if does not exist for run period + //////config_c12->SetRecParticleOnly(); //for faster processing of just REC::Particle + //////config_c12->ignoreBank("REC::CovMat"); //or just turn off chosen banks + + //now get reference to (unique)ptr for accessing data in loop //this will point to the correct place when file changes auto& c12=chain.C12ref(); @@ -94,6 +100,7 @@ void Ex1_CLAS12ReaderChain(){ p->sci(FTOF2)->getEnergy(); p->trk(DC)->getSector(); + // p->utrk(CVT)->getSector();//for pass 2 p->che(HTCC)->getNphe(); p->che(LTCC)->getNphe(); @@ -101,7 +108,7 @@ void Ex1_CLAS12ReaderChain(){ //trajectories p->traj(LTCC)->getX(); - // p->traj(DC,DC1)->getCx();; //First layer of DC, hipo4 + p->traj(DC,DC1)->getCx();; //First layer of DC break; case FT : p->ft(FTCAL)->getEnergy(); @@ -159,7 +166,8 @@ void Ex1_CLAS12ReaderChain(){ counter++; } - cout<<"Number of Events = " <Print("timer"); From ec3d26a610033a4a786b43df1621538815281598 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 2 Mar 2023 11:21:53 +0000 Subject: [PATCH 14/17] change pindex and detector getters to byte and short from int --- Clas12Banks/particle_detector.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Clas12Banks/particle_detector.h b/Clas12Banks/particle_detector.h index c1b6e43..ae79c3e 100644 --- a/Clas12Banks/particle_detector.h +++ b/Clas12Banks/particle_detector.h @@ -47,17 +47,17 @@ namespace clas12 { /////////////////////////////////////////////////////////////// //getter functions, same for derived classes //get detector id - int getDetector(int index) const noexcept{ return getInt(_detector_id_order,index);} - int getDetector() const noexcept{ return getInt(_detector_id_order,_index);} + virtual int getDetector(int index) const noexcept{ return getByte(_detector_id_order,index);} //if the bank does not have a detector entry, you may inherit and chenge this getter. + virtual int getDetector() const noexcept{ return getByte(_detector_id_order,_index);} //get the pindex = corresponding particle index - int getPindex(int index) const noexcept{ return getInt(_pindex_order,index);} - int getPindex() const noexcept{ return getInt(_pindex_order,_index);} + int getPindex(int index) const noexcept{ return getShort(_pindex_order,index);} + int getPindex() const noexcept{ return getShort(_pindex_order,_index);} //given a detector (layer if exists) and pindex find the position in this bank int getIndex() const noexcept{return _index;} - int getIndex(int pindex, int detector, int layer=0); + int getIndex(int pindex, int detector=0, int layer=0); - void setIndex(int ind){_index=ind;} + virtual void setIndex(int ind){_index=ind;} void setBankEntry(short i){ _index=i;} //faster for BankHist void setEntry(int ind){_index=ind;} From afd6bc9f4496b0795f988ee5f1910e0ec6bc6ee8 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 2 Mar 2023 11:23:14 +0000 Subject: [PATCH 15/17] add rich --- Clas12Banks/CMakeLists.txt | 4 +- Clas12Banks/Clas12LinkDef.h | 2 + Clas12Banks/calorimeter.cpp | 1 - Clas12Banks/clas12reader.cpp | 8 ++ Clas12Banks/clas12reader.h | 5 +- Clas12Banks/region_fdet.cpp | 36 +++-- Clas12Banks/region_fdet.h | 10 +- Clas12Banks/region_particle.h | 2 + Clas12Banks/rich.cpp | 89 ++++++++++++ Clas12Banks/rich.h | 262 ++++++++++++++++++++++++++++++++++ 10 files changed, 401 insertions(+), 18 deletions(-) create mode 100644 Clas12Banks/rich.cpp create mode 100644 Clas12Banks/rich.h diff --git a/Clas12Banks/CMakeLists.txt b/Clas12Banks/CMakeLists.txt index 3b93677..eaf9f95 100644 --- a/Clas12Banks/CMakeLists.txt +++ b/Clas12Banks/CMakeLists.txt @@ -1,8 +1,8 @@ -set(CLASS_LIST_CPP helflip.cpp helonline.cpp vertdoca.cpp runconfig.cpp event.cpp ftbevent.cpp particle.cpp ftbparticle.cpp mcparticle.cpp mcevent.cpp mcmatch.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp scintextras.cpp tracker.cpp utracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp calextras.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp region_band.cpp clas12writer.cpp clas12reader.cpp mesonex_trigger.cpp scaler_reader.cpp clas12databases.cpp qadb_reader.cpp ccdb_reader.cpp rcdb_reader.cpp) +set(CLASS_LIST_CPP helflip.cpp helonline.cpp vertdoca.cpp runconfig.cpp event.cpp ftbevent.cpp particle.cpp ftbparticle.cpp mcparticle.cpp mcevent.cpp mcmatch.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp scintextras.cpp tracker.cpp utracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp rich.cpp calorimeter.cpp calextras.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp region_band.cpp clas12writer.cpp clas12reader.cpp mesonex_trigger.cpp scaler_reader.cpp clas12databases.cpp qadb_reader.cpp ccdb_reader.cpp rcdb_reader.cpp) -set(CLASS_LIST_H helflip.h helonline.h vertdoca.h runconfig.h event.h ftbevent.h particle.h ftbparticle.h mcparticle.h mcevent.h mcmatch.h scaler.h vtp.h particle_detector.h scintillator.h scintextras.h tracker.h utracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h calextras.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h region_band.h clas12writer.h clas12reader.h mesonex_trigger.h scaler_reader.h clas12databases.h qadb_reader.h ccdb_reader.h rcdb_reader.h) +set(CLASS_LIST_H helflip.h helonline.h vertdoca.h runconfig.h event.h ftbevent.h particle.h ftbparticle.h mcparticle.h mcevent.h mcmatch.h scaler.h vtp.h particle_detector.h scintillator.h scintextras.h tracker.h utracker.h traj.h forwardtagger.h cherenkov.h rich.h calorimeter.h calextras.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h region_band.h clas12writer.h clas12reader.h mesonex_trigger.h scaler_reader.h clas12databases.h qadb_reader.h ccdb_reader.h rcdb_reader.h) IF (DEFINED ENV{QADB}) set(CLASS_LIST_CPP ${CLASS_LIST_CPP} jsonFileMerger.cpp) diff --git a/Clas12Banks/Clas12LinkDef.h b/Clas12Banks/Clas12LinkDef.h index 53daa49..6c34742 100644 --- a/Clas12Banks/Clas12LinkDef.h +++ b/Clas12Banks/Clas12LinkDef.h @@ -25,6 +25,8 @@ #pragma link C++ class clas12::traj+; #pragma link C++ class clas12::forwardtagger+; #pragma link C++ class clas12::cherenkov+; +#pragma link C++ class clas12::rich+; +#pragma link C++ class clas12::richring+; #pragma link C++ class clas12::calorimeter+; #pragma link C++ class clas12::covmatrix+; #pragma link C++ class clas12::region_particle+; diff --git a/Clas12Banks/calorimeter.cpp b/Clas12Banks/calorimeter.cpp index c76d89b..b868018 100644 --- a/Clas12Banks/calorimeter.cpp +++ b/Clas12Banks/calorimeter.cpp @@ -15,7 +15,6 @@ namespace clas12 { clas12::particle_detector(__schema), _extras{new calextras(extras)} { - std::cout<<"calorimeter::calorimeter "<< _extras.get()<useFTBPid(); _rfdets.push_back(std::move(reg)); } @@ -272,6 +272,7 @@ namespace clas12 { utrck_uptr _butrck;//! traj_uptr _btraj;//! cher_uptr _bcher;//! + rich_uptr _brich;//! ft_uptr _bft;//! vtp_uptr _bvtp;//! vertdoca_uptr _bvertdoca;//! @@ -375,6 +376,7 @@ namespace clas12 { ignoreBank("REC::ForwardTagger"); ignoreBank("REC::VertDoca"); ignoreBank("REC::Cherenkov"); + ignoreBank("RICH::Particle"); ignoreBank("HEL::online"); ignoreBank("RAW::vtp"); @@ -394,6 +396,7 @@ namespace clas12 { bool _useUTrck={false}; bool _useTraj={false}; bool _useCher={false}; + bool _useRich={false}; bool _useFT={false}; bool _useVTP={false}; bool _useHelonline={false}; diff --git a/Clas12Banks/region_fdet.cpp b/Clas12Banks/region_fdet.cpp index dd55b79..f13f14a 100644 --- a/Clas12Banks/region_fdet.cpp +++ b/Clas12Banks/region_fdet.cpp @@ -16,6 +16,12 @@ namespace clas12 { _region=clas12::FD; } + region_fdet::region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj,cher_ptr chp, ft_ptr ftp,event_ptr event,rich_ptr rich,mcpar_ptr mcp): + region_particle(pars,ftbpars,cm,calp,scp,trp,utrp,trj,chp,ftp,event,mcp),_rich{rich} + { + _region=clas12::FD; + } + /////////////////////////////////////////////////////// /// check if any FD detectors associated with /// current particle and store the detector indices @@ -24,6 +30,9 @@ namespace clas12 { _ptof=-1; _pcal=-1; _ptrck=-1; + _prich=-1; + _phtcc=-1; + _pltcc=-1; //_scint->print(); //prefer tof layer 1,0,2 @@ -35,18 +44,7 @@ namespace clas12 { else if(_ptof1!=-1) _ptof=_ptof1; else if(_ptof3!=-1) _ptof=_ptof3; - // if(_ptof!=-1){ - // std::cout<<"XXX "<<_ptof<<" "<<_pentry<setIndex(_ptof); - // //if(_scint->getTime()==0){ - // std::cout<<"Broken Time "<<_ptof<<" "<<_pentry<getTime()<<" "<< sci(_ptof1)->getFloat(7,_ptof1)<getTime()<<" "<< sci(_ptof1)->getFloat(7,_ptof2)<getTime()<<" "<< sci(_ptof1)->getFloat(7,_ptof3)<print(); - // //} - // } - //prefer pcal,inner, outer + //prefer pcal,inner, outer if(_cal)_pcal=_pin=_cal->getIndex( _pentry,clas12::EC, clas12::ECIN); if(_cal)_pcal=_pout=_cal->getIndex( _pentry,clas12::EC, clas12::ECOUT); if(_cal)_pcal=_ppre=_cal->getIndex( _pentry,clas12::EC, clas12::PCAL); @@ -60,6 +58,8 @@ namespace clas12 { if(_cher)_phtcc=_cher->getIndex( _pentry,clas12::HTCC); if(_cher)_pltcc=_cher->getIndex( _pentry,clas12::LTCC); + if(_rich)_prich=_rich->getIndex( _pentry,clas12::RICH); + //was fdet involved ? if((_ptof+_pcal+_ptrck) == -3)return false; return true; @@ -113,6 +113,18 @@ namespace clas12 { _cher->setIndex(-1);return _cher; } + /////////////////////////////////////////////////////// + /// Get pointer to rich banks for this particle + /// This should be used directly to acess data + /// e.g. p->rich()->getId(); + /// p->rich()->ring()->getSector(); + rich_ptr region_fdet::rich() const { + if(_rich) + _rich->setIndex(_prich); + + return _rich; + } + /////////////////////////////////////////////////////// /// Get pointer to traj banks for this particle /// This should be used directly to acess data diff --git a/Clas12Banks/region_fdet.h b/Clas12Banks/region_fdet.h index 4d02fc0..19b82a9 100644 --- a/Clas12Banks/region_fdet.h +++ b/Clas12Banks/region_fdet.h @@ -30,6 +30,10 @@ namespace clas12 { cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, mcpar_ptr mcp=nullptr); + region_fdet(par_ptr pars,ftbpar_ptr ftbpars,covmat_ptr cm, + cal_ptr calp, scint_ptr scp, trck_ptr trp, utrck_ptr utrp, + traj_ptr trj, cher_ptr chp, ft_ptr ftp,event_ptr event, + rich_ptr rich,mcpar_ptr mcp=nullptr); ~region_fdet() final =default; @@ -47,7 +51,7 @@ namespace clas12 { _utrck->setIndex(_ptrck);return _utrck; } cher_ptr che(ushort lay) const final; - + rich_ptr rich() const final; double getTime() final{ @@ -98,7 +102,8 @@ namespace clas12 { private: - + rich_ptr _rich={nullptr}; + //calorimeter indices short _pcal=-1; short _ppre=-1; @@ -116,6 +121,7 @@ namespace clas12 { //cherenkov indices short _phtcc=-1; short _pltcc=-1; + short _prich=-1; diff --git a/Clas12Banks/region_particle.h b/Clas12Banks/region_particle.h index fdb25f9..2de71fb 100644 --- a/Clas12Banks/region_particle.h +++ b/Clas12Banks/region_particle.h @@ -24,6 +24,7 @@ #include "traj.h" #include "event.h" #include "cherenkov.h" +#include "rich.h" #include "forwardtagger.h" #include "mcparticle.h" #include "mcmatch.h" @@ -112,6 +113,7 @@ namespace clas12 { virtual utrck_ptr utrk(ushort lay) const{_utrck->setIndex(-1);return _utrck;}; virtual traj_ptr traj(ushort det,ushort layer=0) const{_traj->setIndex(-1);return _traj;}; virtual cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;}; + virtual rich_ptr rich() const{return nullptr;}; virtual ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;}; const CovMatrix* cmat() const{_covmat->setIndex(_pcmat);return _covmat->matrix();}; diff --git a/Clas12Banks/rich.cpp b/Clas12Banks/rich.cpp new file mode 100644 index 0000000..b62ae4f --- /dev/null +++ b/Clas12Banks/rich.cpp @@ -0,0 +1,89 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "rich.h" + + +namespace clas12 { + + + rich::rich(hipo::schema aschema,hipo::schema ringschema): + clas12::particle_detector(aschema), + _ring{new richring(ringschema)} + { + + _id_order = aschema.getEntryOrder("id"); + _hindex_order = aschema.getEntryOrder("hindex"); + _pindex_order = aschema.getEntryOrder("pindex"); + _emilay_order = aschema.getEntryOrder("emilay"); + _emico_order = aschema.getEntryOrder("emico"); + _enico_order = aschema.getEntryOrder("enico"); + _emqua_order = aschema.getEntryOrder("emqua"); + _mchi2_order = aschema.getEntryOrder("mchi2"); + _mass_order = aschema.getEntryOrder("mass"); + _best_PID_order = aschema.getEntryOrder("best_PID"); + _RQ_order = aschema.getEntryOrder("RQ"); + _ReQ_order = aschema.getEntryOrder("ReQ"); + _el_logl_order = aschema.getEntryOrder("el_logl"); + _pi_logl_order = aschema.getEntryOrder("pi_logl"); + _k_logl_order = aschema.getEntryOrder("k_logl"); + _pr_logl_order = aschema.getEntryOrder("pr_logl"); + _best_ch_order = aschema.getEntryOrder("best_ch"); + _best_c2_order = aschema.getEntryOrder("best_c2"); + _best_RL_order = aschema.getEntryOrder("best_RL"); + _best_ntot_order = aschema.getEntryOrder("best_ntot"); + _best_mass_order = aschema.getEntryOrder("best_mass"); + + } + rich::rich(hipo::schema aschema): + clas12::particle_detector(aschema) { + + _id_order = aschema.getEntryOrder("id"); + _hindex_order = aschema.getEntryOrder("hindex"); + _pindex_order = aschema.getEntryOrder("pindex"); + _emilay_order = aschema.getEntryOrder("emilay"); + _emico_order = aschema.getEntryOrder("emico"); + _enico_order = aschema.getEntryOrder("enico"); + _emqua_order = aschema.getEntryOrder("emqua"); + _mchi2_order = aschema.getEntryOrder("mchi2"); + _mass_order = aschema.getEntryOrder("mass"); + _best_PID_order = aschema.getEntryOrder("best_PID"); + _RQ_order = aschema.getEntryOrder("RQ"); + _ReQ_order = aschema.getEntryOrder("ReQ"); + _el_logl_order = aschema.getEntryOrder("el_logl"); + _pi_logl_order = aschema.getEntryOrder("pi_logl"); + _k_logl_order = aschema.getEntryOrder("k_logl"); + _pr_logl_order = aschema.getEntryOrder("pr_logl"); + _best_ch_order = aschema.getEntryOrder("best_ch"); + _best_c2_order = aschema.getEntryOrder("best_c2"); + _best_RL_order = aschema.getEntryOrder("best_RL"); + _best_ntot_order = aschema.getEntryOrder("best_ntot"); + _best_mass_order = aschema.getEntryOrder("best_mass"); + + } + + /////////////////////////////////////////////////////////////////// + richring::richring(hipo::schema aschema):hipo::bank(aschema){ + + _id_order = aschema.getEntryOrder("id"); + _hindex_order = aschema.getEntryOrder("hindex"); + _pindex_order = aschema.getEntryOrder("pindex"); + _sector_order = aschema.getEntryOrder("sector"); + _pmt_order = aschema.getEntryOrder("pmt"); + _anode_order = aschema.getEntryOrder("anode"); + _hypo_order = aschema.getEntryOrder("hypo"); + _dtime_order = aschema.getEntryOrder("dtime"); + _etaC_order = aschema.getEntryOrder("etaC"); + _prob_order = aschema.getEntryOrder("prob"); + _use_order = aschema.getEntryOrder("use"); + _dangle_order = aschema.getEntryOrder("dangle"); + _layers_order = aschema.getEntryOrder("layers"); + _compos_order = aschema.getEntryOrder("compos"); + + } + + +} diff --git a/Clas12Banks/rich.h b/Clas12Banks/rich.h new file mode 100644 index 0000000..813509c --- /dev/null +++ b/Clas12Banks/rich.h @@ -0,0 +1,262 @@ + +/* + * File: rich.h + * Author: dglazier + * + * Created on March 02, 2023 + */ + +#ifndef CLAS12_RICH_H +#define CLAS12_RICH_H + +#include "particle_detector.h" + + +namespace clas12 { + + class rich; + + //sub class for RICH::Ring banks + class richring : public hipo::bank { + + + public: + + + richring()=default; + + richring(hipo::schema aschema); + + ~richring() override=default; + + void setBankEntry(short i){ _index=i;} //faster for BankHist + //getter funtions for items in rich bank + + int getId() const noexcept{ + if(_index>-1)return getShort(_id_order,_index); + return 0; + } + int getHindex() const noexcept{ + if(_index>-1)return getShort(_hindex_order,_index); + return 0; + } + int getPindex() const noexcept{ + if(_index>-1)return getByte(_pindex_order,_index); + return 0; + } + int getSector() const noexcept{ + if(_index>-1)return getByte(_sector_order,_index); + return 0; + } + int getPmt() const noexcept{ + if(_index>-1)return getShort(_pmt_order,_index); + return 0; + } + int getAnode() const noexcept{ + if(_index>-1)return getByte(_anode_order,_index); + return 0; + } + int getHypo() const noexcept{ + if(_index>-1)return getInt(_hypo_order,_index); + return 0; + } + double getDtime() const noexcept{ + if(_index>-1)return getFloat(_dtime_order,_index); + return 0; + } + double getEtaC() const noexcept{ + if(_index>-1)return getFloat(_etaC_order,_index); + return 0; + } + double getProb() const noexcept{ + if(_index>-1)return getFloat(_prob_order,_index); + return 0; + } + int getUse() const noexcept{ + if(_index>-1)return getByte(_use_order,_index); + return 0; + } + double getDangle() const noexcept{ + if(_index>-1)return getFloat(_dangle_order,_index); + return 0; + } + int getCompos() const noexcept{ + if(_index>-1)return getInt(_compos_order,_index); + return 0; + } + int getLayers() const noexcept{ + if(_index>-1)return getInt(_layers_order,_index); + return 0; + } + + + private: + + friend clas12::rich; + + void setIndex(short i){ _index=i;} + + + int _id_order=-1; + int _hindex_order=-1; + int _pindex_order=-1; + int _sector_order=-1; + int _pmt_order=-1; + int _anode_order=-1; + int _hypo_order=-1; + int _dtime_order=-1; + int _etaC_order=-1; + int _prob_order=-1; + int _use_order=-1; + int _dangle_order=-1; + int _layers_order=-1; + int _compos_order=-1; + + int _index=-1; + + }; + + using richring_ptr=clas12::richring*; + using richring_uptr=std::unique_ptr; + /////////////////////////////////////////////////////////// + + class rich : public particle_detector { + + + public: + + + rich()=default; + + rich(hipo::schema __schema,hipo::schema ringschema); + rich(hipo::schema __schema); + + ~rich() override=default; + + + int getId() const noexcept{ + if(_index>-1)return getByte(_id_order,_index); + return 0; + } + int getHindex() const noexcept{ + if(_index>-1)return getShort(_hindex_order,_index); + return 0; + } + int getEmilay() const noexcept{ + std::cout<<"getEMilay "<<_emilay_order<<" "<<_index<<" "<< _pindex_order<-1)return getByte(_emilay_order,_index); + return 0; + } + int getEmico() const noexcept{ + if(_index>-1)return getByte(_emico_order,_index); + return 0; + } + int getEnico() const noexcept{ + if(_index>-1)return getByte(_enico_order,_index); + return 0; + } + int getEmqua() const noexcept{ + if(_index>-1)return getShort(_emqua_order,_index); + return 0; + } + double getMchi2() const noexcept{ + if(_index>-1)return getFloat(_mchi2_order,_index); + return 0; + } + double getMass() const noexcept{ + if(_index>-1)return getFloat(_mass_order,_index); + return 0; + } + int getBest_PID() const noexcept{ + if(_index>-1)return getShort(_best_PID_order,_index); + return 0; + } + double getRQ() const noexcept{ + if(_index>-1)return getFloat(_RQ_order,_index); + return 0; + } + double getReQ() const noexcept{ + if(_index>-1)return getFloat(_ReQ_order,_index); + return 0; + } + double getEl_logl() const noexcept{ + if(_index>-1)return getFloat(_el_logl_order,_index); + return 0; + } + double getPi_logl() const noexcept{ + if(_index>-1)return getFloat(_pi_logl_order,_index); + return 0; + } + double getK_logl() const noexcept{ + if(_index>-1)return getFloat(_k_logl_order,_index); + return 0; + } + double getPr_logl() const noexcept{ + if(_index>-1)return getFloat(_pr_logl_order,_index); + return 0; + } + double getBest_ch() const noexcept{ + if(_index>-1)return getFloat(_best_ch_order,_index); + return 0; + } + double getBest_c2() const noexcept{ + if(_index>-1)return getFloat(_best_c2_order,_index); + return 0; + } + double getBest_RL() const noexcept{ + if(_index>-1)return getFloat(_best_RL_order,_index); + return 0; + } + double getBest_ntot() const noexcept{ + if(_index>-1)return getFloat(_best_ntot_order,_index); + return 0; + } + double getBest_mass() const noexcept{ + if(_index>-1)return getFloat(_best_mass_order,_index); + return 0; + } + + + + + int getDetector(int index) const noexcept final{ return clas12::RICH;} //if the bank does not have a detector entry, you may inherit and chenge this getter. + int getDetector() const noexcept final{ return clas12::RICH;} + + + richring_ptr const ring() {_ring->setIndex(getIndex());return _ring.get();} + + private: + + int _id_order=-1; + int _hindex_order=-1; + int _emilay_order=-1; + int _emico_order=-1; + int _enico_order=-1; + int _emqua_order=-1; + int _mchi2_order=-1; + int _mass_order=-1; + int _best_PID_order=-1; + int _RQ_order=-1; + int _ReQ_order=-1; + int _el_logl_order=-1; + int _pi_logl_order=-1; + int _k_logl_order=-1; + int _pr_logl_order=-1; + int _best_ch_order=-1; + int _best_c2_order=-1; + int _best_RL_order=-1; + int _best_ntot_order=-1; + int _best_mass_order=-1; + + richring_uptr _ring; + + + }; //class rich + + using rich_ptr=clas12::rich*; + using rich_uptr=std::unique_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ From 55cbb6367856b28e60445a7014ee9e0edd1349f7 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 6 Mar 2023 11:41:32 +0000 Subject: [PATCH 16/17] rich debug --- Clas12Banks/clas12reader.cpp | 10 ++++++++-- Clas12Banks/rich.h | 2 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Clas12Banks/clas12reader.cpp b/Clas12Banks/clas12reader.cpp index dc3c7f5..924459c 100644 --- a/Clas12Banks/clas12reader.cpp +++ b/Clas12Banks/clas12reader.cpp @@ -442,7 +442,10 @@ namespace clas12 { if(_useUTrck==true)_event.getStructure(*_butrck.get()); if(_useTraj==true)_event.getStructure(*_btraj.get()); if(_useCher==true)_event.getStructure(*_bcher.get()); - if(_useRich==true)_event.getStructure(*_brich.get()); + if(_useRich==true){ + _event.getStructure(*_brich.get()); + _event.getStructure(*_brich->ring()); + } if(_useFT==true)_event.getStructure(*_bft.get()); if(_useVTP==true)_event.getStructure(*_bvtp.get()); if(_useHelonline==true)_event.getStructure(*_bhelonline.get()); @@ -718,7 +721,10 @@ namespace clas12 { if(_butrck.get())_allBanks.push_back(_butrck.get()); if(_btraj.get())_allBanks.push_back(_btraj.get()); if(_bcher.get())_allBanks.push_back(_bcher.get()); - if(_brich.get())_allBanks.push_back(_brich.get()); + if(_brich.get()){ + _allBanks.push_back(_brich.get()); + _allBanks.push_back(_brich->ring()); + } if(_bft.get())_allBanks.push_back(_bft.get()); if(_bvtp.get())_allBanks.push_back(_bvtp.get()); if(_bvertdoca.get())_allBanks.push_back(_bvertdoca.get()); diff --git a/Clas12Banks/rich.h b/Clas12Banks/rich.h index 813509c..4363840 100644 --- a/Clas12Banks/rich.h +++ b/Clas12Banks/rich.h @@ -143,8 +143,6 @@ namespace clas12 { return 0; } int getEmilay() const noexcept{ - std::cout<<"getEMilay "<<_emilay_order<<" "<<_index<<" "<< _pindex_order<-1)return getByte(_emilay_order,_index); return 0; } From 4b8ce320178d01cc0e455747d1cf91faeccacd91 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 6 Mar 2023 13:23:30 +0000 Subject: [PATCH 17/17] rich ring variable index --- Clas12Banks/rich.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Clas12Banks/rich.h b/Clas12Banks/rich.h index 4363840..7c1df02 100644 --- a/Clas12Banks/rich.h +++ b/Clas12Banks/rich.h @@ -221,9 +221,9 @@ namespace clas12 { int getDetector(int index) const noexcept final{ return clas12::RICH;} //if the bank does not have a detector entry, you may inherit and chenge this getter. int getDetector() const noexcept final{ return clas12::RICH;} - - richring_ptr const ring() {_ring->setIndex(getIndex());return _ring.get();} - + //RICH::Ring has many entries for each REC::Particle + richring_ptr const ring(uint index=0) {_ring->setIndex(index);return _ring.get();} + uint getNRing() const {return _ring->getRows();} private: int _id_order=-1;