00001
00002
00003
00004
00005
00006
00007 #include "Validation/TrackerRecHits/interface/SiStripRecHitsValid.h"
00008 #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
00009
00010
00011 #include "DataFormats/DetId/interface/DetId.h"
00012 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
00013 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00014 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00015 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00016 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
00017 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
00018 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00019
00020
00021
00022 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
00023 #include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h"
00024 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
00025 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
00026 #include "DataFormats/Common/interface/OwnVector.h"
00027 #include "DQMServices/Core/interface/DQMStore.h"
00028
00029 using namespace std;
00030 using namespace edm;
00031
00032
00033 SiStripRecHitsValid::SiStripRecHitsValid(const ParameterSet& ps) :
00034 dbe_(0),
00035 conf_(ps),
00036 matchedRecHits_( ps.getParameter<edm::InputTag>("matchedRecHits") ),
00037 rphiRecHits_( ps.getParameter<edm::InputTag>("rphiRecHits") ),
00038 stereoRecHits_( ps.getParameter<edm::InputTag>("stereoRecHits") ) {
00039
00040 outputFile_ = ps.getUntrackedParameter<string>("outputFile", "sistriprechitshisto.root");
00041 dbe_ = Service<DQMStore>().operator->();
00042
00043 dbe_->setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Strip/SISTRIP");
00044
00045 meNumTotRphi = dbe_->book1D("NumTotRphi","Num of RecHits rphi",100, 0, 10000);
00046 meNumTotSas = dbe_->book1D("NumTotSas","Num of RecHits sas",100, 0, 10000);
00047 meNumTotMatched = dbe_->book1D("NumTotMatched","Num of RecHits rmatched",100, 0, 10000);
00048
00049 dbe_->setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Strip/TIB");
00050 meNumRphiTIB = dbe_->book1D("NumRphiTIB","Num of RecHits rphi", 100, 0, 1000.);
00051 meNumSasTIB = dbe_->book1D("NumSasTIB","Num of RecHits sas", 100, 0, 1000.);
00052 meNumMatchedTIB = dbe_->book1D("NumMatchedTIB","Num of RecHits matched", 100, 0, 1000.);
00053
00054
00055 for(int i = 0 ;i<4 ; i++) {
00056 Char_t histo[200];
00057 sprintf(histo,"Nstp_rphi_layer%dtib",i+1);
00058 meNstpRphiTIB[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00059 sprintf(histo,"Adc_rphi_layer%dtib",i+1);
00060 meAdcRphiTIB[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00061 sprintf(histo,"Posx_rphi_layer%dtib",i+1);
00062 mePosxRphiTIB[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00063 sprintf(histo,"Errx_rphi_layer%dtib",i+1);
00064 meErrxRphiTIB[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0,0.01);
00065 sprintf(histo,"Res_rphi_layer%dtib",i+1);
00066 meResRphiTIB[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.02,+0.02);
00067 sprintf(histo,"Pull_LF_rphi_layer%dtib",i+1);
00068 mePullLFRphiTIB[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00069 sprintf(histo,"Pull_MF_rphi_layer%dtib",i+1);
00070 mePullMFRphiTIB[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00071 sprintf(histo,"Chi2_rphi_layer%dtib",i+1);
00072 meChi2RphiTIB[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00073 }
00074
00075
00076 for(int i = 0 ;i<2 ; i++) {
00077 Char_t histo[200];
00078 sprintf(histo,"Nstp_sas_layer%dtib",i+1);
00079 meNstpSasTIB[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00080 sprintf(histo,"Adc_sas_layer%dtib",i+1);
00081 meAdcSasTIB[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00082 sprintf(histo,"Posx_sas_layer%dtib",i+1);
00083 mePosxSasTIB[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00084 sprintf(histo,"Errx_sas_layer%dtib",i+1);
00085 meErrxSasTIB[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0.,0.01);
00086 sprintf(histo,"Res_sas_layer%dtib",i+1);
00087 meResSasTIB[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.02,+0.02);
00088 sprintf(histo,"Pull_LF_sas_layer%dtib",i+1);
00089 mePullLFSasTIB[i] = dbe_->book1D(histo,"Pull",100,-4.,4.);
00090 sprintf(histo,"Pull_MF_sas_layer%dtib",i+1);
00091 mePullMFSasTIB[i] = dbe_->book1D(histo,"Pull",100,-4.,4.);
00092 sprintf(histo,"Chi2_sas_layer%dtib",i+1);
00093 meChi2SasTIB[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00094
00095 sprintf(histo,"Posx_matched_layer%dtib",i+1);
00096 mePosxMatchedTIB[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0, +6.0);
00097 sprintf(histo,"Posy_matched_layer%dtib",i+1);
00098 mePosyMatchedTIB[i] = dbe_->book1D(histo,"RecHit y coord.",100,-6.0, +6.0);
00099 sprintf(histo,"Errx_matched_layer%dtib",i+1);
00100 meErrxMatchedTIB[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0., 0.01);
00101 sprintf(histo,"Erry_matched_layer%dtib",i+1);
00102 meErryMatchedTIB[i] = dbe_->book1D(histo,"RecHit err(y) coord.",100,0., 0.05);
00103 sprintf(histo,"Resx_matched_layer%dtib",i+1);
00104 meResxMatchedTIB[i] = dbe_->book1D(histo,"RecHit Res(x) coord.",100,-0.02, +0.02);
00105 sprintf(histo,"Resy_matched_layer%dtib",i+1);
00106 meResyMatchedTIB[i] = dbe_->book1D(histo,"RecHit Res(y) coord.",100,-1., +1.);
00107 sprintf(histo,"Chi2_matched_layer%dtib",i+1);
00108 meChi2MatchedTIB[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00109 }
00110
00111 dbe_->setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Strip/TOB");
00112 meNumRphiTOB = dbe_->book1D("NumRphiTOB","Num of RecHits rphi", 100, 0, 1000.);
00113 meNumSasTOB = dbe_->book1D("NumSasTOB","Num of RecHits sas", 100, 0, 1000.);
00114 meNumMatchedTOB = dbe_->book1D("NumMatchedTOB","Num of RecHits matched", 100, 0, 1000.);
00115
00116 for(int i = 0 ;i<6 ; i++) {
00117 Char_t histo[200];
00118 sprintf(histo,"Nstp_rphi_layer%dtob",i+1);
00119 meNstpRphiTOB[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00120 sprintf(histo,"Adc_rphi_layer%dtob",i+1);
00121 meAdcRphiTOB[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00122 sprintf(histo,"Posx_rphi_layer%dtob",i+1);
00123 mePosxRphiTOB[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00124 sprintf(histo,"Errx_rphi_layer%dtob",i+1);
00125 meErrxRphiTOB[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0,0.01);
00126 sprintf(histo,"Res_rphi_layer%dtob",i+1);
00127 meResRphiTOB[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.02,+0.02);
00128 sprintf(histo,"Pull_LF_rphi_layer%dtob",i+1);
00129 mePullLFRphiTOB[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00130 sprintf(histo,"Pull_MF_rphi_layer%dtob",i+1);
00131 mePullMFRphiTOB[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00132 sprintf(histo,"Chi2_rphi_layer%dtob",i+1);
00133 meChi2RphiTOB[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00134 }
00135
00136
00137 for(int i = 0 ;i<2 ; i++) {
00138 Char_t histo[200];
00139 sprintf(histo,"Nstp_sas_layer%dtob",i+1);
00140 meNstpSasTOB[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00141 sprintf(histo,"Adc_sas_layer%dtob",i+1);
00142 meAdcSasTOB[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00143 sprintf(histo,"Posx_sas_layer%dtob",i+1);
00144 mePosxSasTOB[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00145 sprintf(histo,"Errx_sas_layer%dtob",i+1);
00146 meErrxSasTOB[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0.,0.01);
00147 sprintf(histo,"Res_sas_layer%dtob",i+1);
00148 meResSasTOB[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.02,+0.02);
00149 sprintf(histo,"Pull_LF_sas_layer%dtob",i+1);
00150 mePullLFSasTOB[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00151 sprintf(histo,"Pull_MF_sas_layer%dtob",i+1);
00152 mePullMFSasTOB[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00153 sprintf(histo,"Chi2_sas_layer%dtob",i+1);
00154 meChi2SasTOB[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00155
00156 sprintf(histo,"Posx_matched_layer%dtob",i+1);
00157 mePosxMatchedTOB[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0, +6.0);
00158 sprintf(histo,"Posy_matched_layer%dtob",i+1);
00159 mePosyMatchedTOB[i] = dbe_->book1D(histo,"RecHit y coord.",100,-10.0, +10.0);
00160 sprintf(histo,"Errx_matched_layer%dtob",i+1);
00161 meErrxMatchedTOB[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0., 0.01);
00162 sprintf(histo,"Erry_matched_layer%dtob",i+1);
00163 meErryMatchedTOB[i] = dbe_->book1D(histo,"RecHit err(y) coord.",100,0., 0.1);
00164 sprintf(histo,"Resx_matched_layer%dtob",i+1);
00165 meResxMatchedTOB[i] = dbe_->book1D(histo,"RecHit Res(x) coord.",100,-0.02, +0.02);
00166 sprintf(histo,"Resy_matched_layer%dtob",i+1);
00167 meResyMatchedTOB[i] = dbe_->book1D(histo,"RecHit Res(y) coord.",100,-1., +1.);
00168 sprintf(histo,"Chi2_matched_layer%dtob",i+1);
00169 meChi2MatchedTOB[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00170 }
00171
00172 dbe_->setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Strip/TID");
00173 meNumRphiTID = dbe_->book1D("NumRphiTID","Num of RecHits rphi", 100, 0, 1000.);
00174 meNumSasTID = dbe_->book1D("NumSasTID","Num of RecHits sas", 100, 0, 1000.);
00175 meNumMatchedTID = dbe_->book1D("NumMatchedTID","Num of RecHits matched", 100, 0, 1000.);
00176
00177
00178 for(int i = 0 ;i<3 ; i++) {
00179 Char_t histo[200];
00180 sprintf(histo,"Nstp_rphi_layer%dtid",i+1);
00181 meNstpRphiTID[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00182 sprintf(histo,"Adc_rphi_layer%dtid",i+1);
00183 meAdcRphiTID[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00184 sprintf(histo,"Posx_rphi_layer%dtid",i+1);
00185 mePosxRphiTID[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00186 sprintf(histo,"Errx_rphi_layer%dtid",i+1);
00187 meErrxRphiTID[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0,0.5);
00188 sprintf(histo,"Res_rphi_layer%dtid",i+1);
00189 meResRphiTID[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.5,+0.5);
00190 sprintf(histo,"Pull_LF_rphi_layer%dtid",i+1);
00191 mePullLFRphiTID[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00192 sprintf(histo,"Pull_MF_rphi_layer%dtid",i+1);
00193 mePullMFRphiTID[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00194 sprintf(histo,"Chi2_rphi_layer%dtid",i+1);
00195 meChi2RphiTID[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00196 }
00197
00198
00199 for(int i = 0 ;i<2 ; i++) {
00200 Char_t histo[200];
00201 sprintf(histo,"Nstp_sas_layer%dtid",i+1);
00202 meNstpSasTID[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00203 sprintf(histo,"Adc_sas_layer%dtid",i+1);
00204 meAdcSasTID[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00205 sprintf(histo,"Posx_sas_layer%dtid",i+1);
00206 mePosxSasTID[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00207 sprintf(histo,"Errx_sas_layer%dtid",i+1);
00208 meErrxSasTID[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0.,0.5);
00209 sprintf(histo,"Res_sas_layer%dtid",i+1);
00210 meResSasTID[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.5,+0.5);
00211 sprintf(histo,"Pull_LF_sas_layer%dtid",i+1);
00212 mePullLFSasTID[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00213 sprintf(histo,"Pull_MF_sas_layer%dtid",i+1);
00214 mePullMFSasTID[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00215 sprintf(histo,"Chi2_sas_layer%dtid",i+1);
00216 meChi2SasTID[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00217
00218 sprintf(histo,"Posx_matched_layer%dtid",i+1);
00219 mePosxMatchedTID[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0, +6.0);
00220 sprintf(histo,"Posy_matched_layer%dtid",i+1);
00221 mePosyMatchedTID[i] = dbe_->book1D(histo,"RecHit y coord.",100,-6.0, +6.0);
00222 sprintf(histo,"Errx_matched_layer%dtid",i+1);
00223 meErrxMatchedTID[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0., 0.05);
00224 sprintf(histo,"Erry_matched_layer%dtid",i+1);
00225 meErryMatchedTID[i] = dbe_->book1D(histo,"RecHit err(y) coord.",100,0., 0.1);
00226 sprintf(histo,"Resx_matched_layer%dtid",i+1);
00227 meResxMatchedTID[i] = dbe_->book1D(histo,"RecHit Res(x) coord.",100,-0.2, +0.2);
00228 sprintf(histo,"Resy_matched_layer%dtid",i+1);
00229 meResyMatchedTID[i] = dbe_->book1D(histo,"RecHit Res(y) coord.",100,-1., +1.);
00230 sprintf(histo,"Chi2_matched_layer%dtid",i+1);
00231 meChi2MatchedTID[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00232 }
00233
00234 dbe_->setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Strip/TEC");
00235 meNumRphiTEC = dbe_->book1D("NumRphiTEC","Num of RecHits rphi", 100, 0, 1000.);
00236 meNumSasTEC = dbe_->book1D("NumSasTEC","Num of RecHits sas", 100, 0, 1000.);
00237 meNumMatchedTEC = dbe_->book1D("NumMatchedTEC","Num of RecHits matched", 100, 0, 1000.);
00238
00239
00240 for(int i = 0 ;i<7 ; i++) {
00241 Char_t histo[200];
00242 sprintf(histo,"Nstp_rphi_layer%dtec",i+1);
00243 meNstpRphiTEC[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00244 sprintf(histo,"Adc_rphi_layer%dtec",i+1);
00245 meAdcRphiTEC[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00246 sprintf(histo,"Posx_rphi_layer%dtec",i+1);
00247 mePosxRphiTEC[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00248 sprintf(histo,"Errx_rphi_layer%dtec",i+1);
00249 meErrxRphiTEC[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0,0.5);
00250 sprintf(histo,"Res_rphi_layer%dtec",i+1);
00251 meResRphiTEC[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.5,+0.5);
00252 sprintf(histo,"Pull_LF_rphi_layer%dtec",i+1);
00253 mePullLFRphiTEC[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00254 sprintf(histo,"Pull_MF_rphi_layer%dtec",i+1);
00255 mePullMFRphiTEC[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00256 sprintf(histo,"Chi2_rphi_layer%dtec",i+1);
00257 meChi2RphiTEC[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00258 }
00259
00260
00261 for(int i = 0 ;i<5 ; i++) {
00262 if(i == 0 || i == 1 || i == 4) {
00263 Char_t histo[200];
00264 sprintf(histo,"Nstp_sas_layer%dtec",i+1);
00265 meNstpSasTEC[i] = dbe_->book1D(histo,"RecHit Cluster Size",10,0.5,10.5);
00266 sprintf(histo,"Adc_sas_layer%dtec",i+1);
00267 meAdcSasTEC[i] = dbe_->book1D(histo,"RecHit Cluster Charge",100,0.,300.);
00268 sprintf(histo,"Posx_sas_layer%dtec",i+1);
00269 mePosxSasTEC[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0,+6.0);
00270 sprintf(histo,"Errx_sas_layer%dtec",i+1);
00271 meErrxSasTEC[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0.,0.5);
00272 sprintf(histo,"Res_sas_layer%dtec",i+1);
00273 meResSasTEC[i] = dbe_->book1D(histo,"RecHit Residual",100,-0.5,+0.5);
00274 sprintf(histo,"Pull_LF_sas_layer%dtec",i+1);
00275 mePullLFSasTEC[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00276 sprintf(histo,"Pull_MF_sas_layer%dtec",i+1);
00277 mePullMFSasTEC[i] = dbe_->book1D(histo,"Pull",100,-5.,5.);
00278 sprintf(histo,"Chi2_sas_layer%dtec",i+1);
00279 meChi2SasTEC[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00280
00281 sprintf(histo,"Posx_matched_layer%dtec",i+1);
00282 mePosxMatchedTEC[i] = dbe_->book1D(histo,"RecHit x coord.",100,-6.0, +6.0);
00283 sprintf(histo,"Posy_matched_layer%dtec",i+1);
00284 mePosyMatchedTEC[i] = dbe_->book1D(histo,"RecHit y coord.",100,-8.0, +8.0);
00285 sprintf(histo,"Errx_matched_layer%dtec",i+1);
00286 meErrxMatchedTEC[i] = dbe_->book1D(histo,"RecHit err(x) coord.",100,0., 0.05);
00287 sprintf(histo,"Erry_matched_layer%dtec",i+1);
00288 meErryMatchedTEC[i] = dbe_->book1D(histo,"RecHit err(y) coord.",100,0., 0.1);
00289 sprintf(histo,"Resx_matched_layer%dtec",i+1);
00290 meResxMatchedTEC[i] = dbe_->book1D(histo,"RecHit Res(x) coord.",100,-0.2, +0.2);
00291 sprintf(histo,"Resy_matched_layer%dtec",i+1);
00292 meResyMatchedTEC[i] = dbe_->book1D(histo,"RecHit Res(y) coord.",100,-1., +1.);
00293 sprintf(histo,"Chi2_matched_layer%dtec",i+1);
00294 meChi2MatchedTEC[i] = dbe_->book1D(histo,"RecHit Chi2 test",100,0., 50);
00295 }
00296 }
00297 }
00298
00299
00300 SiStripRecHitsValid::~SiStripRecHitsValid(){
00301
00302 }
00303
00304 void SiStripRecHitsValid::beginJob(const EventSetup& c){
00305
00306 }
00307
00308 void SiStripRecHitsValid::endJob() {
00309 if ( outputFile_.size() != 0 && dbe_ ) dbe_->save(outputFile_);
00310 }
00311
00312
00313 void SiStripRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es) {
00314
00315 LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();
00316
00317
00318
00319
00320 std::string rechitProducer = "SiStripRecHits2D";
00321
00322
00323 edm::Handle<SiStripMatchedRecHit2DCollection> rechitsmatched;
00324 edm::Handle<SiStripRecHit2DCollection> rechitsrphi;
00325 edm::Handle<SiStripRecHit2DCollection> rechitsstereo;
00326 e.getByLabel(matchedRecHits_, rechitsmatched);
00327 e.getByLabel(rphiRecHits_, rechitsrphi);
00328 e.getByLabel(stereoRecHits_, rechitsstereo);
00329
00330 int numrechitrphi =0;
00331 int numrechitsas =0;
00332 int numrechitmatched=0;
00333
00334 int totTibnumrechitrphi=0;
00335 int totTibnumrechitsas=0;
00336 int totTibnumrechitmatched=0;
00337 int totTobnumrechitrphi=0;
00338 int totTobnumrechitsas=0;
00339 int totTobnumrechitmatched=0;
00340 int totTidnumrechitrphi=0;
00341 int totTidnumrechitsas=0;
00342 int totTidnumrechitmatched=0;
00343 int totTecnumrechitrphi=0;
00344 int totTecnumrechitsas=0;
00345 int totTecnumrechitmatched=0;
00346 int totrechitrphi =0;
00347 int totrechitsas =0;
00348 int totrechitmatched =0;
00349
00350 TrackerHitAssociator associate(e, conf_);
00351
00352 edm::ESHandle<TrackerGeometry> pDD;
00353 es.get<TrackerDigiGeometryRecord> ().get (pDD);
00354 const TrackerGeometry &tracker(*pDD);
00355
00356 std::vector<DetId> stereodetIDs = rechitsstereo->ids();
00357 std::vector<DetId> matcheddetIDs = rechitsmatched->ids();
00358 std::vector<DetId> IDs=rechitsrphi->ids();
00359 IDs.insert(IDs.end(),stereodetIDs.begin(),stereodetIDs.end());
00360 IDs.insert(IDs.end(),matcheddetIDs.begin(),matcheddetIDs.end());
00361
00362
00363 for(std::vector<DetId>::const_iterator it = IDs.begin(); it != IDs.end(); ++it ){
00364 uint32_t myid=((*it).rawId());
00365 DetId detid = ((*it));
00366
00367
00368 for(int i=0; i<MAXHIT; i++){
00369 rechitrphix[i] =0;
00370 rechitrphierrx[i] =0;
00371 rechitrphiy[i] =0;
00372 rechitrphiz[i] =0;
00373 rechitsasx[i] =0;
00374 rechitsaserrx[i] =0;
00375 rechitsasy[i] =0;
00376 rechitsasz[i] =0;
00377 clusizrphi[i] =0;
00378 clusizsas[i] =0;
00379 cluchgrphi[i] =0;
00380 cluchgsas[i] =0;
00381 rechitrphires[i]=-999.;
00382 rechitsasres[i]=-999.;
00383 rechitrphipullMF[i]=-999.;
00384 rechitsaspullMF[i]=-999.;
00385 chi2rphi[i] =0;
00386 chi2sas[i]=0;
00387 rechitmatchedx[i] =0;
00388 rechitmatchedy[i] =0;
00389 rechitmatchedz[i] =0;
00390 rechitmatchederrxx[i] =0;
00391 rechitmatchederrxy[i] =0;
00392 rechitmatchederryy[i] =0;
00393 rechitmatchedresx[i]=-999;
00394 rechitmatchedresy[i]=-999;
00395 chi2matched[i]=0;
00396 }
00397
00398 numrechitrphi =0;
00399
00400 SiStripRecHit2DCollection::range rechitrphiRange = rechitsrphi->get(detid);
00401 SiStripRecHit2DCollection::const_iterator rechitrphiRangeIteratorBegin = rechitrphiRange.first;
00402 SiStripRecHit2DCollection::const_iterator rechitrphiRangeIteratorEnd = rechitrphiRange.second;
00403 SiStripRecHit2DCollection::const_iterator iterrphi=rechitrphiRangeIteratorBegin;
00404
00405 numrechitrphi = rechitrphiRangeIteratorEnd - rechitrphiRangeIteratorBegin;
00406
00407
00408 int i=0;
00409 int i2=0;
00410
00411 if(numrechitrphi > 0 ){
00412 totrechitrphi+=numrechitrphi;
00413 for(iterrphi=rechitrphiRangeIteratorBegin; iterrphi!=rechitrphiRangeIteratorEnd;++iterrphi){
00414 const GeomDetUnit * det = tracker.idToDetUnit(detid);
00415 const StripGeomDetUnit * stripdet=(const StripGeomDetUnit*)(det);
00416 const StripTopology &topol=(StripTopology&)stripdet->topology();
00417 SiStripRecHit2D const rechit=*iterrphi;
00418 LocalPoint position=rechit.localPosition();
00419 LocalError error=rechit.localPositionError();
00420 MeasurementPoint Mposition;
00421 MeasurementError Merror;
00422 Mposition = topol.measurementPosition(position);
00423 Merror = topol.measurementError(position,error);
00424 SiStripRecHit2D::ClusterRef clust=rechit.cluster();
00425 int clusiz=0;
00426 int totcharge=0;
00427 clusiz = clust->amplitudes().size();
00428 const std::vector<uint8_t> amplitudes=clust->amplitudes();
00429 for(size_t ia=0; ia<amplitudes.size();ia++){
00430 totcharge+=amplitudes[ia];
00431 }
00432 rechitrphix[i] = position.x();
00433 rechitrphiy[i] = position.y();
00434 rechitrphiz[i] = position.z();
00435 rechitrphierrx[i] = error.xx();
00436 clusizrphi[i] = clusiz;
00437 cluchgrphi[i] = totcharge;
00438
00439 matched.clear();
00440 matched = associate.associateHit(rechit);
00441 float mindist = 999999;
00442 float dist = 999999;
00443 PSimHit closest;
00444 if(!matched.empty()){
00445 for(vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); m++){
00446 dist = fabs(rechitrphix[i] - (*m).localPosition().x());
00447 if(dist<mindist){
00448 mindist = dist;
00449 closest = (*m);
00450 }
00451 rechitrphires[i] = rechitrphix[i] - closest.localPosition().x();
00452 }
00453 rechitrphipullMF[i] = (Mposition.x() - (topol.measurementPosition(closest.localPosition())).x())/sqrt(Merror.uu());
00454
00455
00456
00457 AlgebraicVector rhparameters = rechit.parameters();
00458 AlgebraicVector shparameters(2);
00459 shparameters[0] = closest.localPosition().x();
00460 shparameters[1] = closest.localPosition().y();
00461 AlgebraicVector r(rhparameters - shparameters);
00462 AlgebraicSymMatrix R = rechit.parametersError();
00463 int ierr;
00464 R.invert(ierr);
00465 double est = R.similarity(r);
00466
00467
00468
00469
00470
00471
00472 chi2rphi[i2] = est;
00473 i2++;
00474 }
00475 i++;
00476 }
00477 }
00478
00479
00480 int j=0;
00481 int j2=0;
00482 numrechitsas=0;
00483 SiStripRecHit2DCollection::range rechitsasRange = rechitsstereo->get(detid);
00484 SiStripRecHit2DCollection::const_iterator rechitsasRangeIteratorBegin = rechitsasRange.first;
00485 SiStripRecHit2DCollection::const_iterator rechitsasRangeIteratorEnd = rechitsasRange.second;
00486 SiStripRecHit2DCollection::const_iterator itersas=rechitsasRangeIteratorBegin;
00487 numrechitsas = rechitsasRangeIteratorEnd - rechitsasRangeIteratorBegin;
00488 if(numrechitsas > 0){
00489 totrechitsas+=numrechitsas;
00490 for(itersas=rechitsasRangeIteratorBegin; itersas!=rechitsasRangeIteratorEnd;++itersas){
00491 const GeomDetUnit * det = tracker.idToDetUnit(detid);
00492 const StripGeomDetUnit * stripdet=(const StripGeomDetUnit*)(det);
00493 const StripTopology &topol=(StripTopology&)stripdet->topology();
00494 SiStripRecHit2D const rechit=*itersas;
00495 LocalPoint position=rechit.localPosition();
00496 LocalError error=rechit.localPositionError();
00497 MeasurementPoint Mposition;
00498 MeasurementError Merror;
00499 Mposition = topol.measurementPosition(position);
00500 Merror = topol.measurementError(position,error);
00501 SiStripRecHit2D::ClusterRef clust=rechit.cluster(); int clusiz=0;
00502 int totcharge=0;
00503 clusiz = clust->amplitudes().size();
00504 const std::vector<uint8_t> amplitudes=clust->amplitudes();
00505 for(size_t ia=0; ia<amplitudes.size();ia++){
00506 totcharge+=amplitudes[ia];
00507 }
00508
00509 rechitsasx[j] = position.x();
00510 rechitsasy[j] = position.y();
00511 rechitsasz[j] = position.z();
00512 rechitsaserrx[j] = error.xx();
00513 clusizsas[j] = clusiz;
00514 cluchgsas[j] = totcharge;
00515
00516 float mindist = 999999;
00517 float dist = 999999;
00518 PSimHit closest;
00519 matched.clear();
00520 matched = associate.associateHit(rechit);
00521 if(!matched.empty()){
00522 for(vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); m++){
00523 dist = fabs(rechitsasx[j] - (*m).localPosition().x());
00524 if(dist<mindist){
00525 mindist = dist;
00526 closest = (*m);
00527 }
00528 rechitsasres[j] = rechitsasx[j] - closest.localPosition().x();
00529 }
00530 rechitsaspullMF[j] = (Mposition.x() - (topol.measurementPosition(closest.localPosition())).x())/sqrt(Merror.uu());
00531
00532
00533 AlgebraicVector rhparameters = rechit.parameters();
00534 AlgebraicVector shparameters(2);
00535 shparameters[0] = closest.localPosition().x();
00536 shparameters[1] = closest.localPosition().y();
00537 AlgebraicVector r(rhparameters - shparameters);
00538 AlgebraicSymMatrix R = rechit.parametersError();
00539 int ierr;
00540 R.invert(ierr);
00541 double est = R.similarity(r);
00542
00543
00544
00545
00546
00547
00548 chi2sas[j2] = est;
00549 j2++;
00550 }
00551 j++;
00552 }
00553 }
00554
00555
00556
00557 int k=0;
00558 int k2=0;
00559
00560
00561 numrechitmatched=0;
00562 SiStripMatchedRecHit2DCollection::range rechitmatchedRange = rechitsmatched->get(detid);
00563 SiStripMatchedRecHit2DCollection::const_iterator rechitmatchedRangeIteratorBegin = rechitmatchedRange.first;
00564 SiStripMatchedRecHit2DCollection::const_iterator rechitmatchedRangeIteratorEnd = rechitmatchedRange.second;
00565 SiStripMatchedRecHit2DCollection::const_iterator itermatched=rechitmatchedRangeIteratorBegin;
00566 numrechitmatched = rechitmatchedRangeIteratorEnd - rechitmatchedRangeIteratorBegin;
00567 if(numrechitmatched > 0){
00568 totrechitmatched +=numrechitmatched;
00569
00570 for(itermatched=rechitmatchedRangeIteratorBegin; itermatched!=rechitmatchedRangeIteratorEnd;++itermatched){
00571 SiStripMatchedRecHit2D const rechit=*itermatched;
00572 LocalPoint position=rechit.localPosition();
00573 LocalError error=rechit.localPositionError();
00574
00575 float mindist = 999999;
00576 float distx = 999999;
00577 float disty = 999999;
00578 float dist = 999999;
00579 std::pair<LocalPoint,LocalVector> closestPair;
00580 matched.clear();
00581
00582
00583
00584
00585
00586 rechitmatchedx[k] = position.x();
00587 rechitmatchedy[k] = position.y();
00588 rechitmatchedz[k] = position.z();
00589 rechitmatchederrxx[k] = error.xx();
00590 rechitmatchederrxy[k] = error.xy();
00591 rechitmatchederryy[k] = error.yy();
00592
00593
00594 matched = associate.associateHit(rechit);
00595
00596
00597 if(!matched.empty()){
00598
00599 const GluedGeomDet* gluedDet = (const GluedGeomDet*)tracker.idToDet(rechit.geographicalId());
00600 const StripGeomDetUnit* partnerstripdet =(StripGeomDetUnit*) gluedDet->stereoDet();
00601 std::pair<LocalPoint,LocalVector> hitPair;
00602
00603
00604
00605 for(vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); m++){
00606
00607 hitPair= projectHit((*m),partnerstripdet,gluedDet->surface());
00608 distx = fabs(rechitmatchedx[k] - hitPair.first.x());
00609 disty = fabs(rechitmatchedy[k] - hitPair.first.y());
00610 dist = sqrt(distx*distx+disty*disty);
00611
00612
00613 if(dist<mindist){
00614 mindist = dist;
00615 closestPair = hitPair;
00616 }
00617 }
00618
00619
00620 rechitmatchedresx[k] = rechitmatchedx[k] - closestPair.first.x();
00621 rechitmatchedresy[k] = rechitmatchedy[k] - closestPair.first.y();
00622
00623
00624
00625
00626 AlgebraicVector rhparameters = rechit.parameters();
00627 LocalPoint sh = closestPair.first;
00628 AlgebraicVector shparameters(2);
00629 shparameters[0] = sh.x();
00630 shparameters[1] = sh.y();
00631 AlgebraicVector r(rhparameters - shparameters);
00632 AlgebraicSymMatrix R = rechit.parametersError();
00633 int ierr;
00634 R.invert(ierr);
00635 double est = R.similarity(r);
00636
00637
00638
00639
00640
00641 chi2matched[k2] = est;
00642 k2++;
00643 }
00644
00645 k++;
00646 }
00647 }
00648
00649
00650 if(numrechitrphi>0 || numrechitsas>0 || numrechitmatched){
00651 if (detid.subdetId() == int(StripSubdetector::TIB)){
00652 TIBDetId tibid(myid);
00653 int Tibnumrechitrphi = numrechitrphi;
00654 int Tibnumrechitsas = numrechitsas;
00655 int Tibnumrechitmatched = numrechitmatched;
00656
00657 int Tibnumrechitrphi2 = i2;
00658 int Tibnumrechitsas2 = j2;
00659 int Tibnumrechitmatched2 = k2;
00660
00661 totTibnumrechitrphi +=numrechitrphi;
00662 totTibnumrechitsas +=numrechitsas;
00663 totTibnumrechitmatched +=numrechitmatched;
00664
00665 int ilay = tibid.layer() - 1;
00666
00667 if(tibid.stereo()==0){
00668 for(int k = 0; k<Tibnumrechitrphi; k++){
00669 meNstpRphiTIB[ilay]->Fill(clusizrphi[k]);
00670 meAdcRphiTIB[ilay]->Fill(cluchgrphi[k]);
00671 mePosxRphiTIB[ilay]->Fill(rechitrphix[k]);
00672 meErrxRphiTIB[ilay]->Fill(sqrt(rechitrphierrx[k]));
00673 meResRphiTIB[ilay]->Fill(rechitrphires[k]);
00674 mePullLFRphiTIB[ilay]->Fill(rechitrphires[k]/sqrt(rechitrphierrx[k]));
00675 mePullMFRphiTIB[ilay]->Fill(rechitrphipullMF[k]);
00676
00677 }
00678
00679 for(int k = 0; k<Tibnumrechitrphi2; k++){
00680 meChi2RphiTIB[ilay]->Fill(chi2rphi[k]);
00681 }
00682
00683 } else if(tibid.stereo()==1){
00684 for(int kk = 0; kk < Tibnumrechitsas; kk++)
00685 {
00686 meNstpSasTIB[ilay]->Fill(clusizsas[kk]);
00687 meAdcSasTIB[ilay]->Fill(cluchgsas[kk]);
00688 mePosxSasTIB[ilay]->Fill(rechitsasx[kk]);
00689 meErrxSasTIB[ilay]->Fill(sqrt(rechitsaserrx[kk]));
00690 meResSasTIB[ilay]->Fill(rechitsasres[kk]);
00691 mePullLFSasTIB[ilay]->Fill(rechitsasres[kk]/sqrt(rechitsaserrx[kk]));
00692 mePullMFSasTIB[ilay]->Fill(rechitsaspullMF[kk]);
00693 }
00694 for(int l = 0; l<Tibnumrechitsas2; l++){
00695 meChi2SasTIB[ilay]->Fill(chi2sas[l]);
00696 }
00697
00698 }
00699 if(Tibnumrechitmatched>0){
00700 for(int kkk = 0; kkk<Tibnumrechitmatched; kkk++)
00701 {
00702 mePosxMatchedTIB[ilay]->Fill(rechitmatchedx[kkk]);
00703 mePosyMatchedTIB[ilay]->Fill(rechitmatchedy[kkk]);
00704 meErrxMatchedTIB[ilay]->Fill(sqrt(rechitmatchederrxx[kkk]));
00705 meErryMatchedTIB[ilay]->Fill(sqrt(rechitmatchederryy[kkk]));
00706 meResxMatchedTIB[ilay]->Fill(rechitmatchedresx[kkk]);
00707 meResyMatchedTIB[ilay]->Fill(rechitmatchedresy[kkk]);
00708 }
00709 for(int l = 0; l<Tibnumrechitmatched2; l++){
00710 meChi2MatchedTIB[ilay]->Fill(chi2matched[l]);
00711 }
00712
00713 }
00714 }
00715
00716
00717 if (detid.subdetId() == int(StripSubdetector::TOB)){
00718 TOBDetId tobid(myid);
00719 int Tobnumrechitrphi = numrechitrphi;
00720 int Tobnumrechitsas = numrechitsas;
00721 int Tobnumrechitmatched = numrechitmatched;
00722 totTobnumrechitrphi +=numrechitrphi;
00723 totTobnumrechitsas +=numrechitsas;
00724 totTobnumrechitmatched +=numrechitmatched;
00725
00726 int Tobnumrechitrphi2 = i2;
00727 int Tobnumrechitsas2 = j2;
00728 int Tobnumrechitmatched2 = k2;
00729
00730 int ilay = tobid.layer() - 1;
00731
00732 if(tobid.stereo()==0){
00733 for(int k = 0; k<Tobnumrechitrphi; k++){
00734 meNstpRphiTOB[ilay]->Fill(clusizrphi[k]);
00735 meAdcRphiTOB[ilay]->Fill(cluchgrphi[k]);
00736 mePosxRphiTOB[ilay]->Fill(rechitrphix[k]);
00737 meErrxRphiTOB[ilay]->Fill(sqrt(rechitrphierrx[k]));
00738 meResRphiTOB[ilay]->Fill(rechitrphires[k]);
00739 mePullLFRphiTOB[ilay]->Fill(rechitrphires[k]/sqrt(rechitrphierrx[k]));
00740 mePullMFRphiTOB[ilay]->Fill(rechitrphipullMF[k]);
00741 }
00742 for(int l = 0; l<Tobnumrechitrphi2; l++){
00743 meChi2RphiTOB[ilay]->Fill(chi2rphi[l]);
00744 }
00745 } else if(tobid.stereo()==1){
00746 for(int kk = 0; kk < Tobnumrechitsas; kk++)
00747 {
00748 meNstpSasTOB[ilay]->Fill(clusizsas[kk]);
00749 meAdcSasTOB[ilay]->Fill(cluchgsas[kk]);
00750 mePosxSasTOB[ilay]->Fill(rechitsasx[kk]);
00751 meErrxSasTOB[ilay]->Fill(sqrt(rechitsaserrx[kk]));
00752 meResSasTOB[ilay]->Fill(rechitsasres[kk]);
00753 mePullLFSasTOB[ilay]->Fill(rechitsasres[kk]/sqrt(rechitsaserrx[kk]));
00754 mePullMFSasTOB[ilay]->Fill(rechitsaspullMF[kk]);
00755 }
00756 for(int l = 0; l<Tobnumrechitsas2; l++){
00757 meChi2SasTOB[ilay]->Fill(chi2sas[l]);
00758 }
00759
00760 }
00761 if(Tobnumrechitmatched>0){
00762 for(int kkk = 0; kkk<Tobnumrechitmatched; kkk++)
00763 {
00764 mePosxMatchedTOB[ilay]->Fill(rechitmatchedx[kkk]);
00765 mePosyMatchedTOB[ilay]->Fill(rechitmatchedy[kkk]);
00766 meErrxMatchedTOB[ilay]->Fill(sqrt(rechitmatchederrxx[kkk]));
00767 meErryMatchedTOB[ilay]->Fill(sqrt(rechitmatchederryy[kkk]));
00768 meResxMatchedTOB[ilay]->Fill(rechitmatchedresx[kkk]);
00769 meResyMatchedTOB[ilay]->Fill(rechitmatchedresy[kkk]);
00770 }
00771 for(int l = 0; l<Tobnumrechitmatched2; l++){
00772 meChi2MatchedTOB[ilay]->Fill(chi2matched[l]);
00773 }
00774
00775 }
00776 }
00777 if (detid.subdetId() == int(StripSubdetector::TID)){
00778 TIDDetId tidid(myid);
00779 int Tidnumrechitrphi = numrechitrphi;
00780 int Tidnumrechitsas = numrechitsas;
00781 int Tidnumrechitmatched = numrechitmatched;
00782 totTidnumrechitrphi +=numrechitrphi;
00783 totTidnumrechitsas +=numrechitsas;
00784 totTidnumrechitmatched +=numrechitmatched;
00785
00786 int Tidnumrechitrphi2 = i2;
00787 int Tidnumrechitsas2 = j2;
00788 int Tidnumrechitmatched2 = k2;
00789
00790 int ilay = tidid.ring() - 1;
00791
00792 if(tidid.stereo()==0){
00793 for(int k = 0; k<Tidnumrechitrphi; k++){
00794 meNstpRphiTID[ilay]->Fill(clusizrphi[k]);
00795 meAdcRphiTID[ilay]->Fill(cluchgrphi[k]);
00796 mePosxRphiTID[ilay]->Fill(rechitrphix[k]);
00797 meErrxRphiTID[ilay]->Fill(sqrt(rechitrphierrx[k]));
00798 meResRphiTID[ilay]->Fill(rechitrphires[k]);
00799 mePullLFRphiTID[ilay]->Fill(rechitrphires[k]/sqrt(rechitrphierrx[k]));
00800 mePullMFRphiTID[ilay]->Fill(rechitrphipullMF[k]);
00801 }
00802 for(int l = 0; l<Tidnumrechitrphi2; l++){
00803 meChi2RphiTID[ilay]->Fill(chi2rphi[l]);
00804 }
00805
00806 } else if(tidid.stereo()==1){
00807 for(int kk = 0; kk < Tidnumrechitsas; kk++)
00808 {
00809 meNstpSasTID[ilay]->Fill(clusizsas[kk]);
00810 meAdcSasTID[ilay]->Fill(cluchgsas[kk]);
00811 mePosxSasTID[ilay]->Fill(rechitsasx[kk]);
00812 meErrxSasTID[ilay]->Fill(sqrt(rechitsaserrx[kk]));
00813 meResSasTID[ilay]->Fill(rechitsasres[kk]);
00814 mePullLFSasTID[ilay]->Fill(rechitsasres[kk]/sqrt(rechitsaserrx[kk]));
00815 mePullMFSasTID[ilay]->Fill(rechitsaspullMF[kk]);
00816 }
00817 for(int l = 0; l<Tidnumrechitsas2; l++){
00818 meChi2SasTID[ilay]->Fill(chi2sas[l]);
00819 }
00820
00821 }
00822 if(Tidnumrechitmatched>0){
00823 for(int kkk = 0; kkk<Tidnumrechitmatched; kkk++)
00824 {
00825 mePosxMatchedTID[ilay]->Fill(rechitmatchedx[kkk]);
00826 mePosyMatchedTID[ilay]->Fill(rechitmatchedy[kkk]);
00827 meErrxMatchedTID[ilay]->Fill(sqrt(rechitmatchederrxx[kkk]));
00828 meErryMatchedTID[ilay]->Fill(sqrt(rechitmatchederryy[kkk]));
00829 meResxMatchedTID[ilay]->Fill(rechitmatchedresx[kkk]);
00830 meResyMatchedTID[ilay]->Fill(rechitmatchedresy[kkk]);
00831 }
00832 for(int l = 0; l<Tidnumrechitmatched2; l++){
00833 meChi2MatchedTID[ilay]->Fill(chi2matched[l]);
00834 }
00835
00836 }
00837 }
00838 if (detid.subdetId() == int(StripSubdetector::TEC)){
00839 TECDetId tecid(myid);
00840 int Tecnumrechitrphi = numrechitrphi;
00841 int Tecnumrechitsas = numrechitsas;
00842 int Tecnumrechitmatched = numrechitmatched;
00843 totTecnumrechitrphi +=numrechitrphi;
00844 totTecnumrechitsas +=numrechitsas;
00845 totTecnumrechitmatched +=numrechitmatched;
00846
00847 int Tecnumrechitrphi2 = i2;
00848 int Tecnumrechitsas2 = j2;
00849 int Tecnumrechitmatched2 = k2;
00850
00851 int ilay = tecid.ring() - 1;
00852
00853 if(tecid.stereo()==0){
00854 for(int k = 0; k<Tecnumrechitrphi; k++){
00855 meNstpRphiTEC[ilay]->Fill(clusizrphi[k]);
00856 meAdcRphiTEC[ilay]->Fill(cluchgrphi[k]);
00857 mePosxRphiTEC[ilay]->Fill(rechitrphix[k]);
00858 meErrxRphiTEC[ilay]->Fill(sqrt(rechitrphierrx[k]));
00859 meResRphiTEC[ilay]->Fill(rechitrphires[k]);
00860 mePullLFRphiTEC[ilay]->Fill(rechitrphires[k]/sqrt(rechitrphierrx[k]));
00861 mePullMFRphiTEC[ilay]->Fill(rechitrphipullMF[k]);
00862 }
00863 for(int l = 0; l<Tecnumrechitrphi2; l++){
00864 meChi2RphiTEC[ilay]->Fill(chi2rphi[l]);
00865 }
00866
00867 } else if(tecid.stereo()==1){
00868 for(int kk = 0; kk < Tecnumrechitsas; kk++)
00869 {
00870 meNstpSasTEC[ilay]->Fill(clusizsas[kk]);
00871 meAdcSasTEC[ilay]->Fill(cluchgsas[kk]);
00872 mePosxSasTEC[ilay]->Fill(rechitsasx[kk]);
00873 meErrxSasTEC[ilay]->Fill(sqrt(rechitsaserrx[kk]));
00874 meResSasTEC[ilay]->Fill(rechitsasres[kk]);
00875 mePullLFSasTEC[ilay]->Fill(rechitsasres[kk]/sqrt(rechitsaserrx[kk]));
00876 mePullMFSasTEC[ilay]->Fill(rechitsaspullMF[kk]);
00877 }
00878 for(int l = 0; l<Tecnumrechitsas2; l++){
00879 meChi2SasTEC[ilay]->Fill(chi2sas[l]);
00880 }
00881
00882 }
00883 if(Tecnumrechitmatched>0){
00884 for(int kkk = 0; kkk<Tecnumrechitmatched; kkk++)
00885 {
00886 mePosxMatchedTEC[ilay]->Fill(rechitmatchedx[kkk]);
00887 mePosyMatchedTEC[ilay]->Fill(rechitmatchedy[kkk]);
00888 meErrxMatchedTEC[ilay]->Fill(sqrt(rechitmatchederrxx[kkk]));
00889 meErryMatchedTEC[ilay]->Fill(sqrt(rechitmatchederryy[kkk]));
00890 meResxMatchedTEC[ilay]->Fill(rechitmatchedresx[kkk]);
00891 meResyMatchedTEC[ilay]->Fill(rechitmatchedresy[kkk]);
00892 }
00893 for(int l = 0; l<Tecnumrechitmatched2; l++){
00894 meChi2MatchedTEC[ilay]->Fill(chi2matched[l]);
00895 }
00896
00897 }
00898 }
00899
00900 }
00901 }
00902
00903
00904
00905 meNumRphiTIB->Fill(totTibnumrechitrphi);
00906 meNumSasTIB->Fill(totTibnumrechitsas);
00907 meNumMatchedTIB->Fill(totTibnumrechitmatched);
00908 meNumRphiTOB->Fill(totTobnumrechitrphi);
00909 meNumSasTOB->Fill(totTobnumrechitsas);
00910 meNumMatchedTOB->Fill(totTobnumrechitmatched);
00911 meNumRphiTID->Fill(totTidnumrechitrphi);
00912 meNumSasTID->Fill(totTidnumrechitsas);
00913 meNumMatchedTID->Fill(totTidnumrechitmatched);
00914 meNumRphiTEC->Fill(totTecnumrechitrphi);
00915 meNumSasTEC->Fill(totTecnumrechitsas);
00916 meNumMatchedTEC->Fill(totTecnumrechitmatched);
00917
00918 meNumTotRphi->Fill(totrechitrphi);
00919 meNumTotSas->Fill(totrechitsas);
00920 meNumTotMatched->Fill(totrechitmatched);
00921
00922
00923 }
00924
00925
00926
00927 std::pair<LocalPoint,LocalVector> SiStripRecHitsValid::projectHit( const PSimHit& hit, const StripGeomDetUnit* stripDet,
00928 const BoundPlane& plane)
00929 {
00930
00931
00932
00933 const StripTopology& topol = stripDet->specificTopology();
00934 GlobalPoint globalpos= stripDet->surface().toGlobal(hit.localPosition());
00935 LocalPoint localHit = plane.toLocal(globalpos);
00936
00937 LocalVector locdir=hit.localDirection();
00938
00939
00940 GlobalVector globaldir= stripDet->surface().toGlobal(locdir);
00941 LocalVector dir=plane.toLocal(globaldir);
00942 float scale = -localHit.z() / dir.z();
00943
00944 LocalPoint projectedPos = localHit + scale*dir;
00945
00946
00947
00948 float selfAngle = topol.stripAngle( topol.strip( hit.localPosition()));
00949
00950 LocalVector stripDir( sin(selfAngle), cos(selfAngle), 0);
00951
00952 LocalVector localStripDir( plane.toLocal(stripDet->surface().toGlobal( stripDir)));
00953
00954 return std::pair<LocalPoint,LocalVector>( projectedPos, localStripDir);
00955 }
00956
00957