00001 #include "RecoTracker/DebugTools/interface/TestHits.h"
00002
00003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00004 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00005 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00006 #include "TrackingTools/PatternTools/interface/TransverseImpactPointExtrapolator.h"
00007 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00008 #include "RecoTracker/TrackProducer/interface/TrackingRecHitLessFromGlobalPosition.h"
00009 #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h"
00010 #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h"
00011 #include <TDirectory.h>
00012 #include "Geometry/TrackerGeometryBuilder/interface/GluedGeomDet.h"
00013 #include "TrackingTools/TrackFitters/interface/KFTrajectoryFitter.h"
00014
00015 #include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h"
00016 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00017 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
00018 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00019 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00020 #include "DataFormats/SiPixelDetId/interface/PXBDetId.h"
00021 #include "DataFormats/SiPixelDetId/interface/PXFDetId.h"
00022
00023 typedef TrajectoryStateOnSurface TSOS;
00024 typedef TransientTrackingRecHit::ConstRecHitPointer CTTRHp;
00025 using namespace std;
00026 using namespace edm;
00027
00028 TestHits::TestHits(const edm::ParameterSet& iConfig):
00029 conf_(iConfig){
00030 LogTrace("TestHits") << conf_<< std::endl;
00031 propagatorName = conf_.getParameter<std::string>("Propagator");
00032 builderName = conf_.getParameter<std::string>("TTRHBuilder");
00033 srcName = conf_.getParameter<std::string>("src");
00034 fname = conf_.getParameter<std::string>("Fitter");
00035 mineta = conf_.getParameter<double>("mineta");
00036 maxeta = conf_.getParameter<double>("maxeta");
00037 }
00038
00039 TestHits::~TestHits(){}
00040
00041 void TestHits::beginRun(edm::Run & run, const edm::EventSetup& iSetup)
00042 {
00043
00044 iSetup.get<TrackerDigiGeometryRecord>().get(theG);
00045 iSetup.get<IdealMagneticFieldRecord>().get(theMF);
00046 iSetup.get<TrackingComponentsRecord>().get(propagatorName,thePropagator);
00047 iSetup.get<TransientRecHitRecord>().get(builderName,theBuilder);
00048 iSetup.get<TrajectoryFitter::Record>().get(fname, fit);
00049
00050 file = new TFile("testhits.root","recreate");
00051 for (int i=0; i!=6; i++)
00052 for (int j=0; j!=9; j++){
00053 if (i==0 && j>2) break;
00054 if (i==1 && j>1) break;
00055 if (i==2 && j>3) break;
00056 if (i==3 && j>2) break;
00057 if (i==4 && j>5) break;
00058 if (i==5 && j>8) break;
00059 title.str("");
00060 title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts";
00061 hPullGP_X_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00062 title.str("");
00063 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts";
00064 hPullGP_Y_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00065 title.str("");
00066 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts";
00067 hPullGP_Z_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00068 title.str("");
00069 title << "Chi2Increment_" << i+1 << "-" << j+1;
00070 hChi2Increment[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,0,100);
00071
00072 title.str("");
00073 title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts";
00074 hPullGM_X_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00075 title.str("");
00076 title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts";
00077 hPullGM_Y_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00078 title.str("");
00079 title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts";
00080 hPullGM_Z_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00081
00082 title.str("");
00083 title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr";
00084 hPullGP_X_tr[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00085 title.str("");
00086 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr";
00087 hPullGP_Y_tr[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00088 title.str("");
00089 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr";
00090 hPullGP_Z_tr[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00091
00092 title.str("");
00093 title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs";
00094 hPullGP_X_rs[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00095 title.str("");
00096 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs";
00097 hPullGP_Y_rs[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00098 title.str("");
00099 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs";
00100 hPullGP_Z_rs[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00101
00102 if ( ((i==2||i==4)&&(j==0||j==1)) || (i==3||i==5) ){
00103
00104 title.str("");
00105 title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_mono";
00106 hPullGP_X_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00107 title.str("");
00108 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_mono";
00109 hPullGP_Y_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00110 title.str("");
00111 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_mono";
00112 hPullGP_Z_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00113
00114 title.str("");
00115 title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_mono";
00116 hPullGM_X_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00117 title.str("");
00118 title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_mono";
00119 hPullGM_Y_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00120 title.str("");
00121 title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_mono";
00122 hPullGM_Z_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00123
00124 title.str("");
00125 title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_mono";
00126 hPullGP_X_tr_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00127 title.str("");
00128 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_mono";
00129 hPullGP_Y_tr_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00130 title.str("");
00131 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_mono";
00132 hPullGP_Z_tr_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00133
00134 title.str("");
00135 title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_mono";
00136 hPullGP_X_rs_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00137 title.str("");
00138 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_mono";
00139 hPullGP_Y_rs_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00140 title.str("");
00141 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_mono";
00142 hPullGP_Z_rs_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00143
00144
00145 title.str("");
00146 title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_stereo";
00147 hPullGP_X_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00148 title.str("");
00149 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
00150 hPullGP_Y_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00151 title.str("");
00152 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
00153 hPullGP_Z_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00154
00155 title.str("");
00156 title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_stereo";
00157 hPullGM_X_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00158 title.str("");
00159 title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
00160 hPullGM_Y_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00161 title.str("");
00162 title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
00163 hPullGM_Z_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00164
00165 title.str("");
00166 title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_stereo";
00167 hPullGP_X_tr_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00168 title.str("");
00169 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_stereo";
00170 hPullGP_Y_tr_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00171 title.str("");
00172 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_stereo";
00173 hPullGP_Z_tr_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00174
00175 title.str("");
00176 title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_stereo";
00177 hPullGP_X_rs_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00178 title.str("");
00179 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_stereo";
00180 hPullGP_Y_rs_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00181 title.str("");
00182 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_stereo";
00183 hPullGP_Z_rs_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
00184 }
00185 }
00186 hTotChi2Increment = new TH1F("TotChi2Increment","TotChi2Increment",1000,0,100);
00187 hProcess_vs_Chi2 = new TH2F("Process_vs_Chi2","Process_vs_Chi2",1000,0,100,17,-0.5,16.5);
00188 hClsize_vs_Chi2 = new TH2F("Clsize_vs_Chi2","Clsize_vs_Chi2",1000,0,100,17,-0.5,16.5);
00189 }
00190
00191
00192 void TestHits::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00193 {
00194 LogTrace("TestHits") << "\nnew event";
00195
00196 iEvent.getByLabel(srcName,theTCCollection );
00197 hitAssociator = new TrackerHitAssociator(iEvent);
00198
00199 TrajectoryStateCombiner combiner;
00200
00201 for (TrackCandidateCollection::const_iterator i=theTCCollection->begin(); i!=theTCCollection->end();i++){
00202
00203 LogTrace("TestHits") << "\n*****************new candidate*****************" << std::endl;
00204
00205 const TrackCandidate * theTC = &(*i);
00206 PTrajectoryStateOnDet state = theTC->trajectoryStateOnDet();
00207 const TrackCandidate::range& recHitVec=theTC->recHits();
00208
00209
00210
00211
00212 DetId detId(state.detId());
00213 TrajectoryStateOnSurface theTSOS=
00214 trajectoryStateTransform::transientState(state, &(theG->idToDet(detId)->surface()),theMF.product());
00215
00216 if (theTSOS.globalMomentum().eta()>maxeta || theTSOS.globalMomentum().eta()<mineta) continue;
00217
00218
00219 TransientTrackingRecHit::RecHitContainer hits;
00220
00221 for (edm::OwnVector<TrackingRecHit>::const_iterator i=recHitVec.first;
00222 i!=recHitVec.second; i++){
00223 hits.push_back(theBuilder->build(&(*i) ));
00224 }
00225
00226
00227 std::vector<Trajectory> result = fit->fit(theTC->seed(), hits, theTSOS);
00228 if (result.size()==0) continue;
00229 std::vector<TrajectoryMeasurement> vtm = result[0].measurements();
00230 double tchi2 = 0;
00231
00232 TSOS lastState = theTSOS;
00233 for (std::vector<TrajectoryMeasurement>::iterator tm=vtm.begin(); tm!=vtm.end();tm++){
00234
00235 TransientTrackingRecHit::ConstRecHitPointer rhit = tm->recHit();
00236 if ((rhit)->isValid()==0&&rhit->det()!=0) continue;
00237 LogTrace("TestHits") << "*****************new hit*****************" ;
00238
00239 int subdetId = rhit->det()->geographicalId().subdetId();
00240 int layerId = 0;
00241 DetId id = rhit->det()->geographicalId();
00242 if (id.subdetId()==3) layerId = ((TIBDetId)(id)).layer();
00243 if (id.subdetId()==5) layerId = ((TOBDetId)(id)).layer();
00244 if (id.subdetId()==1) layerId = ((PXBDetId)(id)).layer();
00245 if (id.subdetId()==4) layerId = ((TIDDetId)(id)).wheel();
00246 if (id.subdetId()==6) layerId = ((TECDetId)(id)).wheel();
00247 if (id.subdetId()==2) layerId = ((PXFDetId)(id)).disk();
00248 LogTrace("TestHits") << "subdetId=" << subdetId << " layerId=" << layerId ;
00249
00250 double delta = 99999;
00251 LocalPoint rhitLPv = rhit->localPosition();
00252
00253 std::vector<PSimHit> assSimHits = hitAssociator->associateHit(*(rhit->hit()));
00254 if (assSimHits.size()==0) continue;
00255 PSimHit shit;
00256 for(std::vector<PSimHit>::const_iterator m=assSimHits.begin(); m<assSimHits.end(); m++){
00257 if ((m->localPosition()-rhitLPv).mag()<delta) {
00258 shit=*m;
00259 delta = (m->localPosition()-rhitLPv).mag();
00260 }
00261 }
00262
00263 TSOS currentState = tm->forwardPredictedState();
00264 if (tm->backwardPredictedState().isValid())
00265 currentState = combiner(tm->backwardPredictedState(), tm->forwardPredictedState());
00266 TSOS updatedState = tm->updatedState();
00267 tchi2+=tm->estimate();
00268
00269
00270 double chi2increment = tm->estimate();
00271 LogTrace("TestHits") << "tm->estimate()=" << tm->estimate();
00272 title.str("");
00273 title << "Chi2Increment_" << subdetId << "-" << layerId;
00274 hChi2Increment[title.str()]->Fill( chi2increment );
00275 hTotChi2Increment->Fill( chi2increment );
00276 hProcess_vs_Chi2->Fill( chi2increment, shit.processType() );
00277 if (dynamic_cast<const SiPixelRecHit*>(rhit->hit()))
00278 hClsize_vs_Chi2->Fill( chi2increment, ((const SiPixelRecHit*)(rhit->hit()))->cluster()->size() );
00279 if (dynamic_cast<const SiStripRecHit2D*>(rhit->hit()))
00280 hClsize_vs_Chi2->Fill( chi2increment, ((const SiStripRecHit2D*)(rhit->hit()))->cluster()->amplitudes().size() );
00281
00282
00283 const Surface * surf = &( (rhit)->det()->surface() );
00284 LocalVector shitLMom;
00285 LocalPoint shitLPos;
00286 if (dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())) {
00287 double rechitmatchedx = rhit->localPosition().x();
00288 double rechitmatchedy = rhit->localPosition().y();
00289 double mindist = 999999;
00290 double distx, disty;
00291 std::pair<LocalPoint,LocalVector> closestPair;
00292 const StripGeomDetUnit* stripDet =(StripGeomDetUnit*) ((const GluedGeomDet *)(rhit)->det())->stereoDet();
00293 const BoundPlane& plane = (rhit)->det()->surface();
00294 for(std::vector<PSimHit>::const_iterator m=assSimHits.begin(); m<assSimHits.end(); m++) {
00295
00296 std::pair<LocalPoint,LocalVector> hitPair = projectHit((*m),stripDet,plane);
00297 distx = fabs(rechitmatchedx - hitPair.first.x());
00298 disty = fabs(rechitmatchedy - hitPair.first.y());
00299 double dist = distx*distx+disty*disty;
00300 if(sqrt(dist)<mindist){
00301 mindist = dist;
00302 closestPair = hitPair;
00303 }
00304 }
00305 shitLPos = closestPair.first;
00306 shitLMom = closestPair.second;
00307 } else {
00308 shitLPos = shit.localPosition();
00309 shitLMom = shit.momentumAtEntry();
00310 }
00311 GlobalVector shitGMom = surf->toGlobal(shitLMom);
00312 GlobalPoint shitGPos = surf->toGlobal(shitLPos);
00313
00314 GlobalVector tsosGMom = currentState.globalMomentum();
00315 GlobalError tsosGMEr(currentState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
00316 GlobalPoint tsosGPos = currentState.globalPosition();
00317 GlobalError tsosGPEr = currentState.cartesianError().position();
00318
00319 GlobalPoint rhitGPos = (rhit)->globalPosition();
00320 GlobalError rhitGPEr = (rhit)->globalPositionError();
00321
00322 double pullGPX_rs = (rhitGPos.x()-shitGPos.x())/sqrt(rhitGPEr.cxx());
00323 double pullGPY_rs = (rhitGPos.y()-shitGPos.y())/sqrt(rhitGPEr.cyy());
00324 double pullGPZ_rs = (rhitGPos.z()-shitGPos.z())/sqrt(rhitGPEr.czz());
00325
00326
00327
00328
00329 LogTrace("TestHits") << "rs" << std::endl;
00330 LogVerbatim("TestHits") << "assSimHits.size()=" << assSimHits.size() ;
00331 LogVerbatim("TestHits") << "tsos globalPos =" << tsosGPos ;
00332 LogVerbatim("TestHits") << "sim hit globalPos=" << shitGPos ;
00333 LogVerbatim("TestHits") << "rec hit globalPos=" << rhitGPos ;
00334 LogVerbatim("TestHits") << "geographicalId =" << rhit->det()->geographicalId().rawId() ;
00335 LogVerbatim("TestHits") << "surface position =" << surf->position() ;
00336
00337 title.str("");
00338 title << "PullGP_X_" << subdetId << "-" << layerId << "_rs";
00339 hPullGP_X_rs[title.str()]->Fill( pullGPX_rs );
00340 title.str("");
00341 title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs";
00342 hPullGP_Y_rs[title.str()]->Fill( pullGPY_rs );
00343 title.str("");
00344 title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs";
00345 hPullGP_Z_rs[title.str()]->Fill( pullGPZ_rs );
00346
00347 double pullGPX_tr = (tsosGPos.x()-rhitGPos.x())/sqrt(tsosGPEr.cxx()+rhitGPEr.cxx());
00348 double pullGPY_tr = (tsosGPos.y()-rhitGPos.y())/sqrt(tsosGPEr.cyy()+rhitGPEr.cyy());
00349 double pullGPZ_tr = (tsosGPos.z()-rhitGPos.z())/sqrt(tsosGPEr.czz()+rhitGPEr.czz());
00350
00351
00352
00353
00354 LogTrace("TestHits") << "tr" << std::endl;
00355
00356 title.str("");
00357 title << "PullGP_X_" << subdetId << "-" << layerId << "_tr";
00358 hPullGP_X_tr[title.str()]->Fill( pullGPX_tr );
00359 title.str("");
00360 title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr";
00361 hPullGP_Y_tr[title.str()]->Fill( pullGPY_tr );
00362 title.str("");
00363 title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr";
00364 hPullGP_Z_tr[title.str()]->Fill( pullGPZ_tr );
00365
00366 double pullGPX_ts = (tsosGPos.x()-shitGPos.x())/sqrt(tsosGPEr.cxx());
00367 double pullGPY_ts = (tsosGPos.y()-shitGPos.y())/sqrt(tsosGPEr.cyy());
00368 double pullGPZ_ts = (tsosGPos.z()-shitGPos.z())/sqrt(tsosGPEr.czz());
00369
00370
00371
00372
00373 LogTrace("TestHits") << "ts1" << std::endl;
00374
00375 title.str("");
00376 title << "PullGP_X_" << subdetId << "-" << layerId << "_ts";
00377 hPullGP_X_ts[title.str()]->Fill( pullGPX_ts );
00378 title.str("");
00379 title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts";
00380 hPullGP_Y_ts[title.str()]->Fill( pullGPY_ts );
00381 title.str("");
00382 title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts";
00383 hPullGP_Z_ts[title.str()]->Fill( pullGPZ_ts );
00384
00385 double pullGMX_ts = (tsosGMom.x()-shitGMom.x())/sqrt(tsosGMEr.cxx());
00386 double pullGMY_ts = (tsosGMom.y()-shitGMom.y())/sqrt(tsosGMEr.cyy());
00387 double pullGMZ_ts = (tsosGMom.z()-shitGMom.z())/sqrt(tsosGMEr.czz());
00388
00389
00390
00391
00392 LogTrace("TestHits") << "ts2" << std::endl;
00393
00394 title.str("");
00395 title << "PullGM_X_" << subdetId << "-" << layerId << "_ts";
00396 hPullGM_X_ts[title.str()]->Fill( pullGMX_ts );
00397 title.str("");
00398 title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts";
00399 hPullGM_Y_ts[title.str()]->Fill( pullGMY_ts );
00400 title.str("");
00401 title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts";
00402 hPullGM_Z_ts[title.str()]->Fill( pullGMZ_ts );
00403
00404 if (dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())) {
00405
00406 LogTrace("TestHits") << "MONO HIT" << std::endl;
00407 auto m = dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())->monoHit();
00408 CTTRHp tMonoHit = theBuilder->build(&m);
00409 if (tMonoHit==0) continue;
00410 vector<PSimHit> assMonoSimHits = hitAssociator->associateHit(*tMonoHit->hit());
00411 if (assMonoSimHits.size()==0) continue;
00412 const PSimHit sMonoHit = *(assSimHits.begin());
00413 const Surface * monoSurf = &( tMonoHit->det()->surface() );
00414 if (monoSurf==0) continue;
00415 TSOS monoState = thePropagator->propagate(lastState,*monoSurf);
00416 if (monoState.isValid()==0) continue;
00417
00418 LocalVector monoShitLMom = sMonoHit.momentumAtEntry();
00419 GlobalVector monoShitGMom = monoSurf->toGlobal(monoShitLMom);
00420 LocalPoint monoShitLPos = sMonoHit.localPosition();
00421 GlobalPoint monoShitGPos = monoSurf->toGlobal(monoShitLPos);
00422
00423 GlobalVector monoTsosGMom = monoState.globalMomentum();
00424 GlobalError monoTsosGMEr(monoState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
00425 GlobalPoint monoTsosGPos = monoState.globalPosition();
00426 GlobalError monoTsosGPEr = monoState.cartesianError().position();
00427
00428 GlobalPoint monoRhitGPos = tMonoHit->globalPosition();
00429 GlobalError monoRhitGPEr = tMonoHit->globalPositionError();
00430
00431 double pullGPX_rs_mono = (monoRhitGPos.x()-monoShitGPos.x())/sqrt(monoRhitGPEr.cxx());
00432 double pullGPY_rs_mono = (monoRhitGPos.y()-monoShitGPos.y())/sqrt(monoRhitGPEr.cyy());
00433 double pullGPZ_rs_mono = (monoRhitGPos.z()-monoShitGPos.z())/sqrt(monoRhitGPEr.czz());
00434
00435
00436
00437
00438 title.str("");
00439 title << "PullGP_X_" << subdetId << "-" << layerId << "_rs_mono";
00440 hPullGP_X_rs_mono[title.str()]->Fill( pullGPX_rs_mono );
00441 title.str("");
00442 title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs_mono";
00443 hPullGP_Y_rs_mono[title.str()]->Fill( pullGPY_rs_mono );
00444 title.str("");
00445 title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs_mono";
00446 hPullGP_Z_rs_mono[title.str()]->Fill( pullGPZ_rs_mono );
00447
00448 double pullGPX_tr_mono = (monoTsosGPos.x()-monoRhitGPos.x())/sqrt(monoTsosGPEr.cxx()+monoRhitGPEr.cxx());
00449 double pullGPY_tr_mono = (monoTsosGPos.y()-monoRhitGPos.y())/sqrt(monoTsosGPEr.cyy()+monoRhitGPEr.cyy());
00450 double pullGPZ_tr_mono = (monoTsosGPos.z()-monoRhitGPos.z())/sqrt(monoTsosGPEr.czz()+monoRhitGPEr.czz());
00451
00452
00453
00454
00455 title.str("");
00456 title << "PullGP_X_" << subdetId << "-" << layerId << "_tr_mono";
00457 hPullGP_X_tr_mono[title.str()]->Fill( pullGPX_tr_mono );
00458 title.str("");
00459 title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr_mono";
00460 hPullGP_Y_tr_mono[title.str()]->Fill( pullGPY_tr_mono );
00461 title.str("");
00462 title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr_mono";
00463 hPullGP_Z_tr_mono[title.str()]->Fill( pullGPZ_tr_mono );
00464
00465 double pullGPX_ts_mono = (monoTsosGPos.x()-monoShitGPos.x())/sqrt(monoTsosGPEr.cxx());
00466 double pullGPY_ts_mono = (monoTsosGPos.y()-monoShitGPos.y())/sqrt(monoTsosGPEr.cyy());
00467 double pullGPZ_ts_mono = (monoTsosGPos.z()-monoShitGPos.z())/sqrt(monoTsosGPEr.czz());
00468
00469
00470
00471
00472 title.str("");
00473 title << "PullGP_X_" << subdetId << "-" << layerId << "_ts_mono";
00474 hPullGP_X_ts_mono[title.str()]->Fill( pullGPX_ts_mono );
00475 title.str("");
00476 title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts_mono";
00477 hPullGP_Y_ts_mono[title.str()]->Fill( pullGPY_ts_mono );
00478 title.str("");
00479 title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts_mono";
00480 hPullGP_Z_ts_mono[title.str()]->Fill( pullGPZ_ts_mono );
00481
00482 double pullGMX_ts_mono = (monoTsosGMom.x()-monoShitGMom.x())/sqrt(monoTsosGMEr.cxx());
00483 double pullGMY_ts_mono = (monoTsosGMom.y()-monoShitGMom.y())/sqrt(monoTsosGMEr.cyy());
00484 double pullGMZ_ts_mono = (monoTsosGMom.z()-monoShitGMom.z())/sqrt(monoTsosGMEr.czz());
00485
00486
00487
00488
00489 title.str("");
00490 title << "PullGM_X_" << subdetId << "-" << layerId << "_ts_mono";
00491 hPullGM_X_ts_mono[title.str()]->Fill( pullGMX_ts_mono );
00492 title.str("");
00493 title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts_mono";
00494 hPullGM_Y_ts_mono[title.str()]->Fill( pullGMY_ts_mono );
00495 title.str("");
00496 title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts_mono";
00497 hPullGM_Z_ts_mono[title.str()]->Fill( pullGMZ_ts_mono );
00498
00499
00500 LogTrace("TestHits") << "STEREO HIT" << std::endl;
00501 auto s = dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())->stereoHit();
00502 CTTRHp tStereoHit =
00503 theBuilder->build(&s);
00504 if (tStereoHit==0) continue;
00505 vector<PSimHit> assStereoSimHits = hitAssociator->associateHit(*tStereoHit->hit());
00506 if (assStereoSimHits.size()==0) continue;
00507 const PSimHit sStereoHit = *(assSimHits.begin());
00508 const Surface * stereoSurf = &( tStereoHit->det()->surface() );
00509 if (stereoSurf==0) continue;
00510 TSOS stereoState = thePropagator->propagate(lastState,*stereoSurf);
00511 if (stereoState.isValid()==0) continue;
00512
00513 LocalVector stereoShitLMom = sStereoHit.momentumAtEntry();
00514 GlobalVector stereoShitGMom = stereoSurf->toGlobal(stereoShitLMom);
00515 LocalPoint stereoShitLPos = sStereoHit.localPosition();
00516 GlobalPoint stereoShitGPos = stereoSurf->toGlobal(stereoShitLPos);
00517
00518 GlobalVector stereoTsosGMom = stereoState.globalMomentum();
00519 GlobalError stereoTsosGMEr(stereoState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
00520 GlobalPoint stereoTsosGPos = stereoState.globalPosition();
00521 GlobalError stereoTsosGPEr = stereoState.cartesianError().position();
00522
00523 GlobalPoint stereoRhitGPos = tStereoHit->globalPosition();
00524 GlobalError stereoRhitGPEr = tStereoHit->globalPositionError();
00525
00526 double pullGPX_rs_stereo = (stereoRhitGPos.x()-stereoShitGPos.x())/sqrt(stereoRhitGPEr.cxx());
00527 double pullGPY_rs_stereo = (stereoRhitGPos.y()-stereoShitGPos.y())/sqrt(stereoRhitGPEr.cyy());
00528 double pullGPZ_rs_stereo = (stereoRhitGPos.z()-stereoShitGPos.z())/sqrt(stereoRhitGPEr.czz());
00529
00530
00531
00532
00533 title.str("");
00534 title << "PullGP_X_" << subdetId << "-" << layerId << "_rs_stereo";
00535 hPullGP_X_rs_stereo[title.str()]->Fill( pullGPX_rs_stereo );
00536 title.str("");
00537 title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs_stereo";
00538 hPullGP_Y_rs_stereo[title.str()]->Fill( pullGPY_rs_stereo );
00539 title.str("");
00540 title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs_stereo";
00541 hPullGP_Z_rs_stereo[title.str()]->Fill( pullGPZ_rs_stereo );
00542
00543 double pullGPX_tr_stereo = (stereoTsosGPos.x()-stereoRhitGPos.x())/sqrt(stereoTsosGPEr.cxx()+stereoRhitGPEr.cxx());
00544 double pullGPY_tr_stereo = (stereoTsosGPos.y()-stereoRhitGPos.y())/sqrt(stereoTsosGPEr.cyy()+stereoRhitGPEr.cyy());
00545 double pullGPZ_tr_stereo = (stereoTsosGPos.z()-stereoRhitGPos.z())/sqrt(stereoTsosGPEr.czz()+stereoRhitGPEr.czz());
00546
00547
00548
00549
00550 title.str("");
00551 title << "PullGP_X_" << subdetId << "-" << layerId << "_tr_stereo";
00552 hPullGP_X_tr_stereo[title.str()]->Fill( pullGPX_tr_stereo );
00553 title.str("");
00554 title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr_stereo";
00555 hPullGP_Y_tr_stereo[title.str()]->Fill( pullGPY_tr_stereo );
00556 title.str("");
00557 title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr_stereo";
00558 hPullGP_Z_tr_stereo[title.str()]->Fill( pullGPZ_tr_stereo );
00559
00560 double pullGPX_ts_stereo = (stereoTsosGPos.x()-stereoShitGPos.x())/sqrt(stereoTsosGPEr.cxx());
00561 double pullGPY_ts_stereo = (stereoTsosGPos.y()-stereoShitGPos.y())/sqrt(stereoTsosGPEr.cyy());
00562 double pullGPZ_ts_stereo = (stereoTsosGPos.z()-stereoShitGPos.z())/sqrt(stereoTsosGPEr.czz());
00563
00564
00565
00566
00567 title.str("");
00568 title << "PullGP_X_" << subdetId << "-" << layerId << "_ts_stereo";
00569 hPullGP_X_ts_stereo[title.str()]->Fill( pullGPX_ts_stereo );
00570 title.str("");
00571 title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts_stereo";
00572 hPullGP_Y_ts_stereo[title.str()]->Fill( pullGPY_ts_stereo );
00573 title.str("");
00574 title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts_stereo";
00575 hPullGP_Z_ts_stereo[title.str()]->Fill( pullGPZ_ts_stereo );
00576
00577 double pullGMX_ts_stereo = (stereoTsosGMom.x()-stereoShitGMom.x())/sqrt(stereoTsosGMEr.cxx());
00578 double pullGMY_ts_stereo = (stereoTsosGMom.y()-stereoShitGMom.y())/sqrt(stereoTsosGMEr.cyy());
00579 double pullGMZ_ts_stereo = (stereoTsosGMom.z()-stereoShitGMom.z())/sqrt(stereoTsosGMEr.czz());
00580
00581
00582
00583
00584 title.str("");
00585 title << "PullGM_X_" << subdetId << "-" << layerId << "_ts_stereo";
00586 hPullGM_X_ts_stereo[title.str()]->Fill( pullGMX_ts_stereo );
00587 title.str("");
00588 title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts_stereo";
00589 hPullGM_Y_ts_stereo[title.str()]->Fill( pullGMY_ts_stereo );
00590 title.str("");
00591 title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts_stereo";
00592 hPullGM_Z_ts_stereo[title.str()]->Fill( pullGMZ_ts_stereo );
00593 }
00594 lastState = updatedState;
00595 }
00596 LogTrace("TestHits") << "traj chi2=" << tchi2 ;
00597 LogTrace("TestHits") << "track chi2=" << result[0].chiSquared() ;
00598 }
00599 delete hitAssociator;
00600 LogTrace("TestHits") << "end of event" << std::endl;
00601 }
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944 void TestHits::endJob() {
00945
00946 TDirectory * chi2i = file->mkdir("Chi2_Increment");
00947
00948 TDirectory * gp_ts = file->mkdir("GP_TSOS-SimHit");
00949 TDirectory * gm_ts = file->mkdir("GM_TSOS-SimHit");
00950 TDirectory * gp_tr = file->mkdir("GP_TSOS-RecHit");
00951 TDirectory * gp_rs = file->mkdir("GP_RecHit-SimHit");
00952
00953 TDirectory * gp_tsx = gp_ts->mkdir("X");
00954 TDirectory * gp_tsy = gp_ts->mkdir("Y");
00955 TDirectory * gp_tsz = gp_ts->mkdir("Z");
00956 TDirectory * gm_tsx = gm_ts->mkdir("X");
00957 TDirectory * gm_tsy = gm_ts->mkdir("Y");
00958 TDirectory * gm_tsz = gm_ts->mkdir("Z");
00959 TDirectory * gp_trx = gp_tr->mkdir("X");
00960 TDirectory * gp_try = gp_tr->mkdir("Y");
00961 TDirectory * gp_trz = gp_tr->mkdir("Z");
00962 TDirectory * gp_rsx = gp_rs->mkdir("X");
00963 TDirectory * gp_rsy = gp_rs->mkdir("Y");
00964 TDirectory * gp_rsz = gp_rs->mkdir("Z");
00965
00966 TDirectory * gp_tsx_mono = gp_ts->mkdir("MONOX");
00967 TDirectory * gp_tsy_mono = gp_ts->mkdir("MONOY");
00968 TDirectory * gp_tsz_mono = gp_ts->mkdir("MONOZ");
00969 TDirectory * gm_tsx_mono = gm_ts->mkdir("MONOX");
00970 TDirectory * gm_tsy_mono = gm_ts->mkdir("MONOY");
00971 TDirectory * gm_tsz_mono = gm_ts->mkdir("MONOZ");
00972 TDirectory * gp_trx_mono = gp_tr->mkdir("MONOX");
00973 TDirectory * gp_try_mono = gp_tr->mkdir("MONOY");
00974 TDirectory * gp_trz_mono = gp_tr->mkdir("MONOZ");
00975 TDirectory * gp_rsx_mono = gp_rs->mkdir("MONOX");
00976 TDirectory * gp_rsy_mono = gp_rs->mkdir("MONOY");
00977 TDirectory * gp_rsz_mono = gp_rs->mkdir("MONOZ");
00978
00979 TDirectory * gp_tsx_stereo = gp_ts->mkdir("STEREOX");
00980 TDirectory * gp_tsy_stereo = gp_ts->mkdir("STEREOY");
00981 TDirectory * gp_tsz_stereo = gp_ts->mkdir("STEREOZ");
00982 TDirectory * gm_tsx_stereo = gm_ts->mkdir("STEREOX");
00983 TDirectory * gm_tsy_stereo = gm_ts->mkdir("STEREOY");
00984 TDirectory * gm_tsz_stereo = gm_ts->mkdir("STEREOZ");
00985 TDirectory * gp_trx_stereo = gp_tr->mkdir("STEREOX");
00986 TDirectory * gp_try_stereo = gp_tr->mkdir("STEREOY");
00987 TDirectory * gp_trz_stereo = gp_tr->mkdir("STEREOZ");
00988 TDirectory * gp_rsx_stereo = gp_rs->mkdir("STEREOX");
00989 TDirectory * gp_rsy_stereo = gp_rs->mkdir("STEREOY");
00990 TDirectory * gp_rsz_stereo = gp_rs->mkdir("STEREOZ");
00991
00992 chi2i->cd();
00993 hTotChi2Increment->Write();
00994 hProcess_vs_Chi2->Write();
00995 hClsize_vs_Chi2->Write();
00996 for (int i=0; i!=6; i++)
00997 for (int j=0; j!=9; j++){
00998 if (i==0 && j>2) break;
00999 if (i==1 && j>1) break;
01000 if (i==2 && j>3) break;
01001 if (i==3 && j>2) break;
01002 if (i==4 && j>5) break;
01003 if (i==5 && j>8) break;
01004 chi2i->cd();
01005 title.str("");
01006 title << "Chi2Increment_" << i+1 << "-" << j+1;
01007 hChi2Increment[title.str()]->Write();
01008
01009 gp_ts->cd();
01010 gp_tsx->cd();
01011 title.str("");
01012 title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts";
01013 hPullGP_X_ts[title.str()]->Write();
01014 gp_tsy->cd();
01015 title.str("");
01016 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts";
01017 hPullGP_Y_ts[title.str()]->Write();
01018 gp_tsz->cd();
01019 title.str("");
01020 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts";
01021 hPullGP_Z_ts[title.str()]->Write();
01022
01023 gm_ts->cd();
01024 gm_tsx->cd();
01025 title.str("");
01026 title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts";
01027 hPullGM_X_ts[title.str()]->Write();
01028 gm_tsy->cd();
01029 title.str("");
01030 title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts";
01031 hPullGM_Y_ts[title.str()]->Write();
01032 gm_tsz->cd();
01033 title.str("");
01034 title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts";
01035 hPullGM_Z_ts[title.str()]->Write();
01036
01037 gp_tr->cd();
01038 gp_trx->cd();
01039 title.str("");
01040 title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr";
01041 hPullGP_X_tr[title.str()]->Write();
01042 gp_try->cd();
01043 title.str("");
01044 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr";
01045 hPullGP_Y_tr[title.str()]->Write();
01046 gp_trz->cd();
01047 title.str("");
01048 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr";
01049 hPullGP_Z_tr[title.str()]->Write();
01050
01051 gp_rs->cd();
01052 gp_rsx->cd();
01053 title.str("");
01054 title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs";
01055 hPullGP_X_rs[title.str()]->Write();
01056 gp_rsy->cd();
01057 title.str("");
01058 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs";
01059 hPullGP_Y_rs[title.str()]->Write();
01060 gp_rsz->cd();
01061 title.str("");
01062 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs";
01063 hPullGP_Z_rs[title.str()]->Write();
01064
01065 if ( ((i==2||i==4)&&(j==0||j==1)) || (i==3||i==5) ){
01066
01067 gp_ts->cd();
01068 gp_tsx_mono->cd();
01069 title.str("");
01070 title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_mono";
01071 hPullGP_X_ts_mono[title.str()]->Write();
01072 gp_tsy_mono->cd();
01073 title.str("");
01074 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_mono";
01075 hPullGP_Y_ts_mono[title.str()]->Write();
01076 gp_tsz_mono->cd();
01077 title.str("");
01078 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_mono";
01079 hPullGP_Z_ts_mono[title.str()]->Write();
01080
01081 gm_ts->cd();
01082 gm_tsx_mono->cd();
01083 title.str("");
01084 title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_mono";
01085 hPullGM_X_ts_mono[title.str()]->Write();
01086 gm_tsy_mono->cd();
01087 title.str("");
01088 title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_mono";
01089 hPullGM_Y_ts_mono[title.str()]->Write();
01090 gm_tsz_mono->cd();
01091 title.str("");
01092 title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_mono";
01093 hPullGM_Z_ts_mono[title.str()]->Write();
01094
01095 gp_tr->cd();
01096 gp_trx_mono->cd();
01097 title.str("");
01098 title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_mono";
01099 hPullGP_X_tr_mono[title.str()]->Write();
01100 gp_try_mono->cd();
01101 title.str("");
01102 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_mono";
01103 hPullGP_Y_tr_mono[title.str()]->Write();
01104 gp_trz_mono->cd();
01105 title.str("");
01106 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_mono";
01107 hPullGP_Z_tr_mono[title.str()]->Write();
01108
01109 gp_rs->cd();
01110 gp_rsx_mono->cd();
01111 title.str("");
01112 title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_mono";
01113 hPullGP_X_rs_mono[title.str()]->Write();
01114 gp_rsy_mono->cd();
01115 title.str("");
01116 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_mono";
01117 hPullGP_Y_rs_mono[title.str()]->Write();
01118 gp_rsz_mono->cd();
01119 title.str("");
01120 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_mono";
01121 hPullGP_Z_rs_mono[title.str()]->Write();
01122
01123
01124 gp_ts->cd();
01125 gp_tsx_stereo->cd();
01126 title.str("");
01127 title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_stereo";
01128 hPullGP_X_ts_stereo[title.str()]->Write();
01129 gp_tsy_stereo->cd();
01130 title.str("");
01131 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
01132 hPullGP_Y_ts_stereo[title.str()]->Write();
01133 gp_tsz_stereo->cd();
01134 title.str("");
01135 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
01136 hPullGP_Z_ts_stereo[title.str()]->Write();
01137
01138 gm_ts->cd();
01139 gm_tsx_stereo->cd();
01140 title.str("");
01141 title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_stereo";
01142 hPullGM_X_ts_stereo[title.str()]->Write();
01143 gm_tsy_stereo->cd();
01144 title.str("");
01145 title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
01146 hPullGM_Y_ts_stereo[title.str()]->Write();
01147 gm_tsz_stereo->cd();
01148 title.str("");
01149 title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
01150 hPullGM_Z_ts_stereo[title.str()]->Write();
01151
01152 gp_tr->cd();
01153 gp_trx_stereo->cd();
01154 title.str("");
01155 title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_stereo";
01156 hPullGP_X_tr_stereo[title.str()]->Write();
01157 gp_try_stereo->cd();
01158 title.str("");
01159 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_stereo";
01160 hPullGP_Y_tr_stereo[title.str()]->Write();
01161 gp_trz_stereo->cd();
01162 title.str("");
01163 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_stereo";
01164 hPullGP_Z_tr_stereo[title.str()]->Write();
01165
01166 gp_rs->cd();
01167 gp_rsx_stereo->cd();
01168 title.str("");
01169 title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_stereo";
01170 hPullGP_X_rs_stereo[title.str()]->Write();
01171 gp_rsy_stereo->cd();
01172 title.str("");
01173 title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_stereo";
01174 hPullGP_Y_rs_stereo[title.str()]->Write();
01175 gp_rsz_stereo->cd();
01176 title.str("");
01177 title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_stereo";
01178 hPullGP_Z_rs_stereo[title.str()]->Write();
01179 }
01180 }
01181
01182 file->Close();
01183 }
01184
01185
01186
01187 std::pair<LocalPoint,LocalVector>
01188 TestHits::projectHit( const PSimHit& hit, const StripGeomDetUnit* stripDet, const BoundPlane& plane)
01189 {
01190 const StripTopology& topol = stripDet->specificTopology();
01191 GlobalPoint globalpos= stripDet->surface().toGlobal(hit.localPosition());
01192 LocalPoint localHit = plane.toLocal(globalpos);
01193
01194 LocalVector locdir=hit.localDirection();
01195
01196
01197 GlobalVector globaldir= stripDet->surface().toGlobal(locdir);
01198 LocalVector dir=plane.toLocal(globaldir);
01199 float scale = -localHit.z() / dir.z();
01200
01201 LocalPoint projectedPos = localHit + scale*dir;
01202
01203 float selfAngle = topol.stripAngle( topol.strip( hit.localPosition()));
01204
01205 LocalVector stripDir( sin(selfAngle), cos(selfAngle), 0);
01206
01207 LocalVector localStripDir( plane.toLocal(stripDet->surface().toGlobal( stripDir)));
01208
01209 return std::pair<LocalPoint,LocalVector>( projectedPos, localStripDir);
01210 }
01211
01212 #include "FWCore/Framework/interface/ModuleFactory.h"
01213 #include "FWCore/Framework/interface/MakerMacros.h"
01214
01215 DEFINE_FWK_MODULE(TestHits);