HiggsAnalysis/HiggsAnalysis-00-01-00/HiggsAnalysis/HiggsAnalysisNtupleWriter.h

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

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