00001
00002
00003
00004
00005 #ifndef MyHtoWWAnalysisH
00006 #define MyHtoWWAnalysisH
00007
00008
00009
00010
00011
00024
00025
00026
00027
00028
00029 #include <iostream>
00030 #include <fstream>
00031
00032
00033 #include "TFile.h"
00034 #include "TTree.h"
00035 #include "TH1.h"
00036 #include "TH2.h"
00037 #include "TNtuple.h"
00038 #include "TLorentzVector.h"
00039 #include "TVectorT.h"
00040
00041
00042 #include "NtupleReader/MyAnalysis.h"
00043
00044
00045 #include "NtupleReader/MyParticlePair.h"
00046 #include "NtupleReader/MyParticle.h"
00047 #include "NtupleReader/MyTextFileReader.h"
00048 #include "NtupleReader/MyTools.h"
00049 #include "NtupleReader/MyDatasetInfo.h"
00050 #include "NtupleReader/MyTruthParticleManager.h"
00051 #include "NtupleReader/MyCollinearApproximation.h"
00052 #include "NtupleReader/MyVBFCandidate.h"
00053 #include "NtupleReader/MyTrigger.h"
00054 #include "NtupleReader/MyVertex.h"
00055
00056 class MyHtoWWAnalysis : public MyAnalysis {
00057
00058 public:
00059
00060 MyHtoWWAnalysis(void) {
00061 init();
00062 }
00064
00065 ~MyHtoWWAnalysis(void) {
00066 destruct();
00067 }
00069
00070
00071 void initialize(void);
00076 void analyse_event(const MyEvent & event);
00078 void end_of_analysis(void);
00083
00084
00085 TString filename;
00086 TString outputpath;
00087 TString addon;
00088 bool overwrite;
00089 TString m_cutfile;
00090 TString m_cutstring;
00091
00092 TString m_decay_mode;
00093
00094 private:
00095
00096
00097
00098 MyTools m_tools;
00099 MyTruthParticleManager m_truth_manager;
00100
00101 MyMissingEt truth_missinget;
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 TFile *m_tfile;
00112 TTree *m_config_tree;
00113 TTree *m_cut_order_tree;
00114
00115
00116
00117
00118
00119
00120 #include "HtoWWHistos.h"
00121
00122
00123
00124
00125 static const double invGeV = 1.;
00126 static const double GeV = 1.;
00127
00128 static const int nb_cuts_max = 25;
00129
00130 std::string m_generator;
00131 double weight;
00132 int m_release;
00133
00134 int m_event;
00135 int m_entry;
00136
00137 Bool_t m_AtlFastFlag;
00138 Bool_t m_1mmFix_flag;
00139 Bool_t m_trackjet_flag;
00140
00141 Int_t nb_cuts;
00142 Int_t nb_cuts_applied;
00143
00144 TString cuts[nb_cuts_max];
00145 Int_t nb_events[nb_cuts_max];
00146 Int_t nb_candidates[nb_cuts_max];
00147 Bool_t flag_evt_selected[nb_cuts_max+2];
00148
00149 int m_primary_vertex_index;
00150 int m_primary_truth_vertex_index;
00151
00152
00153 Double_t m_cutvalue_etmiss_min;
00154 Double_t m_cutvalue_bjet_weight_max;
00155
00156 Double_t m_cutvalue_jet_abseta_min;
00157 Double_t m_cutvalue_lepton1_pt_min;
00158 Double_t m_cutvalue_lepton2_pt_min;
00159 Double_t m_cutvalue_lepton_pt_max;
00160 Double_t m_cutvalue_leptons_dphi_max;
00161 Double_t m_cutvalue_leptons_dr_max;
00162 Double_t m_cutvalue_leptons_costheta_min;
00163 Double_t m_cutvalue_leptons_mass_max;
00164 Double_t m_cutvalue_leptons_pt_max;
00165
00166 Double_t m_cutvalue_jet_eta_max;
00167 Double_t m_cutvalue_jet_pt_min;
00168 Double_t m_cutvalue_jet_pt_max;
00169 Double_t m_cutvalue_trackjet_pt_min;
00170 Double_t m_cutvalue_trackjet_pt_max;
00171 Double_t m_cutvalue_jet1_pt_min;
00172 Double_t m_cutvalue_jet2_pt_min;
00173
00174 Double_t m_cutvalue_jets_absdeta_min;
00175 Double_t m_cutvalue_jets_absdphi_max;
00176 Double_t m_cutvalue_jets_mass_min;
00177 Double_t m_cutvalue_jets_mass_max;
00178 Double_t m_cutvalue_cjet_eta_max;
00179 Double_t m_cutvalue_mtllnu_min;
00180 Double_t m_cutvalue_pt_balance_max;
00181
00182 Double_t m_cutvalue_x1_max;
00183 Double_t m_cutvalue_x2_max;
00184 Double_t m_cutvalue_tautau_Z_dm_min;
00185
00186 Double_t m_cutvalue_mt_min;
00187 Double_t m_cutvalue_mt_max;
00188
00189 Double_t m_cutvalue_jet_match_dR;
00190
00191 Bool_t m_switch_cjet_between_fwdjets;
00192 Int_t m_flag_cjv_track_jets;
00193 Int_t m_flag_cjv_stdjet_corrpt;
00194 Int_t m_flag_cjv_trkstdjet_match;
00195 Double_t m_cutvalue_cjv_stdjet_pt_min;
00196 Double_t m_cutvalue_cjv_trkjet_pt_min;
00197 Double_t m_cutvalue_cjv_ptratio_min;
00198 Double_t m_cutvalue_cjv_cmsptratio_min;
00199
00200 Int_t m_cutvalue_nb_vertices_min;
00201 Int_t m_cutvalue_nb_vertices_max;
00202
00203
00204
00205 Bool_t m_truth_ana_flag;
00206
00207
00208 std::vector<MyParticle*> v_centraljet_ana;
00209 std::vector<MyParticle*> v_track_jet_reco_fake;
00210
00211 std::vector<MyParticle*> v_trackjet_forcjvmatch;
00212
00213 std::vector< std::vector<MyVBFCandidate> > v_cut_candidates;
00214
00215
00216
00217 void init(void);
00218 void destruct(void);
00219
00220
00221
00222
00223 Double_t get_cutvalue(TString variable, MyTextFileReader *txtfile_reader);
00224
00225
00226
00227 std::vector<MyParticle*>
00228 preselect_electrons(const std::vector<MyParticle*> vec_particle, double pt_min);
00231 std::vector<MyParticle*>
00232 preselect_electrons_for_orm(const std::vector<MyParticle*> vec_particle, double pt_min);
00235 std::vector<MyParticle*>
00236 preselect_truth_electrons(const std::vector<MyParticle*> vec_particle, double pt_min);
00239 std::vector<MyParticle*>
00240 preselect_muons(const std::vector<MyParticle*> vec_particle, double pt_min);
00243 std::vector<MyParticle*>
00244 preselect_truth_muons(const std::vector<MyParticle*> vec_particle, double pt_min);
00247
00248
00249
00250
00251 void match_electrons( std::vector<MyParticle*> vec_e_reco,
00252 std::vector<MyParticle*> vec_e_truth);
00254
00255 void match_muons( std::vector<MyParticle*> vec_mu_reco,
00256 std::vector<MyParticle*> vec_mu_truth);
00258
00259 void match_jets( std::vector<MyParticle*> vec_jet_reco,
00260 std::vector<MyParticle*> vec_jet_truth);
00262
00263 void match_track_jets( std::vector<MyParticle*> vec_track_jet_reco,
00264 std::vector<MyParticle*> vec_track_jet_truth);
00266
00267 void match_fake_track_jets( std::vector<MyParticle*> vec_e,
00268 std::vector<MyParticle*> vec_mu);
00269
00271
00272 void match_track_with_std_jets( std::vector<MyParticle*> vec_track_jet,
00273 std::vector<MyParticle*> vec_std_jet);
00275 void match_truth_track_with_std_jets( std::vector<MyParticle*> vec_truth_track_jet,
00276 std::vector<MyParticle*> vec_truth_std_jet);
00278
00279
00280
00281
00282 void jet_btag_eff( std::vector<MyParticle*> vec_reco_jets,
00283 MyTruthParticleManager *truth_manager);
00285
00286 void lepton_isolation_study( std::vector<MyParticle*> vec_leptons,
00287 MyTruthParticleManager *truth_manager);
00288
00289
00290
00291 void cut_based_analysis( std::vector<MyParticle*> vec_e_in,
00292 std::vector<MyParticle*> vec_mu_in,
00293 std::vector<MyParticle*> vec_jet_in,
00294 std::vector<MyParticle*> vec_track_jet_in,
00295 MyMissingEt missinget_in,
00296 MyTrigger trigger
00297 );
00298
00299
00300 std::vector<MyVBFCandidate>
00301 build_candidates( std::vector<MyParticle*> vec_jets,
00302 std::vector<MyParticle*> vec_leptons,
00303 MyMissingEt missing_et);
00305
00306 Bool_t select_candidate(MyVBFCandidate candidate);
00308
00309 MyVBFCandidate choose_candidate(std::vector<MyVBFCandidate> candidates);
00312
00313 std::vector<MyParticle*>
00314 build_centraljet_vector(std::vector<MyParticle*> vec_std_jets,
00315 std::vector<MyParticle*> vec_trk_jets);
00316
00317
00318 std::vector<MyParticlePair>
00319 get_tagjet_pairs(std::vector<MyVBFCandidate> vec_candidates);
00321
00322 std::vector<MyParticlePair>
00323 get_lepton_pairs(std::vector<MyVBFCandidate> vec_candidates);
00325
00326 std::vector<MyParticle*>
00327 get_tagjets(std::vector<MyParticlePair> vec_tagjet_pairs);
00329
00330 std::vector<MyParticle*>
00331 get_leptons(std::vector<MyParticlePair> vec_lepton_pairs);
00333
00334
00335
00336 void fill_vertex_histos( const std::vector<MyVertex*> *vertices,
00337 const std::vector<MyVertex*> *truth_vertices);
00338
00339 void fill_raw_aod_content_histos( std::vector<MyParticle*> v_e_reco_aod,
00340 std::vector<MyParticle*> v_mu_reco_aod,
00341 std::vector<MyParticle*> v_jet_reco_aod,
00342 std::vector<MyParticle*> v_e_truth_aod,
00343 std::vector<MyParticle*> v_mu_truth_aod,
00344 std::vector<MyParticle*> v_jet_truth_aod);
00346
00347
00348
00350
00351 void fill_all_ana_histos(int iCut, MyMissingEt missinget);
00353
00354
00355
00356
00357 bool cut_offline_trigger(std::vector<MyParticle*> vec_e,
00358 std::vector<MyParticle*> vec_mu);
00359
00360 bool cut_online_trigger(std::vector<MyParticle*> vec_e,
00361 std::vector<MyParticle*> vec_mu,
00362 MyTrigger trigger);
00363
00364 bool cut_nb_objects(std::vector<MyParticle*> vec_e,
00365 std::vector<MyParticle*> vec_mu,
00366 std::vector<MyParticle*> vec_jet);
00367
00368 bool cut_nb_leptons(std::vector<MyParticle*> vec_e,
00369 std::vector<MyParticle*> vec_mu);
00370
00371 bool cut_nb_jets(std::vector<MyParticle*> vec_jet);
00372
00373
00374 bool cut_bjet_veto(std::vector<MyParticle*> vec_jet);
00375 bool cut_etmiss(MyMissingEt missing_et);
00376
00377
00378 bool cut_etmiss(MyVBFCandidate candidate);
00379 bool cut_tagjet_no_bjet(MyVBFCandidate candidate);
00380 bool cut_lepton_pt(MyVBFCandidate candidate);
00381 bool cut_leptons_charge(MyVBFCandidate candidate);
00382 bool cut_leptons_dphi(MyVBFCandidate candidate);
00383 bool cut_leptons_dr(MyVBFCandidate candidate);
00384 bool cut_leptons_theta(MyVBFCandidate candidate);
00385 bool cut_leptons_mass(MyVBFCandidate candidate);
00386 bool cut_leptons_pt(MyVBFCandidate candidate);
00387 bool cut_tau_veto(MyVBFCandidate candidate);
00388 bool cut_jets_pt(MyVBFCandidate candidate);
00389 bool cut_jets_hemisphere(MyVBFCandidate candidate);
00390 bool cut_jets_deta(MyVBFCandidate candidate);
00391 bool cut_jets_dphi(MyVBFCandidate candidate);
00392 bool cut_jets_mass(MyVBFCandidate candidate);
00393 bool cut_central_jet_veto(MyVBFCandidate candidate);
00394 bool cut_leptons_jets_deta(MyVBFCandidate candidate);
00395 bool cut_transverse_mass(MyVBFCandidate candidate);
00396 bool cut_pt_balance(MyVBFCandidate candidate);
00397
00398
00399 };
00400
00401 #endif