00001 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00002 // 05.12.2006, AUTHORS: OLIVER KORTNER, STEFFEN KAISER, MANFRED GROH, THIES EHRICH 00003 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00004 00005 #ifndef HiggsAnalysisNtupleWriterH 00006 #define HiggsAnalysisNtupleWriterH 00007 00008 //::::::::::::::::::::::::::::::::::::: 00009 //:: CLASS HiggsAnalysisNtupleWriter :: 00010 //::::::::::::::::::::::::::::::::::::: 00011 00024 00027 00028 //:::::::::::::::::: 00029 //:: HEADER FILES :: 00030 //:::::::::::::::::: 00031 00032 // STL // 00033 #include <string> 00034 #include <vector> 00035 #include <map> 00036 00037 // Gaudi // 00038 #include "GaudiKernel/Algorithm.h" 00039 #include "GaudiKernel/ObjectVector.h" 00040 #include "GaudiKernel/MsgStream.h" 00041 #include "GaudiKernel/ITHistSvc.h" 00042 #include "GaudiKernel/IToolSvc.h" 00043 00044 // ATHENA // 00045 #include "StoreGate/StoreGateSvc.h" 00046 #include "CBNT_Utils/CBNT_AthenaAwareBase.h" 00047 #include "AnalysisTools/IAnalysisTools.h" 00048 #include "TrackIsolationTools/TrackIsolationTool.h" 00049 //#include "TrackToVertex/TrackToVertex.h" 00050 00051 #include "MissingETEvent/MissingEtTruth.h" 00052 #include "McParticleEvent/TruthParticleContainer.h" 00053 #include "HiggsAnalysis/VertexCollectionSvc.h" 00054 00055 // ROOT // 00056 //#include "TArrayF.h" 00057 //#include "TArrayI.h" 00058 #include "TTree.h" 00059 #include "TString.h" 00060 00061 //class GenVertex; 00062 00063 class HiggsAnalysisNtupleWriter : public CBNT_AthenaAwareBase { 00064 00065 public: 00066 // Constructors // 00067 HiggsAnalysisNtupleWriter(const std::string & name, 00068 ISvcLocator * pSvcLocator); 00070 00071 ~HiggsAnalysisNtupleWriter(); 00073 00074 // Methods // 00075 // Methods required by the base class // 00076 virtual StatusCode CBNT_initialize(void); 00079 virtual StatusCode CBNT_finalize(void); 00082 virtual StatusCode CBNT_execute(void); 00085 virtual StatusCode CBNT_clear(void); 00087 00088 private: 00089 // ATHENA // 00090 StoreGateSvc *m_storeGate; // pointer to the store-gate service 00091 MsgStream *m_log; // pointer to the message stream 00092 MPIHiggsAnalysis::VertexCollectionSvc *m_vert_coll; 00093 // pointer to the output vertex collection 00094 IAlgTool *tmp_trackIsolationTool; //pointer to the track Isolation Tool 00095 TrackIsolationTool *m_trackIsolationTool; //pointer to the track Isolation Tool (castet) 00096 IToolSvc *m_toolSvc; //pointer to the tools service 00097 00098 // get an handle on the TrackToVertex tool 00099 //Reco::ITrackToVertex *m_trackToVertexTool; 00100 00101 // job options // 00102 std::string m_trigger_decision_container; // name of the trigger decision container 00103 std::string m_trigger_mu_lvl1_container; // name of the trigger decision container 00104 std::string m_trigger_mu_lvl2_container; // name of the trigger muon LVL2 container 00105 std::string m_trigger_mu_ef_container; // name of the trigger muon EF container 00106 std::string m_trigger_met_container; // name of the trigger met container 00107 std::string m_photon_container; // name of the photon container 00108 std::string m_electron_container; // name of the electron container 00109 std::vector<std::string> m_muon_container; // name of the muon container 00110 std::string m_jet_container; // name of the jet container 00111 std::string m_taujet_container; // name of the taujet container 00112 std::string m_truthjet_container; // name of the truth jet container 00113 std::string m_truthmissingEt_container; // name of the missingEt truth container 00114 std::string m_truthparticle_container; // name of the truthparticle container 00115 00116 std::string m_vert_coll_svc_name; // name of the output vertex collection 00117 std::string m_primary_vertex_container; // name of the vertex container 00118 std::string m_track_jet_container; // name of the track-jet container 00119 std::string m_truth_track_jet_container; // name of the truth track-jet container 00120 std::string m_track_particle_container; // name of the track particle container 00121 00122 std::string m_release; //athena release 00123 std::string m_svnversion; //svn version 00124 std::string m_date; //date 00125 00126 bool m_AtlFastFlag; 00127 bool m_doAODFix1mm; 00128 bool m_doEventWeight; 00129 int nEvents; 00130 int m_truthparticleMaximumLeptonBarcode; 00131 bool m_truthparticleNoPDGAbove100; 00132 bool m_doTrigger; 00133 bool m_trigger_mu_lvl1; 00134 bool m_trigger_mu_lvl2; 00135 bool m_doMissingEt; 00136 bool m_doTrackParticles; 00137 bool m_doElectrons; 00138 bool m_doPhotons; 00139 bool m_doMuons; 00140 bool m_doJets; 00141 bool m_doTauJets; 00142 bool m_doTruthJets; 00143 bool m_doTruthParticles; 00144 00145 bool m_doTrackJets; // flag indicating whether track jets should be created 00146 bool m_doVertices; // flag indicating whether vertices should be written 00147 00148 // info Trees that are stored seperately 00149 // info about the AOD input files used 00150 std::vector<std::string> v_string_aod_files; 00151 std::vector<std::string> v_string_met_container; 00152 TTree *tree_aod_file_collection; 00153 char char_array_aod_file[200]; 00154 00155 // if the vector is declared here it does not work anymore, but why??????? 00156 // std::vector<std::string> v_string_met_container; 00157 00158 // info about the AOD input files used 00159 TTree *tree_aod_container_keys; 00160 char char_array_aod_container_keys[50]; 00161 char aodkey_trigger_decision_container[50]; 00162 char aodkey_trigger_mu_lvl1_container[50]; 00163 char aodkey_trigger_mu_lvl2_container[50]; 00164 char aodkey_trigger_mu_ef_container[50]; 00165 char aodkey_trigger_met_container[50]; 00166 char aodkey_photon_container[50]; 00167 char aodkey_electron_container[50]; 00168 char aodkey_muon_container[50]; 00169 char aodkey_jet_container[50]; 00170 char aodkey_taujet_container[50]; 00171 char aodkey_truthjet_container[50]; 00172 char aodkey_met_container[500]; 00173 char aodkey_truthmissingEt_container[50]; 00174 char aodkey_truthparticle_container[50]; 00175 char aodkey_primary_vertex_container[50]; 00176 char aodkey_track_jet_container[50]; // name of the track-jet container 00177 char aodkey_truth_track_jet_container[50]; // name of the truth track-jet container 00178 char aodkey_track_particle_container[50]; // name of the track-particle container 00179 bool aodkey_AtlFastFlag; 00180 bool aodkey_doAODFix1mm; 00181 bool aodkey_doTrackJets; 00182 bool aodkey_doVertices; 00183 int aodkey_truthparticleMaximumLeptonBarcode; 00184 bool aodkey_truthparticleNoPDGAbove100; 00185 00186 char aodkey_release[50]; 00187 char aodkey_svnversion[50]; 00188 char aodkey_date[50]; 00189 00190 // data vectors to be stored in the AAN // 00191 // reconstructed data // 00192 00193 // trigger decision data // ////////////////////////////////////////////////////////////////////// 00194 bool m_trigger_l1_defined; 00195 bool m_trigger_l2_defined; 00196 bool m_trigger_ef_defined; 00197 std::vector<std::string> *m_trigger_keys_l1; // all the trigger keys of level 1 00198 std::vector<int> *m_trigger_keys_status_l1; // status of the trigger keys 00199 std::vector<std::string> *m_trigger_keys_l2; // all the trigger keys of level 2 00200 std::vector<int> *m_trigger_keys_status_l2; // status of the trigger keys 00201 std::vector<std::string> *m_trigger_keys_ef; // all the trigger keys of level 3 00202 std::vector<int> *m_trigger_keys_status_ef; // status of the trigger keys 00203 00204 00205 // trigger muon lvl1 data // ///////////////////////////////////////////////////////////////////// 00206 Int_t m_nb_trigger_mu_lvl1; // number of muons (lvl1) in the event 00207 std::vector<double> *m_trigger_mu_lvl1_eta; // muon roi eta 00208 std::vector<double> *m_trigger_mu_lvl1_phi; // muon roi phi 00209 std::vector<int> *m_trigger_mu_lvl1_threshold_number; // muon roi threshold number 00210 std::vector<double> *m_trigger_mu_lvl1_threshold_value; // muon roi threshold number 00211 std::vector<std::string> *m_trigger_mu_lvl1_threshold_name; // muon roi threshold number 00212 std::vector<uint32_t> *m_trigger_mu_lvl1_roiword; // muon roi word 00213 std::vector<bool> *m_trigger_mu_lvl1_confirmed; // has match with lvl2 00214 00215 // trigger muon lvl2 data // ///////////////////////////////////////////////////////////////////// 00216 Int_t m_nb_trigger_mu_lvl2; // number of muons (lvl2) in the event 00217 std::vector<double> *m_trigger_mu_lvl2_eta; // muon lvl2 eta 00218 std::vector<double> *m_trigger_mu_lvl2_phi; // muon lvl2 phi 00219 std::vector<double> *m_trigger_mu_lvl2_pt; // muon lvl2 pt 00220 std::vector<float> *m_trigger_mu_lvl2_sigma_pt; // muon lvl2 pt error 00221 00222 // trigger muon ef data // ///////////////////////////////////////////////////////////////////// 00223 Int_t m_nb_trigger_mu_ef; // number of muons (ef) in the event 00224 std::vector<double> *m_trigger_mu_ef_eta; // muon ef eta 00225 std::vector<double> *m_trigger_mu_ef_phi; // muon ef phi 00226 std::vector<double> *m_trigger_mu_ef_pt; // muon ef pt 00227 std::vector<double> *m_trigger_mu_ef_charge1; // muon ef charge (return m_charge) 00228 std::vector<double> *m_trigger_mu_ef_charge2; // muon ef charge (return this->Charge()) 00229 std::vector<int> *m_trigger_mu_ef_code; // muon ef code 00230 // MOORE 0 : muon reconstructed in the MS; 00231 // MuidSA +1 : muon track propagated to the IP; 00232 // MuidCB +10 : matching probability > match probability cut; 00233 // +20 : failed stand-alone fit, but good combined fit; 00234 // +100: good fit quality 00235 00236 // trigger missing et data // ///////////////////////////////////////////////////////////////////// 00237 Double_t m_trigger_met_ex; // trigger et_x value (level2+EF) 00238 Double_t m_trigger_met_ey; // trigger et_y value (level2+EF) 00239 Double_t m_trigger_met_et; // trigger et value (level2+EF) 00240 Double_t m_trigger_met_sumEt; // trigger sum et value (level2+EF) 00241 Double_t m_trigger_met_RoIword;// trigger RoI word 00242 00243 // track data // ///////////////////////////////////////////////////////////////////////////// 00244 Int_t m_nb_rec_tracks; // number of tracks in the event 00245 std::vector<double> *m_track_p_x; 00246 std::vector<double> *m_track_p_y; 00247 std::vector<double> *m_track_p_z; 00248 std::vector<double> *m_track_E; 00249 std::vector<double> *m_track_charge; 00250 std::vector<int> *m_track_vertex_index; 00251 std::vector<int> *m_track_SCThit; 00252 std::vector<int> *m_track_Phit; 00253 std::vector<int> *m_track_BLayerhit; 00254 std::vector<int> *m_track_TRThit; 00255 std::vector<int> *m_track_MDThit; 00256 std::vector<int> *m_track_CSChit_eta; 00257 std::vector<int> *m_track_TGChit_eta; 00258 std::vector<int> *m_track_RPChit_eta; 00259 std::vector<int> *m_track_CSChit_phi; 00260 std::vector<int> *m_track_TGChit_phi; 00261 std::vector<int> *m_track_RPChit_phi; 00262 std::vector<double> *m_track_d0; 00263 std::vector<double> *m_track_z0; 00264 std::vector<double> *m_track_chi2; 00265 std::vector<double> *m_track_nDoF; 00266 std::vector<double> *m_track_trackIsolationEnergy_s; 00267 std::vector<double> *m_track_trackIsolationEnergy_0; 00268 std::vector<double> *m_track_trackIsolationEnergy_1; 00269 std::vector<double> *m_track_trackIsolationEnergy_2; 00270 std::vector<double> *m_track_trackIsolationEnergy_3; 00271 00272 00273 00274 00275 00276 00277 00278 00279 // electron data // ///////////////////////////////////////////////////////////////////////////// 00280 Int_t m_nb_rec_electrons; // number of electrons in the event 00281 std::vector<double> *m_e_p_x; // px 00282 std::vector<double> *m_e_p_y; // py 00283 std::vector<double> *m_e_p_z; // pz 00284 std::vector<double> *m_e_E; // E 00285 std::vector<double> *m_e_calo_p_x; // calo px 00286 std::vector<double> *m_e_calo_p_y; // calo py 00287 std::vector<double> *m_e_calo_p_z; // calo pz 00288 std::vector<double> *m_e_calo_E; // calo E 00289 std::vector<double> *m_e_charge; // charge 00290 std::vector<double> *m_e_isEM; // isEM parameter 00291 std::vector<double> *m_e_NeuralNet; // NeuralNet parameter 00292 std::vector<int> *m_e_egamma_flag; // m_egamma_flags of the electrons: 00293 // m_egamma_flag = 1, if author==1, a track is 00294 // associated with the electron, and isEM%16==0 00295 std::vector<int> *m_e_softe_flag; // m_softe_flags of the electrons: 00296 // m_softe_flag = 1, if author==2, a track is 00297 // associated with the electron, and isEM%16==0 00298 std::vector<double> *m_e_E_over_p; // E(calorimeter)/p(inner tracker) 00299 std::vector<double> *m_e_TRTHighThresholdHits; // Number of the TRT High Threshold Hits 00300 // of the track 00301 std::vector<double> *m_e_TRTHits; // Number of the TRT Hits of the track 00302 std::vector<double> *m_e_ethad1; // ElectronParameters::ethad1 value 00303 std::vector<double> *m_e_Et_in_cone_0; // transverse energy in a cone of 0.20 around 00304 // the electron 00305 std::vector<double> *m_e_Et_in_cone_1; // transverse energy in a cone of 0.30 around 00306 // the electron 00307 std::vector<double> *m_e_Et_in_cone_2; // transverse energy in a cone of 0.40 around 00308 // the electron 00309 std::vector<double> *m_e_Et_in_cone_3; // transverse energy in a cone of 0.45 around 00310 // the electron 00311 std::vector<int> *m_e_vertex_index; // vertex indices 00312 std::vector<double> *m_e_track_Et_in_cone_0;// transverse energy of tracks 00313 // from the same vertex in a 00314 // cone of 0.20 around the 00315 // electron 00316 std::vector<double> *m_e_track_Et_in_cone_1;// transverse energy of tracks 00317 // from the same vertex in a 00318 // cone of 0.30 around the 00319 // electron 00320 std::vector<double> *m_e_track_Et_in_cone_2;// transverse energy of tracks 00321 // from the same vertex in a 00322 // cone of 0.40 around the 00323 // electron 00324 std::vector<double> *m_e_track_Et_in_cone_3;// transverse energy of tracks 00325 // from the same vertex in a 00326 // cone of 0.45 around the 00327 // electron 00328 std::vector<double> *m_e_trackIsolationEnergy_s;// transverse energy in a cone of 0.01 around 00329 // the electron (computed by trackIsolationTool) 00330 std::vector<double> *m_e_trackIsolationEnergy_0;// transverse energy in a cone of 0.30 around 00331 // the electron (computed by trackIsolationTool) 00332 std::vector<double> *m_e_trackIsolationEnergy_1;// transverse energy in a cone of 0.30 around 00333 // the electron (computed by trackIsolationTool) 00334 std::vector<double> *m_e_trackIsolationEnergy_2;// transverse energy in a cone of 0.30 around 00335 // the electron (computed by trackIsolationTool) 00336 std::vector<double> *m_e_trackIsolationEnergy_3;// transverse energy in a cone of 0.30 around 00337 // the electron (computed by trackIsolationTool) 00338 00339 std::vector<double> *m_e_track_d0; //d0 of the matching track 00340 std::vector<double> *m_e_track_d0err; //error of the d0 of the matching track 00341 00342 // photon data // /////////////////////////////////////////////////////////////////////////////// 00343 Int_t m_nb_rec_photons; // number of photons in the event 00344 std::vector<double> *m_p_calo_p_x; // calo px 00345 std::vector<double> *m_p_calo_p_y; // calo py 00346 std::vector<double> *m_p_calo_p_z; // calo pz 00347 std::vector<double> *m_p_calo_E; // calo E 00348 std::vector<double> *m_p_charge; // charge 00349 std::vector<double> *m_p_isEM; // isEM parameter 00350 std::vector<double> *m_p_NeuralNet; // NeuralNet parameter 00351 std::vector<int> *m_p_egamma_flag; // m_egamma_flags of the electrons: 00352 // m_egamma_flag = 1, if author==1, a track is 00353 // associated with the electron, and isEM%16==0 00354 std::vector<double> *m_p_Et_in_cone_0; // transverse energy in a cone of 0.20 around 00355 // the electron 00356 std::vector<double> *m_p_Et_in_cone_1; // transverse energy in a cone of 0.30 around 00357 // the electron 00358 std::vector<double> *m_p_Et_in_cone_2; // transverse energy in a cone of 0.40 around 00359 // the electron 00360 std::vector<double> *m_p_Et_in_cone_3; // transverse energy in a cone of 0.45 around 00361 // the electron 00362 00363 00364 // muon data // ///////////////////////////////////////////////////////////////////////////////// 00365 Int_t m_nb_rec_muons; // number of muons in the event 00366 std::vector<int> *m_mu_alg_flag; // muon reco algorithm 00367 std::vector<double> *m_mu_p_x; // px 00368 std::vector<double> *m_mu_p_y; // py 00369 std::vector<double> *m_mu_p_z; // pz 00370 std::vector<double> *m_mu_E; // E 00371 std::vector<double> *m_mu_charge; // charge 00372 std::vector<double> *m_mu_fitChi2; // chi2 of the track fit 00373 std::vector<int> *m_mu_fitNumberDoF; // chi2 over number of DoF of the track fit 00374 std::vector<double> *m_mu_fitChi2OverDoF; // number of DoF of the track fit 00375 std::vector<double> *m_mu_matchChi2; // chi2 of the track match 00376 std::vector<int> *m_mu_matchNumberDoF; // chi2 over number of DoF of the track match 00377 std::vector<double> *m_mu_matchChi2OverDoF; // number of DoF of the track match 00378 std::vector<int> *m_mu_flag; // reconstruction flags; 00379 // flag value = -1: combined muon (not best match), 00380 // flag value = 1: combined muon (best match), 00381 // flag value = 2: stand-alon muon, 00382 // flag value = 3: low momentum muon, 00383 // flag value = 0: none of the upper 00384 std::vector<int> *m_mu_author; 00385 std::vector<int> *m_mu_bestmatch; 00386 std::vector<int> *m_mu_hasCombinedMuonTrackParticle; 00387 // Do not know what it is but used in Soshis analysis 00388 00389 std::vector<double> *m_mu_Et_in_cone_0; // transverse energy in a cone of 0.1 around 00390 // the muon 00391 std::vector<double> *m_mu_Et_in_cone_1; // transverse energy in a cone of 0.2 around 00392 // the muon 00393 std::vector<double> *m_mu_Et_in_cone_2; // transverse energy in a cone of 0.3 around 00394 // the muon 00395 std::vector<double> *m_mu_Et_in_cone_3; // transverse energy in a cone of 0.4 around 00396 // the muon 00397 std::vector<double> *m_mu_Et_in_cone_4; // transverse energy in a cone of 0.45 around 00398 // the muon 00399 std::vector<double> *m_mu_Et_in_cone_5; // transverse energy in a cone of 0.5 around 00400 // the muon 00401 std::vector<double> *m_mu_Et_in_cone_6; // transverse energy in a cone of 0.6 around 00402 // the muon 00403 std::vector<double> *m_mu_Et_in_cone_7; // transverse energy in a cone of 0.7 around 00404 // the muon 00405 std::vector<double> *m_mu_trackIsolationEnergy_s;// transverse energy in a cone of 0.01 around 00406 // the muon (computed by trackIsolationTool) 00407 std::vector<double> *m_mu_trackIsolationEnergy_0;// transverse energy in a cone of 0.1 around 00408 // the muon (computed by trackIsolationTool) 00409 std::vector<double> *m_mu_trackIsolationEnergy_1;// transverse energy in a cone of 0.2 around 00410 // the muon (computed by trackIsolationTool) 00411 std::vector<double> *m_mu_trackIsolationEnergy_2;// transverse energy in a cone of 0.3 around 00412 // the muon (computed by trackIsolationTool) 00413 std::vector<double> *m_mu_trackIsolationEnergy_3;// transverse energy in a cone of 0.4 around 00414 // the muon (computed by trackIsolationTool) 00415 std::vector<double> *m_mu_trackIsolationEnergy_4;// transverse energy in a cone of 0.45 around 00416 // the muon (computed by trackIsolationTool) 00417 std::vector<double> *m_mu_trackIsolationEnergy_5;// transverse energy in a cone of 0.5 around 00418 // the muon (computed by trackIsolationTool) 00419 std::vector<double> *m_mu_trackIsolationEnergy_6;// transverse energy in a cone of 0.6 around 00420 // the muon (computed by trackIsolationTool) 00421 std::vector<double> *m_mu_trackIsolationEnergy_7;// transverse energy in a cone of 0.7 around 00422 // the muon (computed by trackIsolationTool) 00423 std::vector<int> *m_mu_nb_tracks_cone_0; // number of tracks in a cone of 0.1 00424 std::vector<int> *m_mu_nb_tracks_cone_1; // number of tracks in a cone of 0.2 00425 std::vector<int> *m_mu_nb_tracks_cone_2; // number of tracks in a cone of 0.3 00426 std::vector<int> *m_mu_nb_tracks_cone_3; // number of tracks in a cone of 0.4 00427 std::vector<int> *m_mu_nb_tracks_cone_4; // number of tracks in a cone of 0.45 00428 std::vector<int> *m_mu_nb_tracks_cone_5; // number of tracks in a cone of 0.5 00429 std::vector<int> *m_mu_nb_tracks_cone_6; // number of tracks in a cone of 0.6 00430 std::vector<int> *m_mu_nb_tracks_cone_7; // number of tracks in a cone of 0.7 00431 std::vector<int> *m_mu_vertex_index; // vertex indices 00432 std::vector<double> *m_mu_track_Et_in_cone_0; // transverse energy of 00433 // tracks from the same 00434 // vertex in a cone of 00435 // 0.1 around the muon 00436 std::vector<double> *m_mu_track_Et_in_cone_1; // transverse energy of 00437 // tracks from the same 00438 // vertex in a cone of 00439 // 0.2 around the muon 00440 std::vector<double> *m_mu_track_Et_in_cone_2; // transverse energy of 00441 // tracks from the same 00442 // vertex in a cone of 00443 // 0.3 around the muon 00444 std::vector<double> *m_mu_track_Et_in_cone_3; // transverse energy of 00445 // tracks from the same 00446 // vertex in a cone of 00447 // 0.4 around the muon 00448 std::vector<double> *m_mu_track_Et_in_cone_4; // transverse energy of 00449 // tracks from the same 00450 // vertex in a cone of 00451 // 0.45 around the muon 00452 std::vector<double> *m_mu_track_Et_in_cone_5; // transverse energy of 00453 // tracks from the same 00454 // vertex in a cone of 00455 // 0.5 around the muon 00456 std::vector<double> *m_mu_track_Et_in_cone_6; // transverse energy of 00457 // tracks from the same 00458 // vertex in a cone of 00459 // 0.6 around the muon 00460 std::vector<double> *m_mu_track_Et_in_cone_7; // transverse energy of 00461 // tracks from the same 00462 // vertex in a cone of 00463 // 0.7 around the muon 00464 00465 std::vector<double> *m_mu_track_d0; //d0 of the matching track 00466 std::vector<double> *m_mu_track_d0err; //error of the d0 of the matching track 00467 00468 // jet data // ////////////////////////////////////////////////////////////////////////////////// 00469 Int_t m_nb_rec_jets; // number of jets in the event 00470 std::vector<double> *m_jet_p_x; // px 00471 std::vector<double> *m_jet_p_y; // py 00472 std::vector<double> *m_jet_p_z; // pz 00473 std::vector<double> *m_jet_E; // E 00474 std::vector<int> *m_jet_flag; // jet-reconstruction flags: 00475 // flag value = 0: unknown algorithm, 00476 // flag_value = 1: cone-4 algorithm, 00477 // flag_value = 2: cone-7 algorithm, 00478 // flag_value = 3: kt algorithm 00479 std::vector<double> *m_jet_btag_weight; // b-tag weight 00480 std::vector<int> *m_jet_truthflavor; // flavor of matching truth jet 00481 // flav = 5: b-jet 00482 // flav = 4: c-jet 00483 // flav = 15: tau 00484 // flav = 0: N/A 00485 // flav = -1: all others 00486 std::vector<int> *m_jet_nb_tracks; // number of tracks in the jet 00487 std::vector<double> *m_jet_tracks_charge; // charge of track 00488 std::vector<double> *m_jet_tracks_p_x; // px of track 00489 std::vector<double> *m_jet_tracks_p_y; // py of track 00490 std::vector<double> *m_jet_tracks_p_z; // pz of track 00491 std::vector<double> *m_jet_tracks_E; // E of track 00492 std::vector<int> *m_jet_tracks_vertex_index; // vertex index of track 00493 00494 // taujet data // //////////////////////////////////////////////////////////////////////////////// 00495 Int_t m_nb_tau_jets; // number of jets in the event 00496 std::vector<double> *m_taujet_p_x; // px 00497 std::vector<double> *m_taujet_p_y; // py 00498 std::vector<double> *m_taujet_p_z; // pz 00499 std::vector<double> *m_taujet_E; // E 00500 std::vector<int> *m_taujet_flag; // taujet-reconstruction flags: 00501 // flag value = 0: unknown algorithm, 00502 // flag_value = 1: cone-4 algorithm, 00503 // flag_value = 2: cone-7 algorithm, 00504 // flag_value = 3: kt algorithm 00505 // (??) i'm not sure whether the flags have the same meaning here as for the ParticleJet (??) 00506 std::vector<double> *m_taujet_charge; // taujet charge 00507 00508 //TauRec Parameters 00509 std::vector<double> *m_taujet_etHadCalib; // gives the calibrated HAD transverse energy, 00510 // HAD is fudge*(cryo + EM3 + TILE1 + TILE2 + TILE3) 00511 std::vector<double> *m_taujet_etEMCalib; // gives the calibrated EM transverse energy, 00512 // EM is Presampler + EM1 + EM2 00513 std::vector<double> *m_taujet_emRadius; 00514 std::vector<double> *m_taujet_isolationFraction; 00515 std::vector<double> *m_taujet_centralityFraction; 00516 std::vector<double> *m_taujet_stripWidth2; 00517 std::vector<double> *m_taujet_nStripCells; 00518 std::vector<double> *m_taujet_llh; 00519 std::vector<double> *m_taujet_lowPtTauEleDiscriminant; 00520 std::vector<double> *m_taujet_tauENeuralNetwork; 00521 std::vector<double> *m_taujet_tauJetNeuralnetwork; 00522 00523 std::vector<int> *m_taujet_nb_tracks; // gives number of tracks from the tau decay 00524 std::vector<double> *m_taujet_track_px_1; // px first track 00525 std::vector<double> *m_taujet_track_py_1; // py first track 00526 std::vector<double> *m_taujet_track_pz_1; // pz first track 00527 std::vector<double> *m_taujet_track_e_1; // energy first track 00528 std::vector<int> *m_taujet_track_TRTHighThresholdHits_1; // 00529 std::vector<int> *m_taujet_track_TRTHits_1; // 00530 std::vector<double> *m_taujet_track_px_2; // px of second tracks 00531 std::vector<double> *m_taujet_track_py_2; // py of second tracks 00532 std::vector<double> *m_taujet_track_pz_2; // pz of second tracks 00533 std::vector<double> *m_taujet_track_e_2; // energy of second tracks 00534 std::vector<int> *m_taujet_track_TRTHighThresholdHits_2; // 00535 std::vector<int> *m_taujet_track_TRTHits_2; // 00536 std::vector<double> *m_taujet_track_px_3; // px of third track 00537 std::vector<double> *m_taujet_track_py_3; // py of third track 00538 std::vector<double> *m_taujet_track_pz_3; // pz of third track 00539 std::vector<double> *m_taujet_track_e_3; // energy of third track 00540 std::vector<int> *m_taujet_track_TRTHighThresholdHits_3; // 00541 std::vector<int> *m_taujet_track_TRTHits_3; // 00542 00543 00544 // truthjet data // ////////////////////////////////////////////////////////////////////////////// 00545 Int_t m_nb_truth_jets; // number of jets in the event 00546 std::vector<double> *m_truthjet_p_x; // px 00547 std::vector<double> *m_truthjet_p_y; // py 00548 std::vector<double> *m_truthjet_p_z; // pz 00549 std::vector<double> *m_truthjet_E; // E 00550 std::vector<int> *m_truthjet_flag; // jet-reconstruction flags: 00551 // flag value = 0: unknown algorithm, 00552 // flag_value = 1: cone-4 algorithm, 00553 // flag_value = 2: cone-7 algorithm, 00554 // flag_value = 3: kt algorithm 00555 std::vector<double> *m_truthjet_btag_weight;// b-tag weight 00556 00557 00558 00559 // missingEt data // ///////////////////////////////////////////////////////////////////////////// 00560 std::vector<std::string> *m_met_obj_name; // MET Object name 00561 std::vector<double> *m_missing_Etx; // MET x component 00562 std::vector<double> *m_missing_Ety; // MET y component 00563 std::vector<double> *m_missing_Et; // MET 00564 std::vector<double> *m_missing_Etsum; // linear (Etsum) sum of Etx, Ety 00565 00566 00567 // truth data // ///////////////////////////////////////////////////////////////////////////////// 00568 Int_t m_nb_truth_particle_all; 00569 Int_t m_nb_truth_particle; 00570 std::vector<double> *m_truth_particle_pt; 00571 std::vector<int> *m_truth_particle_status; 00572 std::vector<int> *m_truth_particle_barcode; 00573 std::vector<int> *m_truth_particle_pdgId; 00574 std::vector<int> *m_truth_particle_nDaughters; 00575 std::vector<double> *m_truth_particle_p_x; 00576 std::vector<double> *m_truth_particle_p_y; 00577 std::vector<double> *m_truth_particle_p_z; 00578 std::vector<double> *m_truth_particle_E; 00579 std::vector<double> *m_truth_particle_charge; 00580 std::vector<int> *m_truth_particle_nParents; 00581 std::vector<int> *m_truth_particle_mother0_barcode; 00582 std::vector<int> *m_truth_particle_mother0_pdgId; 00583 std::vector<int> *m_truth_particle_vertex_index; 00584 std::vector<double> *m_truth_particle_Et_in_cone_0; // ET in a cone of R=0.10 00585 std::vector<double> *m_truth_particle_Et_in_cone_1; // ET in a cone of R=0.20 00586 std::vector<double> *m_truth_particle_Et_in_cone_2; // ET in a cone of R=0.30 00587 std::vector<double> *m_truth_particle_Et_in_cone_3; // ET in a cone of R=0.40 00588 std::vector<double> *m_truth_particle_Et_in_cone_4; // ET in a cone of R=0.45 00589 00590 // vertex data // //////////////////////////////////////////////////////////// 00591 Int_t m_nb_vertices; // number of primary vertices 00592 std::vector<double> *m_vertex_position_x; // global x of vertices 00593 std::vector<double> *m_vertex_position_y; // global y of vertices 00594 std::vector<double> *m_vertex_position_z; // global z of vertices 00595 std::vector<double> *m_vertex_pos_error_x; // errors of global x of vertices 00596 std::vector<double> *m_vertex_pos_error_y; // errors of global y of vertices 00597 std::vector<double> *m_vertex_pos_error_z; // errors of global z of vertices 00598 std::vector<double> *m_vertex_chi2; // chi^2 of vertex fits 00599 std::vector<int> *m_vertex_ndof; // number of degrees of freedom 00600 std::vector<double> *m_vertex_Et; // transverse momentum of the vertex 00601 std::vector<int> *m_vertex_nb_tracks; // number of tracks emerging 00602 // from the vertices 00603 00604 // truth vertex data // ////////////////////////////////////////////////////// 00605 Int_t m_nb_truth_vertices; // number of primary vertices 00606 std::vector<double> *m_truth_vertex_position_x; // global x of vertices 00607 std::vector<double> *m_truth_vertex_position_y; // global y of vertices 00608 std::vector<double> *m_truth_vertex_position_z; // global z of vertices 00609 std::vector<double> *m_truth_vertex_Et; // transverse momentum of the vertex 00610 std::vector<int> *m_truth_vertex_nb_tracks; // number of tracks emerging 00611 // from the vertices 00612 00613 // track-jet data // ///////////////////////////////////////////////////////////////////////////// 00614 Int_t m_nb_track_jets; // number of track-jets in 00615 // the event 00616 std::vector<double> *m_track_jet_p_x; // track-jet px 00617 std::vector<double> *m_track_jet_p_y; // track-jet py 00618 std::vector<double> *m_track_jet_p_z; // track-jet pz 00619 std::vector<double> *m_track_jet_E; // track-jet energy 00620 00621 // truth track-jet data // /////////////////////////////////////////////////////////////////////// 00622 Int_t m_nb_truth_track_jets; // number of truth 00623 // track-jets in the event 00624 std::vector<double> *m_truth_track_jet_p_x; // track-jet px 00625 std::vector<double> *m_truth_track_jet_p_y; // track-jet py 00626 std::vector<double> *m_truth_track_jet_p_z; // track-jet pz 00627 std::vector<double> *m_truth_track_jet_E; // track-jet energy 00628 00629 00630 // event weight for mc@nlo 00631 Double_t m_event_weight; 00632 00633 00634 // private routines // 00635 bool get_trigger_data(void); // method to fill the data of 00636 // the tigger (L1,L2,EF) into the AAN; 00637 // returns true in case of success 00638 bool get_trigger_muon_lvl1_data(void);// method to fill the data of 00639 // the lvl1 trigger into the AAN; 00640 // returns true in case of success 00641 bool get_trigger_muon_lvl2_data(void);// method to fill the data of 00642 // the LVL2 (CombinedMuonFeature) 00643 // trigger into the AAN; 00644 // returns true in case of success 00645 bool get_trigger_muon_ef_data(void); // method to fill the data of 00646 // the muon EF trigger 00647 // into the AAN; 00648 // returns true in case of success 00649 bool get_trigger_met_data(void); // method to fill the data of 00650 // the met trigger into the AAN; 00651 // returns true in case of success 00652 bool get_photon_data(void); // method to fill the data of 00653 // reconstructed photons into the AAN; 00654 // returns true in case of success 00655 bool get_trackparticle_data(void); // method to fill the data of 00656 // the track particles into the AAN; 00657 // returns true in case of success 00658 bool get_electron_data(void); // method to fill the data of 00659 // reconstructed electrons into the AAN; 00660 // returns true in case of success 00661 bool get_muon_data(void); // method to fill the data of reconstructed 00662 // muons into the AAN; 00663 // returns true in case of success 00664 bool get_jet_data(void); // method to fill the data of reconstructed 00665 // jets into the AAN; 00666 // returns true in case of success 00667 bool get_taujet_data(void); // method to fill the data of reconstructed 00668 // tau jets into the AAN; 00669 // returns true in case of success 00670 bool get_truthjet_data(void); // method to fill the data of truth 00671 // jets into the AAN; 00672 // returns true in case of success 00673 bool get_missingEt_data(void); // method to fill the data of 00674 // missing Et into the AAN; 00675 // returns true in case of success 00676 bool get_truthmissingEt_data(void); // method to fill the data of 00677 // truth missing Et into the AAN; 00678 // returns true in case of success 00679 bool get_truthparticle_data(void); // method to fill the data of 00680 // truth particles into the AAN; 00681 // returns true in case of success 00682 void fill_truthparticle_data(const TruthParticle *m_TruthParticle); 00683 // method to fill the data of 00684 // truth particles into the AAN; 00685 // returns true in case of success 00686 00687 bool get_eventweight_data(void); // method to fill event weight data 00688 00689 bool get_vertex_data(void); // get the primary vertices; returns true in 00690 // case of success 00691 bool get_truth_vertex_data(void); // get the truth vertices; 00692 // returns true in case of success 00693 00694 bool get_track_jet_data(void); // method to fill the data of reconstructed 00695 // track jets into the AAN; 00696 // returns true in case of success 00697 bool get_truth_track_jet_data(void); // method to fill the data of truth 00698 // track jets into the AAN; 00699 00700 int find_vertex(const Trk::RecVertex * vertex) const; 00701 // get the index of the vertex 00702 int find_truth_vertex(const HepMC::GenVertex * vertex) const; 00703 // get the index of the truth vertex 00704 00705 double get_energy_in_cone(const double & cone, 00706 const HepLorentzVector & p, 00707 const Hep3Vector & vertex); 00708 // get the energy of particle emerging 00709 // from the vertex "vertex" in a cone 00710 // of "cone" in delta R of p 00711 00712 00713 00714 }; 00715 00716 #endif