ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/plugins/L1RpcTreeAnalysis.cc
Revision: 1.20
Committed: Thu May 23 18:24:03 2013 UTC (11 years, 11 months ago) by konec
Content type: text/plain
Branch: MAIN
Changes since 1.19: +11 -3 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 konec 1.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 konec 1.12 #include "UserCode/L1RpcTriggerAnalysis/interface/EventObjBXExtra.h"
20 konec 1.1 #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 konec 1.7 #include "UserCode/L1RpcTriggerAnalysis/interface/DetCluDigiObj.h"
25 konec 1.5 #include "UserCode/L1RpcTriggerAnalysis/interface/TriggerMenuResultObj.h"
26 konec 1.17 #include "UserCode/L1RpcTriggerAnalysis/interface/HitSpecObj.h"
27 konec 1.1
28 konec 1.12
29 konec 1.1 #include "UserCode/L1RpcTriggerAnalysis/interface/ConverterRPCRawSynchroSynchroCountsObj.h"
30    
31 konec 1.9 L1RpcTreeAnalysis::L1RpcTreeAnalysis(const edm::ParameterSet & cfg)
32     : theConfig(cfg),
33 konec 1.17 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 konec 1.18 thePatternProvider(0),
48     theAnaSiMuDistribution(0),
49 konec 1.19 theAnaOtfEff(0)
50 konec 1.17 {
51 konec 1.18 if (theConfig.exists("anaMuonDistribution")) theAnaMuonDistribution = new AnaMuonDistribution( cfg.getParameter<edm::ParameterSet>("anaMuonDistribution"));
52 konec 1.17 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 konec 1.18 if (theConfig.exists("anaSiMuDistribution")) theAnaSiMuDistribution = new AnaSiMuDistribution( cfg.getParameter<edm::ParameterSet>("anaSiMuDistribution"));
60 konec 1.19 if (theConfig.exists("anaOtfEff")) theAnaOtfEff = new AnaOtfEff( cfg.getParameter<edm::ParameterSet>("anaOtfEff"));
61 konec 1.20 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 konec 1.17
64     }
65 konec 1.1
66     void L1RpcTreeAnalysis::beginJob()
67     {
68     theHistos.SetOwner();
69    
70 konec 1.17 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 konec 1.18 if (theAnaSiMuDistribution) theAnaSiMuDistribution->init(theHistos);
84 konec 1.19 if (theAnaOtfEff) theAnaOtfEff->init(theHistos);
85 konec 1.17
86     if (thePatternProvider) thePatternProvider->beginJob();
87 konec 1.1 }
88    
89     void L1RpcTreeAnalysis::beginRun(const edm::Run& ru, const edm::EventSetup& es)
90     {
91 konec 1.17 if (theAnaSynch) theAnaSynch->beginRun(ru,es);
92 konec 1.1 }
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 konec 1.7 std::vector<DetCluDigiObj> *detsHitsCompatibleWithMuon = 0;
121 konec 1.1 std::vector<uint32_t> *detsSIMU = 0;
122 konec 1.17 std::vector<std::pair<uint32_t, uint32_t> > *digSpec = 0;
123 konec 1.1
124     EventObj * event = 0;
125     MuonObj * muon = 0;
126 konec 1.17 TrackObj * simu = 0;
127 konec 1.1
128 konec 1.5 TriggerMenuResultObj *bitsL1 = 0;
129     TriggerMenuResultObj *bitsHLT = 0;
130    
131 konec 1.1 TBranch *bcounts=0;
132     TBranch *bdetsCrossedByMuon =0;
133     TBranch *bdetsCrossedByMuonDeepInside =0;
134     TBranch *bdetsHitsCompatibleWithMuon = 0;
135     TBranch *bdetsSIMU =0;
136 konec 1.17 TBranch *bdigSpec = 0;
137 konec 1.1
138 konec 1.9 L1ObjColl* l1ObjColl = 0;
139 konec 1.17 HitSpecObj* hitSpec = 0;
140    
141 konec 1.1
142     chain.SetBranchAddress("event",&event);
143     chain.SetBranchAddress("muon",&muon);
144 konec 1.17 chain.SetBranchAddress("simu",&simu);
145 konec 1.1
146 konec 1.5 chain.SetBranchAddress("bitsL1",&bitsL1);
147     chain.SetBranchAddress("bitsHLT",&bitsHLT);
148    
149 konec 1.1 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 konec 1.17 chain.SetBranchAddress("digSpec",&digSpec,&bdigSpec);
155 konec 1.1
156 konec 1.9 chain.SetBranchAddress("l1ObjColl",&l1ObjColl);
157 konec 1.17 chain.SetBranchAddress("hitSpec",&hitSpec);
158 konec 1.1
159    
160     //
161 konec 1.5 // number of events
162 konec 1.1 //
163     Int_t nentries = (Int_t) chain.GetEntries();
164     std::cout <<" ENTRIES: " << nentries << std::endl;
165    
166    
167     //
168     // main loop
169     //
170     unsigned int lastRun = 0;
171     for (int ev=0; ev<nentries; ev++) {
172     chain.GetEntry(ev);
173 konec 1.17 if (theAnaMenu) theAnaMenu->updateMenu(bitsL1->names, bitsHLT->names);
174 konec 1.1
175 konec 1.17 if ( (lastRun != (*event).run) || (ev/10000*10000==ev) ) {
176 konec 1.14 // if (true) {
177 konec 1.16 // if (! ((*event).run==204601 && (*event).id ==109463402)) { continue;
178 konec 1.1 lastRun = (*event).run;
179     std::cout <<"RUN:" << std::setw(7) << (*event).run
180     <<" event:" << std::setw(8) << ev
181 konec 1.11 <<" done:" << std::setw(6)<< std::setiosflags(std::ios::fixed) << std::setprecision(2) << ev*100./nentries<<"%";
182     std::cout<<std::endl;
183 konec 1.1 }
184    
185 konec 1.13 /*
186     if ( event->id == 597978012
187     || event->id == 14791798
188     || event->id == 436261807
189     || event->id == 873776280
190     || event->id == 960307389
191     || event->id == 150097556
192     || event->id == 42062946
193     || event->id == 1064121551
194     || event->id == 1499489591
195     || event->id == 60161631
196     || event->id == 624624695
197     || event->id == 727298833
198     || event->id == 835600542
199     || event->id == 216373776
200     || event->id == 1107585611
201     || event->id == 197907027
202     ) theAnaMenu.debug = true; else theAnaMenu.debug = false;
203     */
204 konec 1.1
205 konec 1.12 // EVENT NUMBER, BX structure etc.
206     EventObjBXExtra eventBx(*event);
207 konec 1.17 if ( theAnaEvent && !theAnaEvent->filter(&eventBx) && theConfig.getParameter<bool>("filterByAnaEvent") ) continue;
208 konec 1.9 // ANALYSE AND FILTER KINEMCTICS
209 konec 1.17 if ( theAnaMuonDistribution && !theAnaMuonDistribution->filter(muon) && theConfig.getParameter<bool>("filterByAnaMuonDistribution") ) continue;
210 konec 1.9 // ANALYSE AND FILTER TRIGGER MENU
211 konec 1.17 if ( theAnaMenu && !theAnaMenu->filter(event, muon, bitsL1, bitsHLT) && theConfig.getParameter<bool>("filterByAnaMenu") ) continue;
212 konec 1.18 // ANALYSE AND FILTER SIMU KONEMATICs
213     if ( theAnaSiMuDistribution && !theAnaSiMuDistribution->filter(event, simu, hitSpec) && theConfig.getParameter<bool>("filterByAnaSiMuDistribution") ) continue;
214 konec 1.1
215 konec 1.20 const TrackObj * refTrack = theConfig.getParameter<bool>("useSiMuReference") ? simu : muon;
216    
217 konec 1.17 // ANALYSES
218 konec 1.20 if (theAnaRpcVsOth) theAnaRpcVsOth->run(refTrack,l1ObjColl);
219     if (theAnaEff) theAnaEff->run(refTrack, l1ObjColl);
220    
221     // std::cout <<"refTrack: "<< *refTrack<<std::endl;
222     // std::cout <<"l1ObjColl: "<< *l1ObjColl << std::endl;
223    
224 konec 1.17 if (theAnaRpcMisc) theAnaRpcMisc->run(event,muon,l1ObjColl);
225     if (theAnaDet) theAnaDet->run( muon, *detsHitsCompatibleWithMuon, *detsCrossedByMuon, *detsCrossedByMuonDeepInside);
226     if (theAnaEmu) theAnaEmu->run ( event, muon, l1ObjColl);
227     if (theAnaSynch) theAnaSynch->run( event, muon, ConverterRPCRawSynchroSynchroCountsObj::toRawSynchro( *counts));
228     if (theAnaClu) theAnaClu->run( event, muon, l1ObjColl, *detsHitsCompatibleWithMuon);
229     if (theAnaTimingL1) theAnaTimingL1->run( &eventBx, muon, l1ObjColl);
230    
231 konec 1.20 // HITPATTERN ANALYSES & OTF EFFICIENCY
232 konec 1.17 if (theAnaHitSpec) theAnaHitSpec->run(event, simu, hitSpec);
233     if (theAnaDigiSpec) theAnaDigiSpec->run(event, simu, hitSpec, *digSpec);
234     if (thePatternProducer) thePatternProducer->run(event, simu, hitSpec, *digSpec);
235 konec 1.18 L1Obj l1otf;
236     if (thePatternProvider) l1otf=thePatternProvider->check(event, simu, hitSpec, *digSpec);
237 konec 1.19 if (theAnaOtfEff) theAnaOtfEff->run(event,simu,l1otf);
238 konec 1.1 }
239     }
240    
241     void L1RpcTreeAnalysis::endJob()
242     {
243     std::cout <<"ENDJOB, summaries:"<<std::endl;
244 konec 1.17 TGraph* hGraph_DetEff = (theAnaDet) ? theAnaDet->resume() : 0;
245     TGraph* hGraph_RunClu = (theAnaClu) ? theAnaClu->resume(): 0;
246     if (theAnaRpcMisc) theAnaRpcMisc->resume(theHistos);
247     if (theAnaTimingL1) theAnaTimingL1->resume(theHistos);
248     if (theAnaMenu) theAnaMenu->resume(theHistos);
249     if (theAnaMenu) theAnaEvent->resume(theHistos);
250     if (theAnaHitSpec) theAnaHitSpec->resume(theHistos);
251     if (theAnaDigiSpec) theAnaDigiSpec->resume(theHistos);
252    
253     if (theAnaSynch) theAnaSynch->endJob();
254     if (thePatternProducer) thePatternProducer->endJob();
255     if (thePatternProvider) thePatternProvider->endJob();
256 konec 1.1
257     std::string histoFile = theConfig.getParameter<std::string>("histoFileName");
258     TFile f(histoFile.c_str(),"RECREATE");
259     theHistos.Write();
260 konec 1.17 if (hGraph_DetEff) hGraph_DetEff->Write("hGraph_DetEff");
261     if (hGraph_RunClu) hGraph_RunClu->Write("hGraph_RunClu");
262 konec 1.1 f.Close();
263     std::cout <<"END"<<std::endl;
264 konec 1.17
265     delete theAnaMuonDistribution;
266     delete theAnaRpcVsOth;
267     delete theAnaRpcMisc;
268     delete theAnaEff;
269     delete theAnaDet;
270     delete theAnaEmu;
271     delete theAnaSynch;
272     delete theAnaClu;
273     delete theAnaTimingL1;
274     delete theAnaMenu;
275     delete theAnaEvent;
276     delete theAnaDigiSpec;
277     delete theAnaHitSpec;
278     delete thePatternProducer;
279     delete thePatternProvider;
280 konec 1.19 delete theAnaSiMuDistribution;
281     delete theAnaOtfEff;
282 konec 1.1 }