00001 #include <iostream>
00002 #include <sstream>
00003 #include <istream>
00004 #include <fstream>
00005 #include <iomanip>
00006 #include <string>
00007 #include <cmath>
00008 #include <functional>
00009 #include <stdlib.h>
00010 #include <string.h>
00011
00012 #include "HLTrigger/HLTanalyzers/interface/HLTHeavyIon.h"
00013 #include "FWCore/Common/interface/TriggerNames.h"
00014
00015
00016 #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h"
00017
00018 #include "DataFormats/HeavyIonEvent/interface/Centrality.h"
00019 using namespace std;
00020
00021 HLTHeavyIon::HLTHeavyIon() {
00022
00023
00024 _Monte = false;
00025 _Debug=false;
00026 _OR_BXes=false;
00027 UnpackBxInEvent=1;
00028
00029 }
00030
00031 void HLTHeavyIon::beginRun(const edm::Run& run, const edm::EventSetup& c){
00032
00033
00034 bool changed(true);
00035 if (hltConfig_.init(run,c,processName_,changed)) {
00036
00037 if (changed) {
00038
00039
00040 cout << "Initalizing HLTConfigProvider" << endl;
00041 }
00042 } else {
00043
00044
00045 cout << " HLT config extraction failure with process name " << processName_ << endl;
00046
00047 }
00048
00049 }
00050
00051
00052 void HLTHeavyIon::setup(const edm::ParameterSet& pSet, TTree* HltTree) {
00053
00054
00055 processName_ = pSet.getParameter<std::string>("HLTProcessName") ;
00056
00057 edm::ParameterSet myHltParams = pSet.getParameter<edm::ParameterSet>("RunParameters") ;
00058 vector<std::string> parameterNames = myHltParams.getParameterNames() ;
00059
00060 for ( vector<std::string>::iterator iParam = parameterNames.begin();
00061 iParam != parameterNames.end(); iParam++ ){
00062 if ( (*iParam) == "Debug" ) _Debug = myHltParams.getParameter<bool>( *iParam );
00063 if ( (*iParam) == "Monte" ) _Monte = myHltParams.getParameter<bool>( *iParam );
00064
00065 }
00066
00067 HltEvtCnt = 0;
00068 const int kMaxEvtPlanes = 1000;
00069
00070 fNpart = -1;
00071 fNcoll = -1;
00072 fNhard = -1;
00073 fPhi0 = -1;
00074 fb = -1;
00075 fNcharged = -1;
00076 fNchargedMR = -1;
00077 fMeanPt = -1;
00078 fMeanPtMR = -1;
00079
00080 fEtMR = -1;
00081 fNchargedPtCut = -1;
00082 fNchargedPtCutMR = -1;
00083
00084 nEvtPlanes = 0;
00085 hiBin = -1;
00086 hiEvtPlane = new float[kMaxEvtPlanes];
00087
00088 HltTree->Branch("Npart",&fNpart,"Npart/F");
00089 HltTree->Branch("Ncoll",&fNcoll,"Ncoll/F");
00090 HltTree->Branch("Nhard",&fNhard,"Nhard/F");
00091 HltTree->Branch("phi0",&fPhi0,"NPhi0/F");
00092 HltTree->Branch("b",&fb,"b/F");
00093 HltTree->Branch("Ncharged",&fNcharged,"Ncharged/I");
00094 HltTree->Branch("NchargedMR",&fNchargedMR,"NchargedMR/I");
00095 HltTree->Branch("MeanPt",&fMeanPt,"MeanPt/F");
00096 HltTree->Branch("MeanPtMR",&fMeanPtMR,"MeanPtMR/F");
00097 HltTree->Branch("EtMR",&fEtMR,"EtMR/F");
00098 HltTree->Branch("NchargedPtCut",&fNchargedPtCut,"NchargedPtCut/I");
00099 HltTree->Branch("NchargedPtCutMR",&fNchargedPtCutMR,"NchargedPtCutMR/I");
00100 HltTree->Branch("hiBin",&hiBin,"hiBin/I");
00101 HltTree->Branch("hiHF",&hiHF,"hiHF/F");
00102 HltTree->Branch("hiHFplus",&hiHFplus,"hiHFplus/F");
00103 HltTree->Branch("hiHFminus",&hiHFminus,"hiHFminus/F");
00104 HltTree->Branch("hiZDC",&hiZDC,"hiZDC/F");
00105 HltTree->Branch("hiZDCplus",&hiZDCplus,"hiZDCplus/F");
00106 HltTree->Branch("hiZDCminus",&hiZDCminus,"hiZDCminus/F");
00107
00108 HltTree->Branch("hiHFhit",&hiHFhit,"hiHFhit/F");
00109 HltTree->Branch("hiHFhitPlus",&hiHFhitPlus,"hiHFhitPlus/F");
00110 HltTree->Branch("hiHFhitMinus",&hiHFhitMinus,"hiHFhitMinus/F");
00111
00112 HltTree->Branch("hiET",&hiET,"hiET/F");
00113 HltTree->Branch("hiEE",&hiEE,"hiEE/F");
00114 HltTree->Branch("hiEB",&hiEB,"hiEB/F");
00115 HltTree->Branch("hiEEplus",&hiEEplus,"hiEEplus/F");
00116 HltTree->Branch("hiEEminus",&hiEEminus,"hiEEminus/F");
00117 HltTree->Branch("hiNpix",&hiNpix,"hiNpix/I");
00118 HltTree->Branch("hiNpixelTracks",&hiNpixelTracks,"hiNpixelTracks/I");
00119 HltTree->Branch("hiNtracks",&hiNtracks,"hiNtracks/I");
00120 HltTree->Branch("hiNevtPlane",&nEvtPlanes,"hiNevtPlane/I");
00121 HltTree->Branch("hiEvtPlanes",hiEvtPlane,"hiEvtPlanes/F");
00122 HltTree->Branch("hiNtracksPtCut",&hiNtracksPtCut,"hiNtracksPtCut/I");
00123 HltTree->Branch("hiNtracksEtaCut",&hiNtracksEtaCut,"hiNtracksEtaCut/I");
00124 HltTree->Branch("hiNtracksEtaPtCut",&hiNtracksEtaPtCut,"hiNtracksEtaPtCut/I");
00125
00126 }
00127
00128
00129 void HLTHeavyIon::analyze(const edm::Handle<edm::TriggerResults> & hltresults,
00130 const edm::Handle<reco::Centrality> & centrality,
00131 const edm::Handle<reco::EvtPlaneCollection> & evtPlanes,
00132 const edm::Handle<edm::GenHIEvent> & mc,
00133 edm::EventSetup const& eventSetup,
00134 edm::Event const& iEvent,
00135 TTree* HltTree) {
00136
00137 std::cout << " Beginning HLTHeavyIon " << std::endl;
00138
00139 if(_Monte){
00140 fb = mc->b();
00141 fNpart = mc->Npart();
00142 fNcoll = mc->Ncoll();
00143 fNhard = mc->Nhard();
00144 fPhi0 = mc->evtPlane();
00145 fNcharged = mc->Ncharged();
00146 fNchargedMR = mc->NchargedMR();
00147 fMeanPt = mc->MeanPt();
00148 fMeanPtMR = mc->MeanPtMR();
00149 fEtMR = mc->EtMR();
00150 fNchargedPtCut = mc->NchargedPtCut();
00151 fNchargedPtCutMR = mc->NchargedPtCutMR();
00152 }
00153
00154 edm::Handle<int> binHandle;
00155 iEvent.getByLabel("centralityBin",binHandle);
00156 hiBin = *binHandle;
00157
00158 hiNpix = centrality->multiplicityPixel();
00159 hiNpixelTracks = centrality->NpixelTracks();
00160 hiNtracks = centrality->Ntracks();
00161 hiNtracksPtCut = centrality->NtracksPtCut();
00162 hiNtracksEtaCut = centrality->NtracksEtaCut();
00163 hiNtracksEtaPtCut = centrality->NtracksEtaPtCut();
00164
00165 hiHF = centrality->EtHFtowerSum();
00166 hiHFplus = centrality->EtHFtowerSumPlus();
00167 hiHFminus = centrality->EtHFtowerSumMinus();
00168 hiHFhit = centrality->EtHFhitSum();
00169 hiHFhitPlus = centrality->EtHFhitSumPlus();
00170 hiHFhitMinus = centrality->EtHFhitSumMinus();
00171
00172 hiZDC = centrality->zdcSum();
00173 hiZDCplus = centrality->zdcSumPlus();
00174 hiZDCminus = centrality->zdcSumMinus();
00175
00176 hiEEplus = centrality->EtEESumPlus();
00177 hiEEminus = centrality->EtEESumMinus();
00178 hiEE = centrality->EtEESum();
00179 hiEB = centrality->EtEBSum();
00180 hiET = centrality->EtMidRapiditySum();
00181
00182
00183 if(evtPlanes.isValid()){
00184 nEvtPlanes = evtPlanes->size();
00185 for(unsigned int i = 0; i < evtPlanes->size(); ++i){
00186 hiEvtPlane[i] = (*evtPlanes)[i].angle();
00187 }
00188 }
00189
00190 }