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