MyHtoWWAnalysis/MyHtoWWAnalysis/MyHtoWWAnalysis.h

00001 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00002 // 03/2007, AUTHOR: STEFFEN KAISER
00003 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00004 
00005 #ifndef MyHtoWWAnalysisH
00006 #define MyHtoWWAnalysisH
00007 
00008 //:::::::::::::::::::::::::::::
00009 //:: CLASS MyAnalysisExample ::
00010 //:::::::::::::::::::::::::::::
00011 
00024 
00025 
00026 //::::::::::::::::::
00027 //:: HEADER FILES ::
00028 //::::::::::::::::::
00029 #include <iostream>
00030 #include <fstream>
00031 
00032 // ROOT //
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 // analysis base class //
00042 #include "NtupleReader/MyAnalysis.h"
00043 
00044 // NtupleReader //
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     // Constructors //
00060     MyHtoWWAnalysis(void) {
00061         init();
00062     }
00064 
00065     ~MyHtoWWAnalysis(void) {
00066         destruct();
00067     }
00069 
00070     // Methods //
00071     void initialize(void);
00076     void analyse_event(const MyEvent & event);
00078     void end_of_analysis(void);
00083 
00084         
00085     TString filename;   // name of ROOT file
00086     TString outputpath; // path of the outputfile
00087     TString addon;      // filename addon
00088     bool overwrite;     // if true: if file exists overwrite 
00089     TString m_cutfile;    // name of cut value definition file
00090     TString m_cutstring;  // string with cuts to be applied separated by ','
00091 
00092     TString m_decay_mode;
00093 
00094  private:
00095 
00096     // objects //
00097 
00098     MyTools m_tools;
00099     MyTruthParticleManager m_truth_manager;
00100 
00101     MyMissingEt truth_missinget;
00102     
00103 
00104     // counter //
00105         
00106     //int nb_multiple_matchedparticles;
00107     //int nb_foundoverlaps;
00108 
00109     // ROOT file //
00110   
00111     TFile *m_tfile;    // ROOT file
00112     TTree *m_config_tree;
00113     TTree *m_cut_order_tree;
00114 
00115     //TDirectory *dir_cut_info;
00116     //TTree *tree_cut_order;
00117     
00118     // histograms //
00119    
00120     #include "HtoWWHistos.h"
00121 
00122 
00123     // variables //
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     //Double_t deltaR_jetmatching_cut;
00153     Double_t m_cutvalue_etmiss_min;
00154     Double_t m_cutvalue_bjet_weight_max;
00155     //Double_t m_cutvalue_truthjet_pt_min;
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     //TString m_decay_mode;
00205     Bool_t  m_truth_ana_flag;
00206 
00207     // vectors //
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     // methods //
00216 
00217     void init(void); // initialization routine
00218     void destruct(void); // destruction routine
00219 
00220     // my methods //  
00221     
00222 
00223     Double_t get_cutvalue(TString variable, MyTextFileReader *txtfile_reader);
00224 
00225     // preselection
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     // matching
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     //btag efficiency
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     // analysis
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     // fill histograms
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     //void fill_final_histos(MyVBFCandidate candidate);
00350 
00351     void fill_all_ana_histos(int iCut, MyMissingEt missinget);
00353 
00354 
00355     // cuts on event basis
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     // cuts on the candidates
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

Generated on Tue Oct 21 11:50:44 2008 for NtupleAnalysis by  doxygen 1.5.1