1 #ifndef Analysis_Tools_Analysis_h 2 #define Analysis_Tools_Analysis_h 1 28 #include <boost/core/demangle.hpp> 29 #include <boost/algorithm/string.hpp> 36 #include "TFileCollection.h" 62 Analysis(
const std::string & inputFilelist,
const std::string & evtinfo =
"MssmHbb/Events/EventInfo");
66 void tag(
const std::string &);
70 int seed(
const std::string &);
75 void event(
const int & event,
const bool & addCollections =
true);
81 std::string fileFullName();
100 template<
class Object>
101 std::shared_ptr< PhysicsObjectTree<Object> > addTree(
const std::string & unique_name,
const std::string & path );
102 template<
class Object>
103 std::shared_ptr< PhysicsObjectTree<Object> > tree(
const std::string & unique_name);
106 template<
class Object>
107 std::shared_ptr< Collection<Object> > addCollection(
const std::string & unique_name);
108 template<
class Object>
109 std::shared_ptr< Collection<Object> > addCollection(
const Collection<Object> & collection);
110 template<
class Object>
111 std::shared_ptr< Collection<Object> > addCollection(
const std::vector<Object> & objects,
const std::string & unique_name );
112 template<
class Object>
113 std::shared_ptr< Collection<Object> > collection(
const std::string & unique_name);
115 template<
class Object>
116 void defaultCollection(
const std::string & unique_name);
117 template<
class Object>
118 std::string defaultCollection();
121 int crossSections(
const std::string & path);
122 double crossSection();
123 double crossSection(
const std::string & title);
124 void listCrossSections();
128 double luminosity(
const std::string & title);
131 bool triggerResults(
const std::string & path);
132 bool triggerResult(
const std::string & trig);
133 int triggerPrescale(
const std::string & trig);
134 std::map<std::string,int> triggerPrescale(
const std::vector<std::string> & trigs);
138 void listGeneratorFilter();
144 template <
class Object1,
class Object2>
145 void match(
const std::string & collection,
const std::string & match_collection,
const float & deltaR = 0.5);
146 template <
class Object1,
class Object2>
147 void match(
const std::string & collection,
const std::vector<std::string> & match_collections,
const float & deltaR = 0.5);
150 int processJsonFile(
const std::string & fileName =
"goodJson.txt");
154 void addBtagEfficiencies(
const std::string & );
156 void btagEfficienciesAlgo(
const std::string & );
157 void btagEfficienciesFlavour(
const std::string & );
159 std::shared_ptr<JetResolutionInfo> jetResolutionInfo(
const std::string &,
const std::string & );
161 std::shared_ptr<BTagCalibrationReader> btagCalibration(
const std::string & tagger,
162 const std::string & filename,
163 const std::string & wp,
164 const std::string & sysType=
"central",
165 const std::vector<std::string> & otherSysTypes={
"up",
"down"});
168 std::shared_ptr<BTagCalibrationReader> btagCalibration();
170 float scaleLuminosity(
const float & lumi);
172 std::shared_ptr<PileupWeight>
pileupWeights(
const std::string & );
173 std::shared_ptr<MuonIdWeight> muonIDWeights(
const std::string & );
233 void treeInit_(
const std::string & unique_name,
const std::string & path);
242 std::map<std::string, TChain*>
tree_;
255 std::map<int,std::vector<int> >
json_;
272 template <
class Object>
273 std::shared_ptr< PhysicsObjectTree<Object> > Analysis::addTree(
const std::string & unique_name,
const std::string & path)
275 if ( path ==
"" || unique_name ==
"" )
return nullptr;
276 this->treeInit_(unique_name,path);
277 t_any_[unique_name] = std::shared_ptr< PhysicsObjectTree<Object> > (
new PhysicsObjectTree<Object>(tree_[unique_name], unique_name) );
278 std::string
type = boost::core::demangle(
typeid(Object).
name());
279 std::vector<std::string> tmp;
280 boost::split( tmp, type, boost::is_any_of(
"::"));
281 t_type_[unique_name] = tmp.back();
282 return std::any_cast< std::shared_ptr< PhysicsObjectTree<Object> > > (t_any_[unique_name]);
285 template <
class Object>
286 std::shared_ptr< PhysicsObjectTree<Object> > Analysis::tree(
const std::string & unique_name)
289 std::map<std::string, std::any >::iterator it = t_any_.find(unique_name);
290 if ( it == t_any_.end() )
292 return std::any_cast< std::shared_ptr< PhysicsObjectTree<Object> > > (t_any_[unique_name]);
296 template <
class Object>
297 std::shared_ptr< Collection<Object> > Analysis::addCollection(
const std::string & unique_name)
303 std::map<std::string, std::any >::iterator it = t_any_.find(unique_name);
304 if ( it == t_any_.end() )
307 auto tree = std::any_cast< std::shared_ptr< PhysicsObjectTree<Object> > > (t_any_[unique_name]);
308 c_any_[unique_name] = std::shared_ptr< Collection<Object> > (
new Collection<Object>(tree -> collection()));
309 std::shared_ptr< Collection<Object> > ret = std::any_cast< std::shared_ptr< Collection<Object> > > (c_any_[unique_name]);
314 template <
class Object>
317 std::string unique_name = collection.
name();
318 t_any_[unique_name] =
nullptr;
319 c_any_[unique_name] = std::shared_ptr< Collection<Object> > (
new Collection<Object>(collection) );
320 std::shared_ptr< Collection<Object> > ret = std::any_cast< std::shared_ptr< Collection<Object> > > (c_any_[unique_name]);
325 template <
class Object>
326 std::shared_ptr< Collection<Object> > Analysis::addCollection(
const std::vector<Object> & objects ,
const std::string & unique_name )
329 t_any_[unique_name] =
nullptr;
330 c_any_[unique_name] = std::shared_ptr< Collection<Object> > (
new Collection<Object>(collection) );
331 std::shared_ptr< Collection<Object> > ret = std::any_cast< std::shared_ptr< Collection<Object> > > (c_any_[unique_name]);
335 template <
class Object>
336 std::shared_ptr< Collection<Object> > Analysis::collection(
const std::string & unique_name)
338 std::shared_ptr< Collection<Object> > ret = std::any_cast< std::shared_ptr< Collection<Object> > > (c_any_[unique_name]);
342 template <
class Object1,
class Object2>
343 void Analysis::match(
const std::string & collection,
const std::string & match_collection,
const float & deltaR)
345 if ( match_collection ==
"" )
return;
346 auto o1 = std::any_cast< std::shared_ptr< Collection<Object1> > > (c_any_[collection]);
347 auto o2 = std::any_cast< std::shared_ptr< Collection<Object2> > > (c_any_[match_collection]);
348 o1->matchTo(o2->vectorCandidates(),o2->name(), deltaR);
351 template <
class Object1,
class Object2>
352 void Analysis::match(
const std::string & collection,
const std::vector<std::string> & match_collections,
const float & deltaR)
354 for (
auto & mc : match_collections )
355 this->match<Object1,Object2>(collection, mc, deltaR);
358 template<
class Object>
void Analysis::defaultCollection(
const std::string & unique_name)
360 if ( std::is_same<Object,GenParticle>::value ) defaultGenParticle_ = unique_name;
363 template<
class Object> std::string Analysis::defaultCollection()
366 if ( std::is_same<Object,GenParticle>::value ) ret = defaultGenParticle_ ;
371 inline void Analysis::tag(
const std::string & t) { std::cout <<
"Tag " << t <<
" has been defined." << std::endl ;
373 inline std::string Analysis::tag() {
return tag_ ; }
376 inline int Analysis::numberEvents() {
return nevents_; }
377 inline int Analysis::size() {
return nevents_; }
378 inline int Analysis::event() {
return event_; }
379 inline int Analysis::run() {
return run_ ; }
380 inline int Analysis::lumiSection() {
return lumi_ ; }
383 inline int Analysis::nPileup() {
return n_pu_; }
384 inline float Analysis::nTruePileup() {
return n_true_pu_; }
386 inline float Analysis::lumiPileup() {
return lumi_pu_; }
387 inline float Analysis::instantLumi() {
return inst_lumi_;}
389 inline double Analysis::genWeight() {
return genWeight_; }
390 inline double Analysis::genScale() {
return genScale_; }
391 inline PDF Analysis::pdf() {
return pdf_; }
392 inline double Analysis::rho() {
return rho_; }
394 inline void Analysis::btagEfficienciesAlgo(
const std::string & algo ) { btageff_algo_ = algo; }
395 inline void Analysis::btagEfficienciesFlavour(
const std::string & flavour) { btageff_flavour_ = flavour; }
397 inline std::string Analysis::fileFullName() {
return std::string(t_event_ -> GetFile() -> GetName()) ; }
404 #endif // Analysis_Tools_Analysis_h