ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/src/AnaDet.cc
Revision: 1.4
Committed: Tue Oct 23 20:17:44 2012 UTC (12 years, 6 months ago) by konec
Content type: text/plain
Branch: MAIN
CVS Tags: Artur_11_07_2013_B, Artur_11_07_2013_A, Artur_11_07_2013, Artur_28_06_2013, HEAD
Changes since 1.3: +5 -3 lines
Error occurred while calculating annotation data.
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "UserCode/L1RpcTriggerAnalysis/interface/AnaDet.h"
2 #include "TObjArray.h"
3 #include "TH1D.h"
4 #include "TH1F.h"
5 #include "TAxis.h"
6 #include "TGraphErrors.h"
7 #include "UserCode/L1RpcTriggerAnalysis/interface/RPCDetIdUtil.h"
8 #include "UserCode/L1RpcTriggerAnalysis/interface/MuonObj.h"
9 #include "UserCode/L1RpcTriggerAnalysis/interface/DetCluDigiObj.h"
10 #include <sstream>
11 #include <bitset>
12 #include <algorithm>
13
14 namespace {
15 TH1D *hDet_EfficRoll, *hDet_EfficRollWeighted, *hDet_EfficPull;
16 TH1D *hDet_CoincDet, *hDet_CoincHit, *hDet_Muon;
17 TH1D *hDet_PartHit[6], *hDet_PartDet[6];
18 }
19
20
21 void AnaDet::run(
22 const MuonObj* muon,
23 const std::vector<DetCluDigiObj> & detsHitsCompatibleWithMuon,
24 const std::vector<uint32_t> & detsCrossedByMuon,
25 const std::vector<uint32_t> & detsCrossedByMuonDeepInside)
26 {
27 typedef std::vector<uint32_t>::const_iterator IDET;
28 typedef std::vector<DetCluDigiObj>::const_iterator IDCD;
29 if( muon->pt() < 10.) return;
30 // if (fabs(muon->eta()) > 1.14 && fabs(muon->eta()) < 1.24) debug = true;
31
32 DetEfficiencyManager aManDIS;
33 for( IDCD it= detsHitsCompatibleWithMuon.begin(); it < detsHitsCompatibleWithMuon.end(); it++) aManDIS.addDetHit( it->det );
34 for( IDET it= detsCrossedByMuonDeepInside.begin(); it < detsCrossedByMuonDeepInside.end(); it++) aManDIS.addDetMuon( *it );
35 const std::vector<DetEfficiency> & detEfficDIS = aManDIS.dets();
36
37 //
38 // fill "master" eff. manager and DIS efficiencies
39 //
40 for (std::vector<DetEfficiency>::const_iterator it = detEfficDIS.begin(); it != detEfficDIS.end(); ++it) {
41 if (it->isDummy()) continue;
42 if (it->numberOfMuons() > 0) {
43
44 theDetEfficiencyManager.addDetMuon(it->detId());
45 if (it->numberOfHits() > 0) theDetEfficiencyManager.addDetHit(it->detId());
46
47 RPCDetIdUtil det(it->detId());
48 if (it->numberOfHits()) hDet_PartHit[det.layer()-1]->Fill(det.part());
49 hDet_PartDet[det.layer()-1]->Fill(det.part());
50 }
51 }
52
53 //
54 // studies with "not-deep" efficiencies
55 //
56 DetEfficiencyManager aMan;
57 if (debug) std::cout <<"detsCrossedByMuon: "<<detsCrossedByMuon.size()<<" detsHitsCompatibleWithMuon: "<<detsHitsCompatibleWithMuon.size()<<std::endl;
58 for( IDCD it= detsHitsCompatibleWithMuon.begin(); it < detsHitsCompatibleWithMuon.end(); it++) aMan.addDetHit( it->det );
59 for( IDET it= detsCrossedByMuon.begin(); it < detsCrossedByMuon.end(); it++) aMan.addDetMuon( *it );
60 const std::vector<DetEfficiency> & detEffic= aMan.dets();
61 //
62 // coincidenciy efficiencies
63 //
64 std::bitset<6> hits, hitsL, hitsH;
65 std::bitset<6> dets, detsL, detsH;
66 double fetaL = fabs(muon->eta())-0.01;
67 double fetaH = fabs(muon->eta())+0.07;
68 for (std::vector<DetEfficiency>::const_iterator it = detEffic.begin(); it != detEffic.end(); ++it) {
69 if (debug) { std::cout <<it->print() << std::endl; }
70 if (it->isDummy()) continue;
71 RPCDetIdUtil det(it->detId());
72
73 unsigned int dl = det.layer(muon->eta());
74 if (it->numberOfHits() > 0 && dl > 0) hits.set(dl-1);
75 if (it->numberOfMuons() > 0 && dl > 0) dets.set(dl-1);
76
77 unsigned int dlL = det.layer(fetaL);
78 if (it->numberOfHits() > 0 && dlL > 0) hitsL.set(dlL-1);
79 if (it->numberOfMuons() > 0 && dlL > 0) detsL.set(dlL-1);
80
81 unsigned int dlH = det.layer(fetaH);
82 if (it->numberOfHits() > 0 && dlH > 0) hitsH.set(dlH-1);
83 if (it->numberOfMuons() > 0 && dlH > 0) detsH.set(dlH-1);
84 }
85 if (debug) std::cout <<" Dets crossed by muons: "<<dets.to_string() << std::endl;
86 if (debug) std::cout <<" Hits letf by muons: "<<hits.to_string() << std::endl;
87
88 bool matched_hits = theLayerCoincManager.matched( fetaL, hitsL)
89 || theLayerCoincManager.matched( muon->eta(), hits )
90 || theLayerCoincManager.matched( fetaH, hitsH);
91 bool matched_dets = theLayerCoincManager.matched( fetaL, detsL)
92 || theLayerCoincManager.matched( muon->eta(), dets )
93 || theLayerCoincManager.matched( fetaH, detsH);
94
95 hDet_Muon->Fill(muon->eta());
96 if (matched_hits) hDet_CoincHit->Fill(muon->eta());
97 if (matched_dets) hDet_CoincDet->Fill(muon->eta());
98 if (debug) std::cout<<"Coinc dets: "<<matched_dets<<"Coinc hits: "<<matched_hits<<std::endl;
99
100 }
101
102 TGraph* AnaDet::resume()
103 {
104 TGraphErrors * hDet_GraphEffic = new TGraphErrors();
105 const std::vector<DetEfficiency> & detEffic = theDetEfficiencyManager.dets();
106 unsigned int iPointforEfficiency = 0;
107 unsigned int nPointforEfficiency = 0;
108 for (std::vector<DetEfficiency>::const_iterator it = detEffic.begin(); it != detEffic.end(); ++it) if (!it->isDummy()) nPointforEfficiency++;
109 hDet_GraphEffic->Set(nPointforEfficiency);
110 for (std::vector<DetEfficiency>::const_iterator it = detEffic.begin(); it != detEffic.end(); ++it) {
111 if (it->isDummy()) continue;
112 hDet_EfficRoll->Fill(it->efficiency());
113 hDet_EfficRollWeighted->Fill(it->efficiency(),it->numberOfMuons());
114 if (it->efficiencyError() > 0.) hDet_EfficPull->Fill( (it->efficiency()-0.95)/it->efficiencyError());
115 hDet_GraphEffic->SetPoint(iPointforEfficiency, it->detId(), it->efficiency());
116 hDet_GraphEffic->SetPointError(iPointforEfficiency, 0., it->efficiencyError());
117 ++iPointforEfficiency;
118 }
119 return hDet_GraphEffic;
120 }
121
122 void AnaDet::init(TObjArray& histos)
123 {
124 hDet_EfficRoll = new TH1D("hDet_EfficRoll","hDet_EfficRoll",220,-0.05,1.05); histos.Add(hDet_EfficRoll);
125 hDet_EfficRollWeighted = new TH1D("hDet_EfficRollWeighted","hDet_EfficRollWeighted",220,-0.05,1.05); histos.Add(hDet_EfficRollWeighted);
126 hDet_EfficPull = new TH1D("hDet_EfficPull","hDet_EfficPull",100,-5.,5.); histos.Add(hDet_EfficPull);
127
128 hDet_Muon= new TH1D( "hDet_Muon", "hDet_Muon", 64, -1.6, 1.6); histos.Add( hDet_Muon);
129 hDet_CoincHit = new TH1D("hDet_CoincHit","hDet_CoincHit",64, -1.6, 1.6); histos.Add(hDet_CoincHit);
130 hDet_CoincDet = new TH1D("hDet_CoincDet","hDet_CoincDet",64, -1.6, 1.6); histos.Add(hDet_CoincDet);
131
132 for (unsigned int i=1; i<=6; ++i) {
133 std::stringstream name;
134 name.str(""); name<<"hDet_PartHit"<<i; hDet_PartHit[i-1] = new TH1D( name.str().c_str(), name.str().c_str(), 9, -4.5, 4.5); histos.Add(hDet_PartHit[i-1]);
135 name.str(""); name<<"hDet_PartDet"<<i; hDet_PartDet[i-1] = new TH1D( name.str().c_str(), name.str().c_str(), 9, -4.5, 4.5); histos.Add(hDet_PartDet[i-1]);
136 std::stringstream ax;
137 for (int j=0; j<9; ++j) {
138 ax.str(""); if(j<2) ax<<"ring: "<<j-3; else if (j<7) ax<<"wheel: "<<j-4; else ax<<"ring: "<<j-5;
139 hDet_PartHit[i-1]->GetXaxis()->SetBinLabel(j+1, ax.str().c_str());
140 hDet_PartDet[i-1]->GetXaxis()->SetBinLabel(j+1, ax.str().c_str());
141 }
142 }
143 }