ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/plugins/L1RpcTreeAnalysis.cc
Revision: 1.28
Committed: Thu Jul 11 11:26:52 2013 UTC (11 years, 9 months ago) by akalinow
Content type: text/plain
Branch: MAIN
CVS Tags: Artur_11_07_2013_B, Artur_11_07_2013_A, HEAD
Changes since 1.27: +1 -2 lines
Error occurred while calculating annotation data.
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "L1RpcTreeAnalysis.h"
2
3 #include <vector>
4 #include <iostream>
5 #include <cmath>
6 #include <iomanip>
7
8 #include "TFile.h"
9 #include "TChain.h"
10 #include "TTree.h"
11 #include "TProfile.h"
12 #include "TH2F.h"
13 #include "TH1D.h"
14 #include "TGraphErrors.h"
15 #include "TF1.h"
16
17 #include "UserCode/L1RpcTriggerAnalysis/interface/L1Obj.h"
18 #include "UserCode/L1RpcTriggerAnalysis/interface/EventObj.h"
19 #include "UserCode/L1RpcTriggerAnalysis/interface/EventObjBXExtra.h"
20 #include "UserCode/L1RpcTriggerAnalysis/interface/TrackObj.h"
21 #include "UserCode/L1RpcTriggerAnalysis/interface/MuonObj.h"
22 #include "UserCode/L1RpcTriggerAnalysis/interface/L1ObjColl.h"
23 #include "UserCode/L1RpcTriggerAnalysis/interface/SynchroCountsObj.h"
24 #include "UserCode/L1RpcTriggerAnalysis/interface/DetCluDigiObj.h"
25 #include "UserCode/L1RpcTriggerAnalysis/interface/TriggerMenuResultObj.h"
26 #include "UserCode/L1RpcTriggerAnalysis/interface/HitSpecObj.h"
27
28
29 #include "UserCode/L1RpcTriggerAnalysis/interface/ConverterRPCRawSynchroSynchroCountsObj.h"
30
31 L1RpcTreeAnalysis::L1RpcTreeAnalysis(const edm::ParameterSet & cfg)
32 : theConfig(cfg),
33 theAnaMuonDistribution(0),
34 theAnaRpcVsOth(0),
35 theAnaRpcMisc(0),
36 theAnaEff(0),
37 theAnaDet(0),
38 theAnaEmu(0),
39 theAnaSynch(0),
40 theAnaClu(0),
41 theAnaTimingL1(0),
42 theAnaMenu(0),
43 theAnaEvent(0),
44 theAnaDigiSpec(0),
45 theAnaHitSpec(0),
46 thePatternProducer(0),
47 thePatternProvider(0),
48 theAnaSiMuDistribution(0),
49 theAnaOtfEff(0)
50 {
51 if (theConfig.exists("anaMuonDistribution")) theAnaMuonDistribution = new AnaMuonDistribution( cfg.getParameter<edm::ParameterSet>("anaMuonDistribution"));
52 if (theConfig.exists("anaMenu")) theAnaMenu = new AnaMenu(theConfig.getParameter<edm::ParameterSet>("anaMenu"));
53 if (theConfig.exists("anaTimingL1")) theAnaTimingL1 = new AnaTimingL1( theConfig.getParameter<edm::ParameterSet>("anaTimingL1") );
54 if (theConfig.exists("anaEvent")) theAnaEvent = new AnaEvent(cfg.getParameter<edm::ParameterSet>("anaEvent") );
55 if (theConfig.exists("anaDigiSpec")) theAnaDigiSpec = new AnaDigiSpec(cfg.getParameter<edm::ParameterSet>("anaDigiSpec"));
56 if (theConfig.exists("anaHitSpec")) theAnaHitSpec = new AnaHitSpec(cfg.getParameter<edm::ParameterSet>("anaHitSpec"));
57 if (theConfig.exists("patternProducer")) thePatternProducer = new PatternManager(cfg.getParameter<edm::ParameterSet>("patternProducer"));
58 if (theConfig.exists("patternProvider")) thePatternProvider = new PatternManager(cfg.getParameter<edm::ParameterSet>("patternProvider"));
59 if (theConfig.exists("anaSiMuDistribution")) theAnaSiMuDistribution = new AnaSiMuDistribution( cfg.getParameter<edm::ParameterSet>("anaSiMuDistribution"));
60 if (theConfig.exists("anaOtfEff")) theAnaOtfEff = new AnaOtfEff( cfg.getParameter<edm::ParameterSet>("anaOtfEff"));
61 if (theConfig.exists("anaEff")) theAnaEff = new AnaEff(cfg.getParameter<edm::ParameterSet>("anaEff") );
62 if (theConfig.exists("anaRpcVsOth")) theAnaRpcVsOth = new AnaRpcVsOth(cfg.getParameter<edm::ParameterSet>("anaRpcVsOth") );
63
64 }
65
66 void L1RpcTreeAnalysis::beginJob()
67 {
68 theHistos.SetOwner();
69
70 if (theAnaMuonDistribution) theAnaMuonDistribution->init(theHistos);
71 if (theAnaRpcVsOth) theAnaRpcVsOth->init(theHistos);
72 if (theAnaRpcMisc) theAnaRpcMisc->init(theHistos);
73 if (theAnaEff) theAnaEff->init(theHistos);
74 if (theAnaDet) theAnaDet->init(theHistos);
75 if (theAnaEmu) theAnaEmu->init(theHistos);
76 if (theAnaSynch) theAnaSynch->init(theHistos);
77 if (theAnaClu) theAnaClu->init(theHistos);
78 if (theAnaTimingL1) theAnaTimingL1->init(theHistos);
79 if (theAnaEvent) theAnaEvent->init(theHistos);
80 if (theAnaMenu) theAnaMenu->init(theHistos);
81 if (theAnaDigiSpec) theAnaDigiSpec->init(theHistos);
82 if (theAnaHitSpec) theAnaHitSpec->init(theHistos);
83 if (theAnaSiMuDistribution) theAnaSiMuDistribution->init(theHistos);
84 if (theAnaOtfEff) theAnaOtfEff->init(theHistos);
85
86 if (thePatternProvider) thePatternProvider->beginJob();
87 }
88
89 void L1RpcTreeAnalysis::beginRun(const edm::Run& ru, const edm::EventSetup& es)
90 {
91 if (theAnaSynch) theAnaSynch->beginRun(ru,es);
92 }
93
94 void L1RpcTreeAnalysis::analyze(const edm::Event&, const edm::EventSetup&)
95 {
96 //
97 // prevent multievent execution
98 //
99 static bool the_EMERGENCY_STOP = false;
100 if (the_EMERGENCY_STOP) {
101 std::cout <<"** L1RpcTreeAnalysis::analyze EMERGENCY_STOP fired, skip" << std::endl;
102 return;
103 }
104 the_EMERGENCY_STOP = true;
105
106 //
107 // define input chain
108 //
109 TChain chain("tL1Rpc");
110 std::vector<std::string> treeFileNames = theConfig.getParameter<std::vector<std::string> >("treeFileNames");
111 for (std::vector<std::string>::const_iterator it = treeFileNames.begin(); it != treeFileNames.end(); ++it) chain.Add((*it).c_str() );
112
113
114 //
115 // prepare datastructures and branches
116 //
117 std::vector<SynchroCountsObj> *counts= 0;
118 std::vector<uint32_t> *detsCrossedByMuon = 0;
119 std::vector<uint32_t> *detsCrossedByMuonDeepInside = 0;
120 std::vector<DetCluDigiObj> *detsHitsCompatibleWithMuon = 0;
121 std::vector<uint32_t> *detsSIMU = 0;
122 std::vector<std::pair<uint32_t, uint32_t> > *digSpec = 0;
123
124 EventObj * event = 0;
125 MuonObj * muon = 0;
126 TrackObj * simu = 0;
127
128 TriggerMenuResultObj *bitsL1 = 0;
129 TriggerMenuResultObj *bitsHLT = 0;
130
131 TBranch *bcounts=0;
132 TBranch *bdetsCrossedByMuon =0;
133 TBranch *bdetsCrossedByMuonDeepInside =0;
134 TBranch *bdetsHitsCompatibleWithMuon = 0;
135 TBranch *bdetsSIMU =0;
136 TBranch *bdigSpec = 0;
137
138 L1ObjColl* l1ObjColl = 0;
139 HitSpecObj* hitSpec = 0;
140
141
142 chain.SetBranchAddress("event",&event);
143 chain.SetBranchAddress("muon",&muon);
144 chain.SetBranchAddress("simu",&simu);
145
146 chain.SetBranchAddress("bitsL1",&bitsL1);
147 chain.SetBranchAddress("bitsHLT",&bitsHLT);
148
149 chain.SetBranchAddress("counts",&counts,&bcounts);
150 chain.SetBranchAddress("detsCrossedByMuon",&detsCrossedByMuon,&bdetsCrossedByMuon);
151 chain.SetBranchAddress("detsCrossedByMuonDeepInside",&detsCrossedByMuonDeepInside,&bdetsCrossedByMuonDeepInside);
152 chain.SetBranchAddress("detsHitsCompatibleWithMuon",&detsHitsCompatibleWithMuon,&bdetsHitsCompatibleWithMuon);
153 chain.SetBranchAddress("detsSIMU",&detsSIMU,&bdetsSIMU);
154 chain.SetBranchAddress("digSpec",&digSpec,&bdigSpec);
155
156 chain.SetBranchAddress("l1ObjColl",&l1ObjColl);
157 chain.SetBranchAddress("hitSpec",&hitSpec);
158
159
160 //
161 // number of events
162 //
163 Int_t nentries = (Int_t) chain.GetEntries();
164 std::cout <<" ENTRIES: " << nentries << std::endl;
165 //
166 // main loop
167 //
168 unsigned int lastRun = 0;
169 for (int ev=0; ev<nentries; ev+=1) {
170 chain.GetEntry(ev);
171 if (theAnaMenu) theAnaMenu->updateMenu(bitsL1->names, bitsHLT->names);
172
173 if ( (lastRun != (*event).run) || (ev%1000000==0) ) {
174 lastRun = (*event).run;
175 std::cout <<"RUN:" << std::setw(7) << (*event).run
176 <<" event:" << std::setw(8) << ev
177 <<" done:" << std::setw(6)<< std::setiosflags(std::ios::fixed) << std::setprecision(2) << ev*100./nentries<<"%";
178 std::cout<<std::endl;
179 }
180
181 // EVENT NUMBER, BX structure etc.
182 EventObjBXExtra eventBx(*event);
183 if ( theAnaEvent && !theAnaEvent->filter(&eventBx) && theConfig.getParameter<bool>("filterByAnaEvent") ) continue;
184 // ANALYSE AND FILTER KINEMCTICS
185 if ( theAnaMuonDistribution && !theAnaMuonDistribution->filter(muon) && theConfig.getParameter<bool>("filterByAnaMuonDistribution") ) continue;
186 // ANALYSE AND FILTER TRIGGER MENU
187 if ( theAnaMenu && !theAnaMenu->filter(event, muon, bitsL1, bitsHLT) && theConfig.getParameter<bool>("filterByAnaMenu") ) continue;
188 // ANALYSE AND FILTER SIMU KONEMATICs
189 if ( theAnaSiMuDistribution && !theAnaSiMuDistribution->filter(event, simu, hitSpec) && theConfig.getParameter<bool>("filterByAnaSiMuDistribution") ) continue;
190
191 const TrackObj * refTrack = theConfig.getParameter<bool>("useSiMuReference") ? simu : muon;
192
193 // ANALYSES
194 if (theAnaRpcVsOth) theAnaRpcVsOth->run(refTrack,l1ObjColl);
195
196 // std::cout <<"refTrack: "<< *refTrack<<std::endl;
197 // std::cout <<"l1ObjColl: "<< *l1ObjColl << std::endl;
198
199 if (theAnaRpcMisc) theAnaRpcMisc->run(event,muon,l1ObjColl);
200 if (theAnaDet) theAnaDet->run( muon, *detsHitsCompatibleWithMuon, *detsCrossedByMuon, *detsCrossedByMuonDeepInside);
201 if (theAnaEmu) theAnaEmu->run ( event, muon, l1ObjColl);
202 if (theAnaSynch) theAnaSynch->run( event, muon, ConverterRPCRawSynchroSynchroCountsObj::toRawSynchro( *counts));
203 if (theAnaClu) theAnaClu->run( event, muon, l1ObjColl, *detsHitsCompatibleWithMuon);
204 if (theAnaTimingL1) theAnaTimingL1->run( &eventBx, muon, l1ObjColl);
205
206 // HITPATTERN ANALYSES & OTF EFFICIENCY
207 if (theAnaHitSpec) theAnaHitSpec->run(event, simu, hitSpec);
208 if (theAnaDigiSpec) theAnaDigiSpec->run(event, simu, hitSpec, *digSpec);
209 if (thePatternProducer) thePatternProducer->run(event, simu, hitSpec, *digSpec);
210 L1Obj l1otf;
211 if (thePatternProvider) l1otf=thePatternProvider->check(event, simu, hitSpec, *digSpec);
212 if (theAnaOtfEff) theAnaOtfEff->run(event,simu,l1otf);
213 L1ObjColl myL1ObjColl = *l1ObjColl;
214 myL1ObjColl.push_back(l1otf, false, 0.);
215 if (theAnaEff) theAnaEff->run(refTrack, &myL1ObjColl, hitSpec);
216 }
217 }
218
219 void L1RpcTreeAnalysis::endJob()
220 {
221 std::cout <<"ENDJOB, summaries:"<<std::endl;
222 TGraph* hGraph_DetEff = (theAnaDet) ? theAnaDet->resume() : 0;
223 TGraph* hGraph_RunClu = (theAnaClu) ? theAnaClu->resume(): 0;
224 if (theAnaRpcMisc) theAnaRpcMisc->resume(theHistos);
225 if (theAnaTimingL1) theAnaTimingL1->resume(theHistos);
226 if (theAnaMenu) theAnaMenu->resume(theHistos);
227 if (theAnaMenu) theAnaEvent->resume(theHistos);
228 if (theAnaHitSpec) theAnaHitSpec->resume(theHistos);
229 if (theAnaDigiSpec) theAnaDigiSpec->resume(theHistos);
230
231 if (theAnaSynch) theAnaSynch->endJob();
232 if (thePatternProducer) thePatternProducer->endJob();
233 if (thePatternProvider) thePatternProvider->endJob();
234
235 std::string histoFile = theConfig.getParameter<std::string>("histoFileName");
236 TFile f(histoFile.c_str(),"RECREATE");
237 theHistos.Write();
238 if (hGraph_DetEff) hGraph_DetEff->Write("hGraph_DetEff");
239 if (hGraph_RunClu) hGraph_RunClu->Write("hGraph_RunClu");
240 f.Close();
241 std::cout <<"END"<<std::endl;
242
243 delete theAnaMuonDistribution;
244 delete theAnaRpcVsOth;
245 delete theAnaRpcMisc;
246 delete theAnaEff;
247 delete theAnaDet;
248 delete theAnaEmu;
249 delete theAnaSynch;
250 delete theAnaClu;
251 delete theAnaTimingL1;
252 delete theAnaMenu;
253 delete theAnaEvent;
254 delete theAnaDigiSpec;
255 delete theAnaHitSpec;
256 delete thePatternProducer;
257 delete thePatternProvider;
258 delete theAnaSiMuDistribution;
259 delete theAnaOtfEff;
260 }