9 #include <TObjString.h>
22 passingProbes_.clear();
23 for (
size_t i = 0,
n = view->size();
i <
n; ++
i) passingProbes_.push_back(view->refAt(
i));
30 value_ = (
std::find(passingProbes_.begin(), passingProbes_.end(), probe) != passingProbes_.end());
32 value_ = bool(cut_(*probe));
42 addBranches_(tree_, iConfig, iC,
"");
45 if (iConfig.
existsAs<
double>(
"eventWeight")) {
49 weightMode_ = External;
54 if (weightMode_ !=
None) {
55 tree_->Branch(
"weight", &weight_,
"weight/F");
56 tree_->Branch(
"totWeight", &totWeight_,
"totWeight/F");
62 tree_->Branch(
"PUweight", &PUweight_,
"PUweight/F");
68 addRunLumiInfo_ = iConfig.
existsAs<
bool>(
"addRunLumiInfo") ? iConfig.
getParameter<
bool>(
"addRunLumiInfo") :
false;
69 if (addRunLumiInfo_) {
70 tree_->Branch(
"run", &run_,
"run/i");
71 tree_->Branch(
"lumi", &lumi_,
"lumi/i");
72 tree_->Branch(
"event", &
event_,
"event/l");
73 tree_->Branch(
"truePU", &truePU_,
"truePU/I");
75 addEventVariablesInfo_ = iConfig.
existsAs<
bool>(
"addEventVariablesInfo") ? iConfig.
getParameter<
bool>(
"addEventVariablesInfo") :
false;
76 if (addEventVariablesInfo_) {
88 addCaloMet_ = iConfig.
existsAs<
bool>(
"addCaloMet") ? iConfig.
getParameter<
bool>(
"addCaloMet") :
true;
89 tree_->Branch(
"event_nPV" ,&mNPV_ ,
"mNPV/I");
93 tree_->Branch(
"event_met_calomet" ,&mMET_ ,
"mMET/F");
94 tree_->Branch(
"event_met_calosumet" ,&mSumET_ ,
"mSumET/F");
95 tree_->Branch(
"event_met_calometsignificance",&mMETSign_ ,
"mMETSign/F");
96 tree_->Branch(
"event_met_tcmet" ,&mtcMET_ ,
"mtcMET/F");
97 tree_->Branch(
"event_met_tcsumet" ,&mtcSumET_ ,
"mtcSumET/F");
98 tree_->Branch(
"event_met_tcmetsignificance",&mtcMETSign_ ,
"mtcMETSign/F");
100 tree_->Branch(
"event_met_pfmet" ,&mpfMET_ ,
"mpfMET/F");
101 tree_->Branch(
"event_met_pfphi" ,&mpfPhi_ ,
"mpfPhi/F");
102 tree_->Branch(
"event_met_pfsumet" ,&mpfSumET_ ,
"mpfSumET/F");
104 tree_->Branch(
"event_met_pfmetsignificance",&mpfMETSign_ ,
"mpfMETSign/F");
105 tree_->Branch(
"event_PrimaryVertex_x" ,&mPVx_ ,
"mPVx/F");
106 tree_->Branch(
"event_PrimaryVertex_y" ,&mPVy_ ,
"mPVy/F");
107 tree_->Branch(
"event_PrimaryVertex_z" ,&mPVz_ ,
"mPVz/F");
108 tree_->Branch(
"event_BeamSpot_x" ,&mBSx_ ,
"mBSx/F");
109 tree_->Branch(
"event_BeamSpot_y" ,&mBSy_ ,
"mBSy/F");
110 tree_->Branch(
"event_BeamSpot_z" ,&mBSz_ ,
"mBSz/F");
116 tree_->Branch(
"event_rho" ,&rho_ ,
"rho/F");
120 ignoreExceptions_ = iConfig.
existsAs<
bool>(
"ignoreExceptions") ? iConfig.
getParameter<
bool>(
"ignoreExceptions") :
false;
124 addRunLumiInfo_(
false),
125 addEventVariablesInfo_(
false),
139 for (std::vector<std::string>::const_iterator it = stringVars.begin(), ed = stringVars.end(); it != ed; ++it) {
144 for (std::vector<std::string>::const_iterator it = inputTagVars.begin(), ed = inputTagVars.end(); it != ed; ++it) {
151 for (std::vector<std::string>::const_iterator it = stringFlags.begin(), ed = stringFlags.end(); it != ed; ++it) {
156 for (std::vector<std::string>::const_iterator it = inputTagFlags.begin(), ed = inputTagFlags.end(); it != ed; ++it) {
161 for (std::vector<tnp::ProbeVariable>::iterator it = vars_.begin(), ed = vars_.end(); it != ed; ++it) {
162 tree->Branch(it->name().c_str(), it->address(), (it->name()+
"/F").c_str());
165 for (std::vector<tnp::ProbeFlag>::iterator it = flags_.begin(), ed = flags_.end(); it != ed; ++it) {
166 tree->Branch(it->name().c_str(), it->address(), (it->name()+
"/I").c_str());
174 run_ = iEvent.
id().
run();
179 if (!iEvent.
isRealData() and !pileupInfoToken_.isUninitialized()) {
182 truePU_ = PupInfo->begin()->getTrueNumInteractions();
186 for (std::vector<tnp::ProbeVariable>::const_iterator it = vars_.begin(), ed = vars_.end(); it != ed; ++it) {
189 for (std::vector<tnp::ProbeFlag>::const_iterator it = flags_.begin(), ed = flags_.end(); it != ed; ++it) {
192 if (weightMode_ == External) {
198 weight_ = weight->weight();
199 totWeight_ *= weight_;
204 if(storePUweight_ and !PUweightSrcToken_.isUninitialized() ) {
206 bool isPresent = iEvent.
getByToken(PUweightSrcToken_, weightPU);
207 if(isPresent) PUweight_ = float(*weightPU);
208 totWeight_ *= PUweight_;
211 if (addEventVariablesInfo_) {
221 for(
unsigned int ind=0;ind<recVtxs->size();ind++) {
222 if (!((*recVtxs)[ind].isFake()) && ((*recVtxs)[ind].ndof()>4)
223 && (fabs((*recVtxs)[ind].z())<=24.0) &&
224 ((*recVtxs)[ind].position().Rho()<=2.0) ) {
227 mPVx_ = (*recVtxs)[ind].x();
228 mPVy_ = (*recVtxs)[ind].y();
229 mPVz_ = (*recVtxs)[ind].z();
237 mBSx_ = beamSpot->position().X();
238 mBSy_ = beamSpot->position().Y();
239 mBSz_ = beamSpot->position().Z();
245 if (met->size() == 0) {
251 mMET_ = (*met)[0].et();
252 mSumET_ = (*met)[0].sumEt();
253 mMETSign_ = (*met)[0].significance();
259 if (tcmet->size() == 0) {
265 mtcMET_ = (*tcmet)[0].et();
266 mtcSumET_ = (*tcmet)[0].sumEt();
267 mtcMETSign_ = (*tcmet)[0].significance();
275 if (pfmet->size() == 0) {
281 mpfMET_ = (*pfmet)[0].et();
282 mpfPhi_ = (*pfmet)[0].phi();
283 mpfSumET_ = (*pfmet)[0].sumEt();
284 mpfMETSign_ = (*pfmet)[0].significance();
288 iEvent.
getByToken(pfmetTokenMiniAOD_, pfmet2);
292 mpfSumET_ = met.
sumEt();
299 rho_ = (float) *rhos;
307 for (std::vector<tnp::ProbeVariable>::const_iterator it = vars_.begin(), ed = vars_.end(); it != ed; ++it) {
308 if (ignoreExceptions_) {
316 for (std::vector<tnp::ProbeFlag>::const_iterator it = flags_.begin(), ed = flags_.end(); it != ed; ++it) {
317 if (ignoreExceptions_) {
323 if (tree_) tree_->Fill();
326 TList *
list = tree_->GetUserInfo();
327 list->Add(
new TObjString(pset.
dump().c_str()));
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Analysis-level MET class.
T getParameter(std::string const &) const
EventNumber_t event() const
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
void init(const edm::Event &iEvent) const
To be called at the beginning of the event (will fetch Candidate View if needed)
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
bool addRunLumiInfo_
Add branches with run and lumisection number.
void writeProvenance(const edm::ParameterSet &pset) const
std::string dump(unsigned int indent=0) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< MET > METCollection
void fill(const reco::CandidateBaseRef &probe) const
To be called for each item.
virtual double phi() const final
momentum azimuthal angle
std::vector< Variable::Flags > flags
~ProbeFlag()
Destructor (does nothing)
std::vector< Vertex > VertexCollection
collection of Vertex objects
T * make(const Args &...args) const
make new ROOT object
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
LuminosityBlockNumber_t luminosityBlock() const
std::vector< reco::MET > METCollection
collection of MET objects
void fill(const reco::CandidateBaseRef &probe) const
To be called once per probe, to fill the values for this probe.
A variable for the probe: can be a string expression or an external ValueMap<float> ...
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
~BaseTreeFiller()
Destructor, does nothing but it's out-of-line as we have complex data members.
void init(const edm::Event &iEvent) const
To be called once per event, to load possible external variables.
~ProbeVariable()
Destructor (does nothing)
void addBranches_(TTree *tree, const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC, const std::string &branchNamePrefix="")
std::vector< reco::CaloMET > CaloMETCollection
collection of CaloMET objects
std::vector< reco::PFMET > PFMETCollection
collection of PFMET objects
volatile std::atomic< bool > shutdown_flag false
double significance() const
bool storePUweight_
Store Pileup weight when running over Monte Carlo.
BaseTreeFiller(const char *name, const edm::ParameterSet &config, edm::ConsumesCollector &&iC)
specify the name of the TTree, and the configuration for it
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
virtual double pt() const final
transverse momentum