12#ifndef TIDAUTILS_TAGNPROBE_H
13#define TIDAUTILS_TAGNPROBE_H
25#include "TLorentzVector.h"
32 TagNProbe(
const std::string& refName,
double massMin,
double massMax,
bool unique_flag=
true );
34 TagNProbe(
const std::string& refName0,
const std::string& refName1,
double massMin,
double massMax,
bool unique_flag=
true );
60 std::vector<TIDA::Roi*>
GetRois( std::vector<TIDA::Chain>& chains,
66 return GetRois( chains, selector, filter, selector, filter, hmass, hmass_obj, tom, tom );
70 std::vector<TIDA::Roi*>
GetRois( std::vector<TIDA::Chain>& chains,
80 std::vector<TIDA::Roi*> probes;
85 if ( chain_tag==0 || chain_probe==0 )
return probes;
88 for (
size_t ip=0 ; ip<chain_probe->
size() ; ip++ ) {
94 bool found_tnp =
false;
97 for (
size_t it=0 ; it<chain_tag->
size() ; it++ ) {
103 if ( roi_probe == roi_tag )
continue;
105 if (
selection( troi, proi, selector_tag, filter_tag, selector_probe, filter_probe,
106 hmass, hmass_obj, tom_tag, tom_probe ) ) {
114 if ( found_tnp ) probes.push_back( &proi );
127 template<
typename T1,
typename T2>
128 double mass(
const T1* t1,
const T2* t2 )
const {
130 v1.SetPtEtaPhiM(
pt(t1)*0.001, t1->eta(), t1->phi(),
m_mass0 );
132 v2.SetPtEtaPhiM(
pt(t2)*0.001, t2->eta(), t2->phi(),
m_mass1 );
144 return selection( troi, proi, selector, filter, selector, filter, hmass, hmass_obj, tom, tom );
163 std::vector<TIDA::Track*> refp_tag = selector_tag->
tracks( filter_tag );
171 std::vector<TIDA::Track*> refp_probe = selector_probe->
tracks( filter_probe );
176 for (
size_t it=0; it<refp_tag.size() ; it++ ) {
179 for (
size_t ip=0; ip<refp_probe.size() ; ip++ ) {
182 double invmass =
mass( refp_tag[it], refp_probe[ip] );
183 double invmass_obj =
mass_obj( refp_tag[it], refp_probe[ip], tom_tag, tom_probe );
184 double deltaz0 = std::fabs(refp_tag[it]->z0() - refp_probe[ip]->z0() );
187 hmass->Fill( invmass );
188 hmass_obj->Fill( invmass_obj );
225 s <<
"[ TagNProbe: chains tag: " << t.tag() <<
"\tprobe: " << t.probe() <<
"\n";
226 s <<
" type: " << t.type0() <<
"\t " << t.type1() <<
"\n";
227 s <<
" mass: " << t.mass0() <<
"\t " << t.mass1() <<
" ]";
chain container, contains rois
std::ostream & operator<<(std::ostream &s, const TagNProbe &t)
Describes the Region of Ineterest geometry It has basically 8 parameters.
const std::vector< TIDA::Roi > & rois() const
get back roi vector
unsigned size() const
number of rois
const TIDARoiDescriptor & roi() const
access the roi information
const std::string & probe() const
bool selection(const TIDA::Roi &troi, const TIDA::Roi &proi, const TrackSelector *selector, TrackFilter *filter, T *hmass, T *hmass_obj, TrigObjectMatcher *tom=0) const
double pt(const TIDA::Track *t) const
void probe(const std::string &chainName)
TIDA::Chain * findChain(const std::string &chainname, std::vector< TIDA::Chain > &chains) const
const std::string & tag() const
std::vector< TIDA::Roi * > GetRois(std::vector< TIDA::Chain > &chains, const TrackSelector *selector, TrackFilter *filter, T *hmass, T *hmass_obj, TrigObjectMatcher *tom=0) const
std::string m_particleType1
void tag(const std::string &chainName)
getters and setters
const std::string & type0() const
double pt(const TrackTrigObject *t) const
bool selection(const TIDA::Roi &troi, const TIDA::Roi &proi, const TrackSelector *selector_tag, TrackFilter *filter_tag, const TrackSelector *selector_probe, TrackFilter *filter_probe, T *hmass, T *hmass_obj, TrigObjectMatcher *tom_tag=0, TrigObjectMatcher *tom_probe=0) const
double mass_obj(const TIDA::Track *t1, const TIDA::Track *t2, TrigObjectMatcher *tom=0) const
double mass(const T1 *t1, const T2 *t2) const
const std::string & type1() const
std::string m_tagChainName
std::string m_particleType0
std::vector< TIDA::Roi * > GetRois(std::vector< TIDA::Chain > &chains, const TrackSelector *selector_tag, TrackFilter *filter_tag, const TrackSelector *selector_probe, TrackFilter *filter_probe, T *hmass, T *hmass_obj, TrigObjectMatcher *tom_tag=0, TrigObjectMatcher *tom_probe=0) const
std::string m_probeChainName
TagNProbe(const std::string &refName, double massMin, double massMax, bool unique_flag=true)
const std::vector< TIDA::Track * > & tracks() const
const std::string selection