ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/plugins/L1RpcTreeAnalysis.cc
Revision: 1.24
Committed: Tue Jun 25 10:49:35 2013 UTC (11 years, 10 months ago) by akalinow
Content type: text/plain
Branch: MAIN
Changes since 1.23: +5 -3 lines
Log Message:
* initial cleanup by AK

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 akalinow 1.24
52 konec 1.18 if (theConfig.exists("anaMuonDistribution")) theAnaMuonDistribution = new AnaMuonDistribution( cfg.getParameter<edm::ParameterSet>("anaMuonDistribution"));
53 konec 1.17 if (theConfig.exists("anaMenu")) theAnaMenu = new AnaMenu(theConfig.getParameter<edm::ParameterSet>("anaMenu"));
54     if (theConfig.exists("anaTimingL1")) theAnaTimingL1 = new AnaTimingL1( theConfig.getParameter<edm::ParameterSet>("anaTimingL1") );
55     if (theConfig.exists("anaEvent")) theAnaEvent = new AnaEvent(cfg.getParameter<edm::ParameterSet>("anaEvent") );
56     if (theConfig.exists("anaDigiSpec")) theAnaDigiSpec = new AnaDigiSpec(cfg.getParameter<edm::ParameterSet>("anaDigiSpec"));
57     if (theConfig.exists("anaHitSpec")) theAnaHitSpec = new AnaHitSpec(cfg.getParameter<edm::ParameterSet>("anaHitSpec"));
58     if (theConfig.exists("patternProducer")) thePatternProducer = new PatternManager(cfg.getParameter<edm::ParameterSet>("patternProducer"));
59     if (theConfig.exists("patternProvider")) thePatternProvider = new PatternManager(cfg.getParameter<edm::ParameterSet>("patternProvider"));
60 konec 1.18 if (theConfig.exists("anaSiMuDistribution")) theAnaSiMuDistribution = new AnaSiMuDistribution( cfg.getParameter<edm::ParameterSet>("anaSiMuDistribution"));
61 konec 1.19 if (theConfig.exists("anaOtfEff")) theAnaOtfEff = new AnaOtfEff( cfg.getParameter<edm::ParameterSet>("anaOtfEff"));
62 konec 1.20 if (theConfig.exists("anaEff")) theAnaEff = new AnaEff(cfg.getParameter<edm::ParameterSet>("anaEff") );
63     if (theConfig.exists("anaRpcVsOth")) theAnaRpcVsOth = new AnaRpcVsOth(cfg.getParameter<edm::ParameterSet>("anaRpcVsOth") );
64 konec 1.17
65     }
66 konec 1.1
67     void L1RpcTreeAnalysis::beginJob()
68     {
69 akalinow 1.24
70 konec 1.1 theHistos.SetOwner();
71    
72 konec 1.17 if (theAnaMuonDistribution) theAnaMuonDistribution->init(theHistos);
73     if (theAnaRpcVsOth) theAnaRpcVsOth->init(theHistos);
74     if (theAnaRpcMisc) theAnaRpcMisc->init(theHistos);
75     if (theAnaEff) theAnaEff->init(theHistos);
76     if (theAnaDet) theAnaDet->init(theHistos);
77     if (theAnaEmu) theAnaEmu->init(theHistos);
78     if (theAnaSynch) theAnaSynch->init(theHistos);
79     if (theAnaClu) theAnaClu->init(theHistos);
80     if (theAnaTimingL1) theAnaTimingL1->init(theHistos);
81     if (theAnaEvent) theAnaEvent->init(theHistos);
82     if (theAnaMenu) theAnaMenu->init(theHistos);
83     if (theAnaDigiSpec) theAnaDigiSpec->init(theHistos);
84     if (theAnaHitSpec) theAnaHitSpec->init(theHistos);
85 konec 1.18 if (theAnaSiMuDistribution) theAnaSiMuDistribution->init(theHistos);
86 konec 1.19 if (theAnaOtfEff) theAnaOtfEff->init(theHistos);
87 konec 1.17
88     if (thePatternProvider) thePatternProvider->beginJob();
89 konec 1.1 }
90    
91     void L1RpcTreeAnalysis::beginRun(const edm::Run& ru, const edm::EventSetup& es)
92     {
93 konec 1.17 if (theAnaSynch) theAnaSynch->beginRun(ru,es);
94 konec 1.1 }
95    
96     void L1RpcTreeAnalysis::analyze(const edm::Event&, const edm::EventSetup&)
97     {
98     //
99     // prevent multievent execution
100     //
101     static bool the_EMERGENCY_STOP = false;
102     if (the_EMERGENCY_STOP) {
103     std::cout <<"** L1RpcTreeAnalysis::analyze EMERGENCY_STOP fired, skip" << std::endl;
104     return;
105     }
106     the_EMERGENCY_STOP = true;
107    
108     //
109     // define input chain
110     //
111 akalinow 1.24
112 konec 1.1 TChain chain("tL1Rpc");
113     std::vector<std::string> treeFileNames = theConfig.getParameter<std::vector<std::string> >("treeFileNames");
114     for (std::vector<std::string>::const_iterator it = treeFileNames.begin(); it != treeFileNames.end(); ++it) chain.Add((*it).c_str() );
115    
116     //
117     // prepare datastructures and branches
118     //
119     std::vector<SynchroCountsObj> *counts= 0;
120     std::vector<uint32_t> *detsCrossedByMuon = 0;
121     std::vector<uint32_t> *detsCrossedByMuonDeepInside = 0;
122 konec 1.7 std::vector<DetCluDigiObj> *detsHitsCompatibleWithMuon = 0;
123 konec 1.1 std::vector<uint32_t> *detsSIMU = 0;
124 konec 1.17 std::vector<std::pair<uint32_t, uint32_t> > *digSpec = 0;
125 konec 1.1
126     EventObj * event = 0;
127     MuonObj * muon = 0;
128 konec 1.17 TrackObj * simu = 0;
129 konec 1.1
130 konec 1.5 TriggerMenuResultObj *bitsL1 = 0;
131     TriggerMenuResultObj *bitsHLT = 0;
132    
133 konec 1.1 TBranch *bcounts=0;
134     TBranch *bdetsCrossedByMuon =0;
135     TBranch *bdetsCrossedByMuonDeepInside =0;
136     TBranch *bdetsHitsCompatibleWithMuon = 0;
137     TBranch *bdetsSIMU =0;
138 konec 1.17 TBranch *bdigSpec = 0;
139 konec 1.1
140 konec 1.9 L1ObjColl* l1ObjColl = 0;
141 konec 1.17 HitSpecObj* hitSpec = 0;
142    
143 konec 1.1
144     chain.SetBranchAddress("event",&event);
145     chain.SetBranchAddress("muon",&muon);
146 konec 1.17 chain.SetBranchAddress("simu",&simu);
147 konec 1.1
148 konec 1.5 chain.SetBranchAddress("bitsL1",&bitsL1);
149     chain.SetBranchAddress("bitsHLT",&bitsHLT);
150    
151 konec 1.1 chain.SetBranchAddress("counts",&counts,&bcounts);
152     chain.SetBranchAddress("detsCrossedByMuon",&detsCrossedByMuon,&bdetsCrossedByMuon);
153     chain.SetBranchAddress("detsCrossedByMuonDeepInside",&detsCrossedByMuonDeepInside,&bdetsCrossedByMuonDeepInside);
154     chain.SetBranchAddress("detsHitsCompatibleWithMuon",&detsHitsCompatibleWithMuon,&bdetsHitsCompatibleWithMuon);
155     chain.SetBranchAddress("detsSIMU",&detsSIMU,&bdetsSIMU);
156 konec 1.17 chain.SetBranchAddress("digSpec",&digSpec,&bdigSpec);
157 konec 1.1
158 konec 1.9 chain.SetBranchAddress("l1ObjColl",&l1ObjColl);
159 konec 1.17 chain.SetBranchAddress("hitSpec",&hitSpec);
160 konec 1.1
161     //
162 konec 1.5 // number of events
163 konec 1.1 //
164     Int_t nentries = (Int_t) chain.GetEntries();
165     std::cout <<" ENTRIES: " << nentries << std::endl;
166    
167    
168 akalinow 1.24
169 konec 1.1 //
170     // main loop
171     //
172     unsigned int lastRun = 0;
173     for (int ev=0; ev<nentries; ev++) {
174     chain.GetEntry(ev);
175 konec 1.17 if (theAnaMenu) theAnaMenu->updateMenu(bitsL1->names, bitsHLT->names);
176 konec 1.1
177 konec 1.23 // if (ev < 44055) continue;
178 akalinow 1.24 if ( (lastRun != (*event).run) || (ev%10000==0) ) {
179 konec 1.14 // if (true) {
180 konec 1.16 // if (! ((*event).run==204601 && (*event).id ==109463402)) { continue;
181 konec 1.1 lastRun = (*event).run;
182     std::cout <<"RUN:" << std::setw(7) << (*event).run
183     <<" event:" << std::setw(8) << ev
184 konec 1.11 <<" done:" << std::setw(6)<< std::setiosflags(std::ios::fixed) << std::setprecision(2) << ev*100./nentries<<"%";
185     std::cout<<std::endl;
186 konec 1.1 }
187    
188 konec 1.13 /*
189     if ( event->id == 597978012
190     || event->id == 14791798
191     || event->id == 436261807
192     || event->id == 873776280
193     || event->id == 960307389
194     || event->id == 150097556
195     || event->id == 42062946
196     || event->id == 1064121551
197     || event->id == 1499489591
198     || event->id == 60161631
199     || event->id == 624624695
200     || event->id == 727298833
201     || event->id == 835600542
202     || event->id == 216373776
203     || event->id == 1107585611
204     || event->id == 197907027
205     ) theAnaMenu.debug = true; else theAnaMenu.debug = false;
206     */
207 konec 1.1
208 konec 1.12 // EVENT NUMBER, BX structure etc.
209     EventObjBXExtra eventBx(*event);
210 konec 1.17 if ( theAnaEvent && !theAnaEvent->filter(&eventBx) && theConfig.getParameter<bool>("filterByAnaEvent") ) continue;
211 konec 1.9 // ANALYSE AND FILTER KINEMCTICS
212 konec 1.17 if ( theAnaMuonDistribution && !theAnaMuonDistribution->filter(muon) && theConfig.getParameter<bool>("filterByAnaMuonDistribution") ) continue;
213 konec 1.9 // ANALYSE AND FILTER TRIGGER MENU
214 konec 1.17 if ( theAnaMenu && !theAnaMenu->filter(event, muon, bitsL1, bitsHLT) && theConfig.getParameter<bool>("filterByAnaMenu") ) continue;
215 konec 1.18 // ANALYSE AND FILTER SIMU KONEMATICs
216     if ( theAnaSiMuDistribution && !theAnaSiMuDistribution->filter(event, simu, hitSpec) && theConfig.getParameter<bool>("filterByAnaSiMuDistribution") ) continue;
217 konec 1.1
218 konec 1.20 const TrackObj * refTrack = theConfig.getParameter<bool>("useSiMuReference") ? simu : muon;
219    
220 konec 1.17 // ANALYSES
221 konec 1.20 if (theAnaRpcVsOth) theAnaRpcVsOth->run(refTrack,l1ObjColl);
222    
223     // std::cout <<"refTrack: "<< *refTrack<<std::endl;
224     // std::cout <<"l1ObjColl: "<< *l1ObjColl << std::endl;
225    
226 konec 1.17 if (theAnaRpcMisc) theAnaRpcMisc->run(event,muon,l1ObjColl);
227     if (theAnaDet) theAnaDet->run( muon, *detsHitsCompatibleWithMuon, *detsCrossedByMuon, *detsCrossedByMuonDeepInside);
228     if (theAnaEmu) theAnaEmu->run ( event, muon, l1ObjColl);
229     if (theAnaSynch) theAnaSynch->run( event, muon, ConverterRPCRawSynchroSynchroCountsObj::toRawSynchro( *counts));
230     if (theAnaClu) theAnaClu->run( event, muon, l1ObjColl, *detsHitsCompatibleWithMuon);
231     if (theAnaTimingL1) theAnaTimingL1->run( &eventBx, muon, l1ObjColl);
232    
233 konec 1.20 // HITPATTERN ANALYSES & OTF EFFICIENCY
234 konec 1.17 if (theAnaHitSpec) theAnaHitSpec->run(event, simu, hitSpec);
235     if (theAnaDigiSpec) theAnaDigiSpec->run(event, simu, hitSpec, *digSpec);
236     if (thePatternProducer) thePatternProducer->run(event, simu, hitSpec, *digSpec);
237 konec 1.18 L1Obj l1otf;
238     if (thePatternProvider) l1otf=thePatternProvider->check(event, simu, hitSpec, *digSpec);
239 konec 1.19 if (theAnaOtfEff) theAnaOtfEff->run(event,simu,l1otf);
240 konec 1.22 L1ObjColl myL1ObjColl = *l1ObjColl;
241     myL1ObjColl.push_back(l1otf, false, 0.);
242     if (theAnaEff) theAnaEff->run(refTrack, &myL1ObjColl);
243 konec 1.1 }
244     }
245    
246     void L1RpcTreeAnalysis::endJob()
247     {
248     std::cout <<"ENDJOB, summaries:"<<std::endl;
249 konec 1.17 TGraph* hGraph_DetEff = (theAnaDet) ? theAnaDet->resume() : 0;
250     TGraph* hGraph_RunClu = (theAnaClu) ? theAnaClu->resume(): 0;
251     if (theAnaRpcMisc) theAnaRpcMisc->resume(theHistos);
252     if (theAnaTimingL1) theAnaTimingL1->resume(theHistos);
253     if (theAnaMenu) theAnaMenu->resume(theHistos);
254     if (theAnaMenu) theAnaEvent->resume(theHistos);
255     if (theAnaHitSpec) theAnaHitSpec->resume(theHistos);
256     if (theAnaDigiSpec) theAnaDigiSpec->resume(theHistos);
257    
258     if (theAnaSynch) theAnaSynch->endJob();
259     if (thePatternProducer) thePatternProducer->endJob();
260     if (thePatternProvider) thePatternProvider->endJob();
261 konec 1.1
262     std::string histoFile = theConfig.getParameter<std::string>("histoFileName");
263     TFile f(histoFile.c_str(),"RECREATE");
264     theHistos.Write();
265 konec 1.17 if (hGraph_DetEff) hGraph_DetEff->Write("hGraph_DetEff");
266     if (hGraph_RunClu) hGraph_RunClu->Write("hGraph_RunClu");
267 konec 1.1 f.Close();
268     std::cout <<"END"<<std::endl;
269 konec 1.17
270     delete theAnaMuonDistribution;
271     delete theAnaRpcVsOth;
272     delete theAnaRpcMisc;
273     delete theAnaEff;
274     delete theAnaDet;
275     delete theAnaEmu;
276     delete theAnaSynch;
277     delete theAnaClu;
278     delete theAnaTimingL1;
279     delete theAnaMenu;
280     delete theAnaEvent;
281     delete theAnaDigiSpec;
282     delete theAnaHitSpec;
283     delete thePatternProducer;
284     delete thePatternProvider;
285 konec 1.19 delete theAnaSiMuDistribution;
286     delete theAnaOtfEff;
287 konec 1.1 }