HiggsAnalysis/HiggsAnalysis-00-01-00/src/HiggsAnalysisNtupleWriter.cxx

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

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