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