00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00020 #include "DQM/SiPixelMonitorClient/interface/SiPixelMuonHLT.h"
00021 #include <string>
00022 #include <stdlib.h>
00023
00024 SiPixelMuonHLT::SiPixelMuonHLT(const edm::ParameterSet& iConfig) :
00025 conf_(iConfig)
00026 {
00027
00028 parameters_ = iConfig;
00029
00030 verbose_ = parameters_.getUntrackedParameter < bool > ("verbose", false);
00031 monitorName_ = parameters_.getUntrackedParameter < std::string > ("monitorName", "HLT/HLTMonMuon");
00032 saveOUTput_ = parameters_.getUntrackedParameter < bool > ("saveOUTput", true);
00033
00034
00035 clusterCollectionTag_ = parameters_.getUntrackedParameter < edm::InputTag > ("clusterCollectionTag", edm::InputTag ("hltSiPixelClusters"));
00036 rechitsCollectionTag_ = parameters_.getUntrackedParameter < edm::InputTag > ("rechitsCollectionTag", edm::InputTag ("hltSiPixelRecHits"));
00037 l3MuonCollectionTag_ = parameters_.getUntrackedParameter < edm::InputTag > ("l3MuonCollectionTag", edm::InputTag ("hltL3MuonCandidates"));
00039
00040 theDMBE = edm::Service<DQMStore>().operator->();
00041 edm::LogInfo ("PixelHLTDQM") << "SiPixelMuonHLT::SiPixelMuonHLT: Got DQM BackEnd interface"<<std::endl;
00042 outputFile_ = parameters_.getUntrackedParameter < std::string > ("outputFile", "");
00043 if (outputFile_.size () != 0)
00044 edm::LogWarning ("HLTMuonDQMSource") << "Muon HLT Monitoring histograms will be saved to " << outputFile_ << std::endl;
00045 else
00046 outputFile_ = "PixelHLTDQM.root";
00048 if (theDMBE != NULL) theDMBE->setCurrentFolder (monitorName_);
00049 SiPixelMuonHLT::Histo_init();
00050
00051 }
00052
00053 SiPixelMuonHLT::~SiPixelMuonHLT()
00054 {
00055
00056
00057 edm::LogInfo ("PixelHLTDQM") << "SiPixelMuonHLT::~SiPixelMuonHLT: Destructor"<<std::endl;
00058
00059 }
00060
00061 void SiPixelMuonHLT::beginJob(){
00062
00063 edm::LogInfo ("PixelHLTDQM") << " SiPixelMuonHLT::beginJob - Initialisation ... " << std::endl;
00064 eventNo = 0;
00065
00066 }
00067
00068
00069 void SiPixelMuonHLT::endJob(void){
00070 if(saveOUTput_){
00071 edm::LogInfo ("PixelHLTDQM") << " SiPixelMuonHLT::endJob - Saving Root File " << std::endl;
00072 theDMBE->save( outputFile_.c_str() );
00073 }
00074 }
00075
00076
00077
00078
00079 void SiPixelMuonHLT::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00080 {
00081 eventNo++;
00082
00083 edm::ESHandle < TrackerGeometry > TG;
00084 iSetup.get < TrackerDigiGeometryRecord > ().get (TG);
00085 const TrackerGeometry *theTrackerGeometry = TG.product ();
00086 const TrackerGeometry & theTracker (*theTrackerGeometry);
00087 edm::Handle < reco::RecoChargedCandidateCollection > l3mucands;
00088 reco::RecoChargedCandidateCollection::const_iterator cand;
00089 edm::Handle <edmNew::DetSetVector<SiPixelCluster> > clusters;
00090 edm::Handle <edmNew::DetSetVector<SiPixelRecHit> > rechits;
00091
00092 bool GotClusters = true;
00093 bool GotRecHits = true;
00094 bool GotL3Muons = true;
00095
00096 iEvent.getByLabel("hltSiPixelClusters", clusters);
00097 if(!clusters.isValid()){
00098 edm::LogInfo("PixelHLTDQM") << "No pix clusters, cannot run for event " << iEvent.eventAuxiliary ().event() <<" run: "<<iEvent.eventAuxiliary ().run() << std::endl;
00099 GotClusters = false;
00100 }
00101 iEvent.getByLabel("hltSiPixelRecHits", rechits);
00102 if(!rechits.isValid()){
00103 edm::LogInfo("PixelHLTDQM") << "No pix rechits, cannot run for event " << iEvent.eventAuxiliary ().event() <<" run: "<<iEvent.eventAuxiliary ().run() << std::endl;
00104 GotRecHits = false;
00105 }
00106 iEvent.getByLabel (l3MuonCollectionTag_, l3mucands);
00107 if(!l3mucands.isValid()){
00108 edm::LogInfo("PixelHLTDQM") << "No L3 Muons, cannot run for event " << iEvent.eventAuxiliary ().event() <<" run: "<<iEvent.eventAuxiliary ().run() << std::endl;
00109 GotL3Muons = false;
00110 }
00111
00112 if (GotClusters){
00113 if(!clusters.failedToGet ())
00114 {
00115 int NBarrel[4] = {0,0,0,0};
00116 int NEndcap[5] = {0,0,0,0,0};
00117 for (size_t i = 0; i < clusters->size(); ++i){
00118 const SiPixelCluster* clust = clusters->data(i);
00119 clust->charge();
00121 uint detID = clusters->id(i);
00122 const PixelGeomDetUnit *PixGeom = dynamic_cast < const PixelGeomDetUnit * >(theTracker.idToDet (detID));
00123 const PixelTopology *topol = dynamic_cast < const PixelTopology * >(&(PixGeom->specificTopology ()));
00124
00125 LocalPoint clustlp = topol->localPosition (MeasurementPoint(clust->x(),clust->y()));
00126 GlobalPoint clustgp = PixGeom->surface ().toGlobal (clustlp);
00127 if(PixGeom->geographicalId().subdetId() == 1){
00128 int clustLay = PXBDetId(detID).layer();
00129
00130 MEContainerAllBarrelEtaPhi[0]->Fill(clustgp.eta(),clustgp.phi());
00131 MEContainerAllBarrelZPhi[0]->Fill(clustgp.z(),clustgp.phi());
00132 MEContainerAllBarrelEtaPhi[clustLay]->Fill(clustgp.eta(),clustgp.phi());
00133 MEContainerAllBarrelZPhi[clustLay]->Fill(clustgp.z(),clustgp.phi());
00134
00135 MEContainerAllBarrelEta[0]->Fill(clustgp.eta());
00136 MEContainerAllBarrelZ[0]->Fill(clustgp.z());
00137 MEContainerAllBarrelEta[clustLay]->Fill(clustgp.eta());
00138 MEContainerAllBarrelZ[clustLay]->Fill(clustgp.z());
00139
00140 MEContainerAllBarrelPhi[0]->Fill(clustgp.phi());
00141 MEContainerAllBarrelPhi[clustLay]->Fill(clustgp.phi());
00142 ++NBarrel[0];
00143 ++NBarrel[clustLay];
00144 }
00146 if(PixGeom->geographicalId().subdetId() == 2){
00147 int clustDisk = PXFDetId(detID).disk();
00148 if( PXFDetId(detID).side() == 2)
00149 clustDisk = clustDisk +2;
00150 MEContainerAllEndcapXY[0]->Fill(clustgp.x(),clustgp.y());
00151 MEContainerAllEndcapXY[clustDisk]->Fill(clustgp.x(),clustgp.y());
00152 MEContainerAllEndcapPhi[0]->Fill(clustgp.phi());
00153 MEContainerAllEndcapPhi[clustDisk]->Fill(clustgp.phi());
00154 ++NEndcap[0];
00155 ++NEndcap[clustDisk];
00156 }
00157
00158 }
00159 MEContainerAllBarrelN[0]->Fill(NBarrel[0]);
00160 for (int lay = 1; lay < 4; ++lay)
00161 MEContainerAllBarrelN[lay]->Fill(NBarrel[lay]);
00162 MEContainerAllEndcapN[0]->Fill(NEndcap[0]);
00163 for (int disk = 1; disk < 5; ++disk)
00164 MEContainerAllEndcapN[disk]->Fill(NEndcap[disk]);
00165 }
00166 }
00167 bool doRecHits = false;
00168
00169 if (GotRecHits && doRecHits){
00170 if(!rechits.failedToGet ())
00171 {
00172 for (size_t i = 0; i < rechits->size(); ++i){
00173 const SiPixelRecHit* myhit = rechits->data(i);
00174 uint detID = rechits->id(i);
00175 const PixelGeomDetUnit *PixGeom = dynamic_cast < const PixelGeomDetUnit * >(theTracker.idToDet (detID));
00176
00177
00178
00179
00180 if(PixGeom->geographicalId().subdetId() == 1 && myhit->hasPositionAndError()){
00181 GlobalPoint hitgp = PixGeom->surface ().toGlobal (myhit->localPosition());
00182 edm::LogInfo("PixelHLTDQM") << " (From SiPixelRecHit) Hit Eta: " << hitgp.eta() << " Hit Phi: " << hitgp.phi() << std::endl;
00183 }
00184 }
00185 }
00186 }
00187 if(GotL3Muons){
00188 if(!l3mucands.failedToGet ())
00189 {
00190 int NBarrel[4] = {0,0,0,0};
00191 int NEndcap[5] = {0,0,0,0,0};
00192 for (cand = l3mucands->begin (); cand != l3mucands->end (); ++cand){
00193 reco::TrackRef l3tk = cand->get < reco::TrackRef > ();
00194 for (size_t hit = 0; hit < l3tk->recHitsSize (); hit++){
00195 if (l3tk->recHit (hit)->isValid () == true && l3tk->recHit (hit)->geographicalId ().det () == DetId::Tracker){
00196 int detID = l3tk->recHit(hit)->geographicalId().rawId();
00197
00198 bool IdMatch = typeid(*(l3tk->recHit(hit))) == typeid(SiPixelRecHit);
00199 if (IdMatch){
00200 const SiPixelRecHit *pixhit = dynamic_cast < const SiPixelRecHit * >(l3tk->recHit(hit).get());
00201 if((*pixhit).isValid() == true){
00202 edm::Ref<edmNew::DetSetVector<SiPixelCluster>, SiPixelCluster> const& pixclust = (*pixhit).cluster();
00203 if (!(*pixhit).cluster().isAvailable())
00204 {continue;}
00205 const PixelGeomDetUnit *PixGeom = dynamic_cast < const PixelGeomDetUnit * >(theTracker.idToDet (detID));
00206 const PixelTopology *topol = dynamic_cast < const PixelTopology * >(&(PixGeom->specificTopology ()));
00207 LocalPoint clustlp = topol->localPosition (MeasurementPoint(pixclust->x(),pixclust->y()));
00208 GlobalPoint clustgp = PixGeom->surface ().toGlobal (clustlp);
00209 if(l3tk->recHit(hit)->geographicalId().subdetId() == 1){
00210
00211 int clustLay = PXBDetId(detID).layer();
00212 MEContainerOnTrackBarrelEtaPhi[0]->Fill(clustgp.eta(),clustgp.phi());
00213 MEContainerOnTrackBarrelZPhi[0]->Fill(clustgp.z(),clustgp.phi());
00214 MEContainerOnTrackBarrelEtaPhi[clustLay]->Fill(clustgp.eta(),clustgp.phi());
00215 MEContainerOnTrackBarrelZPhi[clustLay]->Fill(clustgp.z(),clustgp.phi());
00216 MEContainerOnTrackBarrelEta[0]->Fill(clustgp.eta());
00217 MEContainerOnTrackBarrelZ[0]->Fill(clustgp.z());
00218 MEContainerOnTrackBarrelEta[clustLay]->Fill(clustgp.eta());
00219 MEContainerOnTrackBarrelZ[clustLay]->Fill(clustgp.z());
00220 MEContainerOnTrackBarrelPhi[0]->Fill(clustgp.phi());
00221 MEContainerOnTrackBarrelPhi[clustLay]->Fill(clustgp.phi());
00222 ++NBarrel[0];
00223 ++NBarrel[clustLay];
00224 }
00225 if(l3tk->recHit(hit)->geographicalId().subdetId() == 2){
00226 int clustDisk = PXFDetId(detID).disk();
00227 if( PXFDetId(detID).disk() == 2)
00228 clustDisk = clustDisk +2;
00229 MEContainerOnTrackEndcapXY[0]->Fill(clustgp.x(),clustgp.y());
00230 MEContainerOnTrackEndcapXY[clustDisk]->Fill(clustgp.x(),clustgp.y());
00231 MEContainerOnTrackEndcapPhi[0]->Fill(clustgp.phi());
00232 MEContainerOnTrackEndcapPhi[clustDisk]->Fill(clustgp.phi());
00233 ++NEndcap[0];
00234 ++NEndcap[clustDisk];
00235 }
00236 }
00237 }
00238 }
00239 }
00240 }
00241 MEContainerOnTrackBarrelN[0]->Fill(NBarrel[0]);
00242 for (int lay = 1; lay < 4; ++lay)
00243 MEContainerOnTrackBarrelN[lay]->Fill(NBarrel[lay]);
00244 MEContainerOnTrackEndcapN[0]->Fill(NEndcap[0]);
00245 for (int disk = 1; disk < 5; ++disk)
00246 MEContainerOnTrackEndcapN[disk]->Fill(NEndcap[disk]);
00247
00248 }
00249 }
00250 }
00251
00252 void SiPixelMuonHLT::Histo_init()
00253 {
00254 monitorName_ = monitorName_+"/SiPixel";
00255 int NBinsEta = 100;
00256 int NBinsPhi = 80;
00257 float EtaMax = 3.0;
00258 float ZMax = 28.0;
00259 int NBinsZ = 112;
00260 float PhiMax = 3.142;
00261 int NBinsN = 800;
00262 float NMax = 800.;
00263 int NBinsX = 100;
00264 int NBinsY = 100;
00265 float XMax = 20.;
00266 float YMax = 20.;
00267 std::string histoname;
00268 std::string title;
00269
00270 theDMBE->setCurrentFolder (monitorName_ + "/Barrel");
00271 std::string layerLabel[4] = {"All_Layers", "Layer1", "Layer2", "Layer3"};
00272 for (unsigned int i = 0; i < 4; i++)
00273 {
00276
00277 histoname = "EtaPhiAllBarrelMap_" + layerLabel[i];
00278 title = "#eta-#phi Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00279 MEContainerAllBarrelEtaPhi[i] = theDMBE->book2D (histoname, title, NBinsEta, -EtaMax, EtaMax, NBinsPhi, -PhiMax, PhiMax);
00280
00281 histoname = "ZPhiAllBarrelMap_" + layerLabel[i];
00282 title = "Z-#phi Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00283 MEContainerAllBarrelZPhi[i] = theDMBE->book2D (histoname, title, NBinsZ, -ZMax, ZMax, NBinsPhi, -PhiMax, PhiMax);
00284
00285 histoname = "EtaAllBarrelMap_" + layerLabel[i];
00286 title = "#eta Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00287 MEContainerAllBarrelEta[i] = theDMBE->book1D (histoname, title, NBinsEta, -EtaMax, EtaMax);
00288
00289 histoname = "ZAllBarrelMap_" + layerLabel[i];
00290 title = "Z Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00291 MEContainerAllBarrelZ[i] = theDMBE->book1D (histoname, title, NBinsZ, -ZMax, ZMax);
00292
00293 histoname = "PhiAllBarrelMap_" + layerLabel[i];
00294 title = "#phi Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00295 MEContainerAllBarrelPhi[i] = theDMBE->book1D (histoname, title, NBinsPhi, -PhiMax, PhiMax);
00296
00297 histoname = "NAllBarrelMap_" + layerLabel[i];
00298 title = "#phi Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00299 MEContainerAllBarrelN[i] = theDMBE->book1D (histoname, title, NBinsN, 0, NMax);
00302
00303 histoname = "EtaPhiOnTrackBarrelMap_" + layerLabel[i];
00304 title = "#eta-#phi On Track Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00305 MEContainerOnTrackBarrelEtaPhi[i] = theDMBE->book2D (histoname, title, NBinsEta, -EtaMax, EtaMax, NBinsPhi, -PhiMax, PhiMax);
00306
00307 histoname = "ZPhiOnTrackBarrelMap_" + layerLabel[i];
00308 title = "Z-#phi On Track Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00309 MEContainerOnTrackBarrelZPhi[i] = theDMBE->book2D (histoname, title, NBinsZ, -ZMax, ZMax, NBinsPhi, -PhiMax, PhiMax);
00310
00311 histoname = "EtaOnTrackBarrelMap_" + layerLabel[i];
00312 title = "#eta On Track Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00313 MEContainerOnTrackBarrelEta[i] = theDMBE->book1D (histoname, title, NBinsEta, -EtaMax, EtaMax);
00314
00315 histoname = "ZOnTrackBarrelMap_" + layerLabel[i];
00316 title = "Z On Track Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00317 MEContainerOnTrackBarrelZ[i] = theDMBE->book1D (histoname, title, NBinsZ, -ZMax, ZMax);
00318
00319 histoname = "PhiOnTrackBarrelMap_" + layerLabel[i];
00320 title = "#phi On Track Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00321 MEContainerOnTrackBarrelPhi[i] = theDMBE->book1D (histoname, title, NBinsPhi, -PhiMax, PhiMax);
00322
00323 histoname = "NOnTrackBarrelMap_" + layerLabel[i];
00324 title = "N_{Clusters} On Track Pixel Barrel Cluster Occupancy Map for " + layerLabel[i];
00325 MEContainerOnTrackBarrelN[i] = theDMBE->book1D (histoname, title, NBinsN, 0, NMax);
00326 }
00327
00328 theDMBE->setCurrentFolder (monitorName_ + "/EndCap");
00329 std::string diskLabel[5] = {"All_Disks", "InnerPosZ", "OuterPosZ", "InnerNegZ", "OuterNegZ"};
00330 for (int i = 0;i < 5; ++i)
00331 {
00334
00335 histoname = "XYAllEndcapMap_" + diskLabel[i];
00336 title = "X-Y Pixel Endcap Cluster Occupancy Map for " + diskLabel[i];
00337 MEContainerAllEndcapXY[i] = theDMBE->book2D (histoname, title, NBinsX, -XMax, XMax, NBinsY, -YMax, YMax);
00338
00339 histoname = "PhiAllEndcapMap_" + diskLabel[i];
00340 title = "#phi Pixel Endcap Cluster Occupancy Map for " + diskLabel[i];
00341 MEContainerAllEndcapPhi[i] = theDMBE->book1D (histoname, title, NBinsPhi, -PhiMax, PhiMax);
00342
00343 histoname = "NAllEndcapMap_" + diskLabel[i];
00344 title = "#phi Pixel Endcap Cluster Occupancy Map for " + diskLabel[i];
00345 MEContainerAllEndcapN[i] = theDMBE->book1D (histoname, title, NBinsN, 0, NMax);
00348
00349 histoname = "XYOnTrackEndcapMap_" + diskLabel[i];
00350 title = "X-Y Pixel Endcap On Track Cluster Occupancy Map for " + diskLabel[i];
00351 MEContainerOnTrackEndcapXY[i] = theDMBE->book2D (histoname, title, NBinsX, -XMax, XMax, NBinsY, -YMax, YMax);
00352
00353 histoname = "PhiOnTrackEndcapMap_" + diskLabel[i];
00354 title = "#phi Pixel Endcap On Track Cluster Occupancy Map for " + diskLabel[i];
00355 MEContainerOnTrackEndcapPhi[i] = theDMBE->book1D (histoname, title, NBinsPhi, -PhiMax, PhiMax);
00356
00357 histoname = "NOnTrackEndcapMap_" + diskLabel[i];
00358 title = "#phi Pixel Endcap On Track Cluster Occupancy Map for " + diskLabel[i];
00359 MEContainerOnTrackEndcapN[i] = theDMBE->book1D (histoname, title, NBinsN, 0, NMax);
00360 }
00361 return;
00362 }
00363
00364
00365 DEFINE_FWK_MODULE(SiPixelMuonHLT);