CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripCalibLorentzAngle.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <string>
3 #include <iostream>
4 #include <fstream>
12 #include "CLHEP/Random/RandGauss.h"
21 
23 
25  //Retrieve tracker topology from geometry
27  c.get<IdealGeometryRecord>().get(tTopoHandle);
28  tTopo = tTopoHandle.product();
29 
31  tracker=&(*estracker);
32 
33  //get magnetic field and geometry from ES
35  c.get<IdealMagneticFieldRecord>().get(magfield_);
36 
37  edm::ESHandle<SiStripLorentzAngle> SiStripLorentzAngle_;
38  c.get<SiStripLorentzAngleRcd>().get(SiStripLorentzAngle_);
39  detid_la= SiStripLorentzAngle_->getLorentzAngles();
40 
42 
43  std::string inputFile_ =conf_.getUntrackedParameter<std::string>("fileName", "LAProfiles.root");
44  std::string LAreport_ =conf_.getUntrackedParameter<std::string>("LA_Report", "LA_Report.txt");
45  std::string NoEntriesHisto_ =conf_.getUntrackedParameter<std::string>("NoEntriesHisto", "NoEntriesHisto.txt");
46  std::string Dir_Name_ =conf_.getUntrackedParameter<std::string>("Dir_Name", "SiStrip");
47 
48  LayerDB = conf_.getUntrackedParameter<bool>("LayerDB", false);
49 
50  CalibByMC = conf_.getUntrackedParameter<bool>("CalibByMC", false);
51 
52  dbe_->open(inputFile_);
53 
54  // use SistripHistoId for producing histogram id (and title)
55  SiStripHistoId hidmanager;
56 
57  edm::LogInfo("SiStripCalibLorentzAngle")<<"### DIR-NAME = "<<Dir_Name_;
58  histolist= dbe_->getAllContents(Dir_Name_);
59  std::vector<MonitorElement*>::iterator histo;
60 
61  hFile = new TFile (conf_.getUntrackedParameter<std::string>("out_fileName").c_str(), "RECREATE" );
62 
63  LorentzAngle_Plots = hFile->mkdir("LorentzAngle_Plots");
64  Rootple = LorentzAngle_Plots->mkdir("Rootple");
65  MuH = LorentzAngle_Plots->mkdir("MuH");
66  TIB_MuH = MuH->mkdir("TIB_MuH");
67  TOB_MuH = MuH->mkdir("TOB_MuH");
68  MuH_vs_Phi = LorentzAngle_Plots->mkdir("MuH_vs_Phi");
69  TIB_Phi = MuH_vs_Phi->mkdir("TIB_Phi");
70  TOB_Phi = MuH_vs_Phi->mkdir("TOB_Phi");
71  MuH_vs_Eta = LorentzAngle_Plots->mkdir("MuH_vs_Eta");
72  TIB_Eta = MuH_vs_Eta->mkdir("TIB_Eta");
73  TOB_Eta = MuH_vs_Eta->mkdir("TOB_Eta");
74  FirstIT_GoodFit_Histos = LorentzAngle_Plots->mkdir("1IT_GoodFit_Histos");
75  TIB_1IT_GoodFit = FirstIT_GoodFit_Histos->mkdir("TIB_1IT_GoodFit");
76  TOB_1IT_GoodFit = FirstIT_GoodFit_Histos->mkdir("TOB_1IT_GoodFit");
77  SecondIT_GoodFit_Histos = LorentzAngle_Plots->mkdir("2IT_GoodFit_Histos");
78  TIB_2IT_GoodFit = SecondIT_GoodFit_Histos->mkdir("TIB_2IT_GoodFit");
79  TOB_2IT_GoodFit = SecondIT_GoodFit_Histos->mkdir("TOB_2IT_GoodFit");
80  SecondIT_BadFit_Histos = LorentzAngle_Plots->mkdir("2IT_BadFit_Histos");
81  TIB_2IT_BadFit = SecondIT_BadFit_Histos->mkdir("TIB_2IT_BadFit");
82  TOB_2IT_BadFit = SecondIT_BadFit_Histos->mkdir("TOB_2IT_BadFit");
83 
84  TH1Ds["LA_TIB"] = new TH1D("TanLAPerTesla TIB","TanLAPerTesla TIB",1000,-0.5,0.5);
85  TH1Ds["LA_TIB"]->SetDirectory(MuH);
86  TH1Ds["LA_TOB"] = new TH1D("TanLAPerTesla TOB","TanLAPerTesla TOB",1000,-0.5,0.5);
87  TH1Ds["LA_TOB"]->SetDirectory(MuH);
88  TH1Ds["LA_err_TIB"] = new TH1D("TanLAPerTesla Error TIB","TanLAPerTesla Error TIB",1000,0,1);
89  TH1Ds["LA_err_TIB"]->SetDirectory(MuH);
90  TH1Ds["LA_err_TOB"] = new TH1D("TanLAPerTesla Error TOB","TanLAPerTesla Error TOB",1000,0,1);
91  TH1Ds["LA_err_TOB"]->SetDirectory(MuH);
92  TH1Ds["LA_chi2norm_TIB"] = new TH1D("TanLAPerTesla Chi2norm TIB","TanLAPerTesla Chi2norm TIB",2000,0,10);
93  TH1Ds["LA_chi2norm_TIB"]->SetDirectory(MuH);
94  TH1Ds["LA_chi2norm_TOB"] = new TH1D("TanLAPerTesla Chi2norm TOB","TanLAPerTesla Chi2norm TOB",2000,0,10);
95  TH1Ds["LA_chi2norm_TOB"]->SetDirectory(MuH);
96  TH1Ds["MagneticField"] = new TH1D("MagneticField","MagneticField",500,0,5);
97  TH1Ds["MagneticField"]->SetDirectory(MuH);
98 
99  TH2Ds["LA_TIB_graph"] = new TH2D("TanLAPerTesla TIB Layers","TanLAPerTesla TIB Layers",60,0,5,1000,-0.3,0.3);
100  TH2Ds["LA_TIB_graph"]->SetDirectory(MuH);
101  TH2Ds["LA_TIB_graph"]->SetNdivisions(6);
102  TH2Ds["LA_TOB_graph"] = new TH2D("TanLAPerTesla TOB Layers","TanLAPerTesla TOB Layers",80,0,7,1000,-0.3,0.3);
103  TH2Ds["LA_TOB_graph"]->SetDirectory(MuH);
104  TH2Ds["LA_TOB_graph"]->SetNdivisions(8);
105 
106  TH1Ds["LA_TIB_1"] = new TH1D("TanLAPerTesla TIB1","TanLAPerTesla TIB1",2000,-0.5,0.5);
107  TH1Ds["LA_TIB_1"]->SetDirectory(TIB_MuH);
108  TH1Ds["LA_TIB_1_mono"] = new TH1D("TanLAPerTesla TIB1 MONO","TanLAPerTesla TIB1 MONO",2000,-0.5,0.5);
109  TH1Ds["LA_TIB_1_mono"]->SetDirectory(TIB_MuH);
110  TH1Ds["LA_TIB_1_stereo"] = new TH1D("TanLAPerTesla TIB1 STEREO","TanLAPerTesla TIB1 STEREO",2000,-0.5,0.5);
111  TH1Ds["LA_TIB_1_stereo"]->SetDirectory(TIB_MuH);
112  TH1Ds["LA_TIB_2"] = new TH1D("TanLAPerTesla TIB2","TanLAPerTesla TIB2",2000,-0.5,0.5);
113  TH1Ds["LA_TIB_2"]->SetDirectory(TIB_MuH);
114  TH1Ds["LA_TIB_2_mono"] = new TH1D("TanLAPerTesla TIB2 MONO","TanLAPerTesla TIB2 MONO",2000,-0.5,0.5);
115  TH1Ds["LA_TIB_2_mono"]->SetDirectory(TIB_MuH);
116  TH1Ds["LA_TIB_2_stereo"] = new TH1D("TanLAPerTesla TIB2 STEREO","TanLAPerTesla TIB2 STEREO",2000,-0.5,0.5);
117  TH1Ds["LA_TIB_2_stereo"]->SetDirectory(TIB_MuH);
118  TH1Ds["LA_TIB_3"] = new TH1D("TanLAPerTesla_TIB 3","TanLAPerTesla TIB3",2000,-0.5,0.5);
119  TH1Ds["LA_TIB_3"]->SetDirectory(TIB_MuH);
120  TH1Ds["LA_TIB_4"] = new TH1D("TanLAPerTesla_TIB 4","TanLAPerTesla TIB4",2000,-0.5,0.5);
121  TH1Ds["LA_TIB_4"]->SetDirectory(TIB_MuH);
122 
123  TH1Ds["LA_TOB_1"] = new TH1D("TanLAPerTesla TOB1","TanLAPerTesla TOB1",2000,-0.5,0.5);
124  TH1Ds["LA_TOB_1"]->SetDirectory(TOB_MuH);
125  TH1Ds["LA_TOB_1_mono"] = new TH1D("TanLAPerTesla TOB1 MONO","TanLAPerTesla TOB1 MONO",2000,-0.5,0.5);
126  TH1Ds["LA_TOB_1_mono"]->SetDirectory(TOB_MuH);
127  TH1Ds["LA_TOB_1_stereo"] = new TH1D("TanLAPerTesla TOB1 STEREO","TanLAPerTesla TOB1 STEREO",2000,-0.5,0.5);
128  TH1Ds["LA_TOB_1_stereo"]->SetDirectory(TOB_MuH);
129  TH1Ds["LA_TOB_2"] = new TH1D("TanLAPerTesla TOB2","TanLAPerTesla TOB2",2000,-0.5,0.5);
130  TH1Ds["LA_TOB_2"]->SetDirectory(TOB_MuH);
131  TH1Ds["LA_TOB_2_mono"] = new TH1D("TanLAPerTesla TOB2 MONO","TanLAPerTesla TOB2 MONO",2000,-0.5,0.5);
132  TH1Ds["LA_TOB_2_mono"]->SetDirectory(TOB_MuH);
133  TH1Ds["LA_TOB_2_stereo"] = new TH1D("TanLAPerTesla TOB2 STEREO","TanLAPerTesla TOB2 STEREO",2000,-0.5,0.5);
134  TH1Ds["LA_TOB_2_stereo"]->SetDirectory(TOB_MuH);
135  TH1Ds["LA_TOB_3"] = new TH1D("TanLAPerTesla TOB3","TanLAPerTesla TOB3",2000,-0.5,0.5);
136  TH1Ds["LA_TOB_3"]->SetDirectory(TOB_MuH);
137  TH1Ds["LA_TOB_4"] = new TH1D("TanLAPerTesla TOB4","TanLAPerTesla TOB4",2000,-0.5,0.5);
138  TH1Ds["LA_TOB_4"]->SetDirectory(TOB_MuH);
139  TH1Ds["LA_TOB_5"] = new TH1D("TanLAPerTesla TOB5","TanLAPerTesla TOB5",2000,-0.5,0.5);
140  TH1Ds["LA_TOB_5"]->SetDirectory(TOB_MuH);
141  TH1Ds["LA_TOB_6"] = new TH1D("TanLAPerTesla TOB6","TanLAPerTesla TOB6",2000,-0.5,0.5);
142  TH1Ds["LA_TOB_6"]->SetDirectory(TOB_MuH);
143 
144  TH2Ds["LA_phi_TIB"] = new TH2D("TanLAPerTesla vs Phi TIB","TanLAPerTesla vs Phi TIB",800,-4,4,600,-0.3,0.3);
145  TH2Ds["LA_phi_TIB"]->SetDirectory(MuH_vs_Phi);
146  TH2Ds["LA_phi_TOB"] = new TH2D("TanLAPerTesla vs Phi TOB","TanLAPerTesla vs Phi TOB",800,-4,4,600,-0.3,0.3);
147  TH2Ds["LA_phi_TOB"]->SetDirectory(MuH_vs_Phi);
148 
149  TH2Ds["LA_phi_TIB1"] = new TH2D("TanLAPerTesla vs Phi TIB1","TanLAPerTesla vs Phi TIB1",800,-4,4,600,-0.3,0.3);
150  TH2Ds["LA_phi_TIB1"]->SetDirectory(TIB_Phi);
151  TH2Ds["LA_phi_TIB1_mono"] = new TH2D("TanLAPerTesla vs Phi TIB1 MONO","TanLAPerTesla vs Phi TIB1 MONO",800,-4,4,600,-0.3,0.3);
152  TH2Ds["LA_phi_TIB1_mono"]->SetDirectory(TIB_Phi);
153  TH2Ds["LA_phi_TIB1_stereo"] = new TH2D("TanLAPerTesla vs Phi TIB1 STEREO","TanLAPerTesla vs Phi TIB1 STEREO",800,-4,4,600,-0.3,0.3);
154  TH2Ds["LA_phi_TIB1_stereo"]->SetDirectory(TIB_Phi);
155  TH2Ds["LA_phi_TIB2"] = new TH2D("TanLAPerTesla vs Phi TIB2","TanLAPerTesla vs Phi TIB2",800,-4,4,600,-0.3,0.3);
156  TH2Ds["LA_phi_TIB2"]->SetDirectory(TIB_Phi);
157  TH2Ds["LA_phi_TIB2_mono"] = new TH2D("TanLAPerTesla vs Phi TIB2 MONO","TanLAPerTesla vs Phi TIB2 MONO",800,-4,4,600,-0.3,0.3);
158  TH2Ds["LA_phi_TIB2_mono"]->SetDirectory(TIB_Phi);
159  TH2Ds["LA_phi_TIB2_stereo"] = new TH2D("TanLAPerTesla vs Phi TIB2 STEREO","TanLAPerTesla vs Phi TIB2 STEREO",800,-4,4,600,-0.3,0.3);
160  TH2Ds["LA_phi_TIB2_stereo"]->SetDirectory(TIB_Phi);
161  TH2Ds["LA_phi_TIB3"] = new TH2D("TanLAPerTesla vs Phi TIB3","TanLAPerTesla vs Phi TIB3",800,-4,4,600,-0.3,0.3);
162  TH2Ds["LA_phi_TIB3"]->SetDirectory(TIB_Phi);
163  TH2Ds["LA_phi_TIB4"] = new TH2D("TanLAPerTesla vs Phi TIB4","TanLAPerTesla vs Phi TIB4",800,-4,4,600,-0.3,0.3);
164  TH2Ds["LA_phi_TIB4"]->SetDirectory(TIB_Phi);
165 
166  TH2Ds["LA_phi_TOB1"] = new TH2D("TanLAPerTesla vs Phi TOB1","TanLAPerTesla vs Phi TOB1",800,-4,4,600,-0.3,0.3);
167  TH2Ds["LA_phi_TOB1"]->SetDirectory(TOB_Phi);
168  TH2Ds["LA_phi_TOB1_mono"] = new TH2D("TanLAPerTesla vs Phi TOB1 MONO","TanLAPerTesla vs Phi TOB1 MONO",800,-4,4,600,-0.3,0.3);
169  TH2Ds["LA_phi_TOB1_mono"]->SetDirectory(TOB_Phi);
170  TH2Ds["LA_phi_TOB1_stereo"] = new TH2D("TanLAPerTesla vs Phi TOB1 STEREO","TanLAPerTesla vs Phi TOB1 STEREO",800,-4,4,600,-0.3,0.3);
171  TH2Ds["LA_phi_TOB1_stereo"]->SetDirectory(TOB_Phi);
172  TH2Ds["LA_phi_TOB2"] = new TH2D("TanLAPerTesla vs Phi TOB2","TanLAPerTesla vs Phi TOB2",800,-4,4,600,-0.3,0.3);
173  TH2Ds["LA_phi_TOB2"]->SetDirectory(TOB_Phi);
174  TH2Ds["LA_phi_TOB2_mono"] = new TH2D("TanLAPerTesla vs Phi TOB2 MONO","TanLAPerTesla vs Phi TOB2 MONO",800,-4,4,600,-0.3,0.3);
175  TH2Ds["LA_phi_TOB2_mono"]->SetDirectory(TOB_Phi);
176  TH2Ds["LA_phi_TOB2_stereo"] = new TH2D("TanLAPerTesla vs Phi TOB2 STEREO","TanLAPerTesla vs Phi TOB2 STEREO",800,-4,4,600,-0.3,0.3);
177  TH2Ds["LA_phi_TOB2_stereo"]->SetDirectory(TOB_Phi);
178  TH2Ds["LA_phi_TOB3"] = new TH2D("TanLAPerTesla vs Phi TOB3","TanLAPerTesla vs Phi TOB3",800,-4,4,600,-0.3,0.3);
179  TH2Ds["LA_phi_TOB3"]->SetDirectory(TOB_Phi);
180  TH2Ds["LA_phi_TOB4"] = new TH2D("TanLAPerTesla vs Phi TOB4","TanLAPerTesla vs Phi TOB4",800,-4,4,600,-0.3,0.3);
181  TH2Ds["LA_phi_TOB4"]->SetDirectory(TOB_Phi);
182  TH2Ds["LA_phi_TOB5"] = new TH2D("TanLAPerTesla vs Phi TOB5","TanLAPerTesla vs Phi TOB5",800,-4,4,600,-0.3,0.3);
183  TH2Ds["LA_phi_TOB5"]->SetDirectory(TOB_Phi);
184  TH2Ds["LA_phi_TOB6"] = new TH2D("TanLAPerTesla vs Phi TOB6","TanLAPerTesla vs Phi TOB6",800,-4,4,600,-0.3,0.3);
185  TH2Ds["LA_phi_TOB6"]->SetDirectory(TOB_Phi);
186 
187  TH2Ds["LA_eta_TIB"] = new TH2D("TanLAPerTesla vs Eta TIB","TanLAPerTesla vs Eta TIB",800,-2.6,2.6,600,-0.3,0.3);
188  TH2Ds["LA_eta_TIB"]->SetDirectory(MuH_vs_Eta);
189  TH2Ds["LA_eta_TOB"] = new TH2D("TanLAPerTesla vs Eta TOB","TanLAPerTesla vs Eta TOB",800,-2.6,2.6,600,-0.3,0.3);
190  TH2Ds["LA_eta_TOB"]->SetDirectory(MuH_vs_Eta);
191 
192  TH2Ds["LA_eta_TIB1"] = new TH2D("TanLAPerTesla vs Eta TIB1","TanLAPerTesla vs Eta TIB1",800,-2.6,2.6,600,-0.3,0.3);
193  TH2Ds["LA_eta_TIB1"]->SetDirectory(TIB_Eta);
194  TH2Ds["LA_eta_TIB1_mono"] = new TH2D("TanLAPerTesla vs Eta TIB1 MONO","TanLAPerTesla vs Eta TIB1 MONO",800,-2.6,2.6,600,-0.3,0.3);
195  TH2Ds["LA_eta_TIB1_mono"]->SetDirectory(TIB_Eta);
196  TH2Ds["LA_eta_TIB1_stereo"] = new TH2D("TanLAPerTesla vs Eta TIB1 STEREO","TanLAPerTesla vs Eta TIB1 STEREO",800,-2.6,2.6,600,-0.3,0.3);
197  TH2Ds["LA_eta_TIB1_stereo"]->SetDirectory(TIB_Eta);
198  TH2Ds["LA_eta_TIB2"] = new TH2D("TanLAPerTesla vs Eta TIB2","TanLAPerTesla vs Eta TIB2",800,-2.6,2.6,600,-0.3,0.3);
199  TH2Ds["LA_eta_TIB2"]->SetDirectory(TIB_Eta);
200  TH2Ds["LA_eta_TIB2_mono"] = new TH2D("TanLAPerTesla vs Eta TIB2 MONO","TanLAPerTesla vs Eta TIB2 MONO",800,-2.6,2.6,600,-0.3,0.3);
201  TH2Ds["LA_eta_TIB2_mono"]->SetDirectory(TIB_Eta);
202  TH2Ds["LA_eta_TIB2_stereo"] = new TH2D("TanLAPerTesla vs Eta TIB2 STEREO","TanLAPerTesla vs Eta TIB2 STEREO",800,-2.6,2.6,600,-0.3,0.3);
203  TH2Ds["LA_eta_TIB2_stereo"]->SetDirectory(TIB_Eta);
204  TH2Ds["LA_eta_TIB3"] = new TH2D("TanLAPerTesla vs Eta TIB3","TanLAPerTesla vs Eta TIB3",800,-2.6,2.6,600,-0.3,0.3);
205  TH2Ds["LA_eta_TIB3"]->SetDirectory(TIB_Eta);
206  TH2Ds["LA_eta_TIB4"] = new TH2D("TanLAPerTesla vs Eta TIB4","TanLAPerTesla vs Eta TIB4",800,-2.6,2.6,600,-0.3,0.3);
207  TH2Ds["LA_eta_TIB4"]->SetDirectory(TIB_Eta);
208 
209  TH2Ds["LA_eta_TOB1"] = new TH2D("TanLAPerTesla vs Eta TOB1","TanLAPerTesla vs Eta TOB1",800,-2.6,2.6,600,-0.3,0.3);
210  TH2Ds["LA_eta_TOB1"]->SetDirectory(TIB_Eta);
211  TH2Ds["LA_eta_TOB1_mono"] = new TH2D("TanLAPerTesla vs Eta TOB1 MONO","TanLAPerTesla vs Eta TOB1 MONO",800,-2.6,2.6,600,-0.3,0.3);
212  TH2Ds["LA_eta_TOB1_mono"]->SetDirectory(TIB_Eta);
213  TH2Ds["LA_eta_TOB1_stereo"] = new TH2D("TanLAPerTesla vs Eta TOB1 STEREO","TanLAPerTesla vs Eta TOB1 STEREO",800,-2.6,2.6,600,-0.3,0.3);
214  TH2Ds["LA_eta_TOB1_stereo"]->SetDirectory(TIB_Eta);
215  TH2Ds["LA_eta_TOB2"] = new TH2D("TanLAPerTesla vs Eta TOB2","TanLAPerTesla vs Eta TOB2",800,-2.6,2.6,600,-0.3,0.3);
216  TH2Ds["LA_eta_TOB2"]->SetDirectory(TIB_Eta);
217  TH2Ds["LA_eta_TOB2_mono"] = new TH2D("TanLAPerTesla vs Eta TOB2 MONO","TanLAPerTesla vs Eta TOB2 MONO",800,-2.6,2.6,600,-0.3,0.3);
218  TH2Ds["LA_eta_TOB2_mono"]->SetDirectory(TIB_Eta);
219  TH2Ds["LA_eta_TOB2_stereo"] = new TH2D("TanLAPerTesla vs Eta TOB2 STEREO","TanLAPerTesla vs Eta TOB2 STEREO",800,-2.6,2.6,600,-0.3,0.3);
220  TH2Ds["LA_eta_TOB2_stereo"]->SetDirectory(TIB_Eta);
221  TH2Ds["LA_eta_TOB3"] = new TH2D("TanLAPerTesla vs Eta TOB3","TanLAPerTesla vs Eta TOB3",800,-2.6,2.6,600,-0.3,0.3);
222  TH2Ds["LA_eta_TOB3"]->SetDirectory(TIB_Eta);
223  TH2Ds["LA_eta_TOB4"] = new TH2D("TanLAPerTesla vs Eta TOB4","TanLAPerTesla vs Eta TOB4",800,-2.6,2.6,600,-0.3,0.3);
224  TH2Ds["LA_eta_TOB4"]->SetDirectory(TIB_Eta);
225  TH2Ds["LA_eta_TOB5"] = new TH2D("TanLAPerTesla vs Eta TOB5","TanLAPerTesla vs Eta TOB5",800,-2.6,2.6,600,-0.3,0.3);
226  TH2Ds["LA_eta_TOB5"]->SetDirectory(TIB_Eta);
227  TH2Ds["LA_eta_TOB6"] = new TH2D("TanLAPerTesla vs Eta TOB6","TanLAPerTesla vs Eta TOB6",800,-2.6,2.6,600,-0.3,0.3);
228  TH2Ds["LA_eta_TOB6"]->SetDirectory(TIB_Eta);
229 
230  ModuleTree = new TTree("ModuleTree", "ModuleTree");
231  ModuleTree->Branch("histoEntries", &histoEntries, "histoEntries/F");
232  ModuleTree->Branch("globalX", &globalX, "globalX/F");
233  ModuleTree->Branch("globalY", &globalY, "globalY/F");
234  ModuleTree->Branch("globalZ", &globalZ, "globalZ/F");
235  ModuleTree->Branch("gphi", &gphi, "gphi/F");
236  ModuleTree->Branch("geta", &geta, "geta/F");
237  ModuleTree->Branch("gR", &gR, "gR/F");
238  ModuleTree->Branch("goodFit", &goodFit, "goodFit/I");
239  ModuleTree->Branch("goodFit1IT", &goodFit1IT, "goodFit1IT/I");
240  ModuleTree->Branch("badFit", &badFit, "badFit/I");
241  ModuleTree->Branch("TIB", &TIB, "TIB/I");
242  ModuleTree->Branch("TOB", &TOB, "TOB/I");
243  ModuleTree->Branch("Layer", &Layer, "Layer/I");
244  ModuleTree->Branch("MonoStereo", &MonoStereo, "MonoStereo/I");
245  ModuleTree->Branch("theBfield", &theBfield, "theBfield/F");
246  ModuleTree->Branch("muH", &muH, "muH/F");
247 
248  ModuleTree->SetDirectory(Rootple);
249 
250  int histocounter = 0;
251  int NotEnoughEntries = 0;
252  int ZeroEntries = 0;
253  int GoodFit = 0;
254  int FirstIT_goodfit = 0;
255  int FirstIT_badfit = 0;
256  int SecondIT_badfit = 0;
257  int SecondIT_goodfit = 0;
258  int no_mod_histo = 0;
259  float chi2norm = 0;
260  LocalPoint p =LocalPoint(0,0,0);
261 
262  double ModuleRangeMin=conf_.getParameter<double>("ModuleFitXMin");
263  double ModuleRangeMax=conf_.getParameter<double>("ModuleFitXMax");
264  double ModuleRangeMin2IT=conf_.getParameter<double>("ModuleFit2ITXMin");
265  double ModuleRangeMax2IT=conf_.getParameter<double>("ModuleFit2ITXMax");
266  double FitCuts_Entries=conf_.getParameter<double>("FitCuts_Entries");
267  double FitCuts_p0=conf_.getParameter<double>("FitCuts_p0");
268  double FitCuts_p1=conf_.getParameter<double>("FitCuts_p1");
269  double FitCuts_p2=conf_.getParameter<double>("FitCuts_p2");
270  double FitCuts_chi2=conf_.getParameter<double>("FitCuts_chi2");
271  double FitCuts_ParErr_p0=conf_.getParameter<double>("FitCuts_ParErr_p0");
272  double p0_guess=conf_.getParameter<double>("p0_guess");
273  double p1_guess=conf_.getParameter<double>("p1_guess");
274  double p2_guess=conf_.getParameter<double>("p2_guess");
275 
276  double TIB1calib = 1.;
277  double TIB2calib = 1.;
278  double TIB3calib = 1.;
279  double TIB4calib = 1.;
280  double TOB1calib = 1.;
281  double TOB2calib = 1.;
282  double TOB3calib = 1.;
283  double TOB4calib = 1.;
284  double TOB5calib = 1.;
285  double TOB6calib = 1.;
286 
287  if(CalibByMC==true){
288  //Calibration factors evaluated by using MC analysis
289  TIB1calib=conf_.getParameter<double>("TIB1calib");
290  TIB2calib=conf_.getParameter<double>("TIB2calib");
291  TIB3calib=conf_.getParameter<double>("TIB3calib");
292  TIB4calib=conf_.getParameter<double>("TIB4calib");
293  TOB1calib=conf_.getParameter<double>("TOB1calib");
294  TOB2calib=conf_.getParameter<double>("TOB2calib");
295  TOB3calib=conf_.getParameter<double>("TOB3calib");
296  TOB4calib=conf_.getParameter<double>("TOB4calib");
297  TOB5calib=conf_.getParameter<double>("TOB5calib");
298  TOB6calib=conf_.getParameter<double>("TOB6calib");
299  }
300 
301 
302  TF1 *fitfunc= new TF1("fitfunc","([4]/[3])*[1]*(TMath::Abs(x-[0]))+[2]",-1,1);
303  TF1 *fitfunc2IT= new TF1("fitfunc2IT","([4]/[3])*[1]*(TMath::Abs(x-[0]))+[2]",-1,1);
304 
305  std::ofstream NoEntries;
306  NoEntries.open(NoEntriesHisto_.c_str());
307  std::ofstream Rep;
308  Rep.open(LAreport_.c_str());
309 
310  gStyle->SetOptStat(1110);
311 
312  for(histo=histolist.begin();histo!=histolist.end();++histo){
313 
314  FitFunction = 0;
315  FitFunction2IT = 0;
316  bool Good2ITFit = false;
317  bool ModuleHisto = true;
318 
319  histoEntries = -99;
320  gphi=-99;
321  geta=-99;
322  gz = -99;
323  gR=-1;
324  globalX = -99;
325  globalY = -99;
326  globalZ = -99;
327  goodFit = 0;
328  goodFit1IT = 0;
329  badFit = 0;
330  muH = -1;
331  TIB = 0;
332  TOB = 0;
333  MonoStereo = -1;
334 
335  uint32_t id=hidmanager.getComponentId((*histo)->getName());
336  DetId detid(id);
337  StripSubdetector subid(id);
338  const GeomDetUnit * stripdet;
339  MonoStereo = subid.stereo();
340 
341  if(!(stripdet=tracker->idToDetUnit(subid))){
342  no_mod_histo++;
343  ModuleHisto=false;
344  edm::LogInfo("SiStripCalibLorentzAngle")<<"### NO MODULE HISTOGRAM";}
345 
346  if(stripdet!=0 && ModuleHisto==true){
347 
348  if(subid.subdetId() == int (StripSubdetector::TIB)){
349 
350  Layer = tTopo->tibLayer(detid);
351  TIB = 1;}
352  if(subid.subdetId() == int (StripSubdetector::TOB)){
353 
354  Layer = tTopo->tobLayer(detid);
355  TOB = 1;}
356 
357  //get module coordinates
358  const GlobalPoint gposition = (stripdet->surface()).toGlobal(p);
359  histoEntries = (*histo)->getEntries();
360  globalX = gposition.x();
361  globalY = gposition.y();
362  globalZ = gposition.z();
363  gphi = gposition.phi();
364  geta = gposition.eta();
365  gR = sqrt(pow(gposition.x(),2)+pow(gposition.y(),2));
366  gz = gposition.z();
367 
368  //get magnetic field
369  const StripGeomDetUnit* det = dynamic_cast<const StripGeomDetUnit*>(estracker->idToDetUnit(detid));
370  if (det==0){
371  edm::LogError("SiStripCalibLorentzAngle") << "[SiStripCalibLorentzAngle::getNewObject] the detID " << id << " doesn't seem to belong to Tracker" <<std::endl;
372  continue;
373  }
374  LocalVector lbfield=(det->surface()).toLocal(magfield_->inTesla(det->surface().position()));
375  theBfield = lbfield.mag();
376  theBfield = (theBfield > 0) ? theBfield : 0.00001;
377  TH1Ds["MagneticField"]->Fill(theBfield);
378  }
379  if(stripdet==0)continue;
380 
381  if(((*histo)->getEntries()<=FitCuts_Entries)&&ModuleHisto==true){
382  if(((*histo)->getEntries()==0)&&ModuleHisto==true){
383  NoEntries<<"NO ENTRIES MODULE, ID = "<<id<<std::endl;
384  edm::LogInfo("SiStripCalibLorentzAngle")<<"### HISTOGRAM WITH 0 ENTRIES => TYPE:"<<subid.subdetId();
385  ZeroEntries++;
386  }else{
387  edm::LogInfo("SiStripCalibLorentzAngle")<<"### HISTOGRAM WITH NR. ENTRIES <= ENTRIES_CUT => TYPE:"<<subid.subdetId();
388  NotEnoughEntries++;}
389  }
390 
392  if(TIB==1){
393  name+="TIB";
394  }else{
395  name+="TOB";}
396  std::stringstream LayerStream;
397  LayerStream<<Layer;
398  name+=LayerStream.str();
399  std::stringstream idnum;
400  idnum<<id;
401  name+="_Id_";
402  name+=idnum.str();
403 
404  gStyle->SetOptFit(111);
405 
406  //Extract TProfile from Monitor Element to ProfileMap
407  Profiles[name.c_str()] = new TProfile;
408  TProfile* theProfile=ExtractTObject<TProfile>().extract(*histo);
409  theProfile->Copy(*Profiles[name.c_str()]);
410  Profiles[name.c_str()]->SetName(name.c_str());
411 
412  if(((*histo)->getEntries()>FitCuts_Entries) && ModuleHisto==true){
413  histocounter++;
414  if(TIB==1){
415  edm::LogInfo("SiStripCalibLorentzAngle")<<"TIB layer = "<<Layer;}
416  if(TOB==1){
417  edm::LogInfo("SiStripCalibLorentzAngle")<<"TOB layer = "<<Layer;}
418  edm::LogInfo("SiStripCalibLorentzAngle")<<"id: "<<id;
419 
420  float thickness=stripdet->specificSurface().bounds().thickness();
421  const StripTopology& topol=(const StripTopology&)stripdet->topology();
422  float pitch = topol.localPitch(p);
423 
424  fitfunc->SetParameter(0, p0_guess);
425  fitfunc->SetParameter(1, p1_guess);
426  fitfunc->SetParameter(2, p2_guess);
427  fitfunc->FixParameter(3, pitch);
428  fitfunc->FixParameter(4, thickness);
429 
430  Profiles[name.c_str()]->Fit("fitfunc","E","",ModuleRangeMin, ModuleRangeMax);
431 
432  FitFunction = Profiles[name.c_str()]->GetFunction("fitfunc");
433  chi2norm = FitFunction->GetChisquare()/FitFunction->GetNDF();
434 
435  if(FitFunction->GetParameter(0)>FitCuts_p0 || FitFunction->GetParameter(1)<FitCuts_p1 || FitFunction->GetParameter(2)<FitCuts_p2 || chi2norm>FitCuts_chi2 || FitFunction->GetParError(0)<FitCuts_ParErr_p0){
436 
437  FirstIT_badfit++;
438 
439  fitfunc2IT->SetParameter(0, p0_guess);
440  fitfunc2IT->SetParameter(1, p1_guess);
441  fitfunc2IT->SetParameter(2, p2_guess);
442  fitfunc2IT->FixParameter(3, pitch);
443  fitfunc2IT->FixParameter(4, thickness);
444 
445  //2nd Iteration
446  Profiles[name.c_str()]->Fit("fitfunc2IT","E","",ModuleRangeMin2IT, ModuleRangeMax2IT);
447 
448  FitFunction = Profiles[name.c_str()]->GetFunction("fitfunc2IT");
449  chi2norm = FitFunction->GetChisquare()/FitFunction->GetNDF();
450 
451  //2nd Iteration failed
452 
453  if(FitFunction->GetParameter(0)>FitCuts_p0 || FitFunction->GetParameter(1)<FitCuts_p1 || FitFunction->GetParameter(2)<FitCuts_p2 || chi2norm>FitCuts_chi2 || FitFunction->GetParError(0)<FitCuts_ParErr_p0){
454 
455  if(subid.subdetId() == int (StripSubdetector::TIB)){
456  Profiles[name.c_str()]->SetDirectory(TIB_2IT_BadFit);
457  }else{
458  Profiles[name.c_str()]->SetDirectory(TOB_2IT_BadFit);}
459 
460  SecondIT_badfit++;
461  badFit=1;
462 
463  }
464 
465  //2nd Iteration ok
466 
467  if(FitFunction->GetParameter(0)<FitCuts_p0 && FitFunction->GetParameter(1)>FitCuts_p1 && FitFunction->GetParameter(2)>FitCuts_p2 && chi2norm<FitCuts_chi2 && FitFunction->GetParError(0)>FitCuts_ParErr_p0){
468 
469  if(subid.subdetId() == int (StripSubdetector::TIB)){
470  Profiles[name.c_str()]->SetDirectory(TIB_2IT_GoodFit);
471  }else{
472  Profiles[name.c_str()]->SetDirectory(TOB_2IT_GoodFit);}
473 
474  SecondIT_goodfit++;
475  Good2ITFit = true;
476 
477  }
478 
479  }
480 
481  if(FitFunction->GetParameter(0)<FitCuts_p0 && FitFunction->GetParameter(1)>FitCuts_p1 && FitFunction->GetParameter(2)>FitCuts_p2 && chi2norm<FitCuts_chi2 && FitFunction->GetParError(0)>FitCuts_ParErr_p0){
482 
483  if(Good2ITFit==false){
484 
485  FirstIT_goodfit++;
486  goodFit1IT = 1;
487 
488  if(subid.subdetId() == int (StripSubdetector::TIB)){
489  Profiles[name.c_str()]->SetDirectory(TIB_1IT_GoodFit);
490  }else{
491  Profiles[name.c_str()]->SetDirectory(TOB_1IT_GoodFit);}
492 
493  }
494 
495  GoodFit++;
496  goodFit=1;
497 
498  LorentzAngle_Plots->cd();
499 
500  edm::LogInfo("SiStripCalibLorentzAngle")<<FitFunction->GetParameter(0);
501 
502  muH = -(FitFunction->GetParameter(0))/theBfield;
503 
504  if(TIB==1){
505  if(Layer==1) muH = muH/TIB1calib;
506  if(Layer==2) muH = muH/TIB2calib;
507  if(Layer==3) muH = muH/TIB3calib;
508  if(Layer==4) muH = muH/TIB4calib;
509  }
510  if(TOB==1){
511  if(Layer==1) muH = muH/TOB1calib;
512  if(Layer==2) muH = muH/TOB2calib;
513  if(Layer==3) muH = muH/TOB3calib;
514  if(Layer==4) muH = muH/TOB4calib;
515  if(Layer==5) muH = muH/TOB5calib;
516  if(Layer==6) muH = muH/TOB6calib;
517  }
518 
519  detid_la[id]= muH;
520 
521  if(TIB==1){
522 
523  TH1Ds["LA_TIB"]->Fill(muH);
524  TH1Ds["LA_err_TIB"]->Fill(FitFunction->GetParError(0)/theBfield);
525  TH1Ds["LA_chi2norm_TIB"]->Fill(chi2norm);
526  TH2Ds["LA_phi_TIB"]->Fill(gphi,muH);
527  TH2Ds["LA_eta_TIB"]->Fill(geta,muH);
528  TH2Ds["LA_TIB_graph"]->Fill(Layer,muH);
529 
530  if(Layer==1){
531  TH1Ds["LA_TIB_1"]->Fill(muH);
532  TH2Ds["LA_phi_TIB1"]->Fill(gphi,muH);
533  TH2Ds["LA_eta_TIB1"]->Fill(geta,muH);
534  if(MonoStereo==0){
535  TH1Ds["LA_TIB_1_mono"]->Fill(muH);
536  TH2Ds["LA_phi_TIB1_mono"]->Fill(gphi,muH);
537  TH2Ds["LA_eta_TIB1_mono"]->Fill(geta,muH);}
538  if(MonoStereo==1){
539  TH1Ds["LA_TIB_1_stereo"]->Fill(muH);
540  TH2Ds["LA_phi_TIB1_stereo"]->Fill(gphi,muH);
541  TH2Ds["LA_eta_TIB1_stereo"]->Fill(geta,muH);}
542  }
543 
544  if(Layer==2){
545  TH1Ds["LA_TIB_2"]->Fill(muH);
546  TH2Ds["LA_phi_TIB2"]->Fill(gphi,muH);
547  TH2Ds["LA_eta_TIB2"]->Fill(geta,muH);
548  if(MonoStereo==0){
549  TH1Ds["LA_TIB_2_mono"]->Fill(muH);
550  TH2Ds["LA_phi_TIB2_mono"]->Fill(gphi,muH);
551  TH2Ds["LA_eta_TIB2_mono"]->Fill(geta,muH);}
552  if(MonoStereo==1){
553  TH1Ds["LA_TIB_2_stereo"]->Fill(muH);
554  TH2Ds["LA_phi_TIB2_stereo"]->Fill(gphi,muH);
555  TH2Ds["LA_eta_TIB2_stereo"]->Fill(geta,muH);}
556  }
557 
558  if(Layer==3){
559  TH1Ds["LA_TIB_3"]->Fill(muH);
560  TH2Ds["LA_phi_TIB3"]->Fill(gphi,muH);
561  TH2Ds["LA_eta_TIB3"]->Fill(geta,muH);
562  }
563 
564  if(Layer==4){
565  TH1Ds["LA_TIB_4"]->Fill(muH);
566  TH2Ds["LA_phi_TIB4"]->Fill(gphi,muH);
567  TH2Ds["LA_eta_TIB4"]->Fill(geta,muH);
568  }
569  }
570 
571  if(TOB==1){
572 
573  TH1Ds["LA_TOB"]->Fill(muH);
574  TH1Ds["LA_err_TOB"]->Fill(FitFunction->GetParError(0)/theBfield);
575  TH1Ds["LA_chi2norm_TOB"]->Fill(chi2norm);
576  TH2Ds["LA_phi_TOB"]->Fill(gphi,muH);
577  TH2Ds["LA_eta_TOB"]->Fill(geta,muH);
578  TH2Ds["LA_TOB_graph"]->Fill(Layer,muH);
579 
580  if(Layer==1){
581  TH1Ds["LA_TOB_1"]->Fill(muH);
582  TH2Ds["LA_phi_TOB1"]->Fill(gphi,muH);
583  TH2Ds["LA_eta_TOB1"]->Fill(geta,muH);
584  if(MonoStereo==0){
585  TH1Ds["LA_TOB_1_mono"]->Fill(muH);
586  TH2Ds["LA_phi_TOB1_mono"]->Fill(gphi,muH);
587  TH2Ds["LA_eta_TOB1_mono"]->Fill(geta,muH);}
588  if(MonoStereo==1){
589  TH1Ds["LA_TOB_1_stereo"]->Fill(muH);
590  TH2Ds["LA_phi_TOB1_stereo"]->Fill(gphi,muH);
591  TH2Ds["LA_eta_TOB1_stereo"]->Fill(geta,muH);}
592  }
593 
594  if(Layer==2){
595  TH1Ds["LA_TOB_2"]->Fill(muH);
596  TH2Ds["LA_phi_TOB2"]->Fill(gphi,muH);
597  TH2Ds["LA_eta_TOB2"]->Fill(geta,muH);
598  if(MonoStereo==0){
599  TH1Ds["LA_TOB_2_mono"]->Fill(muH);
600  TH2Ds["LA_phi_TOB2_mono"]->Fill(gphi,muH);
601  TH2Ds["LA_eta_TOB2_mono"]->Fill(geta,muH);}
602  if(MonoStereo==1){
603  TH1Ds["LA_TOB_2_stereo"]->Fill(muH);
604  TH2Ds["LA_phi_TOB2_stereo"]->Fill(gphi,muH);
605  TH2Ds["LA_eta_TOB2_stereo"]->Fill(geta,muH);}
606  }
607 
608  if(Layer==3){
609  TH1Ds["LA_TOB_3"]->Fill(muH);
610  TH2Ds["LA_phi_TOB3"]->Fill(gphi,muH);
611  TH2Ds["LA_eta_TOB3"]->Fill(geta,muH);
612  }
613 
614  if(Layer==4){
615  TH1Ds["LA_TOB_4"]->Fill(muH);
616  TH2Ds["LA_phi_TOB4"]->Fill(gphi,muH);
617  TH2Ds["LA_eta_TOB4"]->Fill(geta,muH);
618  }
619 
620  if(Layer==5){
621  TH1Ds["LA_TOB_5"]->Fill(muH);
622  TH2Ds["LA_phi_TOB5"]->Fill(gphi,muH);
623  TH2Ds["LA_eta_TOB5"]->Fill(geta,muH);
624  }
625 
626  if(Layer==6){
627  TH1Ds["LA_TOB_6"]->Fill(muH);
628  TH2Ds["LA_phi_TOB6"]->Fill(gphi,muH);
629  TH2Ds["LA_eta_TOB6"]->Fill(geta,muH);
630  }
631  }
632 
633  }
634  }
635 
636  ModuleTree->Fill();
637 
638  }
639 
640  double GaussFitRange=conf_.getParameter<double>("GaussFitRange");
641 
642  TH1Ds["LA_TIB_1"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
643  mean_TIB1 = TH1Ds["LA_TIB_1"]->GetFunction("gaus")->GetParameter(1);
644  float err_mean_TIB1 = TH1Ds["LA_TIB_1"]->GetFunction("gaus")->GetParError(1);
645  float rms_TIB1 = TH1Ds["LA_TIB_1"]->GetFunction("gaus")->GetParameter(2);
646  TH1Ds["LA_TIB_2"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
647  mean_TIB2 = TH1Ds["LA_TIB_2"]->GetFunction("gaus")->GetParameter(1);
648  float err_mean_TIB2 = TH1Ds["LA_TIB_2"]->GetFunction("gaus")->GetParError(1);
649  float rms_TIB2 = TH1Ds["LA_TIB_2"]->GetFunction("gaus")->GetParameter(2);
650  TH1Ds["LA_TIB_3"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
651  mean_TIB3 = TH1Ds["LA_TIB_3"]->GetFunction("gaus")->GetParameter(1);
652  float err_mean_TIB3 = TH1Ds["LA_TIB_3"]->GetFunction("gaus")->GetParError(1);
653  float rms_TIB3 = TH1Ds["LA_TIB_3"]->GetFunction("gaus")->GetParameter(2);
654  TH1Ds["LA_TIB_4"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
655  mean_TIB4 = TH1Ds["LA_TIB_4"]->GetFunction("gaus")->GetParameter(1);
656  float err_mean_TIB4 = TH1Ds["LA_TIB_4"]->GetFunction("gaus")->GetParError(1);
657  float rms_TIB4 = TH1Ds["LA_TIB_4"]->GetFunction("gaus")->GetParameter(2);
658 
659  TH1Ds["LA_TOB_1"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
660  mean_TOB1 = TH1Ds["LA_TOB_1"]->GetFunction("gaus")->GetParameter(1);
661  float err_mean_TOB1 = TH1Ds["LA_TOB_1"]->GetFunction("gaus")->GetParError(1);
662  float rms_TOB1 = TH1Ds["LA_TOB_1"]->GetFunction("gaus")->GetParameter(2);
663  TH1Ds["LA_TOB_2"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
664  mean_TOB2 = TH1Ds["LA_TOB_2"]->GetFunction("gaus")->GetParameter(1);
665  float err_mean_TOB2 = TH1Ds["LA_TOB_2"]->GetFunction("gaus")->GetParError(1);
666  float rms_TOB2 = TH1Ds["LA_TOB_2"]->GetFunction("gaus")->GetParameter(2);
667  TH1Ds["LA_TOB_3"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
668  mean_TOB3 = TH1Ds["LA_TOB_3"]->GetFunction("gaus")->GetParameter(1);
669  float err_mean_TOB3 = TH1Ds["LA_TOB_3"]->GetFunction("gaus")->GetParError(1);
670  float rms_TOB3 = TH1Ds["LA_TOB_3"]->GetFunction("gaus")->GetParameter(2);
671  TH1Ds["LA_TOB_4"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
672  mean_TOB4 = TH1Ds["LA_TOB_4"]->GetFunction("gaus")->GetParameter(1);
673  float err_mean_TOB4 = TH1Ds["LA_TOB_4"]->GetFunction("gaus")->GetParError(1);
674  float rms_TOB4 = TH1Ds["LA_TOB_4"]->GetFunction("gaus")->GetParameter(2);
675  TH1Ds["LA_TOB_5"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
676  mean_TOB5 = TH1Ds["LA_TOB_5"]->GetFunction("gaus")->GetParameter(1);
677  float err_mean_TOB5 = TH1Ds["LA_TOB_5"]->GetFunction("gaus")->GetParError(1);
678  float rms_TOB5 = TH1Ds["LA_TOB_5"]->GetFunction("gaus")->GetParameter(2);
679  TH1Ds["LA_TOB_6"]->Fit("gaus","","",-GaussFitRange,GaussFitRange);
680  mean_TOB6 = TH1Ds["LA_TOB_6"]->GetFunction("gaus")->GetParameter(1);
681  float err_mean_TOB6 = TH1Ds["LA_TOB_6"]->GetFunction("gaus")->GetParError(1);
682  float rms_TOB6 = TH1Ds["LA_TOB_6"]->GetFunction("gaus")->GetParameter(2);
683 
684 int nlayersTIB = 4;
685 float TIBx[4]={1,2,3,4};
686 float TIBex[4]={0,0,0,0};
687 float TIBy[4]={mean_TIB1, mean_TIB2, mean_TIB3, mean_TIB4};
688 float TIBey[4]={err_mean_TIB1, err_mean_TIB2, err_mean_TIB3, err_mean_TIB4};
689 
690 int nlayersTOB = 6;
691 float TOBx[6]={1,2,3,4,5,6};
692 float TOBex[6]={0,0,0,0,0,0};
694 float TOBey[6]={err_mean_TOB1, err_mean_TOB2, err_mean_TOB3, err_mean_TOB4, err_mean_TOB5, err_mean_TOB6};
695 
696 TIB_graph = new TGraphErrors(nlayersTIB,TIBx,TIBy,TIBex,TIBey);
697 TOB_graph = new TGraphErrors(nlayersTOB,TOBx,TOBy,TOBex,TOBey);
698 
699 //TF1 *fit_TIB= new TF1("fit_TIB","[0]",0,4);
700 //TF1 *fit_TOB= new TF1("fit_TOB","[0]",0,6);
701 
702 gStyle->SetOptFit(111);
703 gStyle->SetOptStat(111);
704 
705 TIB_graph->SetTitle("TIB Layers #mu_{H}");
706 TIB_graph->GetXaxis()->SetTitle("Layers");
707 TIB_graph->GetXaxis()->SetNdivisions(4);
708 TIB_graph->GetYaxis()->SetTitle("#mu_{H}");
709 TIB_graph->SetMarkerStyle(20);
710 TIB_graph->GetYaxis()->SetTitleOffset(1.3);
711 TIB_graph->Fit("fit_TIB","E","",1,4);
712 meanMobility_TIB = TIB_graph->GetFunction("fit_TIB")->GetParameter(0);
713 
714 TOB_graph->SetTitle("TOB Layers #mu_{H}");
715 TOB_graph->GetXaxis()->SetTitle("Layers");
716 TOB_graph->GetXaxis()->SetNdivisions(6);
717 TOB_graph->GetYaxis()->SetTitle("#mu_{H}");
718 TOB_graph->SetMarkerStyle(20);
719 TOB_graph->GetYaxis()->SetTitleOffset(1.3);
720 TOB_graph->Fit("fit_TOB","E","",1,6);
721 meanMobility_TOB = TOB_graph->GetFunction("fit_TOB")->GetParameter(0);
722 
723  TIB_graph->Write("TIB_graph");
724  TOB_graph->Write("TOB_graph");
725 
726  Rep<<"- NR.OF TIB AND TOB MODULES = 7932"<<std::endl<<std::endl<<std::endl;
727  Rep<<"- NO MODULE HISTOS FOUND = "<<no_mod_histo<<std::endl<<std::endl;
728  Rep<<"- NR.OF HISTOS WITH ENTRIES > "<<FitCuts_Entries<<" = "<<histocounter<<std::endl<<std::endl;
729  Rep<<"- NR.OF HISTOS WITH ENTRIES <= "<<FitCuts_Entries<<" (!=0) = "<<NotEnoughEntries<<std::endl<<std::endl;
730  Rep<<"- NR.OF HISTOS WITH 0 ENTRIES = "<<ZeroEntries<<std::endl<<std::endl<<std::endl;
731  Rep<<"- NR.OF GOOD FIT (FIRST IT + SECOND IT GOOD FIT)= "<<GoodFit<<std::endl<<std::endl;
732  Rep<<"- NR.OF FIRST IT GOOD FIT = "<<FirstIT_goodfit<<std::endl<<std::endl;
733  Rep<<"- NR.OF SECOND IT GOOD FIT = "<<SecondIT_goodfit<<std::endl<<std::endl;
734  Rep<<"- NR.OF FIRST IT BAD FIT = "<<FirstIT_badfit<<std::endl<<std::endl;
735  Rep<<"- NR.OF SECOND IT BAD FIT = "<<SecondIT_badfit<<std::endl<<std::endl<<std::endl;
736 
737  Rep<<"--------------- Mean MuH values per Layer -------------------"<<std::endl<<std::endl<<std::endl;
738  Rep<<"TIB1 = "<<mean_TIB1<<" +- "<<err_mean_TIB1<<" RMS = "<<rms_TIB1<<std::endl;
739  Rep<<"TIB2 = "<<mean_TIB2<<" +- "<<err_mean_TIB2<<" RMS = "<<rms_TIB2<<std::endl;
740  Rep<<"TIB3 = "<<mean_TIB3<<" +- "<<err_mean_TIB3<<" RMS = "<<rms_TIB3<<std::endl;
741  Rep<<"TIB4 = "<<mean_TIB4<<" +- "<<err_mean_TIB4<<" RMS = "<<rms_TIB4<<std::endl;
742  Rep<<"TOB1 = "<<mean_TOB1<<" +- "<<err_mean_TOB1<<" RMS = "<<rms_TOB1<<std::endl;
743  Rep<<"TOB2 = "<<mean_TOB2<<" +- "<<err_mean_TOB2<<" RMS = "<<rms_TOB2<<std::endl;
744  Rep<<"TOB3 = "<<mean_TOB3<<" +- "<<err_mean_TOB3<<" RMS = "<<rms_TOB3<<std::endl;
745  Rep<<"TOB4 = "<<mean_TOB4<<" +- "<<err_mean_TOB4<<" RMS = "<<rms_TOB4<<std::endl;
746  Rep<<"TOB5 = "<<mean_TOB5<<" +- "<<err_mean_TOB5<<" RMS = "<<rms_TOB5<<std::endl;
747  Rep<<"TOB6 = "<<mean_TOB6<<" +- "<<err_mean_TOB6<<" RMS = "<<rms_TOB6<<std::endl<<std::endl;
748  Rep<<"Mean Hall Mobility TIB = "<<meanMobility_TIB<<" +- "<<TIB_graph->GetFunction("fit_TIB")->GetParError(0)<<std::endl;
749  Rep<<"Mean Hall Mobility TOB = "<<meanMobility_TOB<<" +- "<<TOB_graph->GetFunction("fit_TOB")->GetParError(0)<<std::endl<<std::endl<<std::endl;
750 
751  Rep.close();
752  NoEntries.close();
753 
754 hFile->Write();
755 hFile->Close();
756 
757 }
758 
759 // Virtual destructor needed.
760 
762  delete hFile;
763 }
764 
765 
766 // Analyzer: Functions that gets called by framework every event
767 
769 
770  SiStripLorentzAngle* LorentzAngle = new SiStripLorentzAngle();
771 
772  if(!LayerDB){
773  for(std::map<uint32_t, float>::iterator it = detid_la.begin(); it != detid_la.end(); it++){
774 
775  float langle=it->second;
776  if ( ! LorentzAngle->putLorentzAngle(it->first,langle) )
777  edm::LogError("SiStripCalibLorentzAngle")<<"[SiStripCalibLorentzAngle::analyze] detid already exists"<<std::endl;
778  }
779  }
780 
781  else{
782 
783  const TrackerGeometry::DetIdContainer& Id = estracker->detIds();
784  TrackerGeometry::DetIdContainer::const_iterator Iditer;
785 
786  for(Iditer=Id.begin();Iditer!=Id.end();Iditer++){
787 
788  StripSubdetector subid(Iditer->rawId());
789 
790  hallMobility = 0.;
791 
792  if(subid.subdetId() == int (StripSubdetector::TIB)){
793 
794  uint32_t tibLayer = tTopo->tibLayer(*Iditer);
795  if(tibLayer==1){
796  hallMobility=mean_TIB1;}
797  if(tibLayer==2){
798  hallMobility=mean_TIB2;}
799  if(tibLayer==3){
800  hallMobility=mean_TIB3;}
801  if(tibLayer==4){
802  hallMobility=mean_TIB4;}
803  if (!LorentzAngle->putLorentzAngle(Iditer->rawId(),hallMobility)) edm::LogError("SiStripLorentzAngleGenerator")<<" detid already exists"<<std::endl;
804  }
805 
806  if(subid.subdetId() == int (StripSubdetector::TOB)){
807 
808  uint32_t tobLayer = tTopo->tobLayer(*Iditer);
809  if(tobLayer==1){
810  hallMobility=mean_TOB1;}
811  if(tobLayer==2){
812  hallMobility=mean_TOB2;}
813  if(tobLayer==3){
814  hallMobility=mean_TOB3;}
815  if(tobLayer==4){
816  hallMobility=mean_TOB4;}
817  if(tobLayer==5){
818  hallMobility=mean_TOB5;}
819  if(tobLayer==6){
820  hallMobility=mean_TOB6;}
821  if (!LorentzAngle->putLorentzAngle(Iditer->rawId(),hallMobility)) edm::LogError("SiStripLorentzAngleGenerator")<<" detid already exists"<<std::endl;
822  }
823 
824  if( subid.subdetId() == int(StripSubdetector::TID) ) {
825  hallMobility=meanMobility_TIB;
826  if (!LorentzAngle->putLorentzAngle(Iditer->rawId(),hallMobility)) edm::LogError("SiStripLorentzAngleGenerator")<<" detid already exists"<<std::endl;
827  }
828 
829  if( subid.subdetId() == int(StripSubdetector::TEC) ) {
830 
831  if(tTopo->tecRing(subid)<5 ) {
832  hallMobility=meanMobility_TIB;
833  }else{
834  hallMobility=meanMobility_TOB;
835  }
836  if (!LorentzAngle->putLorentzAngle(Iditer->rawId(),hallMobility)) edm::LogError("SiStripLorentzAngleGenerator")<<" detid already exists"<<std::endl;
837  }
838 
839  }
840  }
841 
842  return LorentzAngle;
843 
844 }
845 
846 
847 
848 
849 
850 
851 
852 
853 
854 
T getParameter(std::string const &) const
virtual const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
T getUntrackedParameter(std::string const &, T const &) const
tuple SiStripLorentzAngle
Definition: redigi_cff.py:15
unsigned int tibLayer(const DetId &id) const
virtual const Topology & topology() const
Definition: GeomDet.cc:86
unsigned int tecRing(const DetId &id) const
ring id
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
SiStripCalibLorentzAngle(const edm::ParameterSet &conf)
const Bounds & bounds() const
Definition: Surface.h:128
std::map< uint32_t, float > detid_la
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
#define nullptr
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
bool putLorentzAngle(const uint32_t &, float)
uint32_t getComponentId(std::string histoid)
virtual float thickness() const =0
std::vector< MonitorElement * > getAllContents(const std::string &path, uint32_t runNumber=0, uint32_t lumi=0) const
Definition: DQMStore.cc:1973
virtual float localPitch(const LocalPoint &) const =0
const TrackerTopology * tTopo
const TrackerGeometry * tracker
T mag() const
Definition: PV3DBase.h:67
T sqrt(T t)
Definition: SSEVec.h:48
T z() const
Definition: PV3DBase.h:64
SiStripLorentzAngle * getNewObject()
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
DQMStore * dbe_
tuple conf
Definition: dbtoconf.py:185
int extract(std::vector< int > *output, const std::string &dati)
Definition: DetId.h:18
unsigned int stereo() const
stereo
void algoBeginJob(const edm::EventSetup &)
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
T eta() const
Definition: PV3DBase.h:76
edm::ESHandle< TrackerGeometry > estracker
Local3DPoint LocalPoint
Definition: LocalPoint.h:11
bool open(const std::string &filename, bool overwrite=false, const std::string &path="", const std::string &prepend="", OpenRunDirs stripdirs=KeepRunDirs, bool fileMustExist=true)
Definition: DQMStore.cc:2952
edm::ESHandle< MagneticField > magfield_
T x() const
Definition: PV3DBase.h:62
const PositionType & position() const
std::vector< MonitorElement * > histolist
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
Definition: GeomDet.h:43
unsigned int tobLayer(const DetId &id) const
std::vector< DetId > DetIdContainer