1 #ifndef DQMOffline_Trigger_HLTTagAndProbeEff_h 2 #define DQMOffline_Trigger_HLTTagAndProbeEff_h 54 event.getByToken(token,handle);
59 template <
typename TagType,
typename TagCollType,
typename ProbeType=TagType,
typename ProbeCollType=TagCollType>
72 template<
typename ObjType,
typename ObjCollType>
73 std::vector<edm::Ref<ObjCollType> >
76 const std::vector<std::string>& filterNames,
111 template <
typename TagType,
typename TagCollType,
typename ProbeType,
typename ProbeCollType>
139 const auto& filterConfigs = pset.
getParameter<std::vector<edm::ParameterSet> >(
"filterConfigs");
143 for(
auto&
config: filterConfigs){
148 template <
typename TagType,
typename TagCollType,
typename ProbeType,
typename ProbeCollType>
161 desc.
add<std::vector<std::string> >(
"tagFilters",std::vector<std::string>());
162 desc.
add<std::vector<std::string> >(
"probeFilters",std::vector<std::string>());
163 desc.
add<
bool>(
"tagFiltersORed",
true);
164 desc.
add<
bool>(
"probeFiltersORed",
false);
165 desc.
add<
double>(
"minTagProbeDR",0);
166 desc.
add<
double>(
"minMass");
167 desc.
add<
double>(
"maxMass");
168 desc.
add<
bool>(
"requireOpSign");
174 trigEvtFlagDesc.
add<
bool>(
"andOr",
false);
175 trigEvtFlagDesc.add<
unsigned int>(
"verbosityLevel",1);
176 trigEvtFlagDesc.add<
bool>(
"andOrDcs",
false);
178 trigEvtFlagDesc.add<std::vector<int> >(
"dcsPartitions",{24,25,26,27,28,29});
179 trigEvtFlagDesc.add<
bool>(
"errorReplyDcs",
true);
181 trigEvtFlagDesc.add<
bool>(
"andOrHlt",
true);
183 trigEvtFlagDesc.add<std::vector<std::string> >(
"hltPaths",{});
185 trigEvtFlagDesc.add<
bool>(
"errorReplyHlt",
false);
191 template <
typename TagType,
typename TagCollType,
typename ProbeType,
typename ProbeCollType>
197 template <
typename TagType,
typename TagCollType,
typename ProbeType,
typename ProbeCollType>
205 template <
typename TagType,
typename TagCollType,
typename ProbeType,
typename ProbeCollType>
208 auto tagCollHandle = getHandle(event,
tagToken_);
209 auto probeCollHandle = getHandle(event,
probeToken_);
215 if(!tagCollHandle.isValid() || !probeCollHandle.isValid() || !trigEvtHandle.isValid())
return;
222 std::vector<edm::Ref<TagCollType> > tagRefs =
getPassingRefs(tagCollHandle,*trigEvtHandle,
226 std::vector<edm::Ref<ProbeCollType> > probeRefs =
getPassingRefs(probeCollHandle,*trigEvtHandle,
230 for(
auto& tagRef : tagRefs){
231 float tagEta = tagRef->eta();
232 float tagPhi = tagRef->phi();
233 for(
auto& probeRef : probeRefs){
238 if(static_cast<const void*>(&*tagRef)==static_cast<const void*>(&*probeRef))
continue;
239 float dR2 =
reco::deltaR2(tagEta,tagPhi,probeRef->eta(),probeRef->phi());
240 float mass = (tagRef->p4()+probeRef->p4()).
mag();
246 filterHist.fillHists(*tagRef,*probeRef,event,setup,*trigEvtHandle);
261 template <
typename TagType,
typename TagCollType,
typename ProbeType,
typename ProbeCollType>
262 template <
typename ObjType,
typename ObjCollType>
263 std::vector<edm::Ref<ObjCollType> >
267 const std::vector<std::string>& filterNames,
268 const bool orFilters,
272 std::vector<edm::Ref<ObjCollType> > passingRefs;
273 for(
size_t objNr=0;objNr<objCollHandle->size();objNr++){
275 if(rangeCuts(*ref) &&
277 (vidHandle.isValid()==
false || (*vidHandle)[ref]==
true)){
278 passingRefs.push_back(ref);
T getParameter(std::string const &) const
std::vector< edm::Ref< ObjCollType > > getPassingRefs(const edm::Handle< ObjCollType > &objCollHandle, const trigger::TriggerEvent &trigEvt, const std::vector< std::string > &filterNames, const bool orFilters, const edm::Handle< edm::ValueMap< bool > > &vidHandle, const VarRangeCutColl< ObjType > &rangeCuts)
void beginRun(const edm::Run &run, const edm::EventSetup &setup)
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
The single EDProduct to be saved for each event (AOD case)
void bookHists(DQMStore::IBooker &iBooker)
GenericTriggerEventFlag sampleTrigRequirements_
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
std::vector< std::string > probeFilters_
edm::EDGetTokenT< edm::ValueMap< bool > > probeVIDToken_
def setup(process, global_tag, zero_tesla=False)
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
std::vector< edm::ParameterSet > histConfigs_
VarRangeCutColl< TagType > tagRangeCuts_
edm::EDGetTokenT< ProbeCollType > probeToken_
edm::EDGetTokenT< trigger::TriggerEvent > trigEvtToken_
bool accept(const edm::Event &event, const edm::EventSetup &setup)
To be called from analyze/filter() methods.
std::vector< HLTDQMFilterTnPEffHists< TagType, ProbeType > > filterHists_
edm::EDGetTokenT< edm::ValueMap< bool > > tagVIDToken_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void fill(const edm::Event &event, const edm::EventSetup &setup)
HLTDQMTagAndProbeEff(const edm::ParameterSet &pset, edm::ConsumesCollector &&cc)
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
std::vector< std::string > tagFilters_
VarRangeCutColl< ProbeType > probeRangeCuts_
static edm::ParameterSetDescription makePSetDescription()
edm::EDGetTokenT< TagCollType > tagToken_
void initRun(const edm::Run &run, const edm::EventSetup &setup)
To be called from beginRun() methods.
bool passTrig(const float objEta, float objPhi, const trigger::TriggerEvent &trigEvt, const std::string &filterName, const std::string &processName)