00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <iostream>
00017 #include <map>
00018 #include <string>
00019 #include <vector>
00020 #include <utility>
00021
00022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00023 #include "FWCore/Framework/interface/ESHandle.h"
00024
00025 #include "DataFormats/Common/interface/Handle.h"
00026 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
00027
00028 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
00029 #include "Geometry/Records/interface/IdealGeometryRecord.h"
00030 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00031
00032 #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
00033
00034 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00035 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
00036
00037 #include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h"
00038
00039 #include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h"
00040 #include "TrackingTools/Records/interface/TransientRecHitRecord.h"
00041 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00042 #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h"
00043 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00044
00045 #include "DQMServices/Core/interface/DQMStore.h"
00046 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
00047 #include "DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualSource.h"
00048
00049
00050 #include "DataFormats/VertexReco/interface/Vertex.h"
00051 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00052 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00053 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
00054 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
00055 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00056 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"
00057 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00058 #include "TrackingTools/Records/interface/TransientRecHitRecord.h"
00059
00060 using namespace std;
00061 using namespace edm;
00062
00063
00064 SiPixelTrackResidualSource::SiPixelTrackResidualSource(const edm::ParameterSet& pSet) :
00065 pSet_(pSet),
00066 modOn( pSet.getUntrackedParameter<bool>("modOn",true) ),
00067 reducedSet( pSet.getUntrackedParameter<bool>("reducedSet",true) ),
00068 ladOn( pSet.getUntrackedParameter<bool>("ladOn",false) ),
00069 layOn( pSet.getUntrackedParameter<bool>("layOn",false) ),
00070 phiOn( pSet.getUntrackedParameter<bool>("phiOn",false) ),
00071 ringOn( pSet.getUntrackedParameter<bool>("ringOn",false) ),
00072 bladeOn( pSet.getUntrackedParameter<bool>("bladeOn",false) ),
00073 diskOn( pSet.getUntrackedParameter<bool>("diskOn",false) ),
00074 isUpgrade( pSet.getUntrackedParameter<bool>("isUpgrade",false) )
00075 {
00076 pSet_ = pSet;
00077 debug_ = pSet_.getUntrackedParameter<bool>("debug", false);
00078 src_ = pSet_.getParameter<edm::InputTag>("src");
00079 clustersrc_ = pSet_.getParameter<edm::InputTag>("clustersrc");
00080 tracksrc_ = pSet_.getParameter<edm::InputTag>("trajectoryInput");
00081 dbe_ = edm::Service<DQMStore>().operator->();
00082 ttrhbuilder_ = pSet_.getParameter<std::string>("TTRHBuilder");
00083 ptminres_= pSet.getUntrackedParameter<double>("PtMinRes",4.0) ;
00084
00085 LogInfo("PixelDQM") << "SiPixelTrackResidualSource constructor" << endl;
00086 LogInfo ("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/"
00087 << layOn << "/" << phiOn << std::endl;
00088 LogInfo ("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/"
00089 << ringOn << std::endl;
00090 }
00091
00092
00093 SiPixelTrackResidualSource::~SiPixelTrackResidualSource() {
00094 LogInfo("PixelDQM") << "SiPixelTrackResidualSource destructor" << endl;
00095
00096 std::map<uint32_t,SiPixelTrackResidualModule*>::iterator struct_iter;
00097 for (struct_iter = theSiPixelStructure.begin() ; struct_iter != theSiPixelStructure.end() ; struct_iter++){
00098 delete struct_iter->second;
00099 struct_iter->second = 0;
00100 }
00101 }
00102
00103 void SiPixelTrackResidualSource::beginJob() {
00104 LogInfo("PixelDQM") << "SiPixelTrackResidualSource beginJob()" << endl;
00105 firstRun = true;
00106 NTotal=0;
00107 NLowProb=0;
00108 }
00109
00110
00111 void SiPixelTrackResidualSource::beginRun(const edm::Run& r, edm::EventSetup const& iSetup) {
00112 LogInfo("PixelDQM") << "SiPixelTrackResidualSource beginRun()" << endl;
00113
00114 if(firstRun){
00115
00116 edm::ESHandle<TrackerGeometry> TG;
00117 iSetup.get<TrackerDigiGeometryRecord>().get(TG);
00118 if (debug_) LogVerbatim("PixelDQM") << "TrackerGeometry "<< &(*TG) <<" size is "<< TG->dets().size() << endl;
00119
00120
00121 for (TrackerGeometry::DetContainer::const_iterator pxb = TG->detsPXB().begin();
00122 pxb!=TG->detsPXB().end(); pxb++) {
00123 if (dynamic_cast<PixelGeomDetUnit*>((*pxb))!=0) {
00124 SiPixelTrackResidualModule* module = new SiPixelTrackResidualModule((*pxb)->geographicalId().rawId());
00125 theSiPixelStructure.insert(pair<uint32_t, SiPixelTrackResidualModule*>((*pxb)->geographicalId().rawId(), module));
00126 }
00127 }
00128 for (TrackerGeometry::DetContainer::const_iterator pxf = TG->detsPXF().begin();
00129 pxf!=TG->detsPXF().end(); pxf++) {
00130 if (dynamic_cast<PixelGeomDetUnit*>((*pxf))!=0) {
00131 SiPixelTrackResidualModule* module = new SiPixelTrackResidualModule((*pxf)->geographicalId().rawId());
00132 theSiPixelStructure.insert(pair<uint32_t, SiPixelTrackResidualModule*>((*pxf)->geographicalId().rawId(), module));
00133 }
00134 }
00135 LogInfo("PixelDQM") << "SiPixelStructure size is " << theSiPixelStructure.size() << endl;
00136
00137
00138 SiPixelFolderOrganizer theSiPixelFolder;
00139 for (std::map<uint32_t, SiPixelTrackResidualModule*>::iterator pxd = theSiPixelStructure.begin();
00140 pxd!=theSiPixelStructure.end(); pxd++) {
00141
00142 if(modOn){
00143 if (theSiPixelFolder.setModuleFolder((*pxd).first,0,isUpgrade)) (*pxd).second->book(pSet_,reducedSet,0,isUpgrade);
00144 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Folder Creation Failed! ";
00145 }
00146 if(ladOn){
00147 if (theSiPixelFolder.setModuleFolder((*pxd).first,1,isUpgrade)) {
00148
00149 (*pxd).second->book(pSet_,reducedSet,1,isUpgrade);
00150 }
00151 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource ladder Folder Creation Failed! ";
00152 }
00153 if(layOn){
00154 if (theSiPixelFolder.setModuleFolder((*pxd).first,2,isUpgrade)) (*pxd).second->book(pSet_,reducedSet,2,isUpgrade);
00155 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource layer Folder Creation Failed! ";
00156 }
00157 if(phiOn){
00158 if (theSiPixelFolder.setModuleFolder((*pxd).first,3,isUpgrade)) (*pxd).second->book(pSet_,reducedSet,3,isUpgrade);
00159 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource phi Folder Creation Failed! ";
00160 }
00161 if(bladeOn){
00162 if (theSiPixelFolder.setModuleFolder((*pxd).first,4,isUpgrade)) (*pxd).second->book(pSet_,reducedSet,4,isUpgrade);
00163 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Blade Folder Creation Failed! ";
00164 }
00165 if(diskOn){
00166 if (theSiPixelFolder.setModuleFolder((*pxd).first,5,isUpgrade)) (*pxd).second->book(pSet_,reducedSet,5,isUpgrade);
00167 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Disk Folder Creation Failed! ";
00168 }
00169 if(ringOn){
00170 if (theSiPixelFolder.setModuleFolder((*pxd).first,6,isUpgrade)) (*pxd).second->book(pSet_,reducedSet,6,isUpgrade);
00171 else throw cms::Exception("LogicError") << "SiPixelTrackResidualSource Ring Folder Creation Failed! ";
00172 }
00173 }
00174
00175
00176
00177
00178
00179
00180 dbe_->setCurrentFolder("Pixel/Tracks");
00181 meNofTracks_ = dbe_->book1D("ntracks_" + tracksrc_.label(),"Number of Tracks",4,0,4);
00182 meNofTracks_->setAxisTitle("Number of Tracks",1);
00183 meNofTracks_->setBinLabel(1,"All");
00184 meNofTracks_->setBinLabel(2,"Pixel");
00185 meNofTracks_->setBinLabel(3,"BPix");
00186 meNofTracks_->setBinLabel(4,"FPix");
00187
00188
00189 dbe_->setCurrentFolder("Pixel/Tracks");
00190 meNofTracksInPixVol_ = dbe_->book1D("ntracksInPixVol_" + tracksrc_.label(),"Number of Tracks crossing Pixel fiducial Volume",2,0,2);
00191 meNofTracksInPixVol_->setAxisTitle("Number of Tracks",1);
00192 meNofTracksInPixVol_->setBinLabel(1,"With Hits");
00193 meNofTracksInPixVol_->setBinLabel(2,"Without Hits");
00194
00195
00196 dbe_->setCurrentFolder("Pixel/Clusters/OnTrack");
00197 meNofClustersOnTrack_ = dbe_->book1D("nclusters_" + clustersrc_.label() + "_tot","Number of Clusters (on track)",3,0,3);
00198 meNofClustersOnTrack_->setAxisTitle("Number of Clusters on Track",1);
00199 meNofClustersOnTrack_->setBinLabel(1,"All");
00200 meNofClustersOnTrack_->setBinLabel(2,"BPix");
00201 meNofClustersOnTrack_->setBinLabel(3,"FPix");
00202 dbe_->setCurrentFolder("Pixel/Clusters/OffTrack");
00203 meNofClustersNotOnTrack_ = dbe_->book1D("nclusters_" + clustersrc_.label() + "_tot","Number of Clusters (off track)",3,0,3);
00204 meNofClustersNotOnTrack_->setAxisTitle("Number of Clusters off Track",1);
00205 meNofClustersNotOnTrack_->setBinLabel(1,"All");
00206 meNofClustersNotOnTrack_->setBinLabel(2,"BPix");
00207 meNofClustersNotOnTrack_->setBinLabel(3,"FPix");
00208
00209
00210
00211
00212 dbe_->setCurrentFolder("Pixel/Clusters/OnTrack");
00213 meClChargeOnTrack_all = dbe_->book1D("charge_" + clustersrc_.label(),"Charge (on track)",500,0.,500.);
00214 meClChargeOnTrack_all->setAxisTitle("Charge size (in ke)",1);
00215 meClChargeOnTrack_bpix = dbe_->book1D("charge_" + clustersrc_.label() + "_Barrel","Charge (on track, barrel)",500,0.,500.);
00216 meClChargeOnTrack_bpix->setAxisTitle("Charge size (in ke)",1);
00217 meClChargeOnTrack_fpix = dbe_->book1D("charge_" + clustersrc_.label() + "_Endcap","Charge (on track, endcap)",500,0.,500.);
00218 meClChargeOnTrack_fpix->setAxisTitle("Charge size (in ke)",1);
00219 meClChargeOnTrack_layer1 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_1","Charge (on track, layer1)",500,0.,500.);
00220 meClChargeOnTrack_layer1->setAxisTitle("Charge size (in ke)",1);
00221 meClChargeOnTrack_layer2 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_2","Charge (on track, layer2)",500,0.,500.);
00222 meClChargeOnTrack_layer2->setAxisTitle("Charge size (in ke)",1);
00223 meClChargeOnTrack_layer3 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_3","Charge (on track, layer3)",500,0.,500.);
00224 meClChargeOnTrack_layer3->setAxisTitle("Charge size (in ke)",1);
00225 if (isUpgrade) {
00226 meClChargeOnTrack_layer4 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_4","Charge (on track, layer4)",500,0.,500.);
00227 meClChargeOnTrack_layer4->setAxisTitle("Charge size (in ke)",1);
00228 }
00229 meClChargeOnTrack_diskp1 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_p1","Charge (on track, diskp1)",500,0.,500.);
00230 meClChargeOnTrack_diskp1->setAxisTitle("Charge size (in ke)",1);
00231 meClChargeOnTrack_diskp2 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_p2","Charge (on track, diskp2)",500,0.,500.);
00232 meClChargeOnTrack_diskp2->setAxisTitle("Charge size (in ke)",1);
00233 if (isUpgrade) {
00234 meClChargeOnTrack_diskp3 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_p3","Charge (on track, diskp3)",500,0.,500.);
00235 meClChargeOnTrack_diskp3->setAxisTitle("Charge size (in ke)",1);
00236 }
00237 meClChargeOnTrack_diskm1 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_m1","Charge (on track, diskm1)",500,0.,500.);
00238 meClChargeOnTrack_diskm1->setAxisTitle("Charge size (in ke)",1);
00239 meClChargeOnTrack_diskm2 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_m2","Charge (on track, diskm2)",500,0.,500.);
00240 meClChargeOnTrack_diskm2->setAxisTitle("Charge size (in ke)",1);
00241 if (isUpgrade) {
00242 meClChargeOnTrack_diskm3 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_m3","Charge (on track, diskm3)",500,0.,500.);
00243 meClChargeOnTrack_diskm3->setAxisTitle("Charge size (in ke)",1);
00244 }
00245
00246 dbe_->setCurrentFolder("Pixel/Clusters/OffTrack");
00247 meClChargeNotOnTrack_all = dbe_->book1D("charge_" + clustersrc_.label(),"Charge (off track)",500,0.,500.);
00248 meClChargeNotOnTrack_all->setAxisTitle("Charge size (in ke)",1);
00249 meClChargeNotOnTrack_bpix = dbe_->book1D("charge_" + clustersrc_.label() + "_Barrel","Charge (off track, barrel)",500,0.,500.);
00250 meClChargeNotOnTrack_bpix->setAxisTitle("Charge size (in ke)",1);
00251 meClChargeNotOnTrack_fpix = dbe_->book1D("charge_" + clustersrc_.label() + "_Endcap","Charge (off track, endcap)",500,0.,500.);
00252 meClChargeNotOnTrack_fpix->setAxisTitle("Charge size (in ke)",1);
00253 meClChargeNotOnTrack_layer1 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_1","Charge (off track, layer1)",500,0.,500.);
00254 meClChargeNotOnTrack_layer1->setAxisTitle("Charge size (in ke)",1);
00255 meClChargeNotOnTrack_layer2 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_2","Charge (off track, layer2)",500,0.,500.);
00256 meClChargeNotOnTrack_layer2->setAxisTitle("Charge size (in ke)",1);
00257 meClChargeNotOnTrack_layer3 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_3","Charge (off track, layer3)",500,0.,500.);
00258 meClChargeNotOnTrack_layer3->setAxisTitle("Charge size (in ke)",1);
00259 if (isUpgrade) {
00260 meClChargeNotOnTrack_layer4 = dbe_->book1D("charge_" + clustersrc_.label() + "_Layer_4","Charge (off track, layer4)",500,0.,500.);
00261 meClChargeNotOnTrack_layer4->setAxisTitle("Charge size (in ke)",1);
00262 }
00263 meClChargeNotOnTrack_diskp1 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_p1","Charge (off track, diskp1)",500,0.,500.);
00264 meClChargeNotOnTrack_diskp1->setAxisTitle("Charge size (in ke)",1);
00265 meClChargeNotOnTrack_diskp2 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_p2","Charge (off track, diskp2)",500,0.,500.);
00266 meClChargeNotOnTrack_diskp2->setAxisTitle("Charge size (in ke)",1);
00267 if (isUpgrade) {
00268 meClChargeNotOnTrack_diskp3 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_p3","Charge (off track, diskp3)",500,0.,500.);
00269 meClChargeNotOnTrack_diskp3->setAxisTitle("Charge size (in ke)",1);
00270 }
00271 meClChargeNotOnTrack_diskm1 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_m1","Charge (off track, diskm1)",500,0.,500.);
00272 meClChargeNotOnTrack_diskm1->setAxisTitle("Charge size (in ke)",1);
00273 meClChargeNotOnTrack_diskm2 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_m2","Charge (off track, diskm2)",500,0.,500.);
00274 meClChargeNotOnTrack_diskm2->setAxisTitle("Charge size (in ke)",1);
00275 if (isUpgrade) {
00276 meClChargeNotOnTrack_diskm3 = dbe_->book1D("charge_" + clustersrc_.label() + "_Disk_m3","Charge (off track, diskm3)",500,0.,500.);
00277 meClChargeNotOnTrack_diskm3->setAxisTitle("Charge size (in ke)",1);
00278 }
00279
00280
00281
00282 dbe_->setCurrentFolder("Pixel/Clusters/OnTrack");
00283 meClSizeOnTrack_all = dbe_->book1D("size_" + clustersrc_.label(),"Size (on track)",100,0.,100.);
00284 meClSizeOnTrack_all->setAxisTitle("Cluster size (in pixels)",1);
00285 meClSizeOnTrack_bpix = dbe_->book1D("size_" + clustersrc_.label() + "_Barrel","Size (on track, barrel)",100,0.,100.);
00286 meClSizeOnTrack_bpix->setAxisTitle("Cluster size (in pixels)",1);
00287 meClSizeOnTrack_fpix = dbe_->book1D("size_" + clustersrc_.label() + "_Endcap","Size (on track, endcap)",100,0.,100.);
00288 meClSizeOnTrack_fpix->setAxisTitle("Cluster size (in pixels)",1);
00289 meClSizeOnTrack_layer1 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_1","Size (on track, layer1)",100,0.,100.);
00290 meClSizeOnTrack_layer1->setAxisTitle("Cluster size (in pixels)",1);
00291 meClSizeOnTrack_layer2 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_2","Size (on track, layer2)",100,0.,100.);
00292 meClSizeOnTrack_layer2->setAxisTitle("Cluster size (in pixels)",1);
00293 meClSizeOnTrack_layer3 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_3","Size (on track, layer3)",100,0.,100.);
00294 meClSizeOnTrack_layer3->setAxisTitle("Cluster size (in pixels)",1);
00295 if (isUpgrade) {
00296 meClSizeOnTrack_layer4 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_4","Size (on track, layer4)",100,0.,100.);
00297 meClSizeOnTrack_layer4->setAxisTitle("Cluster size (in pixels)",1);
00298 }
00299 meClSizeOnTrack_diskp1 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_p1","Size (on track, diskp1)",100,0.,100.);
00300 meClSizeOnTrack_diskp1->setAxisTitle("Cluster size (in pixels)",1);
00301 meClSizeOnTrack_diskp2 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_p2","Size (on track, diskp2)",100,0.,100.);
00302 meClSizeOnTrack_diskp2->setAxisTitle("Cluster size (in pixels)",1);
00303 if (isUpgrade) {
00304 meClSizeOnTrack_diskp3 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_p3","Size (on track, diskp3)",100,0.,100.);
00305 meClSizeOnTrack_diskp3->setAxisTitle("Cluster size (in pixels)",1);
00306 }
00307 meClSizeOnTrack_diskm1 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_m1","Size (on track, diskm1)",100,0.,100.);
00308 meClSizeOnTrack_diskm1->setAxisTitle("Cluster size (in pixels)",1);
00309 meClSizeOnTrack_diskm2 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_m2","Size (on track, diskm2)",100,0.,100.);
00310 meClSizeOnTrack_diskm2->setAxisTitle("Cluster size (in pixels)",1);
00311 if (isUpgrade) {
00312 meClSizeOnTrack_diskm3 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_m3","Size (on track, diskm3)",100,0.,100.);
00313 meClSizeOnTrack_diskm3->setAxisTitle("Cluster size (in pixels)",1);
00314 }
00315 meClSizeXOnTrack_all = dbe_->book1D("sizeX_" + clustersrc_.label(),"SizeX (on track)",100,0.,100.);
00316 meClSizeXOnTrack_all->setAxisTitle("Cluster sizeX (in pixels)",1);
00317 meClSizeXOnTrack_bpix = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Barrel","SizeX (on track, barrel)",100,0.,100.);
00318 meClSizeXOnTrack_bpix->setAxisTitle("Cluster sizeX (in pixels)",1);
00319 meClSizeXOnTrack_fpix = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Endcap","SizeX (on track, endcap)",100,0.,100.);
00320 meClSizeXOnTrack_fpix->setAxisTitle("Cluster sizeX (in pixels)",1);
00321 meClSizeXOnTrack_layer1 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_1","SizeX (on track, layer1)",100,0.,100.);
00322 meClSizeXOnTrack_layer1->setAxisTitle("Cluster size (in pixels)",1);
00323 meClSizeXOnTrack_layer2 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_2","SizeX (on track, layer2)",100,0.,100.);
00324 meClSizeXOnTrack_layer2->setAxisTitle("Cluster size (in pixels)",1);
00325 meClSizeXOnTrack_layer3 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_3","SizeX (on track, layer3)",100,0.,100.);
00326 meClSizeXOnTrack_layer3->setAxisTitle("Cluster size (in pixels)",1);
00327 if (isUpgrade) {
00328 meClSizeXOnTrack_layer4 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_4","SizeX (on track, layer4)",100,0.,100.);
00329 meClSizeXOnTrack_layer4->setAxisTitle("Cluster size (in pixels)",1);
00330 }
00331 meClSizeXOnTrack_diskp1 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_p1","SizeX (on track, diskp1)",100,0.,100.);
00332 meClSizeXOnTrack_diskp1->setAxisTitle("Cluster size (in pixels)",1);
00333 meClSizeXOnTrack_diskp2 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_p2","SizeX (on track, diskp2)",100,0.,100.);
00334 meClSizeXOnTrack_diskp2->setAxisTitle("Cluster size (in pixels)",1);
00335 if (isUpgrade) {
00336 meClSizeXOnTrack_diskp3 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_p3","SizeX (on track, diskp3)",100,0.,100.);
00337 meClSizeXOnTrack_diskp3->setAxisTitle("Cluster size (in pixels)",1);
00338 }
00339 meClSizeXOnTrack_diskm1 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_m1","SizeX (on track, diskm1)",100,0.,100.);
00340 meClSizeXOnTrack_diskm1->setAxisTitle("Cluster size (in pixels)",1);
00341 meClSizeXOnTrack_diskm2 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_m2","SizeX (on track, diskm2)",100,0.,100.);
00342 meClSizeXOnTrack_diskm2->setAxisTitle("Cluster size (in pixels)",1);
00343 if (isUpgrade) {
00344 meClSizeXOnTrack_diskm3 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_m3","SizeX (on track, diskm3)",100,0.,100.);
00345 meClSizeXOnTrack_diskm3->setAxisTitle("Cluster size (in pixels)",1);
00346 }
00347 meClSizeYOnTrack_all = dbe_->book1D("sizeY_" + clustersrc_.label(),"SizeY (on track)",100,0.,100.);
00348 meClSizeYOnTrack_all->setAxisTitle("Cluster sizeY (in pixels)",1);
00349 meClSizeYOnTrack_bpix = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Barrel","SizeY (on track, barrel)",100,0.,100.);
00350 meClSizeYOnTrack_bpix->setAxisTitle("Cluster sizeY (in pixels)",1);
00351 meClSizeYOnTrack_fpix = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Endcap","SizeY (on track, endcap)",100,0.,100.);
00352 meClSizeYOnTrack_fpix->setAxisTitle("Cluster sizeY (in pixels)",1);
00353 meClSizeYOnTrack_layer1 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_1","SizeY (on track, layer1)",100,0.,100.);
00354 meClSizeYOnTrack_layer1->setAxisTitle("Cluster size (in pixels)",1);
00355 meClSizeYOnTrack_layer2 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_2","SizeY (on track, layer2)",100,0.,100.);
00356 meClSizeYOnTrack_layer2->setAxisTitle("Cluster size (in pixels)",1);
00357 meClSizeYOnTrack_layer3 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_3","SizeY (on track, layer3)",100,0.,100.);
00358 meClSizeYOnTrack_layer3->setAxisTitle("Cluster size (in pixels)",1);
00359 if (isUpgrade) {
00360 meClSizeYOnTrack_layer4 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_4","SizeY (on track, layer4)",100,0.,100.);
00361 meClSizeYOnTrack_layer4->setAxisTitle("Cluster size (in pixels)",1);
00362 }
00363 meClSizeYOnTrack_diskp1 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_p1","SizeY (on track, diskp1)",100,0.,100.);
00364 meClSizeYOnTrack_diskp1->setAxisTitle("Cluster size (in pixels)",1);
00365 meClSizeYOnTrack_diskp2 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_p2","SizeY (on track, diskp2)",100,0.,100.);
00366 meClSizeYOnTrack_diskp2->setAxisTitle("Cluster size (in pixels)",1);
00367 if (isUpgrade) {
00368 meClSizeYOnTrack_diskp3 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_p3","SizeY (on track, diskp3)",100,0.,100.);
00369 meClSizeYOnTrack_diskp3->setAxisTitle("Cluster size (in pixels)",1);
00370 }
00371 meClSizeYOnTrack_diskm1 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_m1","SizeY (on track, diskm1)",100,0.,100.);
00372 meClSizeYOnTrack_diskm1->setAxisTitle("Cluster size (in pixels)",1);
00373 meClSizeYOnTrack_diskm2 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_m2","SizeY (on track, diskm2)",100,0.,100.);
00374 meClSizeYOnTrack_diskm2->setAxisTitle("Cluster size (in pixels)",1);
00375 if (isUpgrade) {
00376 meClSizeYOnTrack_diskm3 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_m3","SizeY (on track, diskm3)",100,0.,100.);
00377 meClSizeYOnTrack_diskm3->setAxisTitle("Cluster size (in pixels)",1);
00378 }
00379
00380 dbe_->setCurrentFolder("Pixel/Clusters/OffTrack");
00381 meClSizeNotOnTrack_all = dbe_->book1D("size_" + clustersrc_.label(),"Size (off track)",100,0.,100.);
00382 meClSizeNotOnTrack_all->setAxisTitle("Cluster size (in pixels)",1);
00383 meClSizeNotOnTrack_bpix = dbe_->book1D("size_" + clustersrc_.label() + "_Barrel","Size (off track, barrel)",100,0.,100.);
00384 meClSizeNotOnTrack_bpix->setAxisTitle("Cluster size (in pixels)",1);
00385 meClSizeNotOnTrack_fpix = dbe_->book1D("size_" + clustersrc_.label() + "_Endcap","Size (off track, endcap)",100,0.,100.);
00386 meClSizeNotOnTrack_fpix->setAxisTitle("Cluster size (in pixels)",1);
00387 meClSizeNotOnTrack_layer1 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_1","Size (off track, layer1)",100,0.,100.);
00388 meClSizeNotOnTrack_layer1->setAxisTitle("Cluster size (in pixels)",1);
00389 meClSizeNotOnTrack_layer2 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_2","Size (off track, layer2)",100,0.,100.);
00390 meClSizeNotOnTrack_layer2->setAxisTitle("Cluster size (in pixels)",1);
00391 meClSizeNotOnTrack_layer3 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_3","Size (off track, layer3)",100,0.,100.);
00392 meClSizeNotOnTrack_layer3->setAxisTitle("Cluster size (in pixels)",1);
00393 if (isUpgrade) {
00394 meClSizeNotOnTrack_layer4 = dbe_->book1D("size_" + clustersrc_.label() + "_Layer_4","Size (off track, layer4)",100,0.,100.);
00395 meClSizeNotOnTrack_layer4->setAxisTitle("Cluster size (in pixels)",1);
00396 }
00397 meClSizeNotOnTrack_diskp1 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_p1","Size (off track, diskp1)",100,0.,100.);
00398 meClSizeNotOnTrack_diskp1->setAxisTitle("Cluster size (in pixels)",1);
00399 meClSizeNotOnTrack_diskp2 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_p2","Size (off track, diskp2)",100,0.,100.);
00400 meClSizeNotOnTrack_diskp2->setAxisTitle("Cluster size (in pixels)",1);
00401 if (isUpgrade) {
00402 meClSizeNotOnTrack_diskp3 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_p3","Size (off track, diskp3)",100,0.,100.);
00403 meClSizeNotOnTrack_diskp3->setAxisTitle("Cluster size (in pixels)",1);
00404 }
00405 meClSizeNotOnTrack_diskm1 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_m1","Size (off track, diskm1)",100,0.,100.);
00406 meClSizeNotOnTrack_diskm1->setAxisTitle("Cluster size (in pixels)",1);
00407 meClSizeNotOnTrack_diskm2 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_m2","Size (off track, diskm2)",100,0.,100.);
00408 meClSizeNotOnTrack_diskm2->setAxisTitle("Cluster size (in pixels)",1);
00409 if (isUpgrade) {
00410 meClSizeNotOnTrack_diskm3 = dbe_->book1D("size_" + clustersrc_.label() + "_Disk_m3","Size (off track, diskm3)",100,0.,100.);
00411 meClSizeNotOnTrack_diskm3->setAxisTitle("Cluster size (in pixels)",1);
00412 }
00413 meClSizeXNotOnTrack_all = dbe_->book1D("sizeX_" + clustersrc_.label(),"SizeX (off track)",100,0.,100.);
00414 meClSizeXNotOnTrack_all->setAxisTitle("Cluster sizeX (in pixels)",1);
00415 meClSizeXNotOnTrack_bpix = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Barrel","SizeX (off track, barrel)",100,0.,100.);
00416 meClSizeXNotOnTrack_bpix->setAxisTitle("Cluster sizeX (in pixels)",1);
00417 meClSizeXNotOnTrack_fpix = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Endcap","SizeX (off track, endcap)",100,0.,100.);
00418 meClSizeXNotOnTrack_fpix->setAxisTitle("Cluster sizeX (in pixels)",1);
00419 meClSizeXNotOnTrack_layer1 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_1","SizeX (off track, layer1)",100,0.,100.);
00420 meClSizeXNotOnTrack_layer1->setAxisTitle("Cluster size (in pixels)",1);
00421 meClSizeXNotOnTrack_layer2 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_2","SizeX (off track, layer2)",100,0.,100.);
00422 meClSizeXNotOnTrack_layer2->setAxisTitle("Cluster size (in pixels)",1);
00423 meClSizeXNotOnTrack_layer3 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_3","SizeX (off track, layer3)",100,0.,100.);
00424 meClSizeXNotOnTrack_layer3->setAxisTitle("Cluster size (in pixels)",1);
00425 if (isUpgrade) {
00426 meClSizeXNotOnTrack_layer4 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Layer_4","SizeX (off track, layer4)",100,0.,100.);
00427 meClSizeXNotOnTrack_layer4->setAxisTitle("Cluster size (in pixels)",1);
00428 }
00429 meClSizeXNotOnTrack_diskp1 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_p1","SizeX (off track, diskp1)",100,0.,100.);
00430 meClSizeXNotOnTrack_diskp1->setAxisTitle("Cluster size (in pixels)",1);
00431 meClSizeXNotOnTrack_diskp2 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_p2","SizeX (off track, diskp2)",100,0.,100.);
00432 meClSizeXNotOnTrack_diskp2->setAxisTitle("Cluster size (in pixels)",1);
00433 if (isUpgrade) {
00434 meClSizeXNotOnTrack_diskp3 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_p3","SizeX (off track, diskp3)",100,0.,100.);
00435 meClSizeXNotOnTrack_diskp3->setAxisTitle("Cluster size (in pixels)",1);
00436 }
00437 meClSizeXNotOnTrack_diskm1 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_m1","SizeX (off track, diskm1)",100,0.,100.);
00438 meClSizeXNotOnTrack_diskm1->setAxisTitle("Cluster size (in pixels)",1);
00439 meClSizeXNotOnTrack_diskm2 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_m2","SizeX (off track, diskm2)",100,0.,100.);
00440 meClSizeXNotOnTrack_diskm2->setAxisTitle("Cluster size (in pixels)",1);
00441 if (isUpgrade) {
00442 meClSizeXNotOnTrack_diskm3 = dbe_->book1D("sizeX_" + clustersrc_.label() + "_Disk_m3","SizeX (off track, diskm3)",100,0.,100.);
00443 meClSizeXNotOnTrack_diskm3->setAxisTitle("Cluster size (in pixels)",1);
00444 }
00445 meClSizeYNotOnTrack_all = dbe_->book1D("sizeY_" + clustersrc_.label(),"SizeY (off track)",100,0.,100.);
00446 meClSizeYNotOnTrack_all->setAxisTitle("Cluster sizeY (in pixels)",1);
00447 meClSizeYNotOnTrack_bpix = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Barrel","SizeY (off track, barrel)",100,0.,100.);
00448 meClSizeYNotOnTrack_bpix->setAxisTitle("Cluster sizeY (in pixels)",1);
00449 meClSizeYNotOnTrack_fpix = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Endcap","SizeY (off track, endcap)",100,0.,100.);
00450 meClSizeYNotOnTrack_fpix->setAxisTitle("Cluster sizeY (in pixels)",1);
00451 meClSizeYNotOnTrack_layer1 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_1","SizeY (off track, layer1)",100,0.,100.);
00452 meClSizeYNotOnTrack_layer1->setAxisTitle("Cluster size (in pixels)",1);
00453 meClSizeYNotOnTrack_layer2 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_2","SizeY (off track, layer2)",100,0.,100.);
00454 meClSizeYNotOnTrack_layer2->setAxisTitle("Cluster size (in pixels)",1);
00455 meClSizeYNotOnTrack_layer3 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_3","SizeY (off track, layer3)",100,0.,100.);
00456 meClSizeYNotOnTrack_layer3->setAxisTitle("Cluster size (in pixels)",1);
00457 if (isUpgrade) {
00458 meClSizeYNotOnTrack_layer4 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Layer_4","SizeY (off track, layer4)",100,0.,100.);
00459 meClSizeYNotOnTrack_layer4->setAxisTitle("Cluster size (in pixels)",1);
00460 }
00461 meClSizeYNotOnTrack_diskp1 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_p1","SizeY (off track, diskp1)",100,0.,100.);
00462 meClSizeYNotOnTrack_diskp1->setAxisTitle("Cluster size (in pixels)",1);
00463 meClSizeYNotOnTrack_diskp2 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_p2","SizeY (off track, diskp2)",100,0.,100.);
00464 meClSizeYNotOnTrack_diskp2->setAxisTitle("Cluster size (in pixels)",1);
00465 if (isUpgrade) {
00466 meClSizeYNotOnTrack_diskp3 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_p3","SizeY (off track, diskp3)",100,0.,100.);
00467 meClSizeYNotOnTrack_diskp3->setAxisTitle("Cluster size (in pixels)",1);
00468 }
00469 meClSizeYNotOnTrack_diskm1 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_m1","SizeY (off track, diskm1)",100,0.,100.);
00470 meClSizeYNotOnTrack_diskm1->setAxisTitle("Cluster size (in pixels)",1);
00471 meClSizeYNotOnTrack_diskm2 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_m2","SizeY (off track, diskm2)",100,0.,100.);
00472 meClSizeYNotOnTrack_diskm2->setAxisTitle("Cluster size (in pixels)",1);
00473 if (isUpgrade) {
00474 meClSizeYNotOnTrack_diskm3 = dbe_->book1D("sizeY_" + clustersrc_.label() + "_Disk_m3","SizeY (off track, diskm3)",100,0.,100.);
00475 meClSizeYNotOnTrack_diskm3->setAxisTitle("Cluster size (in pixels)",1);
00476 }
00477
00478
00479
00480 dbe_->setCurrentFolder("Pixel/Clusters/OnTrack");
00481
00482 meClPosLayer1OnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_1","Clusters Layer1 (on track)",200,-30.,30.,128,-3.2,3.2);
00483 meClPosLayer1OnTrack->setAxisTitle("Global Z (cm)",1);
00484 meClPosLayer1OnTrack->setAxisTitle("Global #phi",2);
00485 meClPosLayer2OnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_2","Clusters Layer2 (on track)",200,-30.,30.,128,-3.2,3.2);
00486 meClPosLayer2OnTrack->setAxisTitle("Global Z (cm)",1);
00487 meClPosLayer2OnTrack->setAxisTitle("Global #phi",2);
00488 meClPosLayer3OnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_3","Clusters Layer3 (on track)",200,-30.,30.,128,-3.2,3.2);
00489 meClPosLayer3OnTrack->setAxisTitle("Global Z (cm)",1);
00490 meClPosLayer3OnTrack->setAxisTitle("Global #phi",2);
00491 if (isUpgrade) {
00492 meClPosLayer4OnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_4","Clusters Layer4 (on track)",200,-30.,30.,128,-3.2,3.2);
00493 meClPosLayer4OnTrack->setAxisTitle("Global Z (cm)",1);
00494 meClPosLayer4OnTrack->setAxisTitle("Global #phi",2);
00495 }
00496
00497 meClPosDisk1pzOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_pz_Disk_1","Clusters +Z Disk1 (on track)",80,-20.,20.,80,-20.,20.);
00498 meClPosDisk1pzOnTrack->setAxisTitle("Global X (cm)",1);
00499 meClPosDisk1pzOnTrack->setAxisTitle("Global Y (cm)",2);
00500 meClPosDisk2pzOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_pz_Disk_2","Clusters +Z Disk2 (on track)",80,-20.,20.,80,-20.,20.);
00501 meClPosDisk2pzOnTrack->setAxisTitle("Global X (cm)",1);
00502 meClPosDisk2pzOnTrack->setAxisTitle("Global Y (cm)",2);
00503 if (isUpgrade) {
00504 meClPosDisk3pzOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_pz_Disk_3","Clusters +Z Disk3 (on track)",80,-20.,20.,80,-20.,20.);
00505 meClPosDisk3pzOnTrack->setAxisTitle("Global X (cm)",1);
00506 meClPosDisk3pzOnTrack->setAxisTitle("Global Y (cm)",2);
00507 }
00508 meClPosDisk1mzOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_mz_Disk_1","Clusters -Z Disk1 (on track)",80,-20.,20.,80,-20.,20.);
00509 meClPosDisk1mzOnTrack->setAxisTitle("Global X (cm)",1);
00510 meClPosDisk1mzOnTrack->setAxisTitle("Global Y (cm)",2);
00511 meClPosDisk2mzOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_mz_Disk_2","Clusters -Z Disk2 (on track)",80,-20.,20.,80,-20.,20.);
00512 meClPosDisk2mzOnTrack->setAxisTitle("Global X (cm)",1);
00513 meClPosDisk2mzOnTrack->setAxisTitle("Global Y (cm)",2);
00514 if (isUpgrade) {
00515 meClPosDisk3mzOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_mz_Disk_3","Clusters -Z Disk3 (on track)",80,-20.,20.,80,-20.,20.);
00516 meClPosDisk3mzOnTrack->setAxisTitle("Global X (cm)",1);
00517 meClPosDisk3mzOnTrack->setAxisTitle("Global Y (cm)",2);
00518 }
00519 meNClustersOnTrack_all = dbe_->book1D("nclusters_" + clustersrc_.label(),"Number of Clusters (on Track)",50,0.,50.);
00520 meNClustersOnTrack_all->setAxisTitle("Number of Clusters",1);
00521 meNClustersOnTrack_bpix = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Barrel","Number of Clusters (on track, barrel)",50,0.,50.);
00522 meNClustersOnTrack_bpix->setAxisTitle("Number of Clusters",1);
00523 meNClustersOnTrack_fpix = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Endcap","Number of Clusters (on track, endcap)",50,0.,50.);
00524 meNClustersOnTrack_fpix->setAxisTitle("Number of Clusters",1);
00525 meNClustersOnTrack_layer1 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_1","Number of Clusters (on track, layer1)",50,0.,50.);
00526 meNClustersOnTrack_layer1->setAxisTitle("Number of Clusters",1);
00527 meNClustersOnTrack_layer2 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_2","Number of Clusters (on track, layer2)",50,0.,50.);
00528 meNClustersOnTrack_layer2->setAxisTitle("Number of Clusters",1);
00529 meNClustersOnTrack_layer3 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_3","Number of Clusters (on track, layer3)",50,0.,50.);
00530 meNClustersOnTrack_layer3->setAxisTitle("Number of Clusters",1);
00531 if (isUpgrade) {
00532 meNClustersOnTrack_layer4 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_4","Number of Clusters (on track, layer4)",50,0.,50.);
00533 meNClustersOnTrack_layer4->setAxisTitle("Number of Clusters",1);
00534 }
00535 meNClustersOnTrack_diskp1 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_p1","Number of Clusters (on track, diskp1)",50,0.,50.);
00536 meNClustersOnTrack_diskp1->setAxisTitle("Number of Clusters",1);
00537 meNClustersOnTrack_diskp2 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_p2","Number of Clusters (on track, diskp2)",50,0.,50.);
00538 meNClustersOnTrack_diskp2->setAxisTitle("Number of Clusters",1);
00539 if (isUpgrade) {
00540 meNClustersOnTrack_diskp3 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_p3","Number of Clusters (on track, diskp3)",50,0.,50.);
00541 meNClustersOnTrack_diskp3->setAxisTitle("Number of Clusters",1);
00542 }
00543 meNClustersOnTrack_diskm1 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_m1","Number of Clusters (on track, diskm1)",50,0.,50.);
00544 meNClustersOnTrack_diskm1->setAxisTitle("Number of Clusters",1);
00545 meNClustersOnTrack_diskm2 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_m2","Number of Clusters (on track, diskm2)",50,0.,50.);
00546 meNClustersOnTrack_diskm2->setAxisTitle("Number of Clusters",1);
00547 if (isUpgrade) {
00548 meNClustersOnTrack_diskm3 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_m3","Number of Clusters (on track, diskm3)",50,0.,50.);
00549 meNClustersOnTrack_diskm3->setAxisTitle("Number of Clusters",1);
00550 }
00551
00552
00553 dbe_->setCurrentFolder("Pixel/Clusters/OffTrack");
00554
00555 meClPosLayer1NotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_1","Clusters Layer1 (off track)",200,-30.,30.,128,-3.2,3.2);
00556 meClPosLayer1NotOnTrack->setAxisTitle("Global Z (cm)",1);
00557 meClPosLayer1NotOnTrack->setAxisTitle("Global #phi",2);
00558 meClPosLayer2NotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_2","Clusters Layer2 (off track)",200,-30.,30.,128,-3.2,3.2);
00559 meClPosLayer2NotOnTrack->setAxisTitle("Global Z (cm)",1);
00560 meClPosLayer2NotOnTrack->setAxisTitle("Global #phi",2);
00561 meClPosLayer3NotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_3","Clusters Layer3 (off track)",200,-30.,30.,128,-3.2,3.2);
00562 meClPosLayer3NotOnTrack->setAxisTitle("Global Z (cm)",1);
00563 meClPosLayer3NotOnTrack->setAxisTitle("Global #phi",2);
00564 if (isUpgrade) {
00565 meClPosLayer4NotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_Layer_4","Clusters Layer4 (off track)",200,-30.,30.,128,-3.2,3.2);
00566 meClPosLayer4NotOnTrack->setAxisTitle("Global Z (cm)",1);
00567 meClPosLayer4NotOnTrack->setAxisTitle("Global #phi",2);
00568 }
00569
00570 meClPosDisk1pzNotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_pz_Disk_1","Clusters +Z Disk1 (off track)",80,-20.,20.,80,-20.,20.);
00571 meClPosDisk1pzNotOnTrack->setAxisTitle("Global X (cm)",1);
00572 meClPosDisk1pzNotOnTrack->setAxisTitle("Global Y (cm)",2);
00573 meClPosDisk2pzNotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_pz_Disk_2","Clusters +Z Disk2 (off track)",80,-20.,20.,80,-20.,20.);
00574 meClPosDisk2pzNotOnTrack->setAxisTitle("Global X (cm)",1);
00575 meClPosDisk2pzNotOnTrack->setAxisTitle("Global Y (cm)",2);
00576 if (isUpgrade) {
00577 meClPosDisk3pzNotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_pz_Disk_3","Clusters +Z Disk3 (off track)",80,-20.,20.,80,-20.,20.);
00578 meClPosDisk3pzNotOnTrack->setAxisTitle("Global X (cm)",1);
00579 meClPosDisk3pzNotOnTrack->setAxisTitle("Global Y (cm)",2);
00580 }
00581 meClPosDisk1mzNotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_mz_Disk_1","Clusters -Z Disk1 (off track)",80,-20.,20.,80,-20.,20.);
00582 meClPosDisk1mzNotOnTrack->setAxisTitle("Global X (cm)",1);
00583 meClPosDisk1mzNotOnTrack->setAxisTitle("Global Y (cm)",2);
00584 meClPosDisk2mzNotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_mz_Disk_2","Clusters -Z Disk2 (off track)",80,-20.,20.,80,-20.,20.);
00585 meClPosDisk2mzNotOnTrack->setAxisTitle("Global X (cm)",1);
00586 meClPosDisk2mzNotOnTrack->setAxisTitle("Global Y (cm)",2);
00587 if (isUpgrade) {
00588 meClPosDisk3mzNotOnTrack = dbe_->book2D("position_" + clustersrc_.label() + "_mz_Disk_3","Clusters -Z Disk3 (off track)",80,-20.,20.,80,-20.,20.);
00589 meClPosDisk3mzNotOnTrack->setAxisTitle("Global X (cm)",1);
00590 meClPosDisk3mzNotOnTrack->setAxisTitle("Global Y (cm)",2);
00591 }
00592 meNClustersNotOnTrack_all = dbe_->book1D("nclusters_" + clustersrc_.label(),"Number of Clusters (off Track)",50,0.,50.);
00593 meNClustersNotOnTrack_all->setAxisTitle("Number of Clusters",1);
00594 meNClustersNotOnTrack_bpix = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Barrel","Number of Clusters (off track, barrel)",50,0.,50.);
00595 meNClustersNotOnTrack_bpix->setAxisTitle("Number of Clusters",1);
00596 meNClustersNotOnTrack_fpix = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Endcap","Number of Clusters (off track, endcap)",50,0.,50.);
00597 meNClustersNotOnTrack_fpix->setAxisTitle("Number of Clusters",1);
00598 meNClustersNotOnTrack_layer1 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_1","Number of Clusters (off track, layer1)",50,0.,50.);
00599 meNClustersNotOnTrack_layer1->setAxisTitle("Number of Clusters",1);
00600 meNClustersNotOnTrack_layer2 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_2","Number of Clusters (off track, layer2)",50,0.,50.);
00601 meNClustersNotOnTrack_layer2->setAxisTitle("Number of Clusters",1);
00602 meNClustersNotOnTrack_layer3 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_3","Number of Clusters (off track, layer3)",50,0.,50.);
00603 meNClustersNotOnTrack_layer3->setAxisTitle("Number of Clusters",1);
00604 if (isUpgrade) {
00605 meNClustersNotOnTrack_layer4 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Layer_4","Number of Clusters (off track, layer4)",50,0.,50.);
00606 meNClustersNotOnTrack_layer4->setAxisTitle("Number of Clusters",1);
00607 }
00608 meNClustersNotOnTrack_diskp1 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_p1","Number of Clusters (off track, diskp1)",50,0.,50.);
00609 meNClustersNotOnTrack_diskp1->setAxisTitle("Number of Clusters",1);
00610 meNClustersNotOnTrack_diskp2 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_p2","Number of Clusters (off track, diskp2)",50,0.,50.);
00611 meNClustersNotOnTrack_diskp2->setAxisTitle("Number of Clusters",1);
00612 if (isUpgrade) {
00613 meNClustersNotOnTrack_diskp3 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_p3","Number of Clusters (off track, diskp3)",50,0.,50.);
00614 meNClustersNotOnTrack_diskp3->setAxisTitle("Number of Clusters",1);
00615 }
00616 meNClustersNotOnTrack_diskm1 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_m1","Number of Clusters (off track, diskm1)",50,0.,50.);
00617 meNClustersNotOnTrack_diskm1->setAxisTitle("Number of Clusters",1);
00618 meNClustersNotOnTrack_diskm2 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_m2","Number of Clusters (off track, diskm2)",50,0.,50.);
00619 meNClustersNotOnTrack_diskm2->setAxisTitle("Number of Clusters",1);
00620 if (isUpgrade) {
00621 meNClustersNotOnTrack_diskm3 = dbe_->book1D("nclusters_" + clustersrc_.label() + "_Disk_m3","Number of Clusters (off track, diskm3)",50,0.,50.);
00622 meNClustersNotOnTrack_diskm3->setAxisTitle("Number of Clusters",1);
00623 }
00624
00625
00626
00627 dbe_->setCurrentFolder("Pixel/Clusters/OnTrack");
00628 meHitProbability = dbe_->book1D("FractionLowProb","Fraction of hits with low probability;FractionLowProb;#HitsOnTrack",100,0.,1.);
00629
00630 if (debug_) {
00631
00632 dbe_->setCurrentFolder("debugging");
00633 char hisID[80];
00634 for (int s=0; s<3; s++) {
00635 sprintf(hisID,"residual_x_subdet_%i",s);
00636 meSubdetResidualX[s] = dbe_->book1D(hisID,"Pixel Hit-to-Track Residual in X",500,-5.,5.);
00637
00638 sprintf(hisID,"residual_y_subdet_%i",s);
00639 meSubdetResidualY[s] = dbe_->book1D(hisID,"Pixel Hit-to-Track Residual in Y",500,-5.,5.);
00640 }
00641 }
00642
00643 firstRun = false;
00644 }
00645 }
00646
00647
00648 void SiPixelTrackResidualSource::endJob(void) {
00649 LogInfo("PixelDQM") << "SiPixelTrackResidualSource endJob()";
00650
00651
00652 bool saveFile = pSet_.getUntrackedParameter<bool>("saveFile", true);
00653 if (saveFile) {
00654 std::string outputFile = pSet_.getParameter<std::string>("outputFile");
00655 LogInfo("PixelDQM") << " - saving histograms to "<< outputFile.data();
00656 dbe_->save(outputFile);
00657 }
00658 LogInfo("PixelDQM") << endl;
00659 }
00660
00661
00662 void SiPixelTrackResidualSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
00663
00664 edm::ESHandle<TrackerTopology> tTopoHandle;
00665 iSetup.get<IdealGeometryRecord>().get(tTopoHandle);
00666 const TrackerTopology* const tTopo = tTopoHandle.product();
00667
00668
00669
00670 ESHandle<TrackerGeometry> TG;
00671 iSetup.get<TrackerDigiGeometryRecord>().get(TG);
00672 const TrackerGeometry* theTrackerGeometry = TG.product();
00673
00674
00675
00676
00677
00678
00679 edm::Handle<reco::BeamSpot> rbs;
00680 iEvent.getByLabel( "offlineBeamSpot", rbs );
00681 math::XYZPoint bsP = math::XYZPoint(0,0,0);
00682 if( !rbs.failedToGet() && rbs.isValid() )
00683 {
00684 bsP = math::XYZPoint( rbs->x0(), rbs->y0(), rbs->z0() );
00685 }
00686
00687
00688
00689
00690 edm::Handle<reco::VertexCollection> vertices;
00691 iEvent.getByLabel("offlinePrimaryVertices", vertices );
00692
00693 if( vertices.failedToGet() ) return;
00694 if( !vertices.isValid() ) return;
00695
00696 math::XYZPoint vtxN = math::XYZPoint(0,0,0);
00697 math::XYZPoint vtxP = math::XYZPoint(0,0,0);
00698
00699 double bestNdof = 0;
00700 double maxSumPt = 0;
00701 reco::Vertex bestPvx;
00702 for(reco::VertexCollection::const_iterator iVertex = vertices->begin();
00703 iVertex != vertices->end(); ++iVertex ) {
00704 if( iVertex->ndof() > bestNdof ) {
00705 bestNdof = iVertex->ndof();
00706 vtxN = math::XYZPoint( iVertex->x(), iVertex->y(), iVertex->z() );
00707 }
00708 if( iVertex->p4().pt() > maxSumPt ) {
00709 maxSumPt = iVertex->p4().pt();
00710 vtxP = math::XYZPoint( iVertex->x(), iVertex->y(), iVertex->z() );
00711 bestPvx = *iVertex;
00712 }
00713
00714 }
00715
00716 if( maxSumPt < 1 ) return;
00717
00718 if( maxSumPt < 1 ) vtxP = vtxN;
00719
00720
00721
00722
00723 edm:: Handle<reco::TrackCollection> TracksForRes;
00724 iEvent.getByLabel( "generalTracks", TracksForRes );
00725
00726
00727
00728 edm::ESHandle<TransientTrackBuilder> theB;
00729 iSetup.get<TransientTrackRecord>().get( "TransientTrackBuilder", theB );
00730
00731
00732 edm::ESHandle<TransientTrackingRecHitBuilder> theTrackerRecHitBuilder;
00733 iSetup.get<TransientRecHitRecord>().get(ttrhbuilder_,theTrackerRecHitBuilder);
00734
00735
00736 if( TracksForRes.failedToGet() ) return;
00737 if( !TracksForRes.isValid() ) return;
00738
00739
00740 edm::ESHandle<TrackerGeometry> pDD;
00741 iSetup.get<TrackerDigiGeometryRecord>().get(pDD);
00742
00743 if( !pDD.isValid() ) {
00744 cout << "Unable to find TrackerDigiGeometry. Return\n";
00745 return;
00746 }
00747
00748 int kk = -1;
00749
00750
00751
00752 for( reco::TrackCollection::const_iterator iTrack = TracksForRes->begin();
00753 iTrack != TracksForRes->end(); ++iTrack ) {
00754
00755 kk++;
00756
00757
00758
00759
00760 double pt = iTrack->pt();
00761 if( pt < 0.75 ) continue;
00762 if( abs( iTrack->dxy(vtxP) ) > 5*iTrack->dxyError() ) continue;
00763
00764 double charge = iTrack->charge();
00765
00766 reco::TransientTrack tTrack = theB->build(*iTrack);
00767
00768 double kap = tTrack.initialFreeState().transverseCurvature();
00769
00770 TrajectoryStateOnSurface initialTSOS = tTrack.innermostMeasurementState();
00771 if( iTrack->extra().isNonnull() &&iTrack->extra().isAvailable() ){
00772
00773 double x1 = 0;
00774 double y1 = 0;
00775 double z1 = 0;
00776 double x2 = 0;
00777 double y2 = 0;
00778 double z2 = 0;
00779 double x3 = 0;
00780 double y3 = 0;
00781 double z3 = 0;
00782 int n1 = 0;
00783 int n2 = 0;
00784 int n3 = 0;
00785
00786
00787 vector<TransientTrackingRecHit::RecHitPointer> GoodPixBarrelHits;
00788
00789 for( trackingRecHit_iterator irecHit = iTrack->recHitsBegin();
00790 irecHit != iTrack->recHitsEnd(); ++irecHit){
00791
00792 if( (*irecHit)->isValid() ){
00793 DetId detId = (*irecHit)->geographicalId();
00794
00795 if( detId.det() != 1 ){
00796 if(debug_){
00797 cout << "rec hit ID = " << detId.det() << " not in tracker!?!?\n";
00798 }
00799 continue;
00800 }
00801 uint32_t subDet = detId.subdetId();
00802
00803
00804
00805
00806 TransientTrackingRecHit::RecHitPointer trecHit = theTrackerRecHitBuilder->build( &*(*irecHit), initialTSOS);
00807
00808
00809 double gX = trecHit->globalPosition().x();
00810 double gY = trecHit->globalPosition().y();
00811 double gZ = trecHit->globalPosition().z();
00812
00813
00814 if( subDet == PixelSubdetector::PixelBarrel ) {
00815
00816 int ilay = tTopo->pxbLayer(detId);
00817
00818 if( ilay == 1 ){
00819 n1++;
00820 x1 = gX;
00821 y1 = gY;
00822 z1 = gZ;
00823
00824 GoodPixBarrelHits.push_back((trecHit));
00825 }
00826 if( ilay == 2 ){
00827
00828 n2++;
00829 x2 = gX;
00830 y2 = gY;
00831 z2 = gZ;
00832
00833 GoodPixBarrelHits.push_back((trecHit));
00834
00835 }
00836 if( ilay == 3 ){
00837
00838 n3++;
00839 x3 = gX;
00840 y3 = gY;
00841 z3 = gZ;
00842 GoodPixBarrelHits.push_back((trecHit));
00843 }
00844 }
00845
00846
00847 }
00848 }
00849
00850
00851
00852
00853 if( n1+n2+n3 == 3 && n1*n2*n3 > 0) {
00854 for( unsigned int i = 0; i < GoodPixBarrelHits.size(); i++){
00855
00856 if( GoodPixBarrelHits[i]->isValid() ){
00857 DetId detId = GoodPixBarrelHits[i]->geographicalId().rawId();
00858 int ilay = tTopo->pxbLayer(detId);
00859 if(pt > ptminres_){
00860
00861 double dca2 = 0.0, dz2=0.0;
00862 double ptsig = pt;
00863 if(charge<0.) ptsig = -pt;
00864
00865
00866 MeasurementPoint Test;
00867 MeasurementPoint Test2;
00868 Test=MeasurementPoint(0,0);
00869 Test2=MeasurementPoint(0,0);
00870 Measurement2DVector residual;
00871
00872 if( ilay == 1 ){
00873
00874 triplets(x2,y2,z2,x1,y1,z1,x3,y3,z3,ptsig,dca2,dz2, kap);
00875
00876 Test=MeasurementPoint(dca2*1E4,dz2*1E4);
00877 residual=Test-Test2;
00878 }
00879
00880 if( ilay == 2 ){
00881
00882 triplets(x1,y1,z1,x2,y2,z2,x3,y3,z3,ptsig,dca2,dz2, kap);
00883
00884 Test=MeasurementPoint(dca2*1E4,dz2*1E4);
00885 residual=Test-Test2;
00886
00887 }
00888
00889 if( ilay == 3 ){
00890
00891 triplets(x1,y1,z1,x3,y3,z3,x2,y2,z2,ptsig,dca2,dz2, kap);
00892
00893 Test=MeasurementPoint(dca2*1E4,dz2*1E4);
00894 residual=Test-Test2;
00895 }
00896
00897
00898 std::map<uint32_t, SiPixelTrackResidualModule*>::iterator pxd = theSiPixelStructure.find(detId);
00899 if (pxd!=theSiPixelStructure.end()) (*pxd).second->fill(residual, reducedSet, modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn);
00900 }
00901 }
00902 }
00903 }
00904 }
00905
00906
00907 }
00908
00909
00910 edm::Handle<std::vector<Trajectory> > trajCollectionHandle;
00911 iEvent.getByLabel(tracksrc_,trajCollectionHandle);
00912 const std::vector<Trajectory> trajColl = *(trajCollectionHandle.product());
00913
00914
00915 edm::Handle<std::vector<reco::Track> > trackCollectionHandle;
00916 iEvent.getByLabel(tracksrc_,trackCollectionHandle);
00917 const std::vector<reco::Track> trackColl = *(trackCollectionHandle.product());
00918
00919
00920 edm::Handle<TrajTrackAssociationCollection> match;
00921 iEvent.getByLabel(tracksrc_,match);
00922 const TrajTrackAssociationCollection ttac = *(match.product());
00923
00924
00925 edm::Handle< edmNew::DetSetVector<SiPixelCluster> > clusterColl;
00926 iEvent.getByLabel( clustersrc_, clusterColl );
00927 const edmNew::DetSetVector<SiPixelCluster> clustColl = *(clusterColl.product());
00928
00929 if(debug_){
00930 std::cout << "Trajectories\t : " << trajColl.size() << std::endl;
00931 std::cout << "recoTracks \t : " << trackColl.size() << std::endl;
00932 std::cout << "Map entries \t : " << ttac.size() << std::endl;
00933 }
00934
00935 std::set<SiPixelCluster> clusterSet;
00936 TrajectoryStateCombiner tsoscomb;
00937 int tracks=0, pixeltracks=0, bpixtracks=0, fpixtracks=0;
00938 int trackclusters=0, barreltrackclusters=0, endcaptrackclusters=0;
00939 int otherclusters=0, barrelotherclusters=0, endcapotherclusters=0;
00940
00941
00942 for(TrajTrackAssociationCollection::const_iterator it = ttac.begin();it != ttac.end(); ++it){
00943 const edm::Ref<std::vector<Trajectory> > traj_iterator = it->key;
00944
00945 reco::TrackRef trackref = it->val;
00946 tracks++;
00947
00948 bool isBpixtrack = false, isFpixtrack = false, crossesPixVol=false;
00949
00950
00951
00952 double d0 = (*trackref).d0(), dz = (*trackref).dz();
00953
00954 if(abs(d0)<15 && abs(dz)<50) crossesPixVol = true;
00955
00956 std::vector<TrajectoryMeasurement> tmeasColl =traj_iterator->measurements();
00957 std::vector<TrajectoryMeasurement>::const_iterator tmeasIt;
00958
00959 for(tmeasIt = tmeasColl.begin();tmeasIt!=tmeasColl.end();tmeasIt++){
00960 if(! tmeasIt->updatedState().isValid()) continue;
00961 TransientTrackingRecHit::ConstRecHitPointer testhit = tmeasIt->recHit();
00962 if(! testhit->isValid() || testhit->geographicalId().det() != DetId::Tracker) continue;
00963 uint testSubDetID = (testhit->geographicalId().subdetId());
00964 if(testSubDetID==PixelSubdetector::PixelBarrel) isBpixtrack = true;
00965 if(testSubDetID==PixelSubdetector::PixelEndcap) isFpixtrack = true;
00966 }
00967 if(isBpixtrack) {
00968 bpixtracks++;
00969 if(debug_) std::cout << "bpixtrack\n";
00970 }
00971 if(isFpixtrack) {
00972 fpixtracks++;
00973 if(debug_) std::cout << "fpixtrack\n";
00974 }
00975 if(isBpixtrack || isFpixtrack){
00976 pixeltracks++;
00977
00978 if(crossesPixVol) meNofTracksInPixVol_->Fill(0,1);
00979
00980 std::vector<TrajectoryMeasurement> tmeasColl = traj_iterator->measurements();
00981 for(std::vector<TrajectoryMeasurement>::const_iterator tmeasIt = tmeasColl.begin(); tmeasIt!=tmeasColl.end(); tmeasIt++){
00982 if(! tmeasIt->updatedState().isValid()) continue;
00983
00984 TrajectoryStateOnSurface tsos = tsoscomb( tmeasIt->forwardPredictedState(), tmeasIt->backwardPredictedState() );
00985 TransientTrackingRecHit::ConstRecHitPointer hit = tmeasIt->recHit();
00986 if(! hit->isValid() || hit->geographicalId().det() != DetId::Tracker ) {
00987 continue;
00988 } else {
00989
00990
00991 const DetId & hit_detId = hit->geographicalId();
00992
00993 uint IntSubDetID = (hit_detId.subdetId());
00994
00995 if(IntSubDetID == 0 ) continue;
00996
00997
00998 const TrackingRecHit *persistentHit = hit->hit();
00999
01000 if ((persistentHit != 0) && (typeid(*persistentHit) == typeid(SiPixelRecHit))) {
01001
01002 const SiPixelRecHit* pixhit = static_cast<const SiPixelRecHit*>( hit->hit() );
01003
01004 float hit_prob = -1.;
01005 if(pixhit->hasFilledProb()){
01006 hit_prob = pixhit->clusterProbability(0);
01007
01008 if(hit_prob<pow(10.,-15.)) NLowProb++;
01009 NTotal++;
01010 if(NTotal>0) meHitProbability->Fill(float(NLowProb/NTotal));
01011 }
01012
01013
01014 edm::Ref<edmNew::DetSetVector<SiPixelCluster>, SiPixelCluster> const& clust = (*pixhit).cluster();
01015
01016 if (clust.isNonnull()) {
01017
01018
01019 const TrackerGeometry& theTracker(*theTrackerGeometry);
01020 const PixelGeomDetUnit* theGeomDet = static_cast<const PixelGeomDetUnit*> (theTracker.idToDet(hit_detId) );
01021
01022 if(theGeomDet == 0) {
01023 if(debug_) std::cout << "NO THEGEOMDET\n";
01024 continue;
01025 }
01026
01027 const PixelTopology * topol = &(theGeomDet->specificTopology());
01028
01029
01030 std::map<uint32_t, SiPixelTrackResidualModule*>::iterator pxd = theSiPixelStructure.find((*hit).geographicalId().rawId());
01031
01032
01033
01034 LocalTrajectoryParameters ltp = tsos.localParameters();
01035 LocalVector localDir = ltp.momentum()/ltp.momentum().mag();
01036
01037 float clust_alpha = atan2(localDir.z(), localDir.x());
01038 float clust_beta = atan2(localDir.z(), localDir.y());
01039 double corrCharge = clust->charge() * sqrt( 1.0 / ( 1.0/pow( tan(clust_alpha), 2 ) +
01040 1.0/pow( tan(clust_beta ), 2 ) +
01041 1.0 )
01042 )/1000.;
01043
01044 if (pxd!=theSiPixelStructure.end()) (*pxd).second->fill((*clust), true, corrCharge, reducedSet, modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn);
01045
01046
01047 trackclusters++;
01048
01049 meClChargeOnTrack_all->Fill(corrCharge);
01050 meClSizeOnTrack_all->Fill((*clust).size());
01051 meClSizeXOnTrack_all->Fill((*clust).sizeX());
01052 meClSizeYOnTrack_all->Fill((*clust).sizeY());
01053 clusterSet.insert(*clust);
01054
01055
01056
01057 float xcenter = clust->x();
01058 float ycenter = clust->y();
01059
01060 LocalPoint clustlp = topol->localPosition( MeasurementPoint(xcenter, ycenter) );
01061
01062 GlobalPoint clustgp = theGeomDet->surface().toGlobal( clustlp );
01063
01064
01065 bool barrel = DetId((*hit).geographicalId()).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
01066 bool endcap = DetId((*hit).geographicalId()).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
01067 if(barrel) {
01068 barreltrackclusters++;
01069
01070 meClChargeOnTrack_bpix->Fill(corrCharge);
01071 meClSizeOnTrack_bpix->Fill((*clust).size());
01072 meClSizeXOnTrack_bpix->Fill((*clust).sizeX());
01073 meClSizeYOnTrack_bpix->Fill((*clust).sizeY());
01074 uint32_t DBlayer;
01075 if (!isUpgrade) { DBlayer = PixelBarrelName(DetId((*hit).geographicalId())).layerName(); }
01076 else if (isUpgrade) { DBlayer = PixelBarrelNameUpgrade(DetId((*hit).geographicalId())).layerName(); }
01077 float phi = clustgp.phi();
01078 float z = clustgp.z();
01079 switch(DBlayer){
01080 case 1: {
01081 meClPosLayer1OnTrack->Fill(z,phi);
01082 meClChargeOnTrack_layer1->Fill(corrCharge);
01083 meClSizeOnTrack_layer1->Fill((*clust).size());
01084 meClSizeXOnTrack_layer1->Fill((*clust).sizeX());
01085 meClSizeYOnTrack_layer1->Fill((*clust).sizeY());
01086 break;
01087 }
01088 case 2: {
01089 meClPosLayer2OnTrack->Fill(z,phi);
01090 meClChargeOnTrack_layer2->Fill(corrCharge);
01091 meClSizeOnTrack_layer2->Fill((*clust).size());
01092 meClSizeXOnTrack_layer2->Fill((*clust).sizeX());
01093 meClSizeYOnTrack_layer2->Fill((*clust).sizeY());
01094 break;
01095 }
01096 case 3: {
01097 meClPosLayer3OnTrack->Fill(z,phi);
01098 meClChargeOnTrack_layer3->Fill(corrCharge);
01099 meClSizeOnTrack_layer3->Fill((*clust).size());
01100 meClSizeXOnTrack_layer3->Fill((*clust).sizeX());
01101 meClSizeYOnTrack_layer3->Fill((*clust).sizeY());
01102 break;
01103 }
01104 case 4: {
01105 if (isUpgrade) {
01106 meClPosLayer4OnTrack->Fill(z,phi);
01107 meClChargeOnTrack_layer4->Fill(corrCharge);
01108 meClSizeOnTrack_layer4->Fill((*clust).size());
01109 meClSizeXOnTrack_layer4->Fill((*clust).sizeX());
01110 meClSizeYOnTrack_layer4->Fill((*clust).sizeY());
01111 }
01112 break;
01113 }
01114
01115 }
01116
01117 }
01118 if(endcap) {
01119 endcaptrackclusters++;
01120
01121 meClChargeOnTrack_fpix->Fill(corrCharge);
01122 meClSizeOnTrack_fpix->Fill((*clust).size());
01123 meClSizeXOnTrack_fpix->Fill((*clust).sizeX());
01124 meClSizeYOnTrack_fpix->Fill((*clust).sizeY());
01125 uint32_t DBdisk;
01126 if (!isUpgrade) { DBdisk = PixelEndcapName(DetId((*hit).geographicalId())).diskName(); }
01127 else if (isUpgrade) { DBdisk = PixelEndcapNameUpgrade(DetId((*hit).geographicalId())).diskName(); }
01128 float x = clustgp.x();
01129 float y = clustgp.y();
01130 float z = clustgp.z();
01131 if(z>0){
01132 if(DBdisk==1) {
01133 meClPosDisk1pzOnTrack->Fill(x,y);
01134 meClChargeOnTrack_diskp1->Fill(corrCharge);
01135 meClSizeOnTrack_diskp1->Fill((*clust).size());
01136 meClSizeXOnTrack_diskp1->Fill((*clust).sizeX());
01137 meClSizeYOnTrack_diskp1->Fill((*clust).sizeY());
01138 }
01139 if(DBdisk==2) {
01140 meClPosDisk2pzOnTrack->Fill(x,y);
01141 meClChargeOnTrack_diskp2->Fill(corrCharge);
01142 meClSizeOnTrack_diskp2->Fill((*clust).size());
01143 meClSizeXOnTrack_diskp2->Fill((*clust).sizeX());
01144 meClSizeYOnTrack_diskp2->Fill((*clust).sizeY());
01145 }
01146 if(DBdisk==3 && isUpgrade) {
01147 meClPosDisk3pzOnTrack->Fill(x,y);
01148 meClChargeOnTrack_diskp3->Fill(corrCharge);
01149 meClSizeOnTrack_diskp3->Fill((*clust).size());
01150 meClSizeXOnTrack_diskp3->Fill((*clust).sizeX());
01151 meClSizeYOnTrack_diskp3->Fill((*clust).sizeY());
01152 }
01153 }
01154 else{
01155 if(DBdisk==1) {
01156 meClPosDisk1mzOnTrack->Fill(x,y);
01157 meClChargeOnTrack_diskm1->Fill(corrCharge);
01158 meClSizeOnTrack_diskm1->Fill((*clust).size());
01159 meClSizeXOnTrack_diskm1->Fill((*clust).sizeX());
01160 meClSizeYOnTrack_diskm1->Fill((*clust).sizeY());
01161 }
01162 if(DBdisk==2) {
01163 meClPosDisk2mzOnTrack->Fill(x,y);
01164 meClChargeOnTrack_diskm2->Fill(corrCharge);
01165 meClSizeOnTrack_diskm2->Fill((*clust).size());
01166 meClSizeXOnTrack_diskm2->Fill((*clust).sizeX());
01167 meClSizeYOnTrack_diskm2->Fill((*clust).sizeY());
01168 }
01169 if(DBdisk==3 && isUpgrade) {
01170 meClPosDisk3mzOnTrack->Fill(x,y);
01171 meClChargeOnTrack_diskm3->Fill(corrCharge);
01172 meClSizeOnTrack_diskm3->Fill((*clust).size());
01173 meClSizeXOnTrack_diskm3->Fill((*clust).sizeX());
01174 meClSizeYOnTrack_diskm3->Fill((*clust).sizeY());
01175 }
01176 }
01177 }
01178
01179 }
01180
01181 }
01182
01183 }
01184
01185
01186 }
01187 }
01188 else {
01189 if(debug_) std::cout << "no pixeltrack:\n";
01190 if(crossesPixVol) meNofTracksInPixVol_->Fill(1,1);
01191 }
01192
01193 }
01194
01195
01196
01197 if(debug_) std::cout << "clusters not on track: (size " << clustColl.size() << ") ";
01198
01199 for(TrackerGeometry::DetContainer::const_iterator it = TG->dets().begin(); it != TG->dets().end(); it++){
01200
01201 DetId detId = (*it)->geographicalId();
01202 if(detId>=302055684 && detId<=352477708){
01203 int nofclOnTrack = 0, nofclOffTrack=0;
01204 uint32_t DBlayer=10, DBdisk=10;
01205 float z=0.;
01206
01207 if(DetId(detId).subdetId() == 1) {
01208 if (!isUpgrade) {
01209 DBlayer = PixelBarrelName(DetId(detId)).layerName();
01210 } else if (isUpgrade) {
01211 DBlayer = PixelBarrelNameUpgrade(DetId(detId)).layerName();
01212 }
01213 }
01214 if(DetId(detId).subdetId() == 2){
01215 if (!isUpgrade) { DBdisk = PixelEndcapName(DetId(detId )).diskName(); }
01216 else if (isUpgrade) { DBdisk = PixelEndcapNameUpgrade(DetId(detId )).diskName(); }
01217 }
01218 edmNew::DetSetVector<SiPixelCluster>::const_iterator isearch = clustColl.find(detId);
01219 if( isearch != clustColl.end() ) {
01220 edmNew::DetSet<SiPixelCluster>::const_iterator di;
01221 for(di=isearch->begin(); di!=isearch->end(); di++){
01222 unsigned int temp = clusterSet.size();
01223 clusterSet.insert(*di);
01224
01225 if(clusterSet.size()>temp) {
01226 otherclusters++;
01227 nofclOffTrack++;
01228
01229
01230 std::map<uint32_t, SiPixelTrackResidualModule*>::iterator pxd = theSiPixelStructure.find((*it)->geographicalId().rawId());
01231
01232 if (pxd!=theSiPixelStructure.end()) (*pxd).second->fill((*di), false, -1., reducedSet, modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn);
01233
01234
01235
01236 meClSizeNotOnTrack_all->Fill((*di).size());
01237 meClSizeXNotOnTrack_all->Fill((*di).sizeX());
01238 meClSizeYNotOnTrack_all->Fill((*di).sizeY());
01239 meClChargeNotOnTrack_all->Fill((*di).charge()/1000);
01240
01242
01243
01244 const TrackerGeometry& theTracker(*theTrackerGeometry);
01245 const PixelGeomDetUnit* theGeomDet = static_cast<const PixelGeomDetUnit*> (theTracker.idToDet(detId) );
01246
01247 if(theGeomDet == 0) {
01248 if(debug_) std::cout << "NO THEGEOMDET\n";
01249 continue;
01250 }
01251 const PixelTopology * topol = &(theGeomDet->specificTopology());
01252
01253
01254 float xcenter = di->x();
01255 float ycenter = di->y();
01256
01257 LocalPoint clustlp = topol->localPosition( MeasurementPoint(xcenter, ycenter) );
01258
01259 GlobalPoint clustgp = theGeomDet->surface().toGlobal( clustlp );
01260
01262
01263 if(DetId(detId).subdetId() == 1) {
01264 meClSizeNotOnTrack_bpix->Fill((*di).size());
01265 meClSizeXNotOnTrack_bpix->Fill((*di).sizeX());
01266 meClSizeYNotOnTrack_bpix->Fill((*di).sizeY());
01267 meClChargeNotOnTrack_bpix->Fill((*di).charge()/1000);
01268 barrelotherclusters++;
01269
01270 float phi = clustgp.phi();
01271
01272 z = clustgp.z();
01273 switch(DBlayer){
01274 case 1: {
01275 meClPosLayer1NotOnTrack->Fill(z,phi);
01276 meClSizeNotOnTrack_layer1->Fill((*di).size());
01277 meClSizeXNotOnTrack_layer1->Fill((*di).sizeX());
01278 meClSizeYNotOnTrack_layer1->Fill((*di).sizeY());
01279 meClChargeNotOnTrack_layer1->Fill((*di).charge()/1000);
01280 break;
01281 }
01282 case 2: {
01283 meClPosLayer2NotOnTrack->Fill(z,phi);
01284 meClSizeNotOnTrack_layer2->Fill((*di).size());
01285 meClSizeXNotOnTrack_layer2->Fill((*di).sizeX());
01286 meClSizeYNotOnTrack_layer2->Fill((*di).sizeY());
01287 meClChargeNotOnTrack_layer2->Fill((*di).charge()/1000);
01288 break;
01289 }
01290 case 3: {
01291 meClPosLayer3NotOnTrack->Fill(z,phi);
01292 meClSizeNotOnTrack_layer3->Fill((*di).size());
01293 meClSizeXNotOnTrack_layer3->Fill((*di).sizeX());
01294 meClSizeYNotOnTrack_layer3->Fill((*di).sizeY());
01295 meClChargeNotOnTrack_layer3->Fill((*di).charge()/1000);
01296 break;
01297 }
01298 case 4: {
01299 if (isUpgrade) {
01300 meClPosLayer4NotOnTrack->Fill(z,phi);
01301 meClSizeNotOnTrack_layer4->Fill((*di).size());
01302 meClSizeXNotOnTrack_layer4->Fill((*di).sizeX());
01303 meClSizeYNotOnTrack_layer4->Fill((*di).sizeY());
01304 meClChargeNotOnTrack_layer4->Fill((*di).charge()/1000);
01305 }
01306 break;
01307 }
01308
01309 }
01310 }
01311
01312 if(DetId(detId).subdetId() == 2) {
01313 meClSizeNotOnTrack_fpix->Fill((*di).size());
01314 meClSizeXNotOnTrack_fpix->Fill((*di).sizeX());
01315 meClSizeYNotOnTrack_fpix->Fill((*di).sizeY());
01316 meClChargeNotOnTrack_fpix->Fill((*di).charge()/1000);
01317 endcapotherclusters++;
01318
01319 float x = clustgp.x();
01320 float y = clustgp.y();
01321 z = clustgp.z();
01322 if(z>0){
01323 if(DBdisk==1) {
01324 meClPosDisk1pzNotOnTrack->Fill(x,y);
01325 meClSizeNotOnTrack_diskp1->Fill((*di).size());
01326 meClSizeXNotOnTrack_diskp1->Fill((*di).sizeX());
01327 meClSizeYNotOnTrack_diskp1->Fill((*di).sizeY());
01328 meClChargeNotOnTrack_diskp1->Fill((*di).charge()/1000);
01329 }
01330 if(DBdisk==2) {
01331 meClPosDisk2pzNotOnTrack->Fill(x,y);
01332 meClSizeNotOnTrack_diskp2->Fill((*di).size());
01333 meClSizeXNotOnTrack_diskp2->Fill((*di).sizeX());
01334 meClSizeYNotOnTrack_diskp2->Fill((*di).sizeY());
01335 meClChargeNotOnTrack_diskp2->Fill((*di).charge()/1000);
01336 }
01337 if(DBdisk==3 && isUpgrade) {
01338 meClPosDisk3pzNotOnTrack->Fill(x,y);
01339 meClSizeNotOnTrack_diskp3->Fill((*di).size());
01340 meClSizeXNotOnTrack_diskp3->Fill((*di).sizeX());
01341 meClSizeYNotOnTrack_diskp3->Fill((*di).sizeY());
01342 meClChargeNotOnTrack_diskp3->Fill((*di).charge()/1000);
01343 }
01344 }
01345 else{
01346 if(DBdisk==1) {
01347 meClPosDisk1mzNotOnTrack->Fill(x,y);
01348 meClSizeNotOnTrack_diskm1->Fill((*di).size());
01349 meClSizeXNotOnTrack_diskm1->Fill((*di).sizeX());
01350 meClSizeYNotOnTrack_diskm1->Fill((*di).sizeY());
01351 meClChargeNotOnTrack_diskm1->Fill((*di).charge()/1000);
01352 }
01353 if(DBdisk==2) {
01354 meClPosDisk2mzNotOnTrack->Fill(x,y);
01355 meClSizeNotOnTrack_diskm2->Fill((*di).size());
01356 meClSizeXNotOnTrack_diskm2->Fill((*di).sizeX());
01357 meClSizeYNotOnTrack_diskm2->Fill((*di).sizeY());
01358 meClChargeNotOnTrack_diskm2->Fill((*di).charge()/1000);
01359 }
01360 if(DBdisk==3 && isUpgrade) {
01361 meClPosDisk3mzNotOnTrack->Fill(x,y);
01362 meClSizeNotOnTrack_diskm3->Fill((*di).size());
01363 meClSizeXNotOnTrack_diskm3->Fill((*di).sizeX());
01364 meClSizeYNotOnTrack_diskm3->Fill((*di).sizeY());
01365 meClChargeNotOnTrack_diskm3->Fill((*di).charge()/1000);
01366 }
01367 }
01368
01369 }
01370 }
01371 else {
01372 nofclOnTrack++;
01373 if(z == 0 && DBdisk != 10){
01374
01375
01376 const TrackerGeometry& theTracker(*theTrackerGeometry);
01377 const PixelGeomDetUnit* theGeomDet = static_cast<const PixelGeomDetUnit*> (theTracker.idToDet(detId) );
01378
01379 if(theGeomDet == 0) {
01380 if(debug_) std::cout << "NO THEGEOMDET\n";
01381 continue;
01382 }
01383 const PixelTopology * topol = &(theGeomDet->specificTopology());
01384
01385 float xcenter = di->x();
01386 float ycenter = di->y();
01387
01388 LocalPoint clustlp = topol->localPosition( MeasurementPoint(xcenter, ycenter) );
01389
01390 GlobalPoint clustgp = theGeomDet->surface().toGlobal( clustlp );
01391 z = clustgp.z();
01392 }
01393 }
01394 }
01395 }
01396
01397 std::map<uint32_t, SiPixelTrackResidualModule*>::iterator pxd = theSiPixelStructure.find((*it)->geographicalId().rawId());
01398 if (pxd!=theSiPixelStructure.end()) (*pxd).second->nfill(nofclOnTrack, nofclOffTrack, reducedSet, modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn);
01399 if(nofclOnTrack!=0) meNClustersOnTrack_all->Fill(nofclOnTrack);
01400 if(nofclOffTrack!=0) meNClustersNotOnTrack_all->Fill(nofclOffTrack);
01401
01402 if(DetId(detId).subdetId() == 1){
01403 if(nofclOnTrack!=0) meNClustersOnTrack_bpix->Fill(nofclOnTrack);
01404 if(nofclOffTrack!=0) meNClustersNotOnTrack_bpix->Fill(nofclOffTrack);
01405
01406 switch(DBlayer){
01407 case 1: {
01408 if(nofclOnTrack!=0) meNClustersOnTrack_layer1->Fill(nofclOnTrack);
01409 if(nofclOffTrack!=0) meNClustersNotOnTrack_layer1->Fill(nofclOffTrack); break;
01410 }
01411 case 2: {
01412 if(nofclOnTrack!=0) meNClustersOnTrack_layer2->Fill(nofclOnTrack);
01413 if(nofclOffTrack!=0) meNClustersNotOnTrack_layer2->Fill(nofclOffTrack); break;
01414 }
01415 case 3: {
01416 if(nofclOnTrack!=0) meNClustersOnTrack_layer3->Fill(nofclOnTrack);
01417 if(nofclOffTrack!=0) meNClustersNotOnTrack_layer3->Fill(nofclOffTrack); break;
01418 }
01419 case 4: {
01420 if(nofclOnTrack!=0 && isUpgrade) meNClustersOnTrack_layer4->Fill(nofclOnTrack);
01421 if(nofclOffTrack!=0 && isUpgrade) meNClustersNotOnTrack_layer4->Fill(nofclOffTrack); break;
01422 }
01423 }
01424 }
01425
01426 if(DetId(detId).subdetId() == 2) {
01427
01428
01429 if(nofclOnTrack!=0) meNClustersOnTrack_fpix->Fill(nofclOnTrack);
01430 if(nofclOffTrack!=0) meNClustersNotOnTrack_fpix->Fill(nofclOffTrack);
01431 if(z>0){
01432 if(DBdisk==1) {
01433 if(nofclOnTrack!=0) meNClustersOnTrack_diskp1->Fill(nofclOnTrack);
01434 if(nofclOffTrack!=0) meNClustersNotOnTrack_diskp1->Fill(nofclOffTrack);
01435 }
01436 if(DBdisk==2) {
01437 if(nofclOnTrack!=0) meNClustersOnTrack_diskp2->Fill(nofclOnTrack);
01438 if(nofclOffTrack!=0) meNClustersNotOnTrack_diskp2->Fill(nofclOffTrack);
01439 }
01440 if(DBdisk==3) {
01441 if(nofclOnTrack!=0 && isUpgrade) meNClustersOnTrack_diskp3->Fill(nofclOnTrack);
01442 if(nofclOffTrack!=0) meNClustersNotOnTrack_diskp3->Fill(nofclOffTrack);
01443 }
01444 }
01445 if(z<0){
01446 if(DBdisk==1) {
01447 if(nofclOnTrack!=0) meNClustersOnTrack_diskm1->Fill(nofclOnTrack);
01448 if(nofclOffTrack!=0) meNClustersNotOnTrack_diskm1->Fill(nofclOffTrack);
01449 }
01450 if(DBdisk==2) {
01451 if(nofclOnTrack!=0) meNClustersOnTrack_diskm2->Fill(nofclOnTrack);
01452 if(nofclOffTrack!=0) meNClustersNotOnTrack_diskm2->Fill(nofclOffTrack);
01453 }
01454 if(DBdisk==3) {
01455 if(nofclOnTrack!=0 && isUpgrade) meNClustersOnTrack_diskm3->Fill(nofclOnTrack);
01456 if(nofclOffTrack!=0 && isUpgrade) meNClustersNotOnTrack_diskm3->Fill(nofclOffTrack);
01457 }
01458 }
01459 }
01460
01461 }
01462 }
01463
01464 if(trackclusters>0) (meNofClustersOnTrack_)->Fill(0,trackclusters);
01465 if(barreltrackclusters>0)(meNofClustersOnTrack_)->Fill(1,barreltrackclusters);
01466 if(endcaptrackclusters>0)(meNofClustersOnTrack_)->Fill(2,endcaptrackclusters);
01467 if(otherclusters>0)(meNofClustersNotOnTrack_)->Fill(0,otherclusters);
01468 if(barrelotherclusters>0)(meNofClustersNotOnTrack_)->Fill(1,barrelotherclusters);
01469 if(endcapotherclusters>0)(meNofClustersNotOnTrack_)->Fill(2,endcapotherclusters);
01470 if(tracks>0)(meNofTracks_)->Fill(0,tracks);
01471 if(pixeltracks>0)(meNofTracks_)->Fill(1,pixeltracks);
01472 if(bpixtracks>0)(meNofTracks_)->Fill(2,bpixtracks);
01473 if(fpixtracks>0)(meNofTracks_)->Fill(3,fpixtracks);
01474 }
01475 void SiPixelTrackResidualSource::triplets(double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3,
01476 double ptsig, double & dca2,double & dz2, double kap) {
01477
01478
01479 using namespace std;
01480
01481
01482
01483
01484 double rho = 1/kap;
01485
01486 double r1 = sqrt( x1*x1 + y1*y1 );
01487 double r3 = sqrt( x3*x3 + y3*y3 );
01488
01489 if( r3-r1 < 2.0 ) cout << "warn r1 = " << r1 << ", r3 = " << r3 << endl;
01490
01491
01492
01493
01494 double L=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
01495
01496
01497 double lam = sqrt(rho*rho - L*L/4);
01498
01499
01500
01501
01502 if( kap > 0 ) lam = -lam;
01503
01504
01505
01506
01507 double x0 = 0.5*( x1 + x3 ) + lam/L * ( -y1 + y3 );
01508 double y0 = 0.5*( y1 + y3 ) + lam/L * ( x1 - x3 );
01509
01510
01511
01512 double num = ( y3 - y0 ) * ( x1 - x0 ) - ( x3 - x0 ) * ( y1 - y0 );
01513 double den = ( x1 - x0 ) * ( x3 - x0 ) + ( y1 - y0 ) * ( y3 - y0 );
01514 double tandip = kap * ( z3 - z1 ) / atan( num / den );
01515
01516
01517
01518
01519 double dphi = atan( ( ( x1 - x0 ) * y0 - ( y1 - y0 ) * x0 )
01520 / ( ( x1 - x0 ) * x0 + ( y1 - y0 ) * y0 ) );
01521
01522
01523 double uz0 = z1 + tandip * dphi * rho;
01524
01526
01528
01529
01530
01531 if(kap>0) dca2=rho-sqrt((x0-x2)*(x0-x2)+(y0-y2)*(y0-y2));
01532 else dca2=rho+sqrt((-x0+x2)*(-x0+x2)+(-y0+y2)*(-y0+y2));
01533
01535
01537 double xx =0 ;
01538 double yy =0 ;
01539
01540
01541
01542 if(kap<0){
01543 xx = x2+(dca2*((x0-x2))/sqrt((x0-x2)*(x0-x2)+(y0-y2)*(y0-y2)));
01544 yy = y2+(dca2*((y0-y2))/sqrt((x0-x2)*(x0-x2)+(y0-y2)*(y0-y2)));
01545 }
01546 else if(kap>=0){
01547 xx = x2-(dca2*((x0-x2))/sqrt((x0-x2)*(x0-x2)+(y0-y2)*(y0-y2)));
01548 yy = y2-(dca2*((y0-y2))/sqrt((x0-x2)*(x0-x2)+(y0-y2)*(y0-y2)));
01549 }
01550
01551
01552
01553 double dphi2 = atan( ( ( xx - x0 ) * y0 - ( yy - y0 ) * x0 )
01554 / ( ( xx - x0 ) * x0 + ( yy - y0 ) * y0 ) );
01555
01556
01557 double uz2= uz0 - dphi2*tandip*rho;
01558
01559
01560 dz2=z2-uz2;
01561
01562
01563
01564
01565
01566 }
01567
01568
01569 DEFINE_FWK_MODULE(SiPixelTrackResidualSource);