NtupleWriter14/src/AANtupleWriter14.cxx

00001 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00002 // 30.01.2007, AUTHOR: OLIVER KORTNER, STEFFEN KAISER, MANFRED GROH, THIES EHRICH
00003 // 07/2008, modified by T. Ehrich to be compatible with release 14
00004 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00005 
00006 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00007 //:: IMPLEMENTATION OF METHODS DEFINED IN THE CLASS AANtupleWriter14 ::
00008 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00009 
00010 //::::::::::::::::::
00011 //:: HEADER FILES ::
00012 //::::::::::::::::::
00013 
00014 // ROOT //
00015 #include "TLorentzVector.h"
00016 
00017 // Gaudi //
00018 #include "GaudiKernel/AlgFactory.h"
00019 #include "GaudiKernel/IToolSvc.h"
00020 
00021 // ATHENA //
00022 #include "egammaEvent/PhotonContainer.h"
00023 #include "egammaEvent/ElectronContainer.h"
00024 #include "egammaEvent/egammaParamDefs.h"
00025 #include "muonEvent/MuonContainer.h"
00026 //#include "JetTagEvent/ParticleJetContainer.h"
00027 #include "JetEvent/JetCollection.h"
00028 #include "tauEvent/TauJetContainer.h"
00029 #include "MissingETEvent/MissingET.h"
00030 #include "TrigSteeringEvent/TriggerDecision.h"
00031 #include "AnalysisTriggerEvent/LVL1_ROI.h"
00032 #include "TrigCaloEvent/TrigMissingET.h"
00033 #include "TrigMuonEvent/CombinedMuonFeature.h"
00034 #include "TrigMuonEvent/TrigMuonEFContainer.h"
00035 
00036 #include "egammaEvent/EMShower.h"
00037 #include "egammaEvent/EMTrackMatch.h"
00038 #include "tauEvent/TauRecDetails.h"
00039 #include "tauEvent/Tau1P3PDetails.h"
00040 
00041 // track jets //
00042 #include "VxVertex/VxContainer.h"
00043 #include "Particle/TrackParticleContainer.h"
00044 //#include "JetSimTools/MyTruthTrackJetInfoContainer.h"
00045 //#include "NtupleWriter14/MyTruthTrackJetInfoContainer.h"
00046 
00047 // jets //
00048 #include "JetUtils/JetCollectionHelper.h"
00049 
00050 // TruthJetInfo //
00051 #include "JetTagInfo/TruthInfo.h"
00052 #include "JetTagEvent/TrackConstituents.h"
00053 #include "JetTagEvent/TrackAssociation.h"
00054 
00055 // class header //
00056 #include "NtupleWriter14/AANtupleWriter14.h"
00057 
00058 //::::::::::::::::::::::::
00059 //:: NAMESPACE SETTINGS ::
00060 //::::::::::::::::::::::::
00061 
00062 using namespace std;
00063 
00064 //*****************************************************************************
00065 
00066   //:::::::::::::::::
00067   //:: CONSTRUCTOR ::
00068   //:::::::::::::::::
00069 
00070 AANtupleWriter14::AANtupleWriter14(const std::string & name,
00071                                                      ISvcLocator * pSvcLocator) : 
00072     CBNT_AthenaAwareBase(name, pSvcLocator),m_trigDec("TrigDec::TrigDecisionTool") {
00073     
00074     // job options and their defaults //
00075     m_electron_container = string("AtlfastElectronCollection");
00076     declareProperty("electronContainer", m_electron_container);
00077     
00078     //m_trigDec("TrigDec::TrigDecisionTool");
00079     declareProperty("TrigDecisionTool", m_trigDec, "The tool to access TrigDecision");
00080     
00081     m_trigger_decision_container = string("MyTriggerDecision");
00082     declareProperty("triggerDecisionContainer", m_trigger_decision_container);
00083     
00084     m_trigger_mu_lvl1_container = string("LVL1_ROI");
00085     declareProperty("triggerMuonLVL1Container", m_trigger_mu_lvl1_container);
00086     
00087     m_trigger_mu_lvl2_container = string("CombinedMuonFeature");
00088     declareProperty("triggerMuonLVL2Container", m_trigger_mu_lvl2_container);
00089 
00090     m_trigger_mu_ef_container = string("TrigMuonEFContainer");
00091     declareProperty("triggerMuonEFContainer", m_trigger_mu_ef_container);
00092     
00093     m_trigger_met_container = string("TrigMissingET");
00094     declareProperty("triggerMissingEtContainer", m_trigger_met_container);
00095     
00096     m_photon_container = string("AtlfastPhotonCollection");
00097     declareProperty("photonContainer", m_photon_container);
00098         
00099     //m_muon_container = string("AtlfastMuonCollection");
00100     m_muon_container = vector<string>(1,"AtlfastMuonCollection");
00101     declareProperty("muonContainer", m_muon_container);
00102 
00103     m_jet_container = string("AtlfastParticleJetContainer");
00104     declareProperty("jetContainer", m_jet_container);
00105 
00106     m_taujet_container = string("AtlfastTauJetContainer");
00107     declareProperty("taujetContainer", m_taujet_container);
00108 
00109     m_truthjet_container = string("ConeTruthParticleJets");
00110     declareProperty("truthjetContainer", m_truthjet_container);
00111 
00112     m_truthmissingEt_container = string("MET_Truth");
00113     declareProperty("truthmissingEtContainer", m_truthmissingEt_container);
00114 
00115     m_truthparticle_container = string("SpclMC");
00116     declareProperty("truthparticleContainer", m_truthparticle_container);
00117 
00118     m_AtlFastFlag = false;
00119     declareProperty("AtlFastFlag", m_AtlFastFlag);
00120         
00121     m_doAODFix1mm = false;
00122     declareProperty("doAODFix1mm", m_doAODFix1mm);
00123         
00124     m_doEventWeight = true;
00125     declareProperty("doEventWeight", m_doEventWeight);
00126 
00127     m_truthparticleMaximumLeptonBarcode = 100000;
00128     declareProperty("truthparticleMaximumLeptonBarcode", m_truthparticleMaximumLeptonBarcode);
00129         
00130     m_truthparticleNoPDGAbove100 = false;
00131     declareProperty("truthparticleNoPDGAbove100", m_truthparticleNoPDGAbove100);
00132 
00133     m_vert_coll_svc_name = string("MPIHiggsAnalysis::VertexCollectionSvc");
00134     declareProperty("VertexCollectionSvc", m_vert_coll_svc_name);
00135 
00136     m_track_jet_container = string("Cone4TrackJets");
00137     declareProperty("jetTrackContainer", m_track_jet_container);
00138 
00139     m_truth_track_jet_container = string("Cone4TruthTrackJets");
00140     declareProperty("jetTruthTrackContainer", m_truth_track_jet_container);
00141 
00142     m_track_particle_container = string("TrackParticleCandidate");
00143     declareProperty("TrackParticleContainer", m_track_particle_container);
00144 
00145     m_showerContainerName = string("egDetailAOD");
00146     declareProperty("EMShowerContainer", m_showerContainerName);
00147 
00148     m_trackMatchContainerName = string("egDetailAOD");
00149     declareProperty("EMTrackMatchContainerName", m_trackMatchContainerName);
00150 
00151     m_tauDetailsContainerName = string("TauRecDetailsContainer");
00152     declareProperty("tauDetailsContainer", m_tauDetailsContainerName);
00153 
00154 
00155     m_doTrigger        = true;
00156     declareProperty("doTrigger",   m_doTrigger);
00157     m_doMissingEt      = true;
00158     declareProperty("doMissingEt", m_doMissingEt);
00159     m_doTrackParticles      = false;
00160     declareProperty("doTrackParticles", m_doTrackParticles);
00161     m_doElectrons      = true;
00162     declareProperty("doElectrons", m_doElectrons);
00163     m_doPhotons        = true;
00164     declareProperty("doPhotons",   m_doPhotons);
00165     m_doMuons          = true;
00166     declareProperty("doMuons",     m_doMuons);
00167     m_doJets           = true;
00168     declareProperty("doJets",      m_doJets);
00169     m_doTauJets        = true;
00170     declareProperty("doTauJets",   m_doTauJets);
00171     m_doTruthJets      = true;
00172     declareProperty("doTruthJets", m_doTruthJets);
00173     m_doTruthParticles = true;
00174     declareProperty("doTruthParticles", m_doTruthParticles);
00175     m_doTrackJets      = false;
00176     declareProperty("doTrackJets", m_doTrackJets);
00177     m_doVertices       = false;
00178     declareProperty("doVertices",  m_doVertices);
00179 
00180     //file info
00181     declareProperty("release",    m_release="");
00182     declareProperty("svnversion", m_svnversion="");
00183     declareProperty("date",       m_date="");
00184 
00185     // get the AOD-filenames as a vector of strings
00186     // extra job option that is set like:
00187     // AANtupleWriter14.AOD_files = EventSelector.InputCollections
00188     declareProperty("AOD_files", v_string_aod_files);
00189     
00190     
00191     declareProperty("missingEtContainerCollection", v_string_met_container);
00192         
00193     // set pointers to 0 //
00194 
00195     m_storeGate = NULL;
00196     m_log       = NULL;
00197     m_vert_coll = NULL;
00198     m_toolSvc = NULL;
00199     tmp_trackIsolationTool = NULL;
00200     m_trackIsolationTool = NULL;
00201 
00202     // trigger decision data //
00203     m_trigger_keys_l1 = static_cast< vector<std::string> *>(0);
00204     m_trigger_keys_status_l1 = NULL;
00205     m_trigger_keys_prescale_l1 = NULL;
00206     m_trigger_keys_l2 = static_cast< vector<std::string> *>(0);
00207     m_trigger_keys_status_l2 = NULL;
00208     m_trigger_keys_prescale_l2 = NULL;
00209     m_trigger_keys_ef = static_cast< vector<std::string> *>(0);
00210     m_trigger_keys_status_ef = NULL;
00211     m_trigger_keys_prescale_ef = NULL;
00212 
00213     // muon trigger LVL1 data //
00214     m_trigger_mu_lvl1_eta       = NULL;
00215     m_trigger_mu_lvl1_phi       = NULL;
00216     m_trigger_mu_lvl1_threshold_value = NULL;
00217     m_trigger_mu_lvl1_threshold_name  = NULL;
00218     m_trigger_mu_lvl1_threshold_number= NULL;
00219     m_trigger_mu_lvl1_roiword   = NULL;
00220     
00221     // muon trigger LVL2 data //
00222     m_trigger_mu_lvl2_eta       = NULL;
00223     m_trigger_mu_lvl2_phi       = NULL;
00224     m_trigger_mu_lvl2_pt        = NULL;
00225     m_trigger_mu_lvl2_sigma_pt  = NULL;
00226     
00227     // muon trigger EF data //
00228     m_trigger_mu_ef_eta         = NULL;
00229     m_trigger_mu_ef_phi         = NULL;
00230     m_trigger_mu_ef_pt          = NULL;
00231     m_trigger_mu_ef_charge1     = NULL;
00232     m_trigger_mu_ef_charge2     = NULL;
00233     m_trigger_mu_ef_code        = NULL;
00234 
00235     // track data //
00236     m_track_p_x                 = NULL;
00237     m_track_p_y                 = NULL;
00238     m_track_p_z                 = NULL;
00239     m_track_E                   = NULL;
00240     m_track_charge              = NULL;
00241     m_track_vertex_index        = NULL;
00242     m_track_SCThit              = NULL;
00243     m_track_Phit                = NULL;
00244     m_track_BLayerhit           = NULL;
00245     m_track_TRThit              = NULL;
00246     m_track_MDThit              = NULL;
00247     m_track_CSChit_eta          = NULL;
00248     m_track_TGChit_eta          = NULL;
00249     m_track_RPChit_eta          = NULL;
00250     m_track_CSChit_phi          = NULL;
00251     m_track_TGChit_phi          = NULL;
00252     m_track_RPChit_phi          = NULL;
00253     m_track_d0                  = NULL;
00254     m_track_z0                  = NULL;
00255     m_track_chi2                = NULL;
00256     m_track_nDoF                = NULL;
00257     m_track_trackIsolationEnergy_s = NULL;
00258     m_track_trackIsolationEnergy_0 = NULL;
00259     m_track_trackIsolationEnergy_1 = NULL;
00260     m_track_trackIsolationEnergy_2 = NULL;
00261     m_track_trackIsolationEnergy_3 = NULL;
00262 
00263 
00264 
00265     // electron data //
00266     m_e_p_x                         = NULL;
00267     m_e_p_y                         = NULL;
00268     m_e_p_z                         = NULL;
00269     m_e_E                           = NULL;
00270     m_e_calo_p_x                    = NULL;
00271     m_e_calo_p_y                    = NULL;
00272     m_e_calo_p_z                    = NULL;
00273     m_e_calo_E                      = NULL;
00274     m_e_charge                      = NULL;
00275     m_e_isEM                        = NULL;
00276     m_e_id_flag                     = NULL;
00277     m_e_NeuralNet                   = NULL;
00278     m_e_egamma_flag                 = NULL;
00279     m_e_softe_flag                  = NULL;
00280     m_e_E_over_p                    = NULL;
00281     m_e_TRTHighThresholdHits        = NULL;
00282     m_e_TRTHits                     = NULL;
00283     m_e_ethad1                      = NULL;
00284     m_e_Et_in_cone_0                = NULL;
00285     m_e_Et_in_cone_1                = NULL;
00286     m_e_Et_in_cone_2                = NULL;
00287     m_e_Et_in_cone_3                = NULL;
00288     m_e_vertex_index                = NULL;
00289     m_e_track_Et_in_cone_0          = NULL;
00290     m_e_track_Et_in_cone_1          = NULL;
00291     m_e_track_Et_in_cone_2          = NULL;
00292     m_e_track_Et_in_cone_3          = NULL;
00293     m_e_trackIsolationEnergy_0      = NULL;
00294     m_e_trackIsolationEnergy_1      = NULL;
00295     m_e_trackIsolationEnergy_2      = NULL;
00296     m_e_trackIsolationEnergy_3      = NULL;
00297 
00298     // photon data //
00299     m_p_calo_p_x                    = NULL;
00300     m_p_calo_p_y                    = NULL;
00301     m_p_calo_p_z                    = NULL;
00302     m_p_calo_E                      = NULL;
00303     m_p_charge                      = NULL;
00304     m_p_isEM                        = NULL;
00305     m_p_NeuralNet                   = NULL;
00306     m_p_egamma_flag                 = NULL;
00307     m_p_Et_in_cone_0                = NULL;
00308     m_p_Et_in_cone_1                = NULL;
00309     m_p_Et_in_cone_2                = NULL;
00310     m_p_Et_in_cone_3                = NULL;
00311 
00312 
00313 
00314     // muon data //
00315     m_mu_alg_flag                   = NULL;
00316     m_mu_p_x                        = NULL;
00317     m_mu_p_y                        = NULL;
00318     m_mu_p_z                        = NULL;
00319     m_mu_E                          = NULL;
00320     m_mu_p_x_standalone             = NULL;
00321     m_mu_p_y_standalone             = NULL;
00322     m_mu_p_z_standalone             = NULL;
00323     m_mu_E_standalone               = NULL;
00324     m_mu_p_x_ID                     = NULL;
00325     m_mu_p_y_ID                     = NULL;
00326     m_mu_p_z_ID                     = NULL;
00327     m_mu_E_ID                       = NULL;
00328     m_mu_charge                     = NULL;
00329     m_mu_fitChi2                    = NULL;
00330     m_mu_fitNumberDoF               = NULL;
00331     m_mu_fitChi2OverDoF             = NULL;
00332     m_mu_matchChi2                  = NULL;
00333     m_mu_matchNumberDoF             = NULL;
00334     m_mu_matchChi2OverDoF           = NULL;
00335     m_mu_flag                       = NULL;
00336     m_mu_Et_in_cone_0               = NULL;
00337     m_mu_Et_in_cone_1               = NULL;
00338     m_mu_Et_in_cone_2               = NULL;
00339     m_mu_Et_in_cone_3               = NULL;
00340     m_mu_Et_in_cone_4               = NULL;
00341     m_mu_Et_in_cone_5               = NULL;
00342     m_mu_Et_in_cone_6               = NULL;
00343     m_mu_Et_in_cone_7               = NULL;
00344     m_mu_nb_tracks_cone_0           = NULL;
00345     m_mu_nb_tracks_cone_1           = NULL;
00346     m_mu_nb_tracks_cone_2           = NULL;
00347     m_mu_nb_tracks_cone_3           = NULL;
00348     m_mu_nb_tracks_cone_4           = NULL;
00349     m_mu_nb_tracks_cone_5           = NULL;
00350     m_mu_nb_tracks_cone_6           = NULL;
00351     m_mu_nb_tracks_cone_7           = NULL;
00352     m_mu_vertex_index               = NULL;
00353     m_mu_track_Et_in_cone_0         = NULL;
00354     m_mu_track_Et_in_cone_1         = NULL;
00355     m_mu_track_Et_in_cone_2         = NULL;
00356     m_mu_track_Et_in_cone_3         = NULL;
00357     m_mu_track_Et_in_cone_4         = NULL;
00358     m_mu_track_Et_in_cone_5         = NULL;
00359     m_mu_track_Et_in_cone_6         = NULL;
00360     m_mu_track_Et_in_cone_7         = NULL;
00361     m_mu_trackIsolationEnergy_0      = NULL;
00362     m_mu_trackIsolationEnergy_1      = NULL;
00363     m_mu_trackIsolationEnergy_2      = NULL;
00364     m_mu_trackIsolationEnergy_3      = NULL;
00365     m_mu_trackIsolationEnergy_4      = NULL;
00366     m_mu_trackIsolationEnergy_5      = NULL;
00367     m_mu_trackIsolationEnergy_6      = NULL;
00368     m_mu_trackIsolationEnergy_7      = NULL;
00369 
00370     // jet data //
00371     m_jet_p_x                       = NULL;
00372     m_jet_p_y                       = NULL;
00373     m_jet_p_z                       = NULL;
00374     m_jet_E                         = NULL;
00375     m_jet_flag                      = NULL;
00376     m_jet_btag_weight               = NULL;
00377     m_jet_truthflavor               = NULL;
00378     m_jet_nb_tracks                 = NULL;
00379     m_jet_tracks_charge             = NULL;
00380     m_jet_tracks_p_x                = NULL;
00381     m_jet_tracks_p_y                = NULL;
00382     m_jet_tracks_p_z                = NULL;
00383     m_jet_tracks_E                  = NULL;
00384 
00385     // taujet data //
00386     m_taujet_p_x                    = NULL;
00387     m_taujet_p_y                    = NULL;
00388     m_taujet_p_z                    = NULL;
00389     m_taujet_E                      = NULL;
00390     m_taujet_flag                   = NULL;
00391     m_taujet_charge                 = NULL;
00392     m_taujet_etHadCalib             = NULL;
00393     m_taujet_etEMCalib              = NULL;
00394     m_taujet_emRadius               = NULL;
00395     m_taujet_isolationFraction      = NULL;
00396     m_taujet_centralityFraction     = NULL;
00397     m_taujet_stripWidth2            = NULL;
00398     m_taujet_nStripCells            = NULL;
00399     m_taujet_leadingTrackPT         = NULL;
00400     m_taujet_trFlightPathSig        = NULL;
00401     m_taujet_etOverPtLeadTrack      = NULL;
00402     m_taujet_ipSigLeadTrack         = NULL;
00403     m_taujet_etChrgHAD              = NULL;
00404     m_taujet_etIsolEM               = NULL;
00405     m_taujet_etIsolHAD              = NULL;
00406     m_taujet_nAssocTracksCore       = NULL;
00407     m_taujet_nAssocTracksIsol       = NULL;
00408     m_taujet_massTrk3P              = NULL;
00409     m_taujet_rWidth2Trk3P           = NULL;
00410     m_taujet_signD0Trk3P            = NULL;
00411     m_taujet_etHadAtEMScale         = NULL;
00412     m_taujet_etEMAtEMScale          = NULL;
00413     m_taujet_etEMCL                 = NULL;
00414     m_taujet_etChrgEM               = NULL;
00415     m_taujet_etNeuEM                = NULL;
00416     m_taujet_etResNeuEM             = NULL;
00417     m_taujet_llh                    = NULL;
00418     m_taujet_discNN                 = NULL;
00419     m_taujet_discPDERS              = NULL;
00420     m_taujet_lowPtTauJetDiscriminant= NULL;
00421     m_taujet_lowPtTauEleDiscriminant= NULL;
00422     m_taujet_tauJetNeuralnetwork    = NULL;
00423     m_taujet_tauENeuralNetwork      = NULL;
00424     m_taujet_bdtJet                 = NULL;
00425     m_taujet_bdtEle                 = NULL;
00426     m_taujet_nb_tracks              = NULL; 
00427     m_taujet_track_px_1             = NULL; 
00428     m_taujet_track_py_1             = NULL; 
00429     m_taujet_track_pz_1             = NULL; 
00430     m_taujet_track_e_1              = NULL;  
00431     m_taujet_track_TRTHighThresholdHits_1 = NULL; 
00432     m_taujet_track_TRTHits_1        = NULL; 
00433     m_taujet_track_px_2             = NULL; 
00434     m_taujet_track_py_2             = NULL; 
00435     m_taujet_track_pz_2             = NULL; 
00436     m_taujet_track_e_2              = NULL; 
00437     m_taujet_track_TRTHighThresholdHits_2 = NULL; 
00438     m_taujet_track_TRTHits_2        = NULL; 
00439     m_taujet_track_px_3             = NULL; 
00440     m_taujet_track_py_3             = NULL; 
00441     m_taujet_track_pz_3             = NULL; 
00442     m_taujet_track_e_3              = NULL; 
00443     m_taujet_track_TRTHighThresholdHits_3 = NULL; 
00444     m_taujet_track_TRTHits_3        = NULL; 
00445 
00446     // truthjet data //
00447     m_truthjet_p_x                  = NULL;
00448     m_truthjet_p_y                  = NULL;
00449     m_truthjet_p_z                  = NULL;
00450     m_truthjet_E                    = NULL;
00451     m_truthjet_flag                 = NULL;
00452     m_truthjet_btag_weight          = NULL;
00453 
00454     // truth data //
00455     m_truth_particle_pt             = NULL;
00456     m_truth_particle_status         = NULL;
00457     m_truth_particle_barcode        = NULL;
00458     m_truth_particle_pdgId          = NULL;
00459     m_truth_particle_nDaughters     = NULL;
00460     m_truth_particle_p_x            = NULL;
00461     m_truth_particle_p_y            = NULL;
00462     m_truth_particle_p_z            = NULL;
00463     m_truth_particle_E              = NULL;
00464     m_truth_particle_charge         = NULL;
00465     m_truth_particle_nParents       = NULL;
00466     m_truth_particle_mother0_barcode= NULL;
00467     m_truth_particle_mother0_pdgId  = NULL;
00468 
00469     // missing Et //
00470     m_met_obj_name                  = NULL;
00471     m_missing_Etx                   = NULL;
00472     m_missing_Ety                   = NULL;
00473     m_missing_Et                    = NULL;
00474     m_missing_Etsum                 = NULL;
00475 
00476     // vertex data //
00477     m_vertex_position_x             = NULL;
00478     m_vertex_position_y             = NULL;
00479     m_vertex_position_y             = NULL;
00480     m_vertex_pos_error_x            = NULL;
00481     m_vertex_pos_error_y            = NULL;
00482     m_vertex_pos_error_z            = NULL;
00483     m_vertex_chi2                   = NULL;
00484     m_vertex_ndof                   = NULL;
00485     m_vertex_Et                     = NULL;
00486     m_vertex_nb_tracks              = NULL;
00487 
00488     // truth vertex data //
00489     m_truth_vertex_position_x       = NULL;
00490     m_truth_vertex_position_y       = NULL;
00491     m_truth_vertex_position_y       = NULL;
00492     m_truth_vertex_Et               = NULL;
00493     m_truth_vertex_nb_tracks        = NULL;
00494 
00495     // track-jet data //
00496     m_track_jet_p_x                 = NULL;
00497     m_track_jet_p_y                 = NULL;
00498     m_track_jet_p_z                 = NULL;
00499     m_track_jet_E                   = NULL;
00500 
00501     // truth track-jet data //
00502     m_truth_track_jet_p_x           = NULL;
00503     m_truth_track_jet_p_y           = NULL;
00504     m_truth_track_jet_p_z           = NULL;
00505     m_truth_track_jet_E             = NULL;
00506 
00507     return;
00508 
00509 }
00510 
00511 //*****************************************************************************
00512 
00513   //::::::::::::::::
00514   //:: DESTRUCTOR ::
00515   //::::::::::::::::
00516 
00517 AANtupleWriter14::~AANtupleWriter14(void) {
00518 }
00519 
00520 
00521 
00527 
00528 StatusCode AANtupleWriter14::CBNT_initializeBeforeEventLoop() {
00529   MsgStream mLog( messageService(), name() );
00530 
00531   mLog << MSG::DEBUG << "Initializing AnalysisSkeleton (before eventloop)" << endreq;
00532 
00533   // retrieve trigger decision tool
00534   // needs to be done before the first run/event since a number of
00535   // BeginRun/BeginEvents are registered by dependent services
00536   StatusCode sc = m_trigDec.retrieve();
00537   if ( sc.isFailure() ){
00538     mLog << MSG::ERROR << "Can't get handle on TrigDecisionTool" << endreq;
00539   } else {
00540     mLog << MSG::DEBUG << "Got handle on TrigDecisionTool" << endreq;
00541   }
00542   return sc;
00543 }
00544 
00545 
00546 
00547 
00548 
00549 
00550 
00551 
00552 
00553 
00554 //*****************************************************************************
00555 
00556   //::::::::::::::::::::::::::::
00557   //:: METHOD CBNT_initialize ::
00558   //::::::::::::::::::::::::::::
00559 
00560 StatusCode AANtupleWriter14::CBNT_initialize(void) {
00561 
00563     // SET POINTERS //
00565 
00566     // message service //
00567     m_log = new MsgStream(messageService(), name());
00568 
00569     *m_log << MSG::INFO
00570            << "Initializing AANtupleWriter14..."
00571            << endreq;
00572 
00573     // get a pointer to the store gate //
00574     StatusCode sc = service("StoreGateSvc", m_storeGate);
00575     if (sc.isFailure()) {
00576         *m_log << MSG::ERROR
00577                << "Unable to retrieve a pointer to StoreGateSvc!"
00578                << endreq;
00579         return sc;
00580     }
00581 
00582     // VertexCollectionSvc //
00583     sc = service(m_vert_coll_svc_name, m_vert_coll);
00584     if (!sc.isSuccess()) {
00585         *m_log << MSG::FATAL << "Cannot retrieve "
00586                 << m_vert_coll_svc_name
00587                 << "!"
00588                 << endreq;
00589         return sc;
00590     }
00591     
00592     // get a pointer to the tools //
00593     sc = service("ToolSvc", m_toolSvc);
00594     if (sc.isFailure()) {
00595         *m_log << MSG::ERROR
00596                << "Unable to retrieve a pointer to ToolsSvc!"
00597                << endreq;
00598         return sc;
00599     }
00600     sc = m_toolSvc->retrieveTool("TrackIsolationTool",tmp_trackIsolationTool);
00601     if (StatusCode::SUCCESS != sc) {
00602       *m_log << MSG::ERROR << "Can't get handle on analysis tools" << endreq;
00603       return StatusCode::FAILURE;
00604     }
00605         m_trackIsolationTool=dynamic_cast<TrackIsolationTool*>(tmp_trackIsolationTool); 
00606     
00607     // get the TrigDecisionTool
00608     sc = m_trigDec.retrieve();
00609     if ( sc.isFailure() ){
00610         *m_log << MSG::ERROR << "Can't get handle on TrigDecisionTool" << endreq;
00611     } else {
00612         *m_log << MSG::DEBUG << "Got handle on TrigDecisionTool" << endreq;
00613     }
00614 
00615     nEvents =0;
00616 
00617     // add user branches to the AAN (memory allocation not needed, is done in //
00618     // addBranch                                                              //
00619     // reconstructed data //
00620         
00621     // trigger decision data //
00622     m_nt->Branch("trigger_l1_defined", &m_trigger_l1_defined,
00623                  "trigger_l1_defined/O");
00624     m_nt->Branch("trigger_l2_defined", &m_trigger_l2_defined,
00625                  "trigger_l2_defined/O");
00626     m_nt->Branch("trigger_ef_defined", &m_trigger_ef_defined,
00627                  "trigger_ef_defined/O");
00628     addBranch("trigger_keys_l1",        m_trigger_keys_l1);
00629     addBranch("trigger_keys_status_l1", m_trigger_keys_status_l1);
00630     addBranch("trigger_keys_prescale_l1", m_trigger_keys_prescale_l1);
00631     addBranch("trigger_keys_l2", m_trigger_keys_l2);
00632     addBranch("trigger_keys_status_l2", m_trigger_keys_status_l2);
00633     addBranch("trigger_keys_prescale_l2", m_trigger_keys_prescale_l2);
00634     addBranch("trigger_keys_ef", m_trigger_keys_ef);
00635     addBranch("trigger_keys_status_ef", m_trigger_keys_status_ef);
00636     addBranch("trigger_keys_prescale_ef", m_trigger_keys_prescale_ef);
00637 
00638     // trigger LVL1 data //
00639     m_nt->Branch("nb_trigger_mu_lvl1", &m_nb_trigger_mu_lvl1,
00640                  "nb_trigger_mu_lvl1/I");
00641     addBranch("trigger_mu_lvl1_eta",               m_trigger_mu_lvl1_eta);
00642     addBranch("trigger_mu_lvl1_phi",               m_trigger_mu_lvl1_phi);
00643     addBranch("trigger_mu_lvl1_threshold_number",  m_trigger_mu_lvl1_threshold_number);
00644     addBranch("trigger_mu_lvl1_threshold_name",    m_trigger_mu_lvl1_threshold_name);
00645     addBranch("trigger_mu_lvl1_threshold_value",   m_trigger_mu_lvl1_threshold_value);
00646     addBranch("trigger_mu_lvl1_roiword",           m_trigger_mu_lvl1_roiword);
00647     addBranch("trigger_mu_lvl1_confirmed",         m_trigger_mu_lvl1_confirmed);
00648 
00649     // trigger LVL2 data //
00650     m_nt->Branch("nb_trigger_mu_lvl2", &m_nb_trigger_mu_lvl2,
00651                  "nb_trigger_mu_lvl2/I");
00652     addBranch("trigger_mu_lvl2_eta",               m_trigger_mu_lvl2_eta);
00653     addBranch("trigger_mu_lvl2_phi",               m_trigger_mu_lvl2_phi);
00654     addBranch("trigger_mu_lvl2_pt",                m_trigger_mu_lvl2_pt);
00655     addBranch("trigger_mu_lvl2_sigma_pt",          m_trigger_mu_lvl2_sigma_pt);
00656     
00657     // trigger EF data //
00658     m_nt->Branch("nb_trigger_mu_ef", &m_nb_trigger_mu_ef,
00659                  "nb_trigger_mu_ef/I");
00660     addBranch("trigger_mu_ef_eta",                 m_trigger_mu_ef_eta);
00661     addBranch("trigger_mu_ef_phi",                 m_trigger_mu_ef_phi);
00662     addBranch("trigger_mu_ef_pt",                  m_trigger_mu_ef_pt);
00663     addBranch("trigger_mu_ef_code",                m_trigger_mu_ef_code);
00664     addBranch("trigger_mu_ef_charge1",             m_trigger_mu_ef_charge1);
00665     addBranch("trigger_mu_ef_charge2",             m_trigger_mu_ef_charge2);
00666 
00667     // trigger MissingET data //
00668     m_nt->Branch("trigger_met_ex", &m_trigger_met_ex, "trigger_met_ex/D");
00669     m_nt->Branch("trigger_met_ey", &m_trigger_met_ey, "trigger_met_ey/D");
00670     m_nt->Branch("trigger_met_et", &m_trigger_met_et, "trigger_met_et/D");
00671     m_nt->Branch("trigger_met_sumEt", &m_trigger_met_et, "trigger_met_sumEt/D");
00672     m_nt->Branch("trigger_met_RoIword", &m_trigger_met_RoIword, "trigger_met_RoIword/L");
00673     
00674     // track data //
00675     m_nt->Branch("nb_rec_tracks", &m_nb_rec_tracks,
00676                  "nb_rec_tracks/I");
00677     addBranch("track_p_x",m_track_p_x);
00678     addBranch("track_p_y",m_track_p_y);        
00679     addBranch("track_p_z",m_track_p_z);     
00680     addBranch("track_E",m_track_E);       
00681     addBranch("track_charge",m_track_charge);  
00682     addBranch("track_vertex_index",m_track_vertex_index);   
00683     addBranch("track_SCThit",m_track_SCThit);  
00684     addBranch("track_Phit",m_track_Phit);   
00685     addBranch("track_BLayerhit",m_track_BLayerhit);    
00686     addBranch("track_TRThit",m_track_TRThit);     
00687     addBranch("track_MDThit",m_track_MDThit);    
00688     addBranch("track_CSChit_eta",m_track_CSChit_eta);        
00689     addBranch("track_TGChit_eta",m_track_TGChit_eta);       
00690     addBranch("track_RPChit_eta",m_track_RPChit_eta);           
00691     addBranch("track_CSChit_phi",m_track_CSChit_phi);        
00692     addBranch("track_TGChit_phi",m_track_TGChit_phi);    
00693     addBranch("track_RPChit_phi",m_track_RPChit_phi);
00694     addBranch("track_d0",m_track_d0);  
00695     addBranch("track_z0",m_track_z0);         
00696     addBranch("track_chi2",m_track_chi2);  
00697     addBranch("track_nDoF",m_track_nDoF);
00698     addBranch("track_trackIsolationEnergy_s", m_track_trackIsolationEnergy_s);
00699     addBranch("track_trackIsolationEnergy_0", m_track_trackIsolationEnergy_0);
00700     addBranch("track_trackIsolationEnergy_1", m_track_trackIsolationEnergy_1);
00701     addBranch("track_trackIsolationEnergy_2", m_track_trackIsolationEnergy_2);
00702     addBranch("track_trackIsolationEnergy_3", m_track_trackIsolationEnergy_3);
00703 
00704 
00705     // electron data //
00706     m_nt->Branch("nb_rec_electrons", &m_nb_rec_electrons,
00707                  "nb_rec_electrons/I");
00708     addBranch("e_p_x",              m_e_p_x);
00709     addBranch("e_p_y",              m_e_p_y);
00710     addBranch("e_p_z",              m_e_p_z);
00711     addBranch("e_E",                m_e_E);
00712     addBranch("e_calo_p_x",         m_e_calo_p_x);
00713     addBranch("e_calo_p_y",         m_e_calo_p_y);
00714     addBranch("e_calo_p_z",         m_e_calo_p_z);
00715     addBranch("e_calo_E",           m_e_calo_E);
00716     addBranch("e_charge",           m_e_charge);
00717     addBranch("e_NeuralNet",        m_e_NeuralNet);
00718     addBranch("e_isEM",             m_e_isEM);
00719     addBranch("e_id_flag",          m_e_id_flag);
00720     addBranch("e_egamma_flag",      m_e_egamma_flag);
00721     addBranch("e_softe_flag",       m_e_softe_flag);
00722     addBranch("e_E_over_p",         m_e_E_over_p);
00723     addBranch("e_TRTHighThresholdHits", m_e_TRTHighThresholdHits);
00724     addBranch("e_TRTHits",          m_e_TRTHits);
00725     addBranch("e_ethad1",           m_e_ethad1);
00726     addBranch("e_Et_in_cone_0",     m_e_Et_in_cone_0);
00727     addBranch("e_Et_in_cone_1",     m_e_Et_in_cone_1);
00728     addBranch("e_Et_in_cone_2",     m_e_Et_in_cone_2);
00729     addBranch("e_Et_in_cone_3",     m_e_Et_in_cone_3);
00730     addBranch("e_vertex_index",     m_e_vertex_index);
00731     addBranch("e_track_Et_in_cone_0", m_e_track_Et_in_cone_0);
00732     addBranch("e_track_Et_in_cone_1", m_e_track_Et_in_cone_1);
00733     addBranch("e_track_Et_in_cone_2", m_e_track_Et_in_cone_2);
00734     addBranch("e_track_Et_in_cone_3", m_e_track_Et_in_cone_3);
00735     addBranch("e_trackIsolationEnergy_0", m_e_trackIsolationEnergy_0);
00736     addBranch("e_trackIsolationEnergy_1", m_e_trackIsolationEnergy_1);
00737     addBranch("e_trackIsolationEnergy_2", m_e_trackIsolationEnergy_2);
00738     addBranch("e_trackIsolationEnergy_3", m_e_trackIsolationEnergy_3);
00739 
00740     // photon data //
00741     m_nt->Branch("nb_rec_photons", &m_nb_rec_photons,
00742                  "nb_rec_photons/I");
00743     addBranch("p_calo_p_x",         m_p_calo_p_x);
00744     addBranch("p_calo_p_y",         m_p_calo_p_y);
00745     addBranch("p_calo_p_z",         m_p_calo_p_z);
00746     addBranch("p_calo_E",           m_p_calo_E);
00747     addBranch("p_charge",           m_p_charge);
00748     addBranch("p_NeuralNet",        m_p_NeuralNet);
00749     addBranch("p_isEM",             m_p_isEM);
00750     addBranch("p_egamma_flag",      m_p_egamma_flag);
00751     addBranch("p_Et_in_cone_0",     m_p_Et_in_cone_0);
00752     addBranch("p_Et_in_cone_1",     m_p_Et_in_cone_1);
00753     addBranch("p_Et_in_cone_2",     m_p_Et_in_cone_2);
00754     addBranch("p_Et_in_cone_3",     m_p_Et_in_cone_3);
00755 
00756     // muon data //
00757     m_nt->Branch("nb_rec_muons", &m_nb_rec_muons, "nb_rec_muons/I");
00758     addBranch("mu_alg_flag",                m_mu_alg_flag);
00759     addBranch("mu_p_x",                     m_mu_p_x);
00760     addBranch("mu_p_y",                     m_mu_p_y);
00761     addBranch("mu_p_z",                     m_mu_p_z);
00762     addBranch("mu_E",                       m_mu_E);
00763     addBranch("mu_p_x_standalone",          m_mu_p_x_standalone);
00764     addBranch("mu_p_y_standalone",          m_mu_p_y_standalone);
00765     addBranch("mu_p_z_standalone",          m_mu_p_z_standalone);
00766     addBranch("mu_E_standalone",            m_mu_E_standalone);
00767     addBranch("mu_p_x_ID",                  m_mu_p_x_ID);
00768     addBranch("mu_p_y_ID",                  m_mu_p_y_ID);
00769     addBranch("mu_p_z_ID",                  m_mu_p_z_ID);
00770     addBranch("mu_E_ID",                    m_mu_E_ID);
00771     addBranch("mu_charge",                  m_mu_charge);
00772     addBranch("mu_fitChi2",                 m_mu_fitChi2);
00773     addBranch("mu_fitNumberDoF",            m_mu_fitNumberDoF);
00774     addBranch("mu_fitChi2OverDoF",          m_mu_fitChi2OverDoF);
00775     addBranch("mu_matchChi2",               m_mu_matchChi2);
00776     addBranch("mu_matchNumberDoF",          m_mu_matchNumberDoF);
00777     addBranch("mu_matchChi2OverDoF",        m_mu_matchChi2OverDoF);
00778     addBranch("mu_rec_flag",                m_mu_flag);
00779     addBranch("mu_hasCombinedMuonTrackParticle", m_mu_hasCombinedMuonTrackParticle);
00780     addBranch("mu_Et_in_cone_0",            m_mu_Et_in_cone_0);
00781     addBranch("mu_Et_in_cone_1",            m_mu_Et_in_cone_1);
00782     addBranch("mu_Et_in_cone_2",            m_mu_Et_in_cone_2);
00783     addBranch("mu_Et_in_cone_3",            m_mu_Et_in_cone_3);
00784     addBranch("mu_Et_in_cone_4",            m_mu_Et_in_cone_4);
00785     addBranch("mu_Et_in_cone_5",            m_mu_Et_in_cone_5);
00786     addBranch("mu_Et_in_cone_6",            m_mu_Et_in_cone_6);
00787     addBranch("mu_Et_in_cone_7",            m_mu_Et_in_cone_7);
00788     addBranch("mu_nb_tracks_in_cone_0",     m_mu_nb_tracks_cone_0);
00789     addBranch("mu_nb_tracks_in_cone_1",     m_mu_nb_tracks_cone_1);
00790     addBranch("mu_nb_tracks_in_cone_2",     m_mu_nb_tracks_cone_2);
00791     addBranch("mu_nb_tracks_in_cone_3",     m_mu_nb_tracks_cone_3);
00792     addBranch("mu_nb_tracks_in_cone_4",     m_mu_nb_tracks_cone_4);
00793     addBranch("mu_nb_tracks_in_cone_5",     m_mu_nb_tracks_cone_5);
00794     addBranch("mu_nb_tracks_in_cone_6",     m_mu_nb_tracks_cone_6);
00795     addBranch("mu_nb_tracks_in_cone_7",     m_mu_nb_tracks_cone_7);
00796     addBranch("mu_author" ,                 m_mu_author);
00797     addBranch("mu_bestmatch",               m_mu_bestmatch);
00798     addBranch("mu_vertex_index",            m_mu_vertex_index);
00799     addBranch("mu_track_Et_in_cone_0",      m_mu_track_Et_in_cone_0);
00800     addBranch("mu_track_Et_in_cone_1",      m_mu_track_Et_in_cone_1);
00801     addBranch("mu_track_Et_in_cone_2",      m_mu_track_Et_in_cone_2);
00802     addBranch("mu_track_Et_in_cone_3",      m_mu_track_Et_in_cone_3);
00803     addBranch("mu_track_Et_in_cone_4",      m_mu_track_Et_in_cone_4);
00804     addBranch("mu_track_Et_in_cone_5",      m_mu_track_Et_in_cone_5);
00805     addBranch("mu_track_Et_in_cone_6",      m_mu_track_Et_in_cone_6);
00806     addBranch("mu_track_Et_in_cone_7",      m_mu_track_Et_in_cone_7);
00807     addBranch("mu_trackIsolationEnergy_0", m_mu_trackIsolationEnergy_0);
00808     addBranch("mu_trackIsolationEnergy_1", m_mu_trackIsolationEnergy_1);
00809     addBranch("mu_trackIsolationEnergy_2", m_mu_trackIsolationEnergy_2);
00810     addBranch("mu_trackIsolationEnergy_3", m_mu_trackIsolationEnergy_3);
00811     addBranch("mu_trackIsolationEnergy_4", m_mu_trackIsolationEnergy_4);
00812     addBranch("mu_trackIsolationEnergy_5", m_mu_trackIsolationEnergy_5);
00813     addBranch("mu_trackIsolationEnergy_6", m_mu_trackIsolationEnergy_6);
00814     addBranch("mu_trackIsolationEnergy_7", m_mu_trackIsolationEnergy_7);
00815 
00816     // jet //
00817     m_nt->Branch("nb_rec_jets", &m_nb_rec_jets, "nb_rec_jets/I");
00818     addBranch("jet_p_x",                    m_jet_p_x);
00819     addBranch("jet_p_y",                    m_jet_p_y);
00820     addBranch("jet_p_z",                    m_jet_p_z);
00821     addBranch("jet_E",                      m_jet_E);
00822     addBranch("jet_flag",                   m_jet_flag);
00823     addBranch("jet_btag_weight",            m_jet_btag_weight);
00824     addBranch("jet_truthflavor",            m_jet_truthflavor);
00825     addBranch("jet_nb_tracks",              m_jet_nb_tracks);
00826     addBranch("jet_tracks_charge",          m_jet_tracks_charge);
00827     addBranch("jet_tracks_p_x",             m_jet_tracks_p_x);
00828     addBranch("jet_tracks_p_y",             m_jet_tracks_p_y);
00829     addBranch("jet_tracks_p_z",             m_jet_tracks_p_z);
00830     addBranch("jet_tracks_E",               m_jet_tracks_E);
00831 
00832     // tau jet //
00833     m_nt->Branch("nb_tau_jets", &m_nb_tau_jets, "nb_tau_jets/I");
00834     addBranch("taujet_p_x",                 m_taujet_p_x);
00835     addBranch("taujet_p_y",                 m_taujet_p_y);
00836     addBranch("taujet_p_z",                 m_taujet_p_z);
00837     addBranch("taujet_E",                   m_taujet_E);
00838     addBranch("taujet_flag",                m_taujet_flag);
00839     addBranch("taujet_charge",              m_taujet_charge);
00840     addBranch("taujet_etHadCalib",          m_taujet_etHadCalib);
00841     addBranch("taujet_etEMCalib",           m_taujet_etEMCalib);
00842     addBranch("taujet_emRadius",            m_taujet_emRadius);
00843     addBranch("taujet_isolationFraction",   m_taujet_isolationFraction);
00844     addBranch("taujet_centralityFraction",  m_taujet_centralityFraction);
00845     addBranch("taujet_stripWidth2",         m_taujet_stripWidth2);
00846     addBranch("taujet_nStripCells",         m_taujet_nStripCells);
00847     addBranch("taujet_leadingTrackPT",      m_taujet_leadingTrackPT);
00848     addBranch("taujet_trFlightPathSig",     m_taujet_trFlightPathSig);
00849     addBranch("taujet_etOverPtLeadTrack",   m_taujet_etOverPtLeadTrack);
00850     addBranch("taujet_ipSigLeadTrack",      m_taujet_ipSigLeadTrack);
00851     addBranch("taujet_etChrgHAD",           m_taujet_etChrgHAD);
00852     addBranch("taujet_etIsolEM",            m_taujet_etIsolEM);
00853     addBranch("taujet_etIsolHAD",           m_taujet_etIsolHAD);
00854     addBranch("taujet_nAssocTracksCore",    m_taujet_nAssocTracksCore);
00855     addBranch("taujet_nAssocTracksIsol",    m_taujet_nAssocTracksIsol);
00856     addBranch("taujet_massTrk3P",           m_taujet_massTrk3P);
00857     addBranch("taujet_rWidth2Trk3P",        m_taujet_rWidth2Trk3P);
00858     addBranch("taujet_signD0Trk3P",         m_taujet_signD0Trk3P);
00859     addBranch("taujet_etHadAtEMScale",      m_taujet_etHadAtEMScale);
00860     addBranch("taujet_etEMAtEMScale",       m_taujet_etEMAtEMScale);
00861     addBranch("taujet_etEMCL",              m_taujet_etEMCL);
00862     addBranch("taujet_etChrgEM",            m_taujet_etChrgEM);
00863     addBranch("taujet_etNeuEM",             m_taujet_etNeuEM);
00864     addBranch("taujet_etResNeuEM",          m_taujet_etResNeuEM);
00865     addBranch("taujet_llh",                 m_taujet_llh);
00866     addBranch("taujet_discNN",                  m_taujet_discNN);
00867     addBranch("taujet_PDERS",               m_taujet_discPDERS);
00868     addBranch("taujet_lowPtTauJetDiscriminant", m_taujet_lowPtTauJetDiscriminant);
00869     addBranch("taujet_lowPtTauEleDiscriminant", m_taujet_lowPtTauEleDiscriminant);
00870     addBranch("taujet_tauENeuralNetwork",       m_taujet_tauENeuralNetwork);
00871     addBranch("taujet_tauJetNeuralnetwork",     m_taujet_tauJetNeuralnetwork);
00872     addBranch("taujet_bdtJet",                  m_taujet_bdtJet);
00873     addBranch("taujet_bdtEle",                  m_taujet_bdtEle);
00874     addBranch("taujet_nb_tracks",               m_taujet_nb_tracks);
00875     addBranch("taujet_track_px_1",  m_taujet_track_px_1);
00876     addBranch("taujet_track_py_1",  m_taujet_track_py_1);
00877     addBranch("taujet_track_pz_1",  m_taujet_track_pz_1);
00878     addBranch("taujet_track_e_1",   m_taujet_track_e_1);
00879     addBranch("taujet_track_TRTHighThresholdHits_1",   m_taujet_track_TRTHighThresholdHits_1);
00880     addBranch("taujet_track_TRTHits_1",   m_taujet_track_TRTHits_1);
00881     addBranch("taujet_track_px_2",  m_taujet_track_px_2);
00882     addBranch("taujet_track_py_2",  m_taujet_track_py_2);
00883     addBranch("taujet_track_pz_2",  m_taujet_track_pz_2);
00884     addBranch("taujet_track_e_2",   m_taujet_track_e_2);
00885     addBranch("taujet_track_TRTHighThresholdHits_2",   m_taujet_track_TRTHighThresholdHits_2);
00886     addBranch("taujet_track_TRTHits_2",   m_taujet_track_TRTHits_2);
00887     addBranch("taujet_track_px_3",  m_taujet_track_px_3);
00888     addBranch("taujet_track_py_3",  m_taujet_track_py_3);
00889     addBranch("taujet_track_pz_3",  m_taujet_track_pz_3);
00890     addBranch("taujet_track_e_3",   m_taujet_track_e_3);
00891     addBranch("taujet_track_TRTHighThresholdHits_3",   m_taujet_track_TRTHighThresholdHits_3);
00892     addBranch("taujet_track_TRTHits_3",   m_taujet_track_TRTHits_3);
00893     
00894     // truthjet //
00895     m_nt->Branch("nb_truth_jets", &m_nb_truth_jets, "nb_truth_jets/I");
00896     addBranch("truth_jet_p_x",              m_truthjet_p_x);
00897     addBranch("truth_jet_p_y",              m_truthjet_p_y);
00898     addBranch("truth_jet_p_z",              m_truthjet_p_z);
00899     addBranch("truth_jet_E",                m_truthjet_E);
00900     addBranch("truth_jet_flag",             m_truthjet_flag);
00901     addBranch("truth_jet_btag_weight",      m_truthjet_btag_weight);
00902 
00903     // missing Et //
00904     addBranch("missing_Et_object", m_met_obj_name);
00905     addBranch("missing_Etx",    m_missing_Etx);
00906     addBranch("missing_Ety",    m_missing_Ety);
00907     addBranch("missing_Et",     m_missing_Et);
00908     addBranch("missing_Etsum",  m_missing_Etsum);
00909 
00910     // truth data //
00911     m_nt->Branch("nb_truth_particle_all", &m_nb_truth_particle_all, "nb_truth_particle_all/I");
00912     m_nt->Branch("nb_truth_particle",     &m_nb_truth_particle,     "nb_truth_particle/I");
00913 
00914     addBranch("truth_particle_pt",                  m_truth_particle_pt);
00915     addBranch("truth_particle_status",              m_truth_particle_status);
00916     addBranch("truth_particle_barcode",             m_truth_particle_barcode);
00917     addBranch("truth_particle_pdgId",               m_truth_particle_pdgId);
00918     addBranch("truth_particle_nDaughters",          m_truth_particle_nDaughters);
00919     addBranch("truth_particle_p_x",                 m_truth_particle_p_x);
00920     addBranch("truth_particle_p_y",                 m_truth_particle_p_y);
00921     addBranch("truth_particle_p_z",                 m_truth_particle_p_z);
00922     addBranch("truth_particle_E",                   m_truth_particle_E);
00923     addBranch("truth_particle_charge",              m_truth_particle_charge);
00924     addBranch("truth_particle_nParents",            m_truth_particle_nParents);
00925     addBranch("truth_particle_mother0_barcode",     m_truth_particle_mother0_barcode);
00926     addBranch("truth_particle_mother0_pdgId",       m_truth_particle_mother0_pdgId);
00927 
00928     // event weight //
00929     m_nt->Branch("event_weight", &m_event_weight, "event_weight/D");
00930 
00931     // vertex data //
00932     m_nt->Branch("nb_vertices", &m_nb_vertices, "nb_vertices/I");
00933     addBranch("vertex_position_x", m_vertex_position_x);
00934     addBranch("vertex_position_y", m_vertex_position_y);
00935     addBranch("vertex_position_z", m_vertex_position_z);
00936     addBranch("vertex_pos_error_x", m_vertex_pos_error_x);
00937     addBranch("vertex_pos_error_y", m_vertex_pos_error_y);
00938     addBranch("vertex_pos_error_z", m_vertex_pos_error_z);
00939     addBranch("vertex_chi2", m_vertex_chi2);
00940     addBranch("vertex_ndof", m_vertex_ndof);
00941     addBranch("vertex_Et", m_vertex_Et);
00942     addBranch("vertex_nb_tracks", m_vertex_nb_tracks);
00943 
00944     // truth vertex data //
00945     m_nt->Branch("nb_truth_vertices", &m_nb_truth_vertices, "nb_truth_vertices/I");
00946     addBranch("truth_vertex_position_x", m_truth_vertex_position_x);
00947     addBranch("truth_vertex_position_y", m_truth_vertex_position_y);
00948     addBranch("truth_vertex_position_z", m_truth_vertex_position_z);
00949     addBranch("truth_vertex_Et", m_truth_vertex_Et);
00950     addBranch("truth_vertex_nb_tracks", m_truth_vertex_nb_tracks);
00951 
00952     // track-jet //
00953     m_nt->Branch("nb_track_jets", &m_nb_track_jets, "nb_track_jets/I");
00954     addBranch("track_jet_p_x",              m_track_jet_p_x);
00955     addBranch("track_jet_p_y",              m_track_jet_p_y);
00956     addBranch("track_jet_p_z",              m_track_jet_p_z);
00957     addBranch("track_jet_E",                m_track_jet_E);
00958 
00959     // truth track-jet //
00960     m_nt->Branch("nb_truth_track_jets", &m_nb_truth_track_jets,
00961                                                 "nb_truth_track_jets/I");
00962     addBranch("truth_track_jet_p_x",              m_truth_track_jet_p_x);
00963     addBranch("truth_track_jet_p_y",              m_truth_track_jet_p_y);
00964     addBranch("truth_track_jet_p_z",              m_truth_track_jet_p_z);
00965     addBranch("truth_track_jet_E",                m_truth_track_jet_E);
00966 
00967 
00968     // write out additional information
00969     // about the data:
00970     // aod files / aod container keys used...
00971         
00972     // change to the root directory to where one
00973     // wants to write the info
00974     m_nt->GetDirectory()->cd();
00975         
00976     string str_helper;
00977         
00978     // create TTree for the AOD files that are used for input
00979     // one branch with the filenames
00980     // each filename one entry
00981     // How many of them are used depends on the number of events, set in the Joboptions
00982     tree_aod_file_collection = new TTree("aod_file_collection","aod_file_collection");
00983     tree_aod_file_collection->Branch("aod_files", &char_array_aod_file, "aod_files/C");
00984     if(v_string_aod_files.size()==0){
00985         v_string_aod_files.push_back("not specified in Job Options");
00986     }
00987     for(unsigned int k=0; k<v_string_aod_files.size(); k++){
00988         str_helper=v_string_aod_files[k];
00989         strcpy(char_array_aod_file,str_helper.c_str());
00990         tree_aod_file_collection->Fill();
00991     }
00992         
00993     // create a TTree for the AOD container names that are used
00994     // one branch for every Key
00995     // the tree is filled only once
00996     tree_aod_container_keys = new TTree("aod_container_keys","aod_container_keys");
00997         
00998     strcpy(aodkey_trigger_decision_container ,m_trigger_decision_container.c_str());
00999     tree_aod_container_keys->Branch("trigger_decision_container", &aodkey_trigger_decision_container, 
01000                                     "trigger_decision_container/C");
01001     
01002     strcpy(aodkey_trigger_mu_lvl1_container ,m_trigger_mu_lvl1_container.c_str());
01003     tree_aod_container_keys->Branch("trigger_mu_lvl1_container",&aodkey_trigger_mu_lvl1_container, 
01004                                     "trigger_mu_lvl1_container/C");
01005     
01006     strcpy(aodkey_trigger_mu_lvl2_container ,m_trigger_mu_lvl2_container.c_str());
01007     tree_aod_container_keys->Branch("trigger_mu_lvl2_container",&aodkey_trigger_mu_lvl2_container, 
01008                                     "trigger_mu_lvl2_container/C");
01009     
01010     strcpy(aodkey_trigger_mu_ef_container ,m_trigger_mu_ef_container.c_str());
01011     tree_aod_container_keys->Branch("trigger_mu_ef_container",&aodkey_trigger_mu_ef_container, 
01012                                     "trigger_mu_ef_container/C");
01013     
01014     strcpy(aodkey_trigger_met_container ,m_trigger_met_container.c_str());
01015     tree_aod_container_keys->Branch("trigger_met_container",&aodkey_trigger_met_container, 
01016                                     "trigger_met_container/C");
01017             
01018     strcpy(aodkey_electron_container ,m_electron_container.c_str());
01019     tree_aod_container_keys->Branch("electron_container",&aodkey_electron_container, 
01020                                     "electron_container/C");
01021     strcpy(aodkey_photon_container ,m_photon_container.c_str());
01022     tree_aod_container_keys->Branch("photon_container",&aodkey_photon_container, 
01023                                     "photon_container/C");
01024     
01025     string m_muon_container_string;
01026     for(unsigned int k=0; k<m_muon_container.size(); k++){
01027         if(k!=0) m_muon_container_string += ", ";
01028         m_muon_container_string += m_muon_container[k];
01029     }
01030 
01031     strcpy(aodkey_muon_container ,m_muon_container_string.c_str());
01032     tree_aod_container_keys->Branch("muon_container",&aodkey_muon_container, 
01033                                     "muon_container/C");
01034     
01035     string m_met_container_string;
01036     for(unsigned int k=0; k<v_string_met_container.size(); k++){
01037         if(k!=0) m_met_container_string += ", ";
01038         m_met_container_string += v_string_met_container.at(k);
01039     }
01040 
01041     strcpy(aodkey_met_container ,m_met_container_string.c_str());
01042     tree_aod_container_keys->Branch("met_container",&aodkey_met_container, 
01043                                     "met_container/C");
01044 
01045         
01046    //  char char_helper_array[200];
01047 //     for(unsigned int k=0; k<m_muon_container.size(); k++){
01048 //         cout << "m_muon_container:" << m_muon_container[k] << endl;
01049 //         str_helper=m_muon_container[k];
01050 //         strcpy(char_helper_array,str_helper.c_str());
01051 //         tree_aod_container_keys->Fill();
01052 //     }
01053 
01054 
01055     strcpy(aodkey_jet_container ,m_jet_container.c_str());
01056     tree_aod_container_keys->Branch("jet_container",&aodkey_jet_container,
01057                                     "jet_container/C");
01058     strcpy(aodkey_taujet_container ,m_taujet_container.c_str());
01059     tree_aod_container_keys->Branch("taujet_container",&aodkey_taujet_container, 
01060                                     "taujet_container/C");
01061     strcpy(aodkey_truthjet_container ,m_truthjet_container.c_str());
01062     tree_aod_container_keys->Branch("truthjet_container",&aodkey_truthjet_container,
01063                                     "truthjet_container/C");
01064     strcpy(aodkey_truthmissingEt_container ,m_truthmissingEt_container.c_str());
01065     tree_aod_container_keys->Branch("truthmissingEt_container",&aodkey_truthmissingEt_container, 
01066                                     "truthmissingEt_container/C");
01067     strcpy(aodkey_truthparticle_container ,m_truthparticle_container.c_str());
01068     tree_aod_container_keys->Branch("truthparticle_container",&aodkey_truthparticle_container, 
01069                                     "truthparticle_container/C");
01070 
01071     aodkey_AtlFastFlag = m_AtlFastFlag;
01072     tree_aod_container_keys->Branch("AtlFastFlag",&aodkey_AtlFastFlag, 
01073                                     "AtlFastFlag/O");
01074 
01075     aodkey_doAODFix1mm = m_doAODFix1mm;
01076     tree_aod_container_keys->Branch("doAODFix1mm",&aodkey_doAODFix1mm, 
01077                                     "doAODFix1mm/O");
01078 
01079     aodkey_doTrackJets = m_doTrackJets;
01080     tree_aod_container_keys->Branch("doTrackJets",&aodkey_doTrackJets, 
01081                                     "doTrackJets/O");
01082     aodkey_doVertices = m_doVertices;
01083     tree_aod_container_keys->Branch("doVertices",&aodkey_doVertices, 
01084                                     "doVertices/O");
01085 
01086     aodkey_truthparticleMaximumLeptonBarcode = m_truthparticleMaximumLeptonBarcode;
01087     tree_aod_container_keys->Branch("truthparticleMaximumLeptonBarcode",&aodkey_truthparticleMaximumLeptonBarcode, 
01088                                     "truthparticleMaximumLeptonBarcode/I");
01089 
01090     aodkey_truthparticleNoPDGAbove100 = m_truthparticleNoPDGAbove100;
01091     tree_aod_container_keys->Branch("truthparticleNoPDGAbove100",&aodkey_truthparticleNoPDGAbove100, 
01092                                     "truthparticleNoPDGAbove100/O");
01093 
01094     strcpy(aodkey_primary_vertex_container ,m_primary_vertex_container.c_str());
01095     tree_aod_container_keys->Branch("primary_vertex_container",
01096                                     &aodkey_primary_vertex_container, 
01097                                     "primary_vertex_container/C");
01098 
01099     strcpy(aodkey_track_jet_container ,m_track_jet_container.c_str());
01100     tree_aod_container_keys->Branch("track_jet_container",
01101                                         &aodkey_track_jet_container,
01102                                         "track_jet_container/C");
01103     strcpy(aodkey_truth_track_jet_container,
01104                                         m_truth_track_jet_container.c_str());
01105     tree_aod_container_keys->Branch("truth_track_jet_container",
01106                                         &aodkey_truth_track_jet_container,
01107                                         "truth_track_jet_container/C");
01108     strcpy(aodkey_track_particle_container ,m_track_particle_container.c_str());
01109     tree_aod_container_keys->Branch("track_particle_container",
01110                                     &aodkey_track_particle_container,
01111                                     "track_particle_container/C");
01112 
01113 
01114       
01115     strcpy(aodkey_showerContainerName, m_showerContainerName.c_str());
01116     tree_aod_container_keys->Branch("shower_container",
01117                                     &aodkey_showerContainerName,
01118                                     "shower_container/C");
01119 
01120     strcpy(aodkey_trackMatchContainerName, m_trackMatchContainerName.c_str());
01121     tree_aod_container_keys->Branch("trackmatch_container",
01122                                     &aodkey_trackMatchContainerName,
01123                                     "trackmatch_container/C");
01124     
01125     strcpy(aodkey_tauDetailsContainerName, m_tauDetailsContainerName.c_str());
01126     tree_aod_container_keys->Branch("tauDetails_container",
01127                                     &aodkey_tauDetailsContainerName,
01128                                     "taudetails_container/C");
01129     
01130     //fileinfo
01131     strcpy(aodkey_release,m_release.c_str());
01132     tree_aod_container_keys->Branch("release", &aodkey_release, "release/C");
01133 
01134     strcpy(aodkey_svnversion,m_svnversion.c_str());
01135     tree_aod_container_keys->Branch("svnversion", &aodkey_svnversion, "svnversion/C");
01136     
01137     strcpy(aodkey_date,m_date.c_str());
01138     tree_aod_container_keys->Branch("date", &aodkey_date, "date/C");
01139 
01140 
01141     tree_aod_container_keys->Fill();
01142       
01144 // TRACK JETS? //
01146 
01147     if (m_doTrackJets && m_AtlFastFlag) {
01148         *m_log << MSG::WARNING
01149                 << "No track jets are reconstructed on ATLFAST data!"
01150                 << endreq;
01151         m_doTrackJets = false;
01152         m_doVertices  = false;
01153     }
01154    
01155     return StatusCode::SUCCESS;
01156 
01157   }
01158 
01159 //*****************************************************************************
01160 
01161   //::::::::::::::::::::::::::
01162   //:: METHOD CBNT_finalize ::
01163   //::::::::::::::::::::::::::
01164 
01165 StatusCode 
01166 AANtupleWriter14::CBNT_finalize(void) {
01167 
01168     *m_log << MSG::INFO
01169            << "Finilizing AANtupleWriter14..."
01170            << endreq;
01171 
01172     return StatusCode::SUCCESS;
01173 
01174   }
01175 
01176 //*****************************************************************************
01177 
01178   //:::::::::::::::::::::::::
01179   //:: METHOD CBNT_execute ::
01180   //:::::::::::::::::::::::::
01181 
01182 StatusCode AANtupleWriter14::CBNT_execute(void) {
01183 
01184     //cout << "--- AtlFastFlag in execute() ---" << m_AtlFastFlag << endl;
01185     nEvents++;
01186     if(nEvents%2000==0) cout << "Event: " << nEvents << endl; 
01187     
01188     if (m_doTrigger) {
01189             
01190         // trigger decision data //
01191         if (!get_trigger_data()) {
01192             *m_log << MSG::ERROR
01193                    << "Problems in retrieving trigger decision data!"
01194                    << endreq;
01195             return StatusCode::FAILURE;
01196         }
01197         if(!m_AtlFastFlag){
01198             // trigger muon lvl1 data //
01199             if (!get_trigger_muon_lvl1_data()) {
01200                 *m_log << MSG::ERROR
01201                        << "Problems in retrieving trigger muon lvl1 data!"
01202                        << endreq;
01203                 return StatusCode::FAILURE;
01204             }
01205         }
01206         if(!m_AtlFastFlag && m_nb_trigger_mu_lvl1>0){
01207             // trigger muon lvl2 data //
01208             if (!get_trigger_muon_lvl2_data()) {
01209                 *m_log << MSG::ERROR
01210                        << "Problems in retrieving trigger muon lvl2 data!"
01211                        << endreq;
01212                 return StatusCode::FAILURE;
01213             }
01214         }
01215         if(!m_AtlFastFlag && m_nb_trigger_mu_lvl1>0&&m_nb_trigger_mu_lvl2>0){
01216             // trigger muon EF data //
01217             if (!get_trigger_muon_ef_data()) {
01218                 *m_log << MSG::ERROR
01219                        << "Problems in retrieving trigger muon ef data!"
01220                        << endreq;
01221                 return StatusCode::FAILURE;
01222             }
01223         }
01224         if(!m_AtlFastFlag){
01225             // trigger met data //
01226             if (!get_trigger_met_data()) {
01227                 *m_log << MSG::ERROR
01228                        << "Problems in retrieving trigger met data!"
01229                        << endreq;
01230                 return StatusCode::FAILURE;
01231             }
01232         }
01233     }
01234     
01235     // track particle data //
01236     if (m_doTrackParticles) {
01237         if (!get_trackparticle_data()) {
01238             *m_log << MSG::ERROR
01239                    << "Problems in retrieving data of reconstructed track particles!"
01240                    << endreq;
01241             return StatusCode::FAILURE;
01242         }
01243     }
01244 
01245     // electron data //
01246     if (m_doElectrons) {
01247         if (!get_electron_data()) {
01248             *m_log << MSG::ERROR
01249                    << "Problems in retrieving data of reconstructed electrons!"
01250                    << endreq;
01251             return StatusCode::FAILURE;
01252         }
01253     }
01254        
01255     // photon data //
01256     if (m_doPhotons) {
01257         if (!get_photon_data()) {
01258             *m_log << MSG::ERROR
01259                    << "Problems in retrieving data of reconstructed photons!"
01260                    << endreq;
01261             return StatusCode::FAILURE;
01262         }
01263     }
01264        
01265        
01266     // muon data //
01267     if (m_doMuons) {
01268         if (!get_muon_data()) {
01269             *m_log << MSG::ERROR
01270                    << "Problems in retrieving data of reconstructed muons!"
01271                    << endreq;
01272             return StatusCode::FAILURE;
01273         }
01274     }
01275 
01276 
01277     // jet data //
01278     if (m_doJets) {
01279         if (!get_jet_data()) {
01280             *m_log << MSG::ERROR
01281                    << "Problems in retrieving data of reconstructed jets!"
01282                    << endreq;
01283             return StatusCode::FAILURE;
01284         }
01285     }
01286 
01287     // tau jet data //
01288     if (m_doTauJets) {
01289         if (!get_taujet_data()) {
01290             *m_log << MSG::ERROR
01291                    << "Problems in retrieving data of tau jets!"
01292                    << endreq;
01293             return StatusCode::FAILURE;
01294         }
01295     }        
01296 
01297     // missingEt data //
01298     if (m_doMissingEt) {
01299         if (!get_missingEt_data()) {
01300             *m_log << MSG::ERROR
01301                    << "Problems in retrieving data of missing Et!"
01302                    << endreq;
01303             return StatusCode::FAILURE;
01304         }
01305     }
01306 
01307     // truthparticle data //
01308     if (m_doTruthParticles) {
01309         if (!get_truthparticle_data()) {
01310             *m_log << MSG::ERROR
01311                    << "Problems in retrieving data of truth particles!"
01312                    << endreq;
01313             return StatusCode::FAILURE;
01314         }
01315     }
01316 
01317     // truth data which is not available in AtlFast
01318     if(!m_AtlFastFlag){
01319 
01320         // truthjet data //
01321         if (m_doTruthJets) {
01322             if (!get_truthjet_data()) {
01323                 *m_log << MSG::ERROR
01324                        << "Problems in retrieving data of truth jets!"
01325                        << endreq;
01326                 return StatusCode::FAILURE;
01327             }
01328         }
01329 
01330         // truthmissingEt data //
01331         if (m_doMissingEt) {
01332             if (!get_truthmissingEt_data()) {
01333                 *m_log << MSG::ERROR
01334                        << "Problems in retrieving data of truth missing Et!"
01335                        << endreq;
01336                 return StatusCode::FAILURE;
01337             }
01338         } 
01339     }
01340 
01341     // event weight data //
01342     if (!get_eventweight_data()) {
01343         *m_log << MSG::ERROR
01344                << "Problems in retrieving data of weights!"
01345                << endreq;
01346         return StatusCode::FAILURE;
01347     }
01348 
01349 
01350     if (m_doVertices && !m_AtlFastFlag) {
01351         // vertex data //
01352         if (!get_vertex_data()) {
01353             *m_log << MSG::ERROR
01354                    << "Problems in retrieving data of vertices!"
01355                    << endreq;
01356             return StatusCode::FAILURE;
01357         }
01358         
01359 //        // truth vertex data //
01360 //        if (!get_truth_vertex_data()) {
01361 //            *m_log << MSG::ERROR
01362 //                   << "Problems in retrieving data of truth vertices!"
01363 //                   << endreq;
01364 //            return StatusCode::FAILURE;
01365 //        }
01366         
01367     }
01368      
01369     if (m_doTrackJets && !m_AtlFastFlag) {
01370         // track-jet data //
01371         if (!get_track_jet_data()) {
01372             *m_log << MSG::ERROR
01373                    << "Problems in retrieving data of track jets!"
01374                    << endreq;
01375                 return StatusCode::FAILURE;
01376         }
01377         
01378 //        // truth-track-jet data //
01379 //        if (!get_truth_track_jet_data()) {
01380 //            *m_log << MSG::ERROR
01381 //                   << "Problems in retrieving data of truth track jets!"
01382 //                   << endreq;
01383 //            return StatusCode::FAILURE;
01384 //        }
01385     }
01386     
01387     
01388     return StatusCode::SUCCESS;
01389 
01390   }
01391 
01392 //*****************************************************************************
01393 
01394   //:::::::::::::::::::::::
01395   //:: METHOD CBNT_clear ::
01396   //:::::::::::::::::::::::
01397 
01398 StatusCode AANtupleWriter14::CBNT_clear(void) {
01399 
01400 
01402     // RESET DATA VECTORS //
01404 
01405     // reconstructed data //
01406         
01407     // trigger decision data //
01408     m_trigger_l1_defined=false;
01409     m_trigger_l2_defined=false;
01410     m_trigger_ef_defined=false;
01411     m_trigger_keys_l1->clear();
01412     m_trigger_keys_status_l1->clear();
01413     m_trigger_keys_prescale_l1->clear();
01414     m_trigger_keys_l2 ->clear();
01415     m_trigger_keys_status_l2->clear();
01416     m_trigger_keys_prescale_l2->clear();
01417     m_trigger_keys_ef ->clear();
01418     m_trigger_keys_status_ef->clear();
01419     m_trigger_keys_prescale_ef->clear();
01420     
01421     // trigger muon lvl1 data //
01422     m_nb_trigger_mu_lvl1                =0;
01423     m_trigger_mu_lvl1_phi              ->clear();
01424     m_trigger_mu_lvl1_eta              ->clear();
01425     m_trigger_mu_lvl1_threshold_name   ->clear();
01426     m_trigger_mu_lvl1_threshold_number ->clear();
01427     m_trigger_mu_lvl1_threshold_value  ->clear();
01428     m_trigger_mu_lvl1_roiword          ->clear();
01429     m_trigger_mu_lvl1_confirmed        ->clear();
01430        
01431     // trigger muon lvl2 data //
01432     m_nb_trigger_mu_lvl2                =0;
01433     m_trigger_mu_lvl2_phi              ->clear();
01434     m_trigger_mu_lvl2_eta              ->clear();
01435     m_trigger_mu_lvl2_pt               ->clear();
01436     m_trigger_mu_lvl2_sigma_pt         ->clear();
01437     
01438     // trigger muon ef data //
01439     m_nb_trigger_mu_ef                  =0;
01440     m_trigger_mu_ef_phi                ->clear();
01441     m_trigger_mu_ef_eta                ->clear();
01442     m_trigger_mu_ef_pt                 ->clear();
01443     m_trigger_mu_ef_code               ->clear();
01444     m_trigger_mu_ef_charge1            ->clear();
01445     m_trigger_mu_ef_charge2            ->clear();
01446     
01447     // trigger met data //
01448     m_trigger_met_ex                = 0;
01449     m_trigger_met_ey                = 0;
01450     m_trigger_met_et                = 0;
01451     m_trigger_met_sumEt             = 0;
01452     m_trigger_met_RoIword           = 0;
01453   
01454        
01455     // track data //
01456     m_nb_rec_tracks                 = 0;
01457     m_track_p_x                     ->clear();
01458     m_track_p_y                     ->clear();
01459     m_track_p_z                     ->clear();
01460     m_track_E                       ->clear();
01461     m_track_charge                  ->clear();
01462     m_track_vertex_index            ->clear();
01463     m_track_SCThit                  ->clear();
01464     m_track_Phit                    ->clear();
01465     m_track_BLayerhit               ->clear();
01466     m_track_TRThit                  ->clear();
01467     m_track_MDThit                  ->clear();
01468     m_track_CSChit_eta              ->clear();
01469     m_track_TGChit_eta              ->clear();
01470     m_track_RPChit_eta              ->clear();
01471     m_track_CSChit_phi              ->clear();
01472     m_track_TGChit_phi              ->clear();
01473     m_track_RPChit_phi              ->clear();
01474     m_track_d0                      ->clear();
01475     m_track_z0                      ->clear();
01476     m_track_chi2                    ->clear();
01477     m_track_nDoF                    ->clear();
01478     m_track_trackIsolationEnergy_s  ->clear();
01479     m_track_trackIsolationEnergy_0  ->clear();
01480     m_track_trackIsolationEnergy_1  ->clear();
01481     m_track_trackIsolationEnergy_2  ->clear();
01482     m_track_trackIsolationEnergy_3  ->clear();
01483 
01484     // electron data //
01485     m_nb_rec_electrons              = 0;
01486     m_e_p_x                         ->clear();
01487     m_e_p_y                         ->clear();      
01488     m_e_p_z                         ->clear();      
01489     m_e_E                           ->clear();     
01490     m_e_calo_p_x                    ->clear();
01491     m_e_calo_p_y                    ->clear();      
01492     m_e_calo_p_z                    ->clear();      
01493     m_e_calo_E                      ->clear();     
01494     m_e_charge                      ->clear();   
01495     m_e_isEM                        ->clear();
01496     m_e_id_flag                     ->clear();
01497     m_e_NeuralNet                   ->clear();
01498     m_e_egamma_flag                 ->clear();
01499     m_e_softe_flag                  ->clear();
01500     m_e_E_over_p                    ->clear();
01501     m_e_TRTHighThresholdHits        ->clear();
01502     m_e_TRTHits                     ->clear();
01503     m_e_ethad1                      ->clear();
01504     m_e_Et_in_cone_0                ->clear();
01505     m_e_Et_in_cone_1                ->clear();
01506     m_e_Et_in_cone_2                ->clear();
01507     m_e_Et_in_cone_3                ->clear();
01508     m_e_vertex_index                ->clear();
01509     m_e_track_Et_in_cone_0          ->clear();
01510     m_e_track_Et_in_cone_1          ->clear();
01511     m_e_track_Et_in_cone_2          ->clear();
01512     m_e_track_Et_in_cone_3          ->clear();
01513     m_e_trackIsolationEnergy_0      ->clear();
01514     m_e_trackIsolationEnergy_1      ->clear();
01515     m_e_trackIsolationEnergy_2      ->clear();
01516     m_e_trackIsolationEnergy_3      ->clear();
01517 
01518     // photon data //
01519     m_nb_rec_photons                = 0;
01520     m_p_calo_p_x                    ->clear();
01521     m_p_calo_p_y                    ->clear();      
01522     m_p_calo_p_z                    ->clear();      
01523     m_p_calo_E                      ->clear();     
01524     m_p_charge                      ->clear();   
01525     m_p_isEM                        ->clear();
01526     m_p_NeuralNet                   ->clear();
01527     m_p_egamma_flag                 ->clear();
01528     m_p_Et_in_cone_0                ->clear();
01529     m_p_Et_in_cone_1                ->clear();
01530     m_p_Et_in_cone_2                ->clear();
01531     m_p_Et_in_cone_3                ->clear();
01532   
01533     // muon data //
01534     m_nb_rec_muons                  = 0;
01535     m_mu_alg_flag                   ->clear();
01536     m_mu_p_x                        ->clear();
01537     m_mu_p_y                        ->clear();
01538     m_mu_p_z                        ->clear();
01539     m_mu_E                          ->clear();
01540     m_mu_p_x_standalone             ->clear();
01541     m_mu_p_y_standalone             ->clear();
01542     m_mu_p_z_standalone             ->clear();
01543     m_mu_E_standalone               ->clear();
01544     m_mu_p_x_ID                     ->clear();
01545     m_mu_p_y_ID                     ->clear();
01546     m_mu_p_z_ID                     ->clear();
01547     m_mu_E_ID                       ->clear();
01548     m_mu_charge                     ->clear();
01549     m_mu_fitChi2                    ->clear();
01550     m_mu_fitNumberDoF               ->clear();
01551     m_mu_fitChi2OverDoF             ->clear();
01552     m_mu_matchChi2                  ->clear();
01553     m_mu_matchNumberDoF             ->clear();
01554     m_mu_matchChi2OverDoF           ->clear();
01555     m_mu_flag                       ->clear();
01556     m_mu_hasCombinedMuonTrackParticle->clear();
01557     m_mu_Et_in_cone_0               ->clear();
01558     m_mu_Et_in_cone_1               ->clear();
01559     m_mu_Et_in_cone_2               ->clear();
01560     m_mu_Et_in_cone_3               ->clear();
01561     m_mu_Et_in_cone_4               ->clear();
01562     m_mu_Et_in_cone_5               ->clear();
01563     m_mu_Et_in_cone_6               ->clear();
01564     m_mu_Et_in_cone_7               ->clear();
01565     m_mu_nb_tracks_cone_0           ->clear();
01566     m_mu_nb_tracks_cone_1           ->clear();
01567     m_mu_nb_tracks_cone_2           ->clear();
01568     m_mu_nb_tracks_cone_3           ->clear();
01569     m_mu_nb_tracks_cone_4           ->clear();
01570     m_mu_nb_tracks_cone_5           ->clear();
01571     m_mu_nb_tracks_cone_6           ->clear();
01572     m_mu_nb_tracks_cone_7           ->clear();
01573     m_mu_author                     ->clear();
01574     m_mu_bestmatch                  ->clear();
01575     m_mu_vertex_index               ->clear();
01576     m_mu_track_Et_in_cone_0         ->clear();
01577     m_mu_track_Et_in_cone_1         ->clear();
01578     m_mu_track_Et_in_cone_2         ->clear();
01579     m_mu_track_Et_in_cone_3         ->clear();
01580     m_mu_track_Et_in_cone_4         ->clear();
01581     m_mu_track_Et_in_cone_5         ->clear();
01582     m_mu_track_Et_in_cone_6         ->clear();
01583     m_mu_track_Et_in_cone_7         ->clear();
01584     m_mu_trackIsolationEnergy_0     ->clear();
01585     m_mu_trackIsolationEnergy_1     ->clear();
01586     m_mu_trackIsolationEnergy_2     ->clear();
01587     m_mu_trackIsolationEnergy_3     ->clear();
01588     m_mu_trackIsolationEnergy_4     ->clear();
01589     m_mu_trackIsolationEnergy_5     ->clear();
01590     m_mu_trackIsolationEnergy_6     ->clear();
01591     m_mu_trackIsolationEnergy_7     ->clear();
01592     
01593     // jet data //
01594     m_nb_rec_jets                   = 0;
01595     m_jet_p_x                       ->clear();
01596     m_jet_p_y                       ->clear();
01597     m_jet_p_z                       ->clear();
01598     m_jet_E                         ->clear();
01599     m_jet_flag                      ->clear();
01600     m_jet_btag_weight               ->clear();
01601     m_jet_truthflavor               ->clear();
01602     m_jet_nb_tracks                 ->clear();
01603     m_jet_tracks_charge             ->clear();
01604     m_jet_tracks_p_x                ->clear();
01605     m_jet_tracks_p_y                ->clear();
01606     m_jet_tracks_p_z                ->clear();
01607     m_jet_tracks_E                  ->clear();
01608 
01609     // tau jet data //
01610     m_nb_tau_jets                   = 0;
01611     m_taujet_p_x                    ->clear();
01612     m_taujet_p_y                    ->clear(); 
01613     m_taujet_p_z                    ->clear(); 
01614     m_taujet_E                      ->clear();  
01615     m_taujet_flag                   ->clear();
01616     m_taujet_charge                 ->clear();
01617     m_taujet_etHadCalib             ->clear();
01618     m_taujet_etEMCalib              ->clear();
01619     m_taujet_emRadius               ->clear();
01620     m_taujet_isolationFraction      ->clear();
01621     m_taujet_centralityFraction     ->clear();
01622     m_taujet_stripWidth2            ->clear();
01623     m_taujet_nStripCells            ->clear();
01624     m_taujet_leadingTrackPT         ->clear();
01625     m_taujet_trFlightPathSig        ->clear();
01626     m_taujet_etOverPtLeadTrack      ->clear();
01627     m_taujet_ipSigLeadTrack         ->clear();
01628     m_taujet_etChrgHAD              ->clear();
01629     m_taujet_etIsolEM               ->clear();
01630     m_taujet_etIsolHAD              ->clear();
01631     m_taujet_nAssocTracksCore       ->clear();
01632     m_taujet_nAssocTracksIsol       ->clear();
01633     m_taujet_massTrk3P              ->clear();
01634     m_taujet_rWidth2Trk3P           ->clear();
01635     m_taujet_signD0Trk3P            ->clear();
01636     m_taujet_etHadAtEMScale         ->clear();
01637     m_taujet_etEMAtEMScale          ->clear();
01638     m_taujet_etEMCL                 ->clear();
01639     m_taujet_etChrgEM               ->clear();
01640     m_taujet_etNeuEM                ->clear();
01641     m_taujet_etResNeuEM             ->clear();
01642     m_taujet_llh                    ->clear();
01643     m_taujet_discNN                 ->clear();
01644     m_taujet_discPDERS              ->clear();
01645     m_taujet_lowPtTauJetDiscriminant->clear();
01646     m_taujet_lowPtTauEleDiscriminant->clear();
01647     m_taujet_tauJetNeuralnetwork    ->clear();
01648     m_taujet_tauENeuralNetwork      ->clear();
01649     m_taujet_bdtJet                 ->clear();
01650     m_taujet_bdtEle                 ->clear();
01651     m_taujet_nb_tracks              ->clear();
01652     m_taujet_track_px_1             ->clear();
01653     m_taujet_track_py_1             ->clear();
01654     m_taujet_track_pz_1             ->clear();
01655     m_taujet_track_e_1              ->clear();
01656     m_taujet_track_TRTHighThresholdHits_1->clear();
01657     m_taujet_track_TRTHits_1        ->clear();
01658     m_taujet_track_px_2             ->clear();
01659     m_taujet_track_py_2             ->clear();
01660     m_taujet_track_pz_2             ->clear();
01661     m_taujet_track_e_2              ->clear();
01662     m_taujet_track_TRTHighThresholdHits_2->clear();
01663     m_taujet_track_TRTHits_2        ->clear();
01664     m_taujet_track_px_3             ->clear();
01665     m_taujet_track_py_3             ->clear();
01666     m_taujet_track_pz_3             ->clear();
01667     m_taujet_track_e_3              ->clear();
01668     m_taujet_track_TRTHighThresholdHits_3->clear();
01669     m_taujet_track_TRTHits_3        ->clear();
01670 
01671     // truthjet data //
01672     m_nb_truth_jets                 = 0;
01673     m_truthjet_p_x                  ->clear();
01674     m_truthjet_p_y                  ->clear();
01675     m_truthjet_p_z                  ->clear();
01676     m_truthjet_E                    ->clear();
01677     m_truthjet_flag                 ->clear();
01678     m_truthjet_btag_weight          ->clear();
01679 
01680     // missingEt data //
01681     m_met_obj_name                  ->clear();    
01682     m_missing_Etx                   ->clear(); 
01683     m_missing_Ety                   ->clear(); 
01684     m_missing_Et                    ->clear();  
01685     m_missing_Etsum                 ->clear();
01686 
01687     // truth data //
01688     m_nb_truth_particle_all         = 0;
01689     m_nb_truth_particle             = 0;
01690     m_truth_particle_pt             ->clear();
01691     m_truth_particle_status         ->clear();
01692     m_truth_particle_barcode        ->clear();
01693     m_truth_particle_pdgId          ->clear();
01694     m_truth_particle_nDaughters     ->clear();
01695     m_truth_particle_p_x            ->clear();
01696     m_truth_particle_p_y            ->clear();
01697     m_truth_particle_p_z            ->clear();
01698     m_truth_particle_E              ->clear();
01699     m_truth_particle_charge         ->clear();
01700     m_truth_particle_nParents       ->clear();
01701     m_truth_particle_mother0_barcode->clear();
01702     m_truth_particle_mother0_pdgId  ->clear();
01703 
01704     m_event_weight = 0;
01705 
01706     // vertex data //
01707     m_nb_vertices                   = 0;
01708     m_vertex_position_x             ->clear();
01709     m_vertex_position_y             ->clear();
01710     m_vertex_position_z             ->clear();
01711     m_vertex_pos_error_x            ->clear();
01712     m_vertex_pos_error_y            ->clear();
01713     m_vertex_pos_error_z            ->clear();
01714     m_vertex_chi2                   ->clear();
01715     m_vertex_ndof                   ->clear();
01716     m_vertex_Et                     ->clear();
01717     m_vertex_nb_tracks              ->clear();
01718 
01719     // truth vertex data //
01720     m_nb_truth_vertices             = 0;
01721     m_truth_vertex_position_x       ->clear();
01722     m_truth_vertex_position_y       ->clear();
01723     m_truth_vertex_position_z       ->clear();
01724     m_truth_vertex_Et               ->clear();
01725     m_truth_vertex_nb_tracks        ->clear();
01726 
01727     // track-jet data //
01728     m_nb_track_jets                 = 0;
01729     m_track_jet_p_x                 ->clear();
01730     m_track_jet_p_y                 ->clear();
01731     m_track_jet_p_z                 ->clear();
01732     m_track_jet_E                   ->clear();
01733 
01734     // truth track-jet data //
01735     m_nb_truth_track_jets           = 0;
01736     m_truth_track_jet_p_x           ->clear();
01737     m_truth_track_jet_p_y           ->clear();
01738     m_truth_track_jet_p_z           ->clear();
01739     m_truth_track_jet_E             ->clear();
01740 
01741     return StatusCode::SUCCESS;
01742 
01743   }
01744 
01745 //*****************************************************************************
01746 
01747 //:::::::::::::::::::::::::::::::::::::::
01748 //:: METHOD get_trigger_muon_lvl1_data ::
01749 //:::::::::::::::::::::::::::::::::::::::
01750 
01751 bool AANtupleWriter14::get_trigger_muon_lvl1_data(void) {
01752 
01753     *m_log << MSG::DEBUG << "in get_trigger_muon_lvl1_data()" << endreq;
01754     StatusCode sc = StatusCode::SUCCESS;
01755     m_nb_trigger_mu_lvl1=0;
01756     const LVL1_ROI* lvl1ROI=0;
01757     sc = m_storeGate->retrieve(lvl1ROI);
01758   
01759     if(sc.isFailure()) {
01760         *m_log  << MSG::ERROR << "Can't retrieve the Muon lvl1" << endreq;
01761         return false;
01762     }    
01763 
01764     // L1 Muon trigger bits
01765     // const double muonThresholdsLvl1[6] = {6.,8.,10.,11.,20.,40.};
01766     if ( lvl1ROI != 0 ) {
01767         for( LVL1_ROI::muons_type::const_iterator it = (lvl1ROI->getMuonROIs()).begin(); 
01768             it != (lvl1ROI->getMuonROIs()).end(); ++it ) {
01769             m_nb_trigger_mu_lvl1++;
01770             double phi = (*it).getPhi();
01771             if (phi>TMath::Pi()) phi = phi - 2.*TMath::Pi();
01772             m_trigger_mu_lvl1_phi->push_back(phi);
01773             m_trigger_mu_lvl1_eta->push_back((*it).getEta());
01774             m_trigger_mu_lvl1_threshold_value->push_back((*it).getThrValue());
01775             m_trigger_mu_lvl1_threshold_name->push_back((*it).getThrName());
01776             m_trigger_mu_lvl1_threshold_number->push_back((*it).getThrNumber());
01777             m_trigger_mu_lvl1_roiword->push_back((*it).getROIWord());
01778             m_trigger_mu_lvl1_confirmed->push_back(false);
01779         }
01780     }
01781     return true;
01782 }
01783 
01784 //*****************************************************************************
01785 
01786 //:::::::::::::::::::::::::::::::::::::::
01787 //:: METHOD get_trigger_muon_lvl2_data ::
01788 //:::::::::::::::::::::::::::::::::::::::
01789 
01790 bool AANtupleWriter14::get_trigger_muon_lvl2_data(void) {
01791 
01792     *m_log << MSG::DEBUG << "in get_trigger_muon_lvl2_data()" << endreq;
01793     StatusCode sc = StatusCode::SUCCESS;
01794     m_nb_trigger_mu_lvl2=0;
01795     const DataHandle<CombinedMuonFeature> combMuonFeatureIt; 
01796     const DataHandle<CombinedMuonFeature> combMuonFeatureItEnd; 
01797         sc = m_storeGate->retrieve(combMuonFeatureIt,combMuonFeatureItEnd);
01798         if (sc != StatusCode::SUCCESS) {
01799             *m_log  << MSG::ERROR << "Can't retrieve the Muon lvl2" << endreq;
01800             return true;
01801         }
01802         for ( ; combMuonFeatureIt != combMuonFeatureItEnd ; ++combMuonFeatureIt ) {    
01803             bool   matchFound = false;
01804             double dRmin = 10000.;
01805             double phi_l2=combMuonFeatureIt->phi();
01806             if (phi_l2>TMath::Pi()) phi_l2 = phi_l2-2.*TMath::Pi();
01807             for (int l1=0 ; l1<m_nb_trigger_mu_lvl1 ; ++l1) { 
01808                 double deltaEta = combMuonFeatureIt->eta()-(*m_trigger_mu_lvl1_eta)[l1];
01809                 double deltaPhi = phi_l2-(*m_trigger_mu_lvl1_phi)[l1];
01810                 deltaPhi=TMath::Abs(deltaPhi);
01811                 if (deltaPhi>TMath::Pi()) deltaPhi=2.*TMath::Pi()-deltaPhi;
01812                 double deltaR = sqrt(deltaEta*deltaEta+deltaPhi*deltaPhi);
01813                 if (deltaR<dRmin) {
01814                     (*m_trigger_mu_lvl1_confirmed)[l1]=true;
01815                     dRmin = deltaR;
01816                 }
01817             }
01818             if (dRmin<0.15) {
01819                 matchFound=true;
01820             }
01821             
01822             if (matchFound) {
01823                 m_nb_trigger_mu_lvl2++;
01824                 m_trigger_mu_lvl2_eta->push_back(combMuonFeatureIt->eta());
01825                 m_trigger_mu_lvl2_phi->push_back(phi_l2);
01826                 m_trigger_mu_lvl2_pt->push_back(combMuonFeatureIt->pt());
01827                 m_trigger_mu_lvl2_sigma_pt->push_back(combMuonFeatureIt->sigma_pt());
01828             }
01829         }
01830     
01831     
01832     return true;    
01833 }
01834 
01835 //*****************************************************************************
01836 
01837 //:::::::::::::::::::::::::::::::::::::
01838 //:: METHOD get_trigger_muon_ef_data ::
01839 //:::::::::::::::::::::::::::::::::::::
01840 
01841 bool AANtupleWriter14::get_trigger_muon_ef_data(void) {
01842 
01843     *m_log << MSG::DEBUG << "in get_trigger_muon_ef_data()" << endreq;
01844 
01845 StatusCode sc = StatusCode::SUCCESS;
01846   
01847     const DataHandle<TrigMuonEFContainer> trigEcontIt; 
01848     const DataHandle<TrigMuonEFContainer> trigEcontEnd; 
01849     m_nb_trigger_mu_ef=0;   
01850         sc = m_storeGate->retrieve(trigEcontIt,trigEcontEnd);
01851         if (sc != StatusCode::SUCCESS) {
01852             *m_log  << MSG::ERROR << "Can't retrieve the Muon ef" << endreq;
01853             return true;
01854         }
01855   
01856         for (;trigEcontIt != trigEcontEnd; ++trigEcontIt) {    
01857             string contName = trigEcontIt.key();
01858             if( contName.find("_HLTAutoKey") != string::npos) {
01859                 TrigMuonEFContainer::const_iterator trigmuItr = trigEcontIt->begin();
01860                 TrigMuonEFContainer::const_iterator trigmuItrE = trigEcontIt->end();
01861                 for(; trigmuItr != trigmuItrE; ++trigmuItr) {
01862                     bool   matchFound = false;
01863                     double dRmin = 10000.;
01864                     double phi_ef=(*trigmuItr)->phi();
01865                     if (phi_ef>TMath::Pi()) phi_ef = phi_ef-2.*TMath::Pi();
01866                     for (int l2=0 ; l2<m_nb_trigger_mu_lvl2 ; ++l2) { 
01867                         double deltaEta = (*trigmuItr)->eta()-(*m_trigger_mu_lvl2_eta)[l2];
01868                         double deltaPhi = phi_ef-(*m_trigger_mu_lvl2_phi)[l2];
01869                         deltaPhi=TMath::Abs(deltaPhi);
01870                         if (deltaPhi>TMath::Pi()) deltaPhi=2.*TMath::Pi()-deltaPhi;
01871                         double deltaR = sqrt(deltaEta*deltaEta+deltaPhi*deltaPhi);
01872                         if (deltaR<dRmin) {
01873                             dRmin = deltaR;
01874                         }
01875                 }
01876                 if (dRmin<0.15) {
01877                     matchFound=true;
01878                 }
01879                 if (matchFound) {
01880                     m_nb_trigger_mu_ef++;
01881                     m_trigger_mu_ef_code->push_back((*trigmuItr)->MuonCode());
01882                     m_trigger_mu_ef_eta->push_back((*trigmuItr)->eta());
01883                     m_trigger_mu_ef_phi->push_back(phi_ef);
01884                     m_trigger_mu_ef_pt->push_back((*trigmuItr)->pt());
01885                     m_trigger_mu_ef_charge1->push_back((*trigmuItr)->charge());
01886                     m_trigger_mu_ef_charge2->push_back((*trigmuItr)->Charge());
01887                 }
01888            } 
01889         }
01890     }
01891     return true;    
01892 }
01893 
01894 //*****************************************************************************
01895 
01896   //:::::::::::::::::::::::::::::::::
01897   //:: METHOD get_trigger_met_data ::
01898   //:::::::::::::::::::::::::::::::::
01899 
01900 bool AANtupleWriter14::get_trigger_met_data(void) {
01901         
01902     *m_log << MSG::DEBUG << "in get_trigger_met_data()" << endreq;
01903         
01904     StatusCode sc = StatusCode::SUCCESS;
01905         
01906     const TrigMissingET *trigger_met_container = NULL;      
01907     sc =m_storeGate->retrieve(trigger_met_container,m_trigger_met_container);
01908     if(sc.isFailure() || trigger_met_container==0) {
01909         *m_log << MSG::WARNING
01910                << "No trigger met container found in the store gate!"
01911                << endreq;
01912         return true;
01913     }
01914     *m_log << MSG::DEBUG << "trigger met container retrieved successfully!"
01915            << endreq;
01916         
01917         
01918     // trigger met //
01919     m_trigger_met_ex=trigger_met_container->ex();
01920     m_trigger_met_ey=trigger_met_container->ey();
01921     m_trigger_met_et=trigger_met_container->et();
01922     m_trigger_met_sumEt=trigger_met_container->sumEt();
01923     m_trigger_met_RoIword=trigger_met_container->RoIword();
01924         
01925         
01926     return true;
01927   }
01928 
01929 
01930 
01931 
01932 
01933 //*****************************************************************************
01934 
01935   //:::::::::::::::::::::::::::::
01936   //:: METHOD get_trigger_data ::
01937   //:::::::::::::::::::::::::::::
01938 
01939 bool AANtupleWriter14::get_trigger_data(void) {
01940     
01942     //the following has to be checked carefully!!//
01943     //* change isPassed to isPhysicsPassed once  //
01944     //  new athena (>14.2.0) is available        //
01945     //* uncomment getFullChainPrescaleFactor()   //
01946     //  methods (>14.2.0)                        // 
01948     //Level 1
01949     const std::vector<const LVL1CTP::Lvl1Item*> allItems = m_trigDec->getL1Items();
01950     if (!allItems.empty()) {
01951         for (std::vector<const LVL1CTP::Lvl1Item*>::const_iterator aItem = allItems.begin();
01952             aItem != allItems.end(); ++aItem) {
01953             if (!*aItem) continue;
01954             if ((*aItem)->name()=="") continue;
01955             *m_log << MSG::DEBUG << "Item " << (*aItem)->name() << 
01956                 " : Item ID " << (*aItem)->hashId() << " : " << (*aItem)->isPassed() << endreq;
01957             m_trigger_keys_l1->push_back((*aItem)->name());
01958             m_trigger_keys_status_l1->push_back((*aItem)->isPassed());
01959 //            m_trigger_keys_status_l1->push_back((*aItem)->isPhysicsPassed());
01960 //            m_trigger_keys_status_l1->push_back((*aItem)->getFullChainPrescaleFactor());
01961         }
01962     }
01963 
01964    // HLT Chains
01965     const std::vector< const TrigConf::HLTChain * > confChains = m_trigDec->getConfigurationChains();
01966     *m_log << MSG::INFO << "Configuring for " << confChains.size() << " HLT chain counters" << endreq;
01967     std::vector< const TrigConf::HLTChain *>::const_iterator iter;
01968         for (iter = confChains.begin(); iter != confChains.end(); ++iter){
01969             std::string name = (*iter)->chain_name();
01970             std::string tmp_name = name.substr(0,3);
01971             if (tmp_name=="L2_") {
01972                 m_trigger_keys_l2->push_back((*iter)->chain_name());
01973                 m_trigger_keys_status_l2->push_back(m_trigDec->isPassed(tmp_name));
01974 //                m_trigger_keys_status_l2->push_back(m_trigDec->isPhysicsPassed(tmp_name));
01975 //                m_trigger_keys_prescale_l2->push_back((*iter)->getFullChainPrescaleFactor());
01976             }
01977             else if (tmp_name=="EF_") {
01978                 m_trigger_keys_ef->push_back((*iter)->chain_name());
01979                 m_trigger_keys_status_ef->push_back(m_trigDec->isPassed(tmp_name));
01980 //                m_trigger_keys_status_ef->push_back(m_trigDec->isPhysicsPassed(tmp_name));
01981 //                m_trigger_keys_prescale_ef->push_back((*iter)->getFullChainPrescaleFactor());
01982             }
01983             else *m_log << MSG::ERROR << "unknown trigger level: " << name << endreq;
01984             *m_log << MSG::DEBUG << "Configured chain: " << name <<
01985                 "; prescale=" << (*iter)->prescale()
01986                 << "; passthrough=" << (*iter)->pass_through() 
01987                 << "; lower chain=" << (*iter)->lower_chain_name() << endreq;
01988     }
01989 //    for (unsigned int i=0; i<m_trigger_keys_l2->size(); ++i){
01990 //        const HLT::Chain* aChain = m_trigDec->getHLTChain((*m_trigger_keys_l2)[i]);
01991 //        if (!aChain) continue;
01992 //        ///////////////////////////////////////////
01993 //        //HLT::Chain::chainPassedRaw(): this is before any 
01994 //        //prescale, pass-through.
01995 //        //shall this be used????
01996 //        //or just: m_trigDec->isPassed(name)???
01997 //        //or:      chain->chainPassed()  
01998 //        //or:      chain->chainPassedRaw()  
01999 //        ///////////////////////////////////////////
02000 //        m_trigger_keys_status_l2->push_back(aChain->chainPassedRaw());
02001 //    }
02002 //    for (unsigned int i=0; i<m_trigger_keys_ef->size(); ++i){
02003 //        const HLT::Chain* aChain = m_trigDec->getHLTChain((*m_trigger_keys_ef)[i]);
02004 //        if (!aChain) continue;
02005 //        m_trigger_keys_status_ef->push_back(aChain->chainPassedRaw());
02006 //    }
02007     return true;
02008 }
02009 
02010 //    bool trigger_exists;
02011 //    trigger_exists = false;
02012 //        
02013 //    *m_log << MSG::DEBUG << "in get_trigger_data()" << endreq;
02014 //        
02015 //    StatusCode sc = StatusCode::SUCCESS;
02016 //        
02017 //    // check if TriggerDecision exists
02018 //    if (m_storeGate->contains<TriggerDecision>( m_trigger_decision_container )) {
02019 //        *m_log << MSG::INFO << "TriggerDecision with container name "
02020 //               << m_trigger_decision_container 
02021 //               << " found in StoreGate" << endreq;
02022 //        trigger_exists = true;
02023 //    }
02024 //    else{
02025 //        *m_log << MSG::INFO << "TriggerDecision with container name "
02026 //               << m_trigger_decision_container 
02027 //               << " NOT found in StoreGate" << endreq;
02028 //        trigger_exists = false;
02029 //    }
02030 //        
02031 //        
02032 //    if(trigger_exists == false){
02033 //        m_trigger_l1_defined = false;
02034 //        m_trigger_l2_defined = false;
02035 //        m_trigger_ef_defined = false;
02036 //    }
02037 //    if(trigger_exists == true){
02038 //        m_trigger_l1_defined = false;
02039 //        m_trigger_l2_defined = false;
02040 //        m_trigger_ef_defined = false;
02041 //        const TriggerDecision* trigger_container;
02042 //        sc = m_storeGate->retrieve(trigger_container, m_trigger_decision_container);
02043 //        if(sc.isFailure() || trigger_container==0) {
02044 //            *m_log << MSG::WARNING
02045 //                   << "No trigger container found in the store gate!"
02046 //                   << endreq;
02047 //            return false;
02048 //        }
02049 //        // check which levels were switched on
02050 //                
02051 //        // Level 1 keys
02052 //        if ( trigger_container->isDefinedL1() ) {
02053 //            m_trigger_l1_defined = true;
02054 //            // print L1 signature labels & result
02055 //            map<string, bool> l1sig = trigger_container->L1map();
02056 //            map<string, bool>::iterator it=l1sig.begin();
02057 //            for (; it != l1sig.end(); ++it) {
02058 //                *m_log << MSG::INFO << "  * Signature name=" << it->first 
02059 //                       << "; result=" << (it->second ? "passed" : "failed") << endreq;
02060 //                m_trigger_keys_l1->push_back(it->first );
02061 //                m_trigger_keys_status_l1->push_back((int)it->second );
02062 //            }
02063 //            if(m_trigger_keys_l1->size()!=m_trigger_keys_status_l1->size()){
02064 //                *m_log << MSG::ERROR <<"Unequal vector size! "<<endl
02065 //                       <<"Key-vector size: "<<m_trigger_keys_l1->size()<<endl
02066 //                       <<"Status-vector size: "<<m_trigger_keys_status_l1->size()<<endl;
02067 //            }
02068 //        }
02069 //                
02070 //                
02071 //        // Level 2 keys
02072 //        if ( trigger_container->isDefinedL2() ) {
02073 //            m_trigger_l2_defined = true;
02074 //            // print L2 signature labels & result
02075 //            map<string, bool> l2sig = trigger_container->L2map();
02076 //            map<string, bool>::iterator it=l2sig.begin();
02077 //            for (; it != l2sig.end(); ++it) {
02078 //                *m_log << MSG::INFO << "  * Signature name=" << it->first 
02079 //                       << "; result=" << (it->second ? "passed" : "failed") << endreq;
02080 //                m_trigger_keys_l2->push_back(it->first );
02081 //                m_trigger_keys_status_l2->push_back((int)it->second );
02082 //            }
02083 //            if(m_trigger_keys_l2->size()!=m_trigger_keys_status_l2->size()){
02084 //                *m_log << MSG::ERROR <<"Unequal vector size! "<<endl
02085 //                       <<"Key-vector size: "<<m_trigger_keys_l2->size()<<endl
02086 //                       <<"Status-vector size: "<<m_trigger_keys_status_l2->size()<<endl;
02087 //            }
02088 //                        
02089 //        }
02090 //                
02091 //        // Level 3 keys (event filter)
02092 //        if ( trigger_container->isDefinedEF() ) {
02093 //            m_trigger_ef_defined = true;
02094 //            // print ef signature labels & result
02095 //            map<string, bool> efsig = trigger_container->EFmap();
02096 //            map<string, bool>::iterator it=efsig.begin();
02097 //            for (; it != efsig.end(); ++it) {
02098 //                *m_log << MSG::INFO << "  * Signature name=" << it->first 
02099 //                       << "; result=" << (it->second ? "passed" : "failed") << endreq;
02100 //                m_trigger_keys_ef->push_back(it->first );
02101 //                m_trigger_keys_status_ef->push_back((int)it->second );
02102 //            }
02103 //            if(m_trigger_keys_ef->size()!=m_trigger_keys_status_ef->size()){
02104 //                *m_log << MSG::ERROR <<"Unequal vector size! "<<endl
02105 //                       <<"Key-vector size: "<<m_trigger_keys_ef->size()<<endl
02106 //                       <<"Status-vector size: "<<m_trigger_keys_status_ef->size()<<endl;
02107 //            }
02108 //        }
02109 //                
02110 //                
02111 //    }
02112         
02113 
02114 //*****************************************************************************
02115 
02116   //:::::::::::::::::::::::::::::::::::
02117   //:: METHOD get_trackparticle_data ::
02118   //:::::::::::::::::::::::::::::::::::
02119 
02120 bool AANtupleWriter14::get_trackparticle_data(void) {
02121 
02123     // VARIABLES //
02125 
02126     const Rec::TrackParticleContainer *track_particle_container(0); // container with 
02127     // reconstructed
02128     // track particles
02130     // GET A POINTER TO THE TRACK PARTICLES CONTAINER //
02132 
02133     StatusCode sc(m_storeGate->retrieve(track_particle_container, 
02134                                         m_track_particle_container));
02135     if(sc.isFailure() || track_particle_container==0) {
02136         *m_log << MSG::WARNING
02137                << "No track particle container found in the store gate!"
02138                << endreq;
02139         return false;
02140     }
02141     *m_log << MSG::DEBUG << "track particle container retrieved successfully!"
02142            << endreq;
02143 
02145     // RECONSTRUCTED TRACKS //
02147 
02148     // loop over the electron candidates //
02149     for (unsigned int k=0; k<track_particle_container->size(); k++) {
02150 
02151         // selection criteria //
02152         // provider of the track_particle candidate //
02153 
02154         // store trackparticle candidate into AAN //
02155         // number of trackparticles //
02156         m_nb_rec_tracks++;
02157 
02158         // fourmomentum (according to the tracker) //
02159 
02160         m_track_p_x->push_back( (*track_particle_container)[k]->px() );
02161         m_track_p_y->push_back( (*track_particle_container)[k]->py() );
02162         m_track_p_z->push_back( (*track_particle_container)[k]->pz() );
02163         m_track_E->push_back( (*track_particle_container)[k]->e() );
02164 
02165         // charge //
02166         m_track_charge->push_back( static_cast<int>( (*track_particle_container)[k]->charge()) );
02167 
02168        // vertex //
02169         if (!m_AtlFastFlag && m_doVertices) {
02170             
02171             if ((*track_particle_container)[k]->reconstructedVertex()==NULL) {
02172                 m_track_vertex_index->push_back(-1);
02173             } else {
02175                 //m_track_vertex_index
02176                 //    ->push_back(find_vertex((*track_particle_container)[k]->reconstructedVertex()));
02177             }
02178         }
02179         else{
02180             m_track_vertex_index->push_back(-1);
02181             }
02182 
02183         if (!m_AtlFastFlag){ 
02184             m_track_chi2->push_back(((*track_particle_container)[k]->fitQuality())->chiSquared());
02185             m_track_nDoF->push_back(((*track_particle_container)[k]->fitQuality())->numberDoF());
02186             const Trk::TrackSummary* trksumy=(*track_particle_container)[k]->trackSummary();
02187             m_track_SCThit->push_back(trksumy->get(Trk::numberOfSCTHits));                    
02188             m_track_Phit->push_back(trksumy->get(Trk::numberOfPixelHits));                      
02189             m_track_BLayerhit->push_back(trksumy->get(Trk::numberOfBLayerHits));                
02190             m_track_TRThit->push_back(trksumy->get(Trk::numberOfTRTHits));                
02191             m_track_MDThit->push_back(trksumy->get(Trk::numberOfMdtHits));                
02192             m_track_CSChit_eta->push_back(trksumy->get(Trk::numberOfCscEtaHits));                
02193             m_track_TGChit_eta->push_back(trksumy->get(Trk::numberOfTgcEtaHits));                
02194             m_track_RPChit_eta->push_back(trksumy->get(Trk::numberOfRpcEtaHits));               
02195             m_track_CSChit_phi->push_back(trksumy->get(Trk::numberOfCscPhiHits));                 
02196             m_track_TGChit_phi->push_back(trksumy->get(Trk::numberOfTgcPhiHits));                
02197             m_track_RPChit_phi->push_back(trksumy->get(Trk::numberOfRpcPhiHits));  
02198             const Trk::MeasuredPerigee* trkperi=(*track_particle_container)[k]->measuredPerigee();
02199             m_track_d0->push_back(trkperi->parameters()[Trk::d0]);
02200             m_track_z0->push_back(trkperi->parameters()[Trk::z0]); 
02201         }
02202         else{         
02203             m_track_chi2->push_back(-9);
02204             m_track_nDoF->push_back(-9);  
02205             m_track_SCThit->push_back(-9);                    
02206             m_track_Phit->push_back(-9);                      
02207             m_track_BLayerhit->push_back(-9);                
02208             m_track_TRThit->push_back(-9);                
02209             m_track_MDThit->push_back(-9);                
02210             m_track_CSChit_eta->push_back(-9);                
02211             m_track_TGChit_eta->push_back(-9);                
02212             m_track_RPChit_eta->push_back(-9);               
02213             m_track_CSChit_phi->push_back(-9);                 
02214             m_track_TGChit_phi->push_back(-9);                
02215             m_track_RPChit_phi->push_back(-9);               
02216             m_track_d0->push_back(-9);                    
02217             m_track_z0->push_back(-9);   
02218         }
02219 
02220     if (!m_AtlFastFlag) {
02221            m_track_trackIsolationEnergy_s->push_back(
02222                m_trackIsolationTool->trackIsolationEnergy((*track_particle_container)[k],0.01));
02223            m_track_trackIsolationEnergy_0->push_back(
02224                m_trackIsolationTool->trackIsolationEnergy((*track_particle_container)[k],0.2));
02225            m_track_trackIsolationEnergy_1->push_back(
02226                m_trackIsolationTool->trackIsolationEnergy((*track_particle_container)[k],0.3));
02227            m_track_trackIsolationEnergy_2->push_back(
02228                m_trackIsolationTool->trackIsolationEnergy((*track_particle_container)[k],0.4));
02229            m_track_trackIsolationEnergy_3->push_back(
02230                m_trackIsolationTool->trackIsolationEnergy((*track_particle_container)[k],0.45));
02231         }
02232        else {
02233          m_track_trackIsolationEnergy_s->push_back(-999);
02234          m_track_trackIsolationEnergy_0->push_back(-999);
02235          m_track_trackIsolationEnergy_1->push_back(-999);
02236          m_track_trackIsolationEnergy_2->push_back(-999);
02237          m_track_trackIsolationEnergy_3->push_back(-999);
02238        }
02239 
02240     
02241     
02242     }//track particle loop
02243 
02244     return true;
02245 
02246 }
02247 
02248 
02249 
02250 
02251 //*****************************************************************************
02252 
02253   //::::::::::::::::::::::::::::
02254   //:: METHOD get_photon_data ::
02255   //::::::::::::::::::::::::::::
02256 
02257 bool AANtupleWriter14::get_photon_data(void) {
02258 
02260     // VARIABLES //
02262 
02263     const PhotonContainer *photon_container(0); // container with 
02264     // reconstructed photons
02265 
02267     // GET A POINTER TO THE PhotON CONTAINER //
02269 
02270     StatusCode sc(m_storeGate->retrieve(photon_container, 
02271                                         m_photon_container));
02272     if(sc.isFailure() || photon_container==0) {
02273         *m_log << MSG::WARNING
02274                << "No photon container found in the store gate!"
02275                << endreq;
02276         return false;
02277     }
02278     *m_log << MSG::DEBUG << "photon container retrieved successfully!"
02279            << endreq;
02280     
02282     // RECONSTRUCTED photONS //
02284 
02285     // loop over the photon candidates //
02286     for (unsigned int k=0; k<photon_container->size(); k++) {
02287 
02288         // selection criteria //
02289         // provider of the photon candidate //
02290         if (m_photon_container!=string("AtlfastPhotonCollection")
02291             && ((*photon_container)[k]->author()!=
02292                 egammaParameters::AuthorPhoton )) {
02293             continue;
02294         }
02295 
02296         // store photon candidate into AAN //
02297         // number of photons //
02298         m_nb_rec_photons++;
02299 
02300         // fourmomentum (according to the tracker) //
02301 
02302 
02303         // fourmomentum from calorimeter
02304 
02305         m_p_calo_p_x->push_back(
02306                                 (*photon_container)[k]->px() );
02307         m_p_calo_p_y->push_back(
02308                                 (*photon_container)[k]->py() );
02309         m_p_calo_p_z->push_back(
02310                                 (*photon_container)[k]->pz() );
02311         m_p_calo_E->push_back( 
02312                               (*photon_container)[k]->e() );
02313 
02314 
02315 
02316         // charge //
02317         m_p_charge->push_back( static_cast<int>(
02318                                                 (*photon_container)[k]->charge()) );
02319 
02320         // flags //
02321         if (m_photon_container!=string("AtlfastPhotonCollection")) {
02322             m_p_egamma_flag->push_back( 
02323                                        ((*photon_container)[k]->author()==
02324                                         egammaParameters::AuthorPhoton) &&
02325                                        ((*photon_container)[k]->isem()%16==0) );
02326         } else {
02327             m_p_egamma_flag->push_back( 1 );
02328         }
02329 
02330         m_p_isEM->push_back((*photon_container)[k]->isem() );
02331         m_p_NeuralNet->push_back((*photon_container)[k]
02332                                  ->egammaID(egammaPID::NeuralNet) );
02333 
02334         //-----------------------------------------------------
02335         //ToDo:
02336         // only etcone20 is filled in AOD, the others are -999, why?
02337         //-----------------------------------------------------
02338 
02339         // energy in cones around the photon //
02340         if(!m_AtlFastFlag){
02341             const EMShower *shower = 
02342                 (*photon_container)[k]->detail<EMShower>(m_showerContainerName);
02343             
02344             if(!shower){
02345                 *m_log << MSG::ERROR
02346                        << "Unable to retrieve a pointer to EMShower container!"
02347                        << endreq;
02348             }
02349             
02350             m_p_Et_in_cone_0->push_back( shower->etcone20() );
02351             m_p_Et_in_cone_1->push_back( shower->etcone30() );
02352             m_p_Et_in_cone_2->push_back( shower->etcone40() );
02353             m_p_Et_in_cone_3->push_back( shower->etcone() );
02354         }
02355         else{
02356             m_p_Et_in_cone_0->push_back(0);
02357             m_p_Et_in_cone_1->push_back(0);
02358             m_p_Et_in_cone_2->push_back(0);
02359             m_p_Et_in_cone_3->push_back(0);
02360  
02361         }
02362     }
02363 
02364     return true;
02365 
02366   }
02367 //*****************************************************************************
02368 
02369   //::::::::::::::::::::::::::::::
02370   //:: METHOD get_electron_data ::
02371   //::::::::::::::::::::::::::::::
02372 
02373 bool AANtupleWriter14::get_electron_data(void) {
02374 
02376     // VARIABLES //
02378 
02379     const ElectronContainer *electron_container(0); // container with 
02380     // reconstructed
02381     // electrons
02382 
02384     // GET A POINTER TO THE ELECTRON CONTAINER //
02386 
02387     StatusCode sc(m_storeGate->retrieve(electron_container, 
02388                                         m_electron_container));
02389     if(sc.isFailure() || electron_container==0) {
02390         *m_log << MSG::WARNING
02391                << "No electron container found in the store gate!"
02392                << endreq;
02393         return false;
02394     }
02395     *m_log << MSG::DEBUG << "Electron container retrieved successfully!"
02396            << endreq;
02397 
02399     // RECONSTRUCTED ELECTRONS //
02401 
02402     // loop over the electron candidates //
02403     for (unsigned int k=0; k<electron_container->size(); k++) {
02404 
02405         // selection criteria //
02406         // provider of the electron candidate //
02407         if (m_electron_container!=string("AtlfastElectronCollection")
02408             && ((*electron_container)[k]->author()!=
02409                 egammaParameters::AuthorElectron &&
02410                 (*electron_container)[k]->author()!=
02411                 egammaParameters::AuthorSofte)) {
02412             continue;
02413         }
02414 
02415         // there must be a track associated with the candidate //
02416         if (m_electron_container!=string("AtlfastElectronCollection") &&
02417             (*electron_container)[k]->trackParticle()==0) {  
02418             continue;
02419         }
02420 
02421 
02422         // store electron candidate into AAN //
02423         // number of electrons //
02424         m_nb_rec_electrons++;
02425 
02426         // fourmomentum (according to the tracker) //
02427 
02428         if (m_electron_container!=string("AtlfastElectronCollection")) {
02429             m_e_p_x->push_back(
02430                                (*electron_container)[k]->trackParticle()->px() );
02431             m_e_p_y->push_back(
02432                                (*electron_container)[k]->trackParticle()->py() );
02433             m_e_p_z->push_back(
02434                                (*electron_container)[k]->trackParticle()->pz() );
02435             m_e_E->push_back( 
02436                              (*electron_container)[k]->trackParticle()->e() );
02437         } else {
02438             m_e_p_x->push_back(
02439                                (*electron_container)[k]->px() );
02440             m_e_p_y->push_back(
02441                                (*electron_container)[k]->py() );
02442             m_e_p_z->push_back(
02443                                (*electron_container)[k]->pz() );
02444             m_e_E->push_back( 
02445                              (*electron_container)[k]->e() );
02446         }
02447 
02448         // fourmomentum from calorimeter
02449 
02450         m_e_calo_p_x->push_back(
02451                                 (*electron_container)[k]->px() );
02452         m_e_calo_p_y->push_back(
02453                                 (*electron_container)[k]->py() );
02454         m_e_calo_p_z->push_back(
02455                                 (*electron_container)[k]->pz() );
02456         m_e_calo_E->push_back( 
02457                               (*electron_container)[k]->e() );
02458 
02459  
02460         // charge //
02461         m_e_charge->push_back( static_cast<int>(
02462                                                 (*electron_container)[k]->charge()) );
02463 //        cout<< static_cast<int>(
02464 //                                                        (*electron_container)[k]->charge())<<endl;
02465         
02466         // flags //
02467         if (m_electron_container!=string("AtlfastElectronCollection")) {
02468           
02469             m_e_egamma_flag->push_back( 
02470                                        ((*electron_container)[k]->author()==
02471                                         egammaParameters::AuthorElectron) &&
02472                                        ((*electron_container)[k]->isem()%16==0) );
02473  
02474             m_e_softe_flag->push_back(
02475                                       ((*electron_container)[k]->author()==
02476                                        egammaParameters::AuthorSofte) &&
02477                                       ((*electron_container)[k]->isem()%16==0) );
02478  
02479             
02480             m_e_isEM->push_back((*electron_container)[k]->isem() );
02481             m_e_NeuralNet->push_back((*electron_container)[k]->egammaID(egammaPID::NeuralNet));
02482          
02483             int e_id_flag = 0;
02484 
02485             if((*electron_container)[k]->isem(egammaPID::ElectronLoose)==0){
02486                 e_id_flag=1; 
02487             }
02488             if((*electron_container)[k]->isem(egammaPID::ElectronMedium)==0){
02489                 e_id_flag=2; 
02490             }
02491             if((*electron_container)[k]->isem(egammaPID::ElectronTight)==0){
02492                 e_id_flag=3; 
02493             }
02494             
02495             m_e_id_flag->push_back(e_id_flag);
02496             
02497             const EMTrackMatch *trkmatch =
02498                 (*electron_container)[k]->detail<EMTrackMatch>(m_trackMatchContainerName);
02499             
02500             if(!trkmatch){
02501                 *m_log << MSG::ERROR
02502                        << "Unable to retrieve a pointer to EMTrackMatch container!"
02503                        << endreq;
02504             }
02505             
02506             
02507             m_e_E_over_p->push_back(trkmatch->EoverP());
02508              
02509             m_e_TRTHighThresholdHits->push_back((*electron_container)[k]
02510                                                 ->trackParticle()->trackSummary()
02511                                                 ->get(Trk::numberOfTRTHighThresholdHits));
02512  
02513             m_e_TRTHits->push_back((*electron_container)[k]
02514                                    ->trackParticle()->trackSummary()
02515                                    ->get(Trk::numberOfTRTHits));
02516 
02517             
02518         } else {
02519             m_e_egamma_flag->push_back( 1 );
02520             m_e_softe_flag->push_back( 0 );
02521             m_e_isEM->push_back(0);
02522             m_e_id_flag->push_back(0);
02523             m_e_NeuralNet->push_back(99.0);
02524             m_e_E_over_p->push_back(1.0);
02525             m_e_TRTHighThresholdHits->push_back(10);
02526             m_e_TRTHits->push_back(10);
02527         }
02528        
02529          
02530         //-----------------------------------------------------
02531         //ToDo:
02532         // only etcone20 is filled in AOD, the others are -999, why?
02533         //-----------------------------------------------------
02534 
02535         if(!m_AtlFastFlag){
02536             // energy in cones around the electron //
02537             const EMShower *shower =
02538                 (*electron_container)[k]->detail<EMShower>(m_showerContainerName);
02539             
02540             if(!shower){
02541                 *m_log << MSG::ERROR
02542                        << "Unable to retrieve a pointer to EMShower container!"
02543                        << endreq;
02544             }
02545             
02546             m_e_Et_in_cone_0->push_back( shower->etcone20() );
02547             m_e_Et_in_cone_1->push_back( shower->etcone30() );
02548             m_e_Et_in_cone_2->push_back( shower->etcone40() );
02549             m_e_Et_in_cone_3->push_back( shower->etcone() );
02550             
02551             m_e_ethad1->push_back(shower->ethad1());
02552             
02553         //        if (!m_AtlFastFlag){
02554         //TBD: how to substract track?? 
02555         //double elePt=
02556         //        m_trackIsolationTool->trackIsolationEnergy(((*electron_container)[k])->track(),0.01,false);
02557             m_e_trackIsolationEnergy_0->push_back(
02558                m_trackIsolationTool->trackIsolationEnergy(((*electron_container)[k])->trackParticle(),0.2));
02559             m_e_trackIsolationEnergy_1->push_back(
02560                m_trackIsolationTool->trackIsolationEnergy(((*electron_container)[k])->trackParticle(),0.3));
02561             m_e_trackIsolationEnergy_2->push_back(
02562                m_trackIsolationTool->trackIsolationEnergy(((*electron_container)[k])->trackParticle(),0.4));
02563             m_e_trackIsolationEnergy_3->push_back(
02564                m_trackIsolationTool->trackIsolationEnergy(((*electron_container)[k])->trackParticle(),0.45));
02565         }
02566         else {
02567             m_e_Et_in_cone_0->push_back(0);
02568             m_e_Et_in_cone_1->push_back(0);
02569             m_e_Et_in_cone_2->push_back(0);
02570             m_e_Et_in_cone_3->push_back(0);
02571             
02572             m_e_ethad1->push_back(0);
02573             
02574             m_e_trackIsolationEnergy_0->push_back(-999);
02575             m_e_trackIsolationEnergy_1->push_back(-999);
02576             m_e_trackIsolationEnergy_2->push_back(-999);
02577             m_e_trackIsolationEnergy_3->push_back(-999);
02578        }
02579 
02580        // vertex //
02581        if (!m_AtlFastFlag && m_doVertices) {
02582             
02583             if ((*electron_container)[k]->trackParticle()->reconstructedVertex()==NULL) {
02584                 m_e_vertex_index->push_back(-1);
02585             } else {
02586                 Trk::RecVertex rec_vert( (*electron_container)[k]->trackParticle()
02587                                          ->reconstructedVertex()->recVertex() );
02588                         
02589                 m_e_vertex_index
02590                     ->push_back(find_vertex(static_cast<const Trk::RecVertex *> (&rec_vert)));
02591             }
02592         }
02593         else{
02594             m_e_vertex_index->push_back(-1);
02595         }
02596 
02597 
02598         Hep3Vector vertex(0.,0.,0.);
02599 
02600         if(!m_AtlFastFlag && m_doVertices){
02601             
02602             if((*electron_container)[k]->trackParticle()->reconstructedVertex()!=NULL){
02603                 vertex = (*electron_container)[k]
02604                     ->trackParticle()->reconstructedVertex()->recVertex().position();
02605             }
02606         }
02607 
02608         
02609         // energy of tracks from vertices in cones around the electrons //
02610                 
02611         HepLorentzVector tmp_tlv;
02612         if(!m_AtlFastFlag){
02613             tmp_tlv = HepLorentzVector( (*electron_container)[k]->trackParticle()->px(),
02614                                         (*electron_container)[k]->trackParticle()->py(),
02615                                         (*electron_container)[k]->trackParticle()->pz(),
02616                                         (*electron_container)[k]->trackParticle()->e());
02617         }
02618         else{
02619             tmp_tlv = HepLorentzVector( (*electron_container)[k]->px(),
02620                                         (*electron_container)[k]->py(),
02621                                         (*electron_container)[k]->pz(),
02622                                         (*electron_container)[k]->e());
02623         }
02624 
02625         if (m_doVertices && (*m_e_vertex_index)[m_e_vertex_index->size()-1]==-1 ) {
02626 
02627             m_e_track_Et_in_cone_0->push_back(-1.0);
02628             m_e_track_Et_in_cone_1->push_back(-1.0);
02629             m_e_track_Et_in_cone_2->push_back(-1.0);
02630             m_e_track_Et_in_cone_3->push_back(-1.0);
02631     
02632         }else{
02633             
02634             m_e_track_Et_in_cone_0->push_back( get_energy_in_cone(0.20, tmp_tlv, vertex) );
02635             m_e_track_Et_in_cone_1->push_back( get_energy_in_cone(0.30, tmp_tlv, vertex) );
02636             m_e_track_Et_in_cone_2->push_back( get_energy_in_cone(0.40, tmp_tlv, vertex) );
02637             m_e_track_Et_in_cone_3->push_back( get_energy_in_cone(0.45, tmp_tlv, vertex) );
02638         }
02639 
02640         
02641      //    HepLorentzVector tmp_tlv(
02642 //                                 (*electron_container)[k]->track()->px(),
02643 //                                 (*electron_container)[k]->track()->py(),
02644 //                                 (*electron_container)[k]->track()->pz(),
02645 //                                 (*electron_container)[k]->track()->e());
02646 
02647 
02648 //                 m_e_track_Et_in_cone_0->push_back(get_energy_in_cone(0.20,
02649 //                                 tmp_tlv,
02650 //                                 (*electron_container)[k]->track(
02651 //                                 )->reconstructedVertex()->position()));
02652 //                 m_e_track_Et_in_cone_1->push_back(get_energy_in_cone(0.30,
02653 //                                 tmp_tlv,
02654 //                                 (*electron_container)[k]->track(
02655 //                                 )->reconstructedVertex()->position()));
02656 //                 m_e_track_Et_in_cone_2->push_back(get_energy_in_cone(0.40,
02657 //                                 tmp_tlv,
02658 //                                 (*electron_container)[k]->track(
02659 //                                 )->reconstructedVertex()->position()));
02660 //                 m_e_track_Et_in_cone_3->push_back(get_energy_in_cone(0.45,
02661 //                                 tmp_tlv,
02662 //                                 (*electron_container)[k]->track(
02663 //                                 )->reconstructedVertex()->position()));
02664 
02665     }
02666 
02667 
02668   
02669 
02670     return true;
02671 
02672   }
02673 
02674 //*****************************************************************************
02675 
02676   //::::::::::::::::::::::::::
02677   //:: METHOD get_muon_data ::
02678   //::::::::::::::::::::::::::
02679 
02680 bool AANtupleWriter14::get_muon_data(void) {
02681 
02683     // VARIABLES //
02685 
02686     const  Analysis::MuonContainer *muon_container(0);
02687                                            // container with reconstructed muons
02688 
02690     // GET A POINTER TO THE MUON CONTAINER //
02692         
02693     for (unsigned int i_cont=0; i_cont<m_muon_container.size(); i_cont++) {
02694 
02695         StatusCode sc(m_storeGate->retrieve(muon_container, m_muon_container[i_cont]));
02696         if(sc.isFailure() || muon_container==0) {
02697             *m_log << MSG::WARNING
02698                    << "No muon container found in the store gate!"
02699                    << endreq;
02700             return false;
02701         }
02702         *m_log << MSG::DEBUG << "Muon container retrieved successfully!"
02703                << endreq;
02704 
02706         // RECONSTRUCTED MUONS //
02708 
02709         // loop over the muon candidates //
02710         for (unsigned int k=0; k<muon_container->size(); k++) {
02711 
02712             // number of muons //
02713             m_nb_rec_muons++;
02714 
02715             // fourmomentum //
02716             //                 //
02717             //                 // test for the met code//
02718             //                 //                
02719             //                 if ((*muon_container)[k]->isCombinedMuon() || 
02720             //                     (*muon_container)[k]->isStandAloneMuon()) {                     
02721             //                    // get the corresponding track in the Muon Spectrometer only  
02722             //                    
02723             //                    if((*muon_container)[k]->isCombinedMuon()){
02724             //                     //mstp = (*muon_container)[k]->muonSpectrometerTrackParticle();
02725             //                     //mstp = (*muon_container)[k]->muonExtrapolatedTrackParticle();
02726             //                     mstp = (*muon_container)[k]->combinedMuonTrackParticle();
02727             //                  m_mu_p_x->push_back( mstp->px() );
02728             //                  m_mu_p_y->push_back( mstp->py() );
02729             //                  m_mu_p_z->push_back( mstp->pz() );
02730             //                  m_mu_E->push_back( mstp->e() );
02731             //                     
02732             // //               m_mu_p_x->push_back( (*muon_container)[k]->px() );
02733             // //               m_mu_p_y->push_back( (*muon_container)[k]->py() );
02734             // //               m_mu_p_z->push_back( (*muon_container)[k]->pz() );
02735             // //               m_mu_E->push_back( (*muon_container)[k]->e() );
02736             //                     
02737             //                    } else if((*muon_container)[k]->isStandAloneMuon()
02738             //                             //(*muon_container)[k]->hasMuonSpectrometerTrackParticle()
02739             //                             ) {
02740             //                    
02741             //                     //mstp = (*muon_container)[k]->muonSpectrometerTrackParticle();
02742             //                     //mstp = (*muon_container)[k]->muonExtrapolatedTrackParticle();
02743             //                     mstp = (*muon_container)[k]->muonSpectrometerTrackParticle();
02744             //                  m_mu_p_x->push_back( mstp->px() );
02745             //                  m_mu_p_y->push_back( mstp->py() );
02746             //                  m_mu_p_z->push_back( mstp->pz() );
02747             //                  m_mu_E->push_back( mstp->e() );
02748             //                    
02749             // //               m_mu_p_x->push_back( (*muon_container)[k]->px() );
02750             // //               m_mu_p_y->push_back( (*muon_container)[k]->py() );
02751             // //               m_mu_p_z->push_back( (*muon_container)[k]->pz() );
02752             // //               m_mu_E->push_back( (*muon_container)[k]->e() );
02753             //                   } else {
02754             //                    
02755             //                     *m_log << MSG::FATAL << "!!! No muon track available !!!!!!!!!!!!!!!!!!!!!!!!!!"
02756             //                         << endreq;
02757             //  
02758             //                    }                  
02759             //                 } else {
02760             //                       m_mu_p_x->push_back( (*muon_container)[k]->px() );
02761             //               m_mu_p_y->push_back( (*muon_container)[k]->py() );
02762             //               m_mu_p_z->push_back( (*muon_container)[k]->pz() );
02763             //               m_mu_E->push_back( (*muon_container)[k]->e() );
02764             //                 }
02765 
02766             // container name
02767 
02768             int mu_alg_flag = 0;
02769             if(m_muon_container[i_cont]=="AtlfastMuonCollection"){
02770                 mu_alg_flag = 1;
02771             }
02772             else if(m_muon_container[i_cont]=="MuidMuonCollection"){
02773                 mu_alg_flag = 2;
02774             }
02775             else if (m_muon_container[i_cont]=="StacoMuonCollection"){
02776                 mu_alg_flag = 3;
02777             }
02778             m_mu_alg_flag->push_back(mu_alg_flag);
02779 
02780             //
02781             // default//
02782             //
02783             m_mu_p_x->push_back( (*muon_container)[k]->px() );
02784             m_mu_p_y->push_back( (*muon_container)[k]->py() );
02785             m_mu_p_z->push_back( (*muon_container)[k]->pz() );
02786             m_mu_E->push_back( (*muon_container)[k]->e() );
02787                 
02788             // MS stand-alone and ID stand-alone //
02789             if ((*muon_container)[k]->hasMuonExtrapolatedTrackParticle()) {
02790                 m_mu_p_x_standalone->push_back((*muon_container)[k]->
02791                                                muonExtrapolatedTrackParticle()->px());
02792                 m_mu_p_y_standalone->push_back((*muon_container)[k]->
02793                                                muonExtrapolatedTrackParticle()->py());
02794                 m_mu_p_z_standalone->push_back((*muon_container)[k]->
02795                                                muonExtrapolatedTrackParticle()->pz());
02796                 m_mu_E_standalone->push_back((*muon_container)[k]->
02797                                              muonExtrapolatedTrackParticle()->e());
02798             } else {
02799                 m_mu_p_x_standalone->push_back(1.0e90);
02800                 m_mu_p_y_standalone->push_back(0);
02801                 m_mu_p_z_standalone->push_back(0);
02802                 m_mu_E_standalone->push_back(1.0e90);
02803             }
02804             if ((*muon_container)[k]->hasInnerExtrapolatedTrackParticle()) {
02805                 m_mu_p_x_ID->push_back((*muon_container)[k]->
02806                                        innerExtrapolatedTrackParticle()->px());
02807                 m_mu_p_y_ID->push_back((*muon_container)[k]->
02808                                        innerExtrapolatedTrackParticle()->py());
02809                 m_mu_p_z_ID->push_back((*muon_container)[k]->
02810                                        innerExtrapolatedTrackParticle()->pz());
02811                 m_mu_E_ID->push_back((*muon_container)[k]->
02812                                      innerExtrapolatedTrackParticle()->e());
02813             } else {
02814                 m_mu_p_x_ID->push_back(1.0e90);
02815                 m_mu_p_y_ID->push_back(0);
02816                 m_mu_p_z_ID->push_back(0);
02817                 m_mu_E_ID->push_back(1.0e90);
02818             }
02819 
02820 
02821             // charge //
02822             m_mu_charge->push_back( static_cast<int>(
02823                                                      (*muon_container)[k]->charge()) );
02824 
02825 
02826             // chi2 //
02827             if (!m_AtlFastFlag){
02828                 m_mu_fitChi2->push_back( (*muon_container)[k]->fitChi2() );
02829                 m_mu_fitNumberDoF->push_back( (*muon_container)[k]->fitNumberDoF() );
02830                 m_mu_fitChi2OverDoF->push_back( (*muon_container)[k]->fitChi2OverDoF() );
02831                 m_mu_matchChi2->push_back( (*muon_container)[k]->matchChi2() );
02832                 m_mu_matchNumberDoF->push_back( (*muon_container)[k]->matchNumberDoF() );
02833                 m_mu_matchChi2OverDoF->push_back( (*muon_container)[k]->matchChi2OverDoF() );
02834             }
02835             else {
02836                 m_mu_fitChi2->push_back(50.0);
02837                 m_mu_fitNumberDoF->push_back(50);
02838                 m_mu_fitChi2OverDoF->push_back(1.0);
02839                 m_mu_matchChi2->push_back(50.0);
02840                 m_mu_matchNumberDoF->push_back(50);
02841                 m_mu_matchChi2OverDoF->push_back(1.0);
02842             }
02843 
02844             // flag //
02845             if (!m_AtlFastFlag){
02846                 if ((*muon_container)[k]->hasCombinedMuonTrackParticle() && (*muon_container)[k]->isHighPt()) {
02847                     if ((*muon_container)[k]->bestMatch()) {
02848                         m_mu_flag->push_back( 1 );  // isCombinedMuon
02849                     } else {
02850                         m_mu_flag->push_back( -1 ); // isCombinedMuon, but without best match
02851                     }
02852                 }
02853                 else if ((*muon_container)[k]->isStandAloneMuon()) {
02854                     m_mu_flag->push_back( 2 );
02855                 }
02856                 else if ((*muon_container)[k]->isLowPtReconstructedMuon()) {
02857                     m_mu_flag->push_back( 3 );
02858                 }
02859                 else{
02860                     m_mu_flag->push_back( 0 );
02861                 }
02862 
02863                 // hasCombinedMuonTrackParticle
02864                 m_mu_hasCombinedMuonTrackParticle->push_back((int)
02865                                                              (*muon_container)[k]->hasCombinedMuonTrackParticle());
02866                 
02867                 // author //               
02868                 m_mu_author->push_back( (*muon_container)[k]->author() );
02869                 
02870                 // best ID track match match to a given MS track //                               
02871                 if ((*muon_container)[k]->bestMatch()){ 
02872                     m_mu_bestmatch->push_back( 1 );
02873                 }else { 
02874                     m_mu_bestmatch->push_back( -1 );
02875                 }
02876             }
02877             else {
02878                 m_mu_flag->push_back( 1 );
02879                 m_mu_hasCombinedMuonTrackParticle->push_back(1);
02880                 m_mu_author->push_back( 1 );
02881                 m_mu_bestmatch->push_back( 1 );
02882             }
02883                 
02884             // energy in cones around the muon //
02885             m_mu_Et_in_cone_0->push_back(
02886                                          (*muon_container)[k]->parameter(MuonParameters::etcone10) );
02887             m_mu_Et_in_cone_1->push_back(
02888                                          (*muon_container)[k]->parameter(MuonParameters::etcone20) );
02889             m_mu_Et_in_cone_2->push_back(
02890                                          (*muon_container)[k]->parameter(MuonParameters::etcone30) );
02891             m_mu_Et_in_cone_3->push_back(
02892                                          (*muon_container)[k]->parameter(MuonParameters::etcone40) );
02893             /* not existing since 14.3.0 */
02894 //            m_mu_Et_in_cone_4->push_back(
02895 //                                         (*muon_container)[k]->parameter(MuonParameters::etcone) );
02896 //            m_mu_Et_in_cone_5->push_back(
02897 //                                         (*muon_container)[k]->parameter(MuonParameters::etcone50) );
02898 //            m_mu_Et_in_cone_6->push_back(
02899 //                                         (*muon_container)[k]->parameter(MuonParameters::etcone60) );
02900 //            m_mu_Et_in_cone_7->push_back(
02901 //                                         (*muon_container)[k]->parameter(MuonParameters::etcone70) );
02902             if (!m_AtlFastFlag) {
02903                //TBD: replace with ptconexx 
02904             double muonPt=
02905                 m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.01,false);
02906                m_mu_trackIsolationEnergy_0->push_back(
02907                 m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.1,false)-muonPt);
02908                m_mu_trackIsolationEnergy_1->push_back(
02909                 m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.2,false)-muonPt);
02910                m_mu_trackIsolationEnergy_2->push_back(
02911                 m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.3,false)-muonPt);
02912                m_mu_trackIsolationEnergy_3->push_back(
02913                 m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.4,false)-muonPt);
02914 //               m_mu_trackIsolationEnergy_4->push_back(
02915 //                m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.45,false)-muonPt);
02916 //               m_mu_trackIsolationEnergy_5->push_back(
02917 //                m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.5,false)-muonPt);
02918 //               m_mu_trackIsolationEnergy_6->push_back(
02919 //                m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.6,false)-muonPt);
02920 //               m_mu_trackIsolationEnergy_7->push_back(
02921 //                m_trackIsolationTool->trackIsolationEnergy(((*muon_container)[k])->track(),0.7,false)-muonPt);
02922             }
02923             else {
02924               m_mu_trackIsolationEnergy_0->push_back(-999);
02925               m_mu_trackIsolationEnergy_1->push_back(-999);
02926               m_mu_trackIsolationEnergy_2->push_back(-999);
02927               m_mu_trackIsolationEnergy_3->push_back(-999);
02928               m_mu_trackIsolationEnergy_4->push_back(-999);
02929               m_mu_trackIsolationEnergy_5->push_back(-999);
02930               m_mu_trackIsolationEnergy_6->push_back(-999);
02931               m_mu_trackIsolationEnergy_7->push_back(-999);
02932             }
02933             
02934             // number of tracks in cones around the muon //
02935             m_mu_nb_tracks_cone_0->push_back(static_cast<int>
02936                                              ((*muon_container)[k]->parameter(MuonParameters::nucone10)) );
02937             m_mu_nb_tracks_cone_1->push_back(static_cast<int>
02938                                              ((*muon_container)[k]->parameter(MuonParameters::nucone20)) );
02939             m_mu_nb_tracks_cone_2->push_back(static_cast<int>
02940                                              ((*muon_container)[k]->parameter(MuonParameters::nucone30)) );
02941             m_mu_nb_tracks_cone_3->push_back(static_cast<int>
02942                                              ((*muon_container)[k]->parameter(MuonParameters::nucone40)) );
02943             /* not existing since 14.3.0 */
02944 //            m_mu_nb_tracks_cone_4->push_back(static_cast<int>
02945 //                                             ((*muon_container)[k]->parameter(MuonParameters::nucone)) );
02946 //            m_mu_nb_tracks_cone_5->push_back(static_cast<int>
02947 //                                             ((*muon_container)[k]->parameter(MuonParameters::nucone50)) );
02948 //            m_mu_nb_tracks_cone_6->push_back(static_cast<int>
02949 //                                             ((*muon_container)[k]->parameter(MuonParameters::nucone60)) );
02950 //            m_mu_nb_tracks_cone_7->push_back(static_cast<int>
02951 //                                             ((*muon_container)[k]->parameter(MuonParameters::nucone70)) );
02952 
02953             // vertex //
02954             if (!m_AtlFastFlag && m_doVertices) {
02955                 if ((*muon_container)[k]->track()->reconstructedVertex()==NULL) {
02956                     m_mu_vertex_index->push_back(-1);
02957                 } else {
02958                     Trk::RecVertex rec_vert( (*muon_container)[k]->track()
02959                                              ->reconstructedVertex()->recVertex() );
02960                     m_mu_vertex_index
02961                         ->push_back( find_vertex( static_cast<const Trk::RecVertex *>
02962                                                   (&rec_vert) ) );
02963                 }
02964             }else{
02965                 m_mu_vertex_index->push_back(-1); 
02966             }
02967             
02968             Hep3Vector vertex(0.,0.,0.);
02969 
02970             if(m_doVertices){
02971                 
02972                 if((*muon_container)[k]->track()->reconstructedVertex()!=NULL){
02973                     vertex = (*muon_container)[k]
02974                         ->track()->reconstructedVertex()->recVertex().position();
02975                 }
02976             }
02977 
02978             
02979             HepLorentzVector tmp_tlv((*muon_container)[k]->px(),
02980                                      (*muon_container)[k]->py(),
02981                                      (*muon_container)[k]->pz(),
02982                                      (*muon_container)[k]->e());
02983 
02984 
02985             // energy of tracks from vertices in cones around the muons //
02986                    
02987             if (m_doVertices && (*m_mu_vertex_index)[m_mu_vertex_index->size()-1]==-1 ) {
02988                      
02989                 m_mu_track_Et_in_cone_0->push_back(-1.0);
02990                 m_mu_track_Et_in_cone_1->push_back(-1.0);
02991                 m_mu_track_Et_in_cone_2->push_back(-1.0);
02992                 m_mu_track_Et_in_cone_3->push_back(-1.0);
02993                 m_mu_track_Et_in_cone_4->push_back(-1.0);
02994                 m_mu_track_Et_in_cone_5->push_back(-1.0);
02995                 m_mu_track_Et_in_cone_6->push_back(-1.0);
02996                 m_mu_track_Et_in_cone_7->push_back(-1.0);
02997                 
02998             }else{
02999                           
03000                 m_mu_track_Et_in_cone_0->push_back( get_energy_in_cone(0.1, tmp_tlv, vertex) );
03001                 m_mu_track_Et_in_cone_1->push_back( get_energy_in_cone(0.2, tmp_tlv, vertex) );
03002                 m_mu_track_Et_in_cone_2->push_back( get_energy_in_cone(0.3, tmp_tlv, vertex) );
03003                 m_mu_track_Et_in_cone_3->push_back( get_energy_in_cone(0.4, tmp_tlv, vertex) );
03004                 m_mu_track_Et_in_cone_4->push_back( get_energy_in_cone(0.45,tmp_tlv, vertex) );
03005                 m_mu_track_Et_in_cone_5->push_back( get_energy_in_cone(0.5, tmp_tlv, vertex) );
03006                 m_mu_track_Et_in_cone_6->push_back( get_energy_in_cone(0.6, tmp_tlv, vertex) );
03007                 m_mu_track_Et_in_cone_7->push_back( get_energy_in_cone(0.7, tmp_tlv, vertex) );
03008             }
03009 
03010 
03011         //     // energy of tracks from vertices in cones around the muons //
03012 //             if (!m_AtlFastFlag && m_doVertices) {
03013 //                 if ((*m_mu_vertex_index)[m_mu_vertex_index->size()-1]==-1) {
03014 //                     m_mu_track_Et_in_cone_0->push_back(0.0);
03015 //                     m_mu_track_Et_in_cone_1->push_back(0.0);
03016 //                     m_mu_track_Et_in_cone_2->push_back(0.0);
03017 //                     m_mu_track_Et_in_cone_3->push_back(0.0);
03018 //                     m_mu_track_Et_in_cone_4->push_back(0.0);
03019 //                     m_mu_track_Et_in_cone_5->push_back(0.0);
03020 //                     m_mu_track_Et_in_cone_6->push_back(0.0);
03021 //                     m_mu_track_Et_in_cone_7->push_back(0.0);
03022 //                 } else {
03023 //                     HepLorentzVector tmp_tlv((*muon_container)[k]->px(),
03024 //                                              (*muon_container)[k]->py(),
03025 //                                              (*muon_container)[k]->pz(),
03026 //                                              (*muon_container)[k]->e());
03027 //                     m_mu_track_Et_in_cone_0->push_back(get_energy_in_cone(
03028 //                                 0.1,
03029 //                                 tmp_tlv,
03030 //                                 (*muon_container)[k]->track(
03031 //                                 )->reconstructedVertex()->position()));
03032 //                     m_mu_track_Et_in_cone_1->push_back(get_energy_in_cone(
03033 //                                 0.2,
03034 //                                 tmp_tlv,
03035 //                                 (*muon_container)[k]->track(
03036 //                                 )->reconstructedVertex()->position()));
03037 //                     m_mu_track_Et_in_cone_2->push_back(get_energy_in_cone(
03038 //                                 0.3,
03039 //                                 tmp_tlv,
03040 //                                 (*muon_container)[k]->track(
03041 //                                 )->reconstructedVertex()->position()));
03042 //                     m_mu_track_Et_in_cone_3->push_back(get_energy_in_cone(
03043 //                                 0.4,
03044 //                                 tmp_tlv,
03045 //                                 (*muon_container)[k]->track(
03046 //                                 )->reconstructedVertex()->position()));
03047 //                     m_mu_track_Et_in_cone_4->push_back(get_energy_in_cone(
03048 //                                 0.45,
03049 //                                 tmp_tlv,
03050 //                                 (*muon_container)[k]->track(
03051 //                                 )->reconstructedVertex()->position()));
03052 //                     m_mu_track_Et_in_cone_5->push_back(get_energy_in_cone(
03053 //                                 0.5,
03054 //                                 tmp_tlv,
03055 //                                 (*muon_container)[k]->track(
03056 //                                 )->reconstructedVertex()->position()));
03057 //                     m_mu_track_Et_in_cone_6->push_back(get_energy_in_cone(
03058 //                                 0.6,
03059 //                                 tmp_tlv,
03060 //                                 (*muon_container)[k]->track(
03061 //                                 )->reconstructedVertex()->position()));
03062 //                     m_mu_track_Et_in_cone_7->push_back(get_energy_in_cone(
03063 //                                 0.7,
03064 //                                 tmp_tlv,
03065 //                                 (*muon_container)[k]->track(
03066 //                                 )->reconstructedVertex()->position()));
03067 //                 }
03068                        
03069         }
03070     }
03071     
03072     return true;
03073 
03074   }
03075 //*****************************************************************************
03076 
03077   //:::::::::::::::::::::::::
03078   //:: METHOD get_jet_data ::
03079   //:::::::::::::::::::::::::
03080 
03081 bool AANtupleWriter14::get_jet_data(void) {
03082 
03084     // VARIABLES //
03086 
03087     //const ParticleJetContainer *jet_container(0); // container with 
03088     const JetCollection *jet_container(0); // container with 
03089     // reconstructed jets
03091     // GET A POINTER TO THE JET CONTAINER //
03093 
03094     StatusCode sc(m_storeGate->retrieve(jet_container, m_jet_container));
03095     if(sc.isFailure() || jet_container==0) {
03096         *m_log << MSG::WARNING
03097                << "No jet container found in the store gate!"
03098                << endreq;
03099         return false;
03100     }
03101     *m_log << MSG::DEBUG << "Jet container retrieved successfully!"
03102            << endreq;
03103 
03105     // RECONSTRUCTED JETS //
03107 
03108     // loop over the reconstructed jets //
03109     for (unsigned int k=0; k<jet_container->size(); k++) {
03110 
03111         // number of jets //
03112         m_nb_rec_jets++;
03113 
03114         // four momentum //
03115         m_jet_p_x->push_back( (*jet_container)[k]->px() );
03116         m_jet_p_y->push_back( (*jet_container)[k]->py() );                          
03117         m_jet_p_z->push_back( (*jet_container)[k]->pz() );                          
03118         m_jet_E->push_back( (*jet_container)[k]->e() );
03119 
03120         // flag //
03121         m_jet_flag->push_back((*jet_container)[k]->jetAuthor() );
03122 
03123         // tags and tag weights (to be defined) //
03124         m_jet_btag_weight->push_back( (*jet_container)[k]->getFlavourTagWeight() );
03125         // --- get the true label of the jet from MC Truth:
03126         std::string label("N/A");           //TBD!!! (NULL pointer)
03127         const Analysis::TruthInfo* mcinfo = 
03128             (*jet_container)[k]->tagInfo<Analysis::TruthInfo>("TruthInfo");
03129         //if(mcinfo) {
03130         //    label = mcinfo->jetTruthLabel();
03131         //} else {
03132         //    *m_log << MSG::WARNING << "could not find TruthInfo for matching jet" << endreq;
03133         //}
03134         
03135         int iflav(0);
03136         if(label=="B")         iflav = 5;    // b-jet
03137         else if(label=="C")    iflav = 4;    // c-jet
03138         else if(label=="T")    iflav = 15;   // tau
03139         else if(label=="N/A")  iflav = 0;
03140         else                   iflav = -1;
03141         m_jet_truthflavor->push_back( iflav );
03142     
03143                 //charge//
03144                 //m_jet_charge->push_back((*jet_container)[k]->charge()); //seems to be
03145                 //always zero!!
03146         
03147         
03148         if (!m_AtlFastFlag){
03150         //TBD!!!!       //
03152             const Analysis::TrackAssociation *tpc =
03153                 (*jet_container)[k]->getAssociation<Analysis::TrackAssociation>("Tracks");
03154 //            cout<<"tpc pointer: "<<tpc<<endl;
03155 //           // const Analysis::TrackConstituents *tpc =
03156 //           //     (*jet_container)[k]->constituent<Analysis::TrackConstituents>("Tracks");
03157 //            std::vector<const Rec::TrackParticle*> *jettracks = tpc->tracks();  
03158 //            m_jet_nb_tracks->push_back(jettracks->size());
03159 //            for (unsigned int i=0;i<jettracks->size();i++){
03160 //                m_jet_tracks_charge->push_back((*jettracks)[i]->charge());
03161 //                m_jet_tracks_p_x->push_back((*jettracks)[i]->px());
03162 //                m_jet_tracks_p_y->push_back((*jettracks)[i]->py());
03163 //                m_jet_tracks_p_z->push_back((*jettracks)[i]->pz());
03164 //                m_jet_tracks_E->push_back((*jettracks)[i]->e());
03165 //            
03166 //            }
03167 //            
03168         }
03169         else{
03170             m_jet_nb_tracks->push_back(0);  
03171         }
03172         
03173     }
03174     
03175     return true;
03176   }
03177 //*****************************************************************************
03178 
03179   //::::::::::::::::::::::::::::
03180   //:: METHOD get_taujet_data ::
03181   //::::::::::::::::::::::::::::
03182 
03183 bool AANtupleWriter14::get_taujet_data(void) {
03184         
03186     // VARIABLES //
03188 
03189     const  Analysis::TauJetContainer *taujet_container(0); // container with 
03190     // tau jets
03191 
03193     // GET A POINTER TO THE TAUJET CONTAINER //
03195 
03196     StatusCode sc(m_storeGate->retrieve(taujet_container, m_taujet_container));
03197     if(sc.isFailure() || taujet_container==0) {
03198         *m_log << MSG::WARNING
03199                << "No taujet container found in the store gate!"
03200                << endreq;
03201         return false;
03202     }
03203     *m_log << MSG::DEBUG << "Taujet container retrieved successfully!"
03204            << endreq;
03205 
03207     // RECONSTRUCTED TAUJETS //
03209 
03210     // loop over the reconstructed taujets //
03211     for (unsigned int k=0; k<taujet_container->size(); k++) {
03212 
03213         // number of taujets //
03214         m_nb_tau_jets++;
03215 
03216         // four momentum //
03217         m_taujet_p_x->push_back( (*taujet_container)[k]->px() );
03218         m_taujet_p_y->push_back( (*taujet_container)[k]->py() );
03219         m_taujet_p_z->push_back( (*taujet_container)[k]->pz() );
03220         m_taujet_E->push_back( (*taujet_container)[k]->e() );
03221 
03222         // flag //
03223         if ((*taujet_container)[k]->hasAuthor( TauJetParameters::tauRec )) {
03224             m_taujet_flag->push_back(1);   
03225         }
03226         if ((*taujet_container)[k]->hasAuthor( TauJetParameters::tau1P3P )) {
03227             m_taujet_flag->push_back(2);   
03228         }
03229         if (!((*taujet_container)[k]->hasAuthor( TauJetParameters::tau1P3P )||
03230             (*taujet_container)[k]->hasAuthor( TauJetParameters::tauRec ))) 
03231                 cerr<<"tau hasn't author!"<<endl;
03232         //unknown = 0,
03233         //tauRec  = 1,
03234         //tau1P3P = 2
03235 
03236         if (!m_AtlFastFlag){
03237             
03238             // charge //
03239             m_taujet_charge->push_back( static_cast<int>(
03240                                            (*taujet_container)[k]->charge()) );
03241 
03242             m_taujet_nb_tracks->push_back((*taujet_container)[k]->numTrack());
03243 
03244             if ((*taujet_container)[k]->numTrack()>0){
03245                 m_taujet_track_px_1->push_back((*taujet_container)[k]->track(0)->px());
03246                 m_taujet_track_py_1->push_back((*taujet_container)[k]->track(0)->py());
03247                 m_taujet_track_pz_1->push_back((*taujet_container)[k]->track(0)->pz());
03248                 m_taujet_track_e_1->push_back((*taujet_container)[k]->track(0)->e());
03249                 m_taujet_track_TRTHighThresholdHits_1->push_back((*taujet_container)[k]->track(0)
03250                     ->trackSummary()->get(Trk::numberOfTRTHighThresholdHits));
03251                 m_taujet_track_TRTHits_1->push_back((*taujet_container)[k]->track(0)
03252                     ->trackSummary()->get(Trk::numberOfTRTHits));
03253             }
03254             else {
03255                 m_taujet_track_px_1->push_back(0.0);
03256                 m_taujet_track_py_1->push_back(0.0);
03257                 m_taujet_track_pz_1->push_back(0.0);
03258                 m_taujet_track_e_1->push_back(0.0);
03259                 m_taujet_track_TRTHighThresholdHits_1->push_back(10);
03260                 m_taujet_track_TRTHits_1->push_back(10);
03261             }
03262             if ((*taujet_container)[k]->numTrack()>1){
03263                 m_taujet_track_px_2->push_back((*taujet_container)[k]->track(1)->px());
03264                 m_taujet_track_py_2->push_back((*taujet_container)[k]->track(1)->py());
03265                 m_taujet_track_pz_2->push_back((*taujet_container)[k]->track(1)->pz());
03266                 m_taujet_track_e_2->push_back((*taujet_container)[k]->track(1)->e());
03267                 m_taujet_track_TRTHighThresholdHits_2->push_back((*taujet_container)[k]->track(1)
03268                     ->trackSummary()->get(Trk::numberOfTRTHighThresholdHits));
03269                 m_taujet_track_TRTHits_2->push_back((*taujet_container)[k]->track(1)
03270                     ->trackSummary()->get(Trk::numberOfTRTHits));
03271             }
03272             else {
03273                 m_taujet_track_px_2->push_back(0.0);
03274                 m_taujet_track_py_2->push_back(0.0);
03275                 m_taujet_track_pz_2->push_back(0.0);
03276                 m_taujet_track_e_2->push_back(0.0);
03277                 m_taujet_track_TRTHighThresholdHits_2->push_back(10);
03278                 m_taujet_track_TRTHits_2->push_back(10);
03279             }
03280             if ((*taujet_container)[k]->numTrack()>2) {
03281                 m_taujet_track_px_3->push_back((*taujet_container)[k]->track(2)->px());
03282                 m_taujet_track_py_3->push_back((*taujet_container)[k]->track(2)->py());
03283                 m_taujet_track_pz_3->push_back((*taujet_container)[k]->track(2)->pz());
03284                 m_taujet_track_e_3->push_back((*taujet_container)[k]->track(2)->e());
03285                 m_taujet_track_TRTHighThresholdHits_3->push_back((*taujet_container)[k]->track(2)
03286                     ->trackSummary()->get(Trk::numberOfTRTHighThresholdHits));
03287                 m_taujet_track_TRTHits_3->push_back((*taujet_container)[k]->track(2)
03288                     ->trackSummary()->get(Trk::numberOfTRTHits));
03289             }
03290             else {
03291                 m_taujet_track_px_3->push_back(0.0);
03292                 m_taujet_track_py_3->push_back(0.0);
03293                 m_taujet_track_pz_3->push_back(0.0);
03294                 m_taujet_track_e_3->push_back(0.0);
03295                 m_taujet_track_TRTHighThresholdHits_3->push_back(10);
03296                 m_taujet_track_TRTHits_3->push_back(10);
03297             }
03298             
03299             //get Tau discriminators
03300             m_taujet_llh->push_back((*taujet_container)[k]->tauID()
03301                 ->discriminant(TauJetParameters::Likelihood));
03302             m_taujet_discNN->push_back((*taujet_container)[k]->tauID()
03303                 ->discriminant(TauJetParameters::DiscNN));
03304             m_taujet_discPDERS->push_back((*taujet_container)[k]->tauID()
03305                 ->discriminant(TauJetParameters::DiscPDERS));
03306             m_taujet_tauENeuralNetwork ->push_back((*taujet_container)[k]->tauID()
03307                 ->discriminant( TauJetParameters::TauENeuralNetwork));
03308             m_taujet_tauJetNeuralnetwork ->push_back( (*taujet_container)[k]->tauID()
03309                 ->discriminant(TauJetParameters::TauJetNeuralNetwork));
03310             m_taujet_lowPtTauEleDiscriminant->push_back((*taujet_container)[k]->tauID()
03311                 ->discriminant(TauJetParameters::TauELikelihoodLowPt) );
03312             //not existing so far, but somehow listed in the tau edm
03313             //m_taujet_lowPtTauJetDiscriminant->push_back((*taujet_container)[k]->tauID()
03314             //    ->discriminant(TauJetParameters::TauJetLikelihoodLowPt) );
03315             m_taujet_bdtJet->push_back((*taujet_container)[k]->tauID()
03316                 ->discriminant(TauJetParameters::BDTJetScore));
03317             m_taujet_bdtEle->push_back((*taujet_container)[k]->tauID()
03318                 ->discriminant(TauJetParameters::BDTEleScore));
03319             
03321             //TBD: how to treat the details?//
03323             
03324             if ((*taujet_container)[k]->hasAuthor( TauJetParameters::tauRec )) {
03325                 
03326                 //get TauRecDetails
03327                 const Analysis::TauRecDetails*  taudetails = (*taujet_container)[k]
03328                     ->details<const Analysis::TauRecDetails>(m_tauDetailsContainerName);
03329                 m_taujet_emRadius->push_back( taudetails->emRadius() );
03330                 m_taujet_isolationFraction->push_back( taudetails->isolationFraction() );
03331                 m_taujet_centralityFraction->push_back( taudetails->centralityFraction() );
03332                 m_taujet_stripWidth2->push_back( taudetails->stripWidth2() );
03333                 m_taujet_nStripCells->push_back( taudetails->numStripCells() );
03334                 m_taujet_etEMCalib->push_back( taudetails->etEMCalib() );
03335                 m_taujet_etHadCalib->push_back( taudetails->etHadCalib() );
03336                 m_taujet_leadingTrackPT->push_back( taudetails->leadingTrackPT() );
03337                 m_taujet_trFlightPathSig->push_back( taudetails->trFlightPathSig() );
03338                 m_taujet_etOverPtLeadTrack->push_back( taudetails->etOverPtLeadTrack() );
03339                 m_taujet_ipSigLeadTrack->push_back( taudetails->ipSigLeadTrack() );
03340             }
03341             else if ((*taujet_container)[k]->hasAuthor( TauJetParameters::tau1P3P )) {
03342                 
03343                 //get Tau1P3PDetails  
03344              const Analysis::Tau1P3PDetails* taudetails = (*taujet_container)[k]
03345                     ->details<const Analysis::Tau1P3PDetails>(m_tauDetailsContainerName);
03346                 if (!(*taujet_container)[k]->hasAuthor( TauJetParameters::tauRec )) {
03347                     m_taujet_emRadius->push_back( taudetails->emRadius() );
03348                     m_taujet_isolationFraction->push_back( taudetails->isolationFraction() );
03349                     m_taujet_stripWidth2->push_back( taudetails->stripWidth2() );
03350                     m_taujet_nStripCells->push_back( taudetails->numStripCells() );
03351                 }
03352                 m_taujet_etChrgHAD->push_back( taudetails->etChrgHAD() );
03353                 m_taujet_etIsolEM->push_back( taudetails->etIsolEM() );
03354                 m_taujet_etIsolHAD->push_back( taudetails->etIsolHAD() );
03355                 m_taujet_nAssocTracksCore->push_back( taudetails->nAssocTracksCore() );
03356                 m_taujet_nAssocTracksIsol->push_back( taudetails->nAssocTracksIsol() );
03357                 m_taujet_massTrk3P->push_back( taudetails->massTrk3P() );
03358                 m_taujet_rWidth2Trk3P->push_back( taudetails->rWidth2Trk3P() );
03359                 m_taujet_signD0Trk3P->push_back( taudetails->signD0Trk3P() );
03360                 m_taujet_etHadAtEMScale->push_back( taudetails->etHadAtEMScale() );
03361                 m_taujet_etEMAtEMScale->push_back( taudetails->etEMAtEMScale() );
03362                 m_taujet_etEMCL->push_back( taudetails->etEMCL() );
03363                 m_taujet_etChrgEM->push_back( taudetails->etChrgEM() );
03364                 m_taujet_etNeuEM->push_back( taudetails->etNeuEM() );
03365                 m_taujet_etResNeuEM->push_back( taudetails->etResNeuEM() );
03366             }
03367         }
03368                 
03369         else {
03370             if ((*taujet_container)[k]->pdgId()==1) m_taujet_charge->push_back(-1.);
03371             else if ((*taujet_container)[k]->pdgId()==-1) m_taujet_charge->push_back(1.);
03372             else if ((*taujet_container)[k]->pdgId()==2) m_taujet_charge->push_back(1.);
03373             else if ((*taujet_container)[k]->pdgId()==-2) m_taujet_charge->push_back(-1.);
03374             else if ((*taujet_container)[k]->pdgId()==3) m_taujet_charge->push_back(-1.);
03375             else if ((*taujet_container)[k]->pdgId()==-3) m_taujet_charge->push_back(1.);
03376             else if ((*taujet_container)[k]->pdgId()==4) m_taujet_charge->push_back(1.);
03377             else if ((*taujet_container)[k]->pdgId()==-4) m_taujet_charge->push_back(-1.);
03378             else if ((*taujet_container)[k]->pdgId()==5) m_taujet_charge->push_back(-1.);
03379             else if ((*taujet_container)[k]->pdgId()==-5) m_taujet_charge->push_back(1.);
03380             else if ((*taujet_container)[k]->pdgId()==6) m_taujet_charge->push_back(1.);
03381             else if ((*taujet_container)[k]->pdgId()==-6) m_taujet_charge->push_back(-1.);
03382             else if ((*taujet_container)[k]->pdgId()==11) m_taujet_charge->push_back(-1.);
03383             else if ((*taujet_container)[k]->pdgId()==-11) m_taujet_charge->push_back(1.);
03384             else if ((*taujet_container)[k]->pdgId()==13) m_taujet_charge->push_back(-1.);
03385             else if ((*taujet_container)[k]->pdgId()==-13) m_taujet_charge->push_back(1.);
03386             else if ((*taujet_container)[k]->pdgId()==15) m_taujet_charge->push_back(-1.);
03387             else if ((*taujet_container)[k]->pdgId()==-15) m_taujet_charge->push_back(1.);
03388             else m_taujet_charge->push_back((*taujet_container)[k]->pdgId());
03389             m_taujet_etHadCalib->push_back(0);
03390             m_taujet_etEMCalib->push_back(0);
03391             m_taujet_emRadius->push_back(0);
03392             m_taujet_isolationFraction->push_back(0);
03393             m_taujet_centralityFraction->push_back(0);
03394             m_taujet_stripWidth2->push_back(0);
03395             m_taujet_nStripCells->push_back(0);
03396             m_taujet_leadingTrackPT->push_back(20);
03397             m_taujet_trFlightPathSig->push_back(20);
03398             m_taujet_etOverPtLeadTrack->push_back(20);
03399             m_taujet_ipSigLeadTrack->push_back(20);
03400             m_taujet_etChrgHAD->push_back(20);
03401             m_taujet_etIsolEM->push_back(20);
03402             m_taujet_etIsolHAD->push_back(20);
03403             m_taujet_nAssocTracksCore->push_back(20);
03404             m_taujet_nAssocTracksIsol->push_back(20);
03405             m_taujet_massTrk3P->push_back(20);
03406             m_taujet_rWidth2Trk3P->push_back(20);
03407             m_taujet_signD0Trk3P->push_back(20);
03408             m_taujet_etHadAtEMScale->push_back(20);
03409             m_taujet_etEMAtEMScale->push_back(20);
03410             m_taujet_etEMCL->push_back(20);
03411             m_taujet_etChrgEM->push_back(20);
03412             m_taujet_etNeuEM->push_back(20);
03413             m_taujet_etResNeuEM->push_back(20);
03414             m_taujet_llh->push_back(20);
03415             m_taujet_discNN->push_back(20);
03416             m_taujet_discPDERS->push_back(20);
03417             m_taujet_lowPtTauJetDiscriminant->push_back(1);
03418             m_taujet_lowPtTauEleDiscriminant->push_back(1);
03419             m_taujet_tauENeuralNetwork->push_back(1);
03420             m_taujet_tauJetNeuralnetwork->push_back(1);
03421             m_taujet_bdtJet->push_back(20);
03422             m_taujet_bdtEle->push_back(20);
03423         }
03424     }
03425 
03426     return true;
03427 
03428   }
03429 //*****************************************************************************
03430 
03431   //::::::::::::::::::::::::::::::
03432   //:: METHOD get_truthjet_data ::
03433   //::::::::::::::::::::::::::::::
03434 
03435 bool AANtupleWriter14::get_truthjet_data(void) {
03436 
03438     // VARIABLES //
03440 
03441     //const ParticleJetContainer *truthjet_container(0); // container with 
03442     const JetCollection *truthjet_container(0); // container with 
03443     // truth jets
03444 
03446     // GET A POINTER TO THE TRUTHJET CONTAINER //
03448 
03449     StatusCode sc(m_storeGate->retrieve(truthjet_container, m_truthjet_container));
03450     if(sc.isFailure() || truthjet_container==0) {
03451         *m_log << MSG::WARNING
03452                << "No truthjet container found in the store gate!"
03453                << endreq;
03454         return false;
03455     }
03456     *m_log << MSG::DEBUG << "TruthJet container retrieved successfully!"
03457            << endreq;
03458 
03460     // TRUTH JETS //
03462 
03463     // loop over the truth jets //
03464     for (unsigned int k=0; k<truthjet_container->size(); k++) {
03465 
03466         // number of jets //
03467         m_nb_truth_jets++;
03468 
03469         // four momentum //
03470         m_truthjet_p_x->push_back( (*truthjet_container)[k]->px() );
03471         m_truthjet_p_y->push_back( (*truthjet_container)[k]->py() );                           
03472         m_truthjet_p_z->push_back( (*truthjet_container)[k]->pz() );                           
03473         m_truthjet_E->push_back( (*truthjet_container)[k]->e() );
03474         
03476         //TBD: tagInfo stuff//
03478         
03479         // flag //
03480         Jet mytruthjet(*(*truthjet_container)[k]); // needed to fix bug
03481         // of missing const
03482         // in ParticleJet
03483 //TBD        m_truthjet_flag->push_back( mytruthjet.author() );
03484 
03485         // tags and tag weights (to be defined) //
03486 //TBD        m_truthjet_btag_weight->push_back( (*truthjet_container)[k]->weight() );
03487 
03488 
03489         // --- get the true label of the jet from MC Truth:
03490         //              std::string label("N/A");
03491         //              const Analysis::TruthInfo* mcinfo = (*truthjet_container)[k]->tagInfo<Analysis::TruthInfo>("TruthInfo");
03492         //              if(mcinfo) {
03493         //                label = mcinfo->jetTruthLabel();
03494         //              } else {
03495         //                *m_log << MSG::WARNING << "could not find TruthInfo for matching jet" << endreq;
03496         //              }
03497         //              int iflav(0);
03498         //              if(label=="B")         iflav = 5;    // b-jet
03499         //              else if(label=="C")    iflav = 4;    // c-jet
03500         //              else if(label=="T")    iflav = 15;   // tau
03501         //              else if(label=="N/A")  iflav = 0;
03502         //              else                   iflav = -1;
03503 
03504         //              //m_jet_truthflavor->push_back( iflav );
03505 
03506         //              cout << "label: " << label << ", jetflavor: " << iflav << endl;
03507 
03508     }
03509 
03510     return true;
03511 
03512   }
03513 //*****************************************************************************
03514 
03515   //:::::::::::::::::::::::::::::::
03516   //:: METHOD get_missingEt_data ::
03517   //:::::::::::::::::::::::::::::::
03518 
03519 bool AANtupleWriter14::get_missingEt_data(void) 
03520 {
03521     const MissingET *missingEt_container(0); // container with missing Et
03522 
03523         missingEt_container=0;
03524     // vector of containers that should be written out
03525     vector<string> met_container;
03526     // set the vector to the vector of names given in the job options file
03527     met_container=v_string_met_container;
03528     
03529     // loop over this vector
03530     for(unsigned int i_met_cont=0; i_met_cont<met_container.size(); i_met_cont++){
03531         
03532         // if the container name is "MET_RefFinal_1mmCorrection"
03533         // check wether the 1mm fix is applied
03534         // if not fill variables with 0.0 and go to the next container name
03535         if(!m_doAODFix1mm && (met_container.at(i_met_cont)=="MET_RefFinal_1mmCorrection")){
03536             m_met_obj_name->push_back( (met_container.at(i_met_cont)).c_str() );
03537             m_missing_Etx->push_back(0.0);
03538             m_missing_Ety->push_back(0.0);
03539             m_missing_Et->push_back(0.0);
03540             m_missing_Etsum->push_back(0.0);
03541             continue;
03542         }
03543         
03545             // GET A POINTER TO A GENERAL MET CONTAINER //
03547         StatusCode sc = StatusCode(m_storeGate->retrieve(missingEt_container,
03548             (met_container.at(i_met_cont)).c_str()));
03549         if(sc.isFailure() || missingEt_container==0) {
03550             *m_log << MSG::WARNING<< "No missingEt container "<<met_container.at(i_met_cont)
03551                     <<" found in the store gate!"<< endreq;
03552             return false;
03553         }
03554         *m_log << MSG::DEBUG << "MissingEt container "<<met_container.at(i_met_cont)
03555                 <<" retrieved successfully!"<< endreq;
03556         m_met_obj_name->push_back( (met_container.at(i_met_cont)).c_str() );
03557         m_missing_Etx->push_back(missingEt_container->etx());
03558         m_missing_Ety->push_back(missingEt_container->ety());
03559         m_missing_Et->push_back(missingEt_container->et());
03560         m_missing_Etsum->push_back(missingEt_container->sumet());
03561         
03562         // set the pointer to the MET container to 0 again
03563         missingEt_container=0;
03564     }
03565     return true;
03566 
03567 }
03568 //*****************************************************************************
03569 
03570   //::::::::::::::::::::::::::::::::::::
03571   //:: METHOD get_truthmissingEt_data ::
03572   //::::::::::::::::::::::::::::::::::::
03573 
03574 bool AANtupleWriter14::get_truthmissingEt_data(void) 
03575 {
03576 
03577 
03579     // VARIABLES //
03581 
03582     const MissingET *truthmissingEt_container(0); // container with 
03583     // truthmissing Et
03584 
03586     // GET A POINTER TO THE TRUTHMISSING ET CONTAINER //
03588 
03589     StatusCode sc(m_storeGate->retrieve(truthmissingEt_container, m_truthmissingEt_container));
03590     if(sc.isFailure() || truthmissingEt_container==0) {
03591         *m_log << MSG::WARNING
03592                << "No truthmissingEt container found in the store gate!"
03593                << endreq;
03594         return false;
03595     }
03596     *m_log << MSG::DEBUG << "TruthMissingEt container retrieved successfully!"
03597            << endreq;
03598 
03599 
03601     // TRUTHMISSING ET //
03603     
03604     MissingEtTruth::TruthIndex tidx;
03605     double etx, ety;
03606 
03607     // Int
03608     tidx = MissingEtTruth::Int;
03609     etx = ((MissingEtTruth*)truthmissingEt_container)->exTruth(tidx);
03610     ety = ((MissingEtTruth*)truthmissingEt_container)->eyTruth(tidx);
03611     m_met_obj_name->push_back( "TruthMET_Int" );
03612     m_missing_Etx->push_back(etx);
03613     m_missing_Ety->push_back(ety);
03614     m_missing_Et->push_back(sqrt((etx*etx)+(ety*ety)));
03615     m_missing_Etsum->push_back(((MissingEtTruth*)truthmissingEt_container)->etSumTruth(tidx));
03616     
03617     // NonInt
03618     tidx = MissingEtTruth::NonInt;
03619     etx = ((MissingEtTruth*)truthmissingEt_container)->exTruth(tidx);
03620     ety = ((MissingEtTruth*)truthmissingEt_container)->eyTruth(tidx);
03621     m_met_obj_name->push_back( "TruthMET_NonInt" );
03622     m_missing_Etx->push_back(etx);
03623     m_missing_Ety->push_back(ety);
03624     m_missing_Et->push_back(sqrt((etx*etx)+(ety*ety)));
03625     m_missing_Etsum->push_back(((MissingEtTruth*)truthmissingEt_container)->etSumTruth(tidx));
03626 
03627     // IntCentral
03628     tidx = MissingEtTruth::IntCentral;
03629     etx = ((MissingEtTruth*)truthmissingEt_container)->exTruth(tidx);
03630     ety = ((MissingEtTruth*)truthmissingEt_container)->eyTruth(tidx);
03631     m_met_obj_name->push_back( "TruthMET_IntCentral" );
03632     m_missing_Etx->push_back(etx);
03633     m_missing_Ety->push_back(ety);
03634     m_missing_Et->push_back(sqrt((etx*etx)+(ety*ety)));
03635     m_missing_Etsum->push_back(((MissingEtTruth*)truthmissingEt_container)->etSumTruth(tidx));
03636 
03637     // IntFwd
03638     tidx = MissingEtTruth::IntFwd;
03639     etx = ((MissingEtTruth*)truthmissingEt_container)->exTruth(tidx);
03640     ety = ((MissingEtTruth*)truthmissingEt_container)->eyTruth(tidx);
03641     m_met_obj_name->push_back( "TruthMET_IntFwd" );
03642     m_missing_Etx->push_back(etx);
03643     m_missing_Ety->push_back(ety);
03644     m_missing_Et->push_back(sqrt((etx*etx)+(ety*ety)));
03645     m_missing_Etsum->push_back(((MissingEtTruth*)truthmissingEt_container)->etSumTruth(tidx));
03646 
03647     // IntOutCover
03648     tidx = MissingEtTruth::IntOutCover;
03649     etx = ((MissingEtTruth*)truthmissingEt_container)->exTruth(tidx);
03650     ety = ((MissingEtTruth*)truthmissingEt_container)->eyTruth(tidx);
03651     m_met_obj_name->push_back( "TruthMET_IntOutCover" );
03652     m_missing_Etx->push_back(etx);
03653     m_missing_Ety->push_back(ety);
03654     m_missing_Et->push_back(sqrt((etx*etx)+(ety*ety)));
03655     m_missing_Etsum->push_back(((MissingEtTruth*)truthmissingEt_container)->etSumTruth(tidx));
03656 
03657     // Muons
03658     tidx = MissingEtTruth::Muons;
03659     etx = ((MissingEtTruth*)truthmissingEt_container)->exTruth(tidx);
03660     ety = ((MissingEtTruth*)truthmissingEt_container)->eyTruth(tidx);
03661     m_met_obj_name->push_back( "TruthMET_Muons" );
03662     m_missing_Etx->push_back(etx);
03663     m_missing_Ety->push_back(ety);
03664     m_missing_Et->push_back(sqrt((etx*etx)+(ety*ety)));
03665     m_missing_Etsum->push_back(((MissingEtTruth*)truthmissingEt_container)->etSumTruth(tidx));
03666 
03667     return true;
03668 
03669 }
03670 //*****************************************************************************
03671 
03672   //:::::::::::::::::::::::::::::::::::
03673   //:: METHOD get_truthparticle_data ::
03674   //:::::::::::::::::::::::::::::::::::
03675 
03676 bool AANtupleWriter14::get_truthparticle_data(void) 
03677 {
03678 
03679 
03681     // VARIABLES //
03683 
03684     const TruthParticleContainer *truthparticle_container(0); // container with 
03685     // truth particles
03686     const float pt_cut_value_leptons(0);    // value for lepton pt-cut [MeV]
03687     const float pt_cut_value(1000);         // value for pt-cut [MeV]
03688     // particles with a pt value smaller
03689     // than the cut value are not stored
03690     // in the output ntuple
03691     const int barcode_cut_value(m_truthparticleMaximumLeptonBarcode); // value for the lepton barcode-cut
03692     // particles with a barcode bigger
03693     // than the cut value are not stored
03694     // in the output ntuple
03695 
03696     unsigned int abs_particle_pdgId(0);     // for storing the abs value
03697     // of the current particle
03698 
03700     // GET A POINTER TO THE TRUTHPARTICLE CONTAINER //
03702 
03703     StatusCode sc(m_storeGate->retrieve(truthparticle_container, m_truthparticle_container));
03704     if(sc.isFailure() || truthparticle_container==0) {
03705         *m_log << MSG::WARNING
03706                << "No truthparticle container found in the store gate!"
03707                << endreq;
03708         return false;
03709     }
03710     *m_log << MSG::DEBUG << "TruthParticle container retrieved successfully!"
03711            << endreq;
03712 
03713 
03714 
03716     // LOOP OVER TRUTH CONTAINER, STORE SELECTED PARTICLES //
03718 
03719     for ( unsigned int i=0; i<truthparticle_container->size(); i++) {
03720 
03721         // cut on barcode
03722         if ((*truthparticle_container)[i]->barcode()>barcode_cut_value){
03723             continue;
03724         }
03725 
03726         // cut on pt=pt_cut_value_leptons for leptons and pt_cut_value else
03727         // particles are only stored, if they have a pdgID!!
03728         if ((*truthparticle_container)[i]->hasPdgId()){
03729             if(TMath::Abs( (*truthparticle_container)[i]->pdgId())==11 ||
03730                TMath::Abs( (*truthparticle_container)[i]->pdgId())==12 ||
03731                TMath::Abs( (*truthparticle_container)[i]->pdgId())==13 ||
03732                TMath::Abs( (*truthparticle_container)[i]->pdgId())==14 ||
03733                TMath::Abs( (*truthparticle_container)[i]->pdgId())==15 ||
03734                TMath::Abs( (*truthparticle_container)[i]->pdgId())==16 )
03735             {
03736                 if ((*truthparticle_container)[i]->pt()<pt_cut_value_leptons) continue;
03737             }
03738             // cut on pt (only for barcodes>100)
03739             else if ((*truthparticle_container)[i]->pt()      < pt_cut_value &&
03740                      (*truthparticle_container)[i]->barcode()>100){
03741                 continue;
03742             }
03743         }
03744         // get particle pdgId
03745         if (!(*truthparticle_container)[i]->hasPdgId()){
03746             *m_log  << MSG::WARNING
03747                     << "particle has no pdgId"
03748                     << endreq;
03749             abs_particle_pdgId=0;
03750         }
03751         else{
03752             abs_particle_pdgId=TMath::Abs( (*truthparticle_container)[i]->pdgId() );
03753         }
03754 
03755         // skip particles with Monte Carlo internal barcodes (81-100)
03756         if (abs_particle_pdgId>80 && abs_particle_pdgId<101){
03757             continue;
03758         }
03759         // skip gluons
03760         if (abs_particle_pdgId==21){
03761             continue;
03762         }                
03763         // For simple analyses without hadrons
03764         // skip all above 100 (hadrons)
03765         if (abs_particle_pdgId>100 && m_truthparticleNoPDGAbove100){
03766             continue;
03767         }
03768                 
03769         // call function "fill_truthparticle_data" for this particle
03770         fill_truthparticle_data((*truthparticle_container)[i]);
03771 
03772     }
03773 
03774     return true;
03775 }
03776 
03777 //*****************************************************************************
03778 
03779   //:::::::::::::::::::::::::::::::::
03780   //:: METHOD get_eventweight_data ::
03781   //:::::::::::::::::::::::::::::::::
03782 
03783 bool AANtupleWriter14::get_eventweight_data(void) {
03784 
03785     if(m_doEventWeight){
03786         //const McEventCollection *mcCollPtr(0); // container with 
03788         MsgStream mLog(messageService(), name());
03789         m_event_weight = 1234;
03790         const McEventCollection* mcCollPtr ;
03791         if ( m_storeGate->retrieve(mcCollPtr, "GEN_AOD").isFailure() ) {
03792             mLog << MSG::ERROR << "Could not retrieve McEventCollection" << endreq;
03793             return false;
03794         }
03795         McEventCollection::const_iterator evt = mcCollPtr->begin() ;
03796         const HepMC::GenEvent* ge = (*evt) ;
03797         const HepMC::WeightContainer& wc = ge->weights() ;
03798         m_event_weight = wc.front() ;
03799         
03800         *m_log << MSG::DEBUG << "Events Weights retrieved successfully!"
03801                << endreq;
03802     }
03803     else{
03804         m_event_weight = 1;   
03805     }
03806 
03807     return true;
03808   }
03809 
03810 //*****************************************************************************
03811 
03812 
03813 
03814   //::::::::::::::::::::::::::::::::::::
03815   //:: METHOD fill_truthparticle_data ::
03816   //::::::::::::::::::::::::::::::::::::
03817 
03818 void AANtupleWriter14::fill_truthparticle_data(const TruthParticle *m_TruthParticle)
03819 {
03820 
03822     // TRUTH PARTICLE DATA //
03824 
03825 
03826     // check whether the particle has already been stored, serarch via barcode //
03827     for( int k=0; k < m_nb_truth_particle; k++ ){
03828         if( m_TruthParticle->genParticle()->barcode() == m_truth_particle_barcode->at(k) ){
03829             std::cout<<"particle already stored"<<std::endl;
03830             return;
03831         }
03832     }
03833 
03834 
03835 
03836     // fill data for truth particle //
03837 
03838     m_nb_truth_particle++;
03839 
03840     m_truth_particle_pt->push_back( m_TruthParticle->pt());
03841     m_truth_particle_status->push_back( m_TruthParticle->genParticle()->status());
03842     m_truth_particle_barcode->push_back( m_TruthParticle->genParticle()->barcode());
03843     m_truth_particle_pdgId->push_back( m_TruthParticle->pdgId());
03844     m_truth_particle_nDaughters->push_back( m_TruthParticle->nDecay());
03845     m_truth_particle_p_x->push_back( m_TruthParticle->px() );
03846     m_truth_particle_p_y->push_back( m_TruthParticle->py() );
03847     m_truth_particle_p_z->push_back( m_TruthParticle->pz() );
03848     m_truth_particle_E->push_back( m_TruthParticle->e() );
03849 
03850     m_truth_particle_charge->push_back( m_TruthParticle->charge());
03851     m_truth_particle_nParents->push_back( m_TruthParticle->nParents());
03852     if (m_TruthParticle->nParents()>0){
03853         m_truth_particle_mother0_barcode->push_back( m_TruthParticle->mother(0)->barcode());
03854         m_truth_particle_mother0_pdgId->push_back( m_TruthParticle->mother(0)->pdgId());
03855     }
03856     else{
03857         m_truth_particle_mother0_barcode->push_back(0);
03858         m_truth_particle_mother0_pdgId->push_back(0);
03859     }
03860 
03861 
03862     return;
03863 
03864 }
03865 //*****************************************************************************
03866 
03867 //::::::::::::::::::::::::::::
03868 //:: METHOD get_vertex_data ::
03869 //::::::::::::::::::::::::::::
03870 
03871 bool AANtupleWriter14::get_vertex_data(void) {
03872 
03874 // VARIABLES //
03876 
03877         vector<MPIHiggsAnalysis::Vertex> vertices(m_vert_coll->getVertices());
03878                                                                 // vertices
03879 
03880 // ///////////////
03881 // // VARIABLES //
03882 // ///////////////
03883 // 
03884 //      const Rec::TrackParticleContainer *track_particle_container(0);
03885 //                                      // pointer to the track particles
03886 //      const VxContainer *vertex_container(0); // pointer to the vertices
03887 // 
03888 // ///////////////////////////////////////////
03889 // // GET A POINTER TO THE VERTEX CONTAINER //
03890 // ///////////////////////////////////////////
03891 // 
03892         //StatusCode sc(m_storeGate->retrieve(vertex_container,
03893         //                              m_primary_vertex_container));
03894         
03895 //      StatusCode sc(m_storeGate->retrieve(vertex_container,
03896 //                                              "VxPrimaryCandidate"));
03897 
03898 //         if (sc.isFailure() || vertex_container==0) {
03899 //              *m_log << MSG::ERROR
03900 //                      << "No vertex container "
03901 //                      << m_primary_vertex_container
03902 //                      << " found in the store gate!"
03903 //                      << endreq;
03904 //              return false;
03905 //      }
03906 
03907 //      *m_log << MSG::DEBUG
03908 //              << "Vertex container "
03909 //              << m_primary_vertex_container
03910 //              << " retrieved successfully!"
03911 //              << endreq;
03912 
03913 //         cout << vertex_container->size() << ", " << vertices.size() << endl;
03914 
03915 // /////////////////////////////////////////////////////////////////////
03916 // // CALCULATE SUM OF TRANSVERSE ENERGIES EMERGING FROM THE VERTICES //
03917 // /////////////////////////////////////////////////////////////////////
03918 // 
03919 // // loop over the vertices //
03920 //      sc = (m_storeGate->retrieve(track_particle_container,
03921 //                                              m_track_particle_container));
03922 //      if (sc.isFailure() || track_particle_container==0) {
03923 //              *m_log << MSG::WARNING
03924 //                      << "No track particle container found in store gate!"
03925 //                      << endreq;
03926 //              return sc;
03927 //      }
03928 //      *m_log << MSG::DEBUG
03929 //              << "Track particle container retrieved successfully!"
03930 //              << endreq;
03931 // 
03932 //      vector<double> Et_vert(vertex_container->size(), 0.0); // Et(vertex)
03933 //      for (unsigned int k=0; k<track_particle_container->size(); k++) {
03934 //              for (unsigned int l=0; l<vertex_container->size(); l++) {
03935 //                      Trk::RecVertex vert((*vertex_container)[l]->recVertex());
03936 //                      if ((*track_particle_container
03937 //                              )[k]->reconstructedVertex()->position()==
03938 //                              vert.position()) {
03939 //                              Et_vert[l] = Et_vert[l]+
03940 //                                      (*track_particle_container)[k]->hlv(
03941 //                                                              ).et();
03942 //                      }
03943 //              }
03944 //      }
03945 
03947 // VERTICES //
03949 
03950 //      static ofstream out("debug_writer.txt");
03951 //      out << vertex_container->size()<< "\t"
03952 //              << m_vert_coll->getVertices().size() << "\t";
03953 // 
03954 //      double emax(0.0);
03955 // 
03956 // // loop over the vertices //
03957 //      for (unsigned int k=0; k<vertex_container->size(); k++) {
03958 // 
03959 //    // number of vertices //
03960 //              m_nb_vertices++;
03961 // 
03962 //    // vertex position //
03963 //              Trk::RecVertex vert((*vertex_container)[k]->recVertex());
03964 //              m_vertex_position_x->push_back(vert.position().x());
03965 //              m_vertex_position_y->push_back(vert.position().x());
03966 //              m_vertex_position_z->push_back(vert.position().x());
03967 // 
03968 //    // vertex error //
03969 //              Trk::ErrorMatrix err(vert.errorPosition());
03970 //              m_vertex_pos_error_x->push_back(err.error(Trk::x));
03971 //              m_vertex_pos_error_y->push_back(err.error(Trk::y));
03972 //              m_vertex_pos_error_z->push_back(err.error(Trk::z));
03973 // 
03974 //    // fit characteristics //
03975 //              m_vertex_chi2->push_back(vert.chi2());
03976 //              m_vertex_ndof->push_back(vert.ndf());
03977 // 
03978 //    // transverse momentum of the vertex //
03979 //              m_vertex_Et->push_back(Et_vert[k]);
03980 //              if (emax<Et_vert[k]) {
03981 //                      emax = Et_vert[k];
03982 //              }
03983 // 
03984 //      }
03985 // 
03986 //      out << emax << "\t"
03987 //              << m_vert_coll->getVertices()[
03988 //                              m_vert_coll->getVertices().size()-1].Et()
03989 //              << endl;
03990 
03991 // loop over the vertices //
03992         for (unsigned int k=0; k<vertices.size(); k++) {
03993 
03994    // number of vertices //
03995                 m_nb_vertices++;
03996 
03997    // vertex position //
03998                 m_vertex_position_x->push_back(vertices[k].position().x());
03999                 m_vertex_position_y->push_back(vertices[k].position().x());
04000                 m_vertex_position_z->push_back(vertices[k].position().x());
04001 
04002    // vertex error //
04003                 m_vertex_pos_error_x->push_back(
04004                                         vertices[k].positionError().x());
04005                 m_vertex_pos_error_y->push_back(
04006                                         vertices[k].positionError().y());
04007                 m_vertex_pos_error_z->push_back(
04008                                         vertices[k].positionError().z());
04009 
04010    // fit characteristics //
04011                 m_vertex_chi2->push_back(vertices[k].chi2());
04012                 m_vertex_ndof->push_back(
04013                                         vertices[k].numberOfDegreesOfFreedom());
04014 
04015    // transverse momentum of the vertex //
04016                 m_vertex_Et->push_back(vertices[k].Et());
04017 
04018    // number of tracks emerging from the vertex //
04019                 m_vertex_nb_tracks->push_back(vertices[k].numberOfTracks());
04020 
04021         }
04022 
04023         return true;
04024 
04025 }
04026 
04027 //*****************************************************************************
04028 
04032 //
04033 //bool AANtupleWriter14::get_truth_vertex_data(void) {
04034 //
04038 //
04039 //        MyTruthTrackJetInfoContainer *container(
04040 //                MyTruthTrackJetInfoContainer::getTruthTrackJetInfoContainer());
04041 //                                                // container for vertex data    
04045 //
04046 //        m_nb_truth_vertices = container->vertex().size();
04047 //
04049 //        for (unsigned int k=0; k<container->vertex().size(); k++) {
04050 //
04051 //   // vertex position //
04052 //                m_truth_vertex_position_x->push_back(
04053 //                                                (container->vertex())[k].x());
04054 //                m_truth_vertex_position_y->push_back(
04055 //                                                (container->vertex())[k].x());
04056 //                m_truth_vertex_position_z->push_back(
04057 //                                                (container->vertex())[k].x());
04058 //
04059 //   // transverse momentum of the vertex //
04060 //                m_truth_vertex_Et->push_back((container->Et())[k]);
04061 //
04062 //   // number of tracks //
04063 //                m_truth_vertex_nb_tracks->push_back(
04064 //                                        (container->numberOfTracks())[k]);
04065 //
04066 //        }
04067 //
04068 //        return true;
04069 //
04070 //}
04071 
04072 //*****************************************************************************
04073 
04074 //:::::::::::::::::::::::::::::::
04075 //:: METHOD get_track_jet_data ::
04076 //:::::::::::::::::::::::::::::::
04077 
04078 bool AANtupleWriter14::get_track_jet_data(void) {
04079 
04081 // VARIABLES //
04083 
04084         const INavigable4MomentumCollection *jet_container(0);
04085                                 // container with reconstructed track jets
04086 
04088 // GET A POINTER TO THE JET CONTAINER //
04090 
04091         StatusCode sc(m_storeGate->retrieve(jet_container,
04092                                                 m_track_jet_container));
04093         if(sc.isFailure() || jet_container==0) {
04094                 *m_log << MSG::WARNING
04095                         << "No track jet container "
04096                         << m_track_jet_container
04097                         << " found in the store gate!"
04098                         << endreq;
04099                 return false;
04100         }
04101 
04102         *m_log << MSG::DEBUG
04103                 << "Track jet container "
04104                 << m_track_jet_container
04105                 << " retrieved successfully!"
04106                 << endreq;
04107 
04109 // TRACK JETS //
04111 
04112 // loop over the reconstructed jets //
04113         for (unsigned int k=0; k<jet_container->size(); k++) {
04114 
04115     // number of jets //
04116                 m_nb_track_jets++;
04117 
04118    // four momentum = sum of the momenta of the constituents //
04119                 m_track_jet_p_x->push_back( (*jet_container)[k]->px() );
04120                 m_track_jet_p_y->push_back( (*jet_container)[k]->py() );                            
04121                 m_track_jet_p_z->push_back( (*jet_container)[k]->pz() );                            
04122                 m_track_jet_E->push_back( (*jet_container)[k]->e() );
04123             
04124         }
04125 
04126         return true;
04127 
04128 }
04129 
04130 //*****************************************************************************
04131 
04132 //:::::::::::::::::::::::::::::::::::::
04133 //:: METHOD get_truth_track_jet_data ::
04134 //:::::::::::::::::::::::::::::::::::::
04135 
04136 bool AANtupleWriter14::get_truth_track_jet_data(void) {
04137 
04139 // VARIABLES //
04141 
04142         const INavigable4MomentumCollection *jet_container(0);
04143                                 // container with reconstructed track jets
04144 
04146 // GET A POINTER TO THE JET CONTAINER //
04148 
04149         StatusCode sc(m_storeGate->retrieve(jet_container,
04150                                                 m_truth_track_jet_container));
04151         if(sc.isFailure() || jet_container==0) {
04152                 *m_log << MSG::WARNING
04153                         << "No truth track jet container "
04154                         << m_truth_track_jet_container
04155                         << " found in the store gate!"
04156                         << endreq;
04157                 return false;
04158         }
04159 
04160         *m_log << MSG::DEBUG
04161                 << "Truth track jet container "
04162                 << m_truth_track_jet_container
04163                 << " retrieved successfully!"
04164                 << endreq;
04165 
04167 // TRACK JETS //
04169 
04170 // loop over the reconstructed jets //
04171         for (unsigned int k=0; k<jet_container->size(); k++) {
04172 
04173     // number of jets //
04174                 m_nb_truth_track_jets++;
04175 
04176    // four momentum = sum of the momenta of the constituents //
04177                 m_truth_track_jet_p_x->push_back( (*jet_container)[k]->px() );
04178                 m_truth_track_jet_p_y->push_back( (*jet_container)[k]->py() );                      
04179                 m_truth_track_jet_p_z->push_back( (*jet_container)[k]->pz() );                      
04180                 m_truth_track_jet_E->push_back( (*jet_container)[k]->e() );
04181             
04182         }
04183 
04184         return true;
04185 
04186 }
04187 
04188 //*****************************************************************************
04189 
04190 //::::::::::::::::::::::::
04191 //:: METHOD find_vertex ::
04192 //::::::::::::::::::::::::
04193 
04194 unsigned int 
04195 AANtupleWriter14::find_vertex(const Trk::RecVertex * vertex) const {
04196 
04198  // VARIABLES //
04200  
04201       const VxContainer *vertex_container(0); // pointer to the vertices
04202       Trk::RecVertex vert; // auxiliary vertex
04203  
04205  // GET A POINTER TO THE VERTEX CONTAINER //
04207  
04208       StatusCode sc(m_storeGate->retrieve(vertex_container,
04209                                               m_primary_vertex_container));
04210       if (sc.isFailure() || vertex_container==0) {
04211               *m_log << MSG::ERROR
04212                       << "No vertex container "
04213                       << m_primary_vertex_container
04214                       << " found in the store gate!"
04215                       << endreq;
04216               return 0;
04217       }
04218  
04219       *m_log << MSG::DEBUG
04220               << "Vertex container "
04221               << m_primary_vertex_container
04222               << " retrieved successfully!"
04223               << endreq;
04224  
04226  // OBVIOUS RESULT IF THERE IS ONLY ONE OR NO VERTEX //
04228  
04229       if (vertex_container->size()<=1) {
04230               return 0;
04231       }
04232  
04234  // LOOP OVER THE VERTICES //
04236  
04237       for (unsigned int k=0; k<vertex_container->size(); k++) {
04238               vert = (*vertex_container)[k]->recVertex();
04239               if (vertex->position() == vert.position()) {
04240                       return k;
04241               }
04242       }
04243  
04244       *m_log << MSG::WARNING
04245               << "No vertex found!"
04246               << endreq;
04247 
04249 // VARIABLES //
04251 
04252         vector<MPIHiggsAnalysis::Vertex> vertices(m_vert_coll->getVertices());
04253                                                                 // vertices
04255 // LOOP OVER THE VERTICES //
04257 
04258         for (unsigned int k=0; k<vertices.size(); k++) {
04259                 if (vertex->position() == vertices[k].position()) {
04260                         return k;
04261                 }
04262         }
04263 
04264         *m_log << MSG::WARNING
04265                 << "No vertex found!"
04266                 << endreq;
04267 
04268         return 0;
04269 
04270 }
04271 
04272 //*****************************************************************************
04273 
04274 //:::::::::::::::::::::::::::::::
04275 //:: METHOD get_energy_in_cone ::
04276 //:::::::::::::::::::::::::::::::
04277 
04278 double 
04279 AANtupleWriter14::get_energy_in_cone(const double & cone,
04280                                      const HepLorentzVector & p, 
04281                                      const Hep3Vector & vertex) {
04282 
04284 // VARIABLES //
04286 
04287     double ET(0.); // transverse energy in the cone
04288     const Rec::TrackParticleContainer *track_particle_container(0);
04289                                         // pointer to the track particles
04290 
04292 // GET A POINTER TO GET THE TRACK PARTICLES //
04294 
04295     StatusCode sc(m_storeGate->retrieve(track_particle_container,
04296                                         m_track_particle_container));
04297     if (sc.isFailure() || track_particle_container==0) {
04298         *m_log << MSG::WARNING
04299                << "No track particle container found in store gate!"
04300                << endreq;
04301         return sc;
04302     }
04303     *m_log << MSG::DEBUG
04304            << "Track particle container retrieved successfully!"
04305            << endreq;
04306 
04308 // LOOP OVER THE TRACKS AND CALCULATE THE ENERGY IN THE CONE //
04310 
04311     for (unsigned int k=0; k<track_particle_container->size(); k++) {
04312         
04313         if(m_doVertices){
04314             
04315             if( vertex == Hep3Vector(0.,0.,0.) ){
04316                 continue;
04317             }
04318 
04319             if ((*track_particle_container)[k]->reconstructedVertex()==NULL){
04320                 continue;
04321             }
04322 
04323             if ((*track_particle_container)[k]
04324                 ->reconstructedVertex()->recVertex().position() != vertex){
04325                 continue;
04326             }
04327         }
04328         
04329         if ( p.deltaR((*track_particle_container)[k]->hlv()) < cone &&
04330              p.deltaR((*track_particle_container)[k]->hlv()) > 0.01) {
04331             
04332             ET += (*track_particle_container)[k]->hlv().et();
04333         }
04334         
04335     }
04336     
04337     return ET;
04338     
04339   }

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