Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "DTRunConditionVar.h"
00016
00017 #include "FWCore/Framework/interface/Event.h"
00018 #include "FWCore/Framework/interface/EventSetup.h"
00019 #include "FWCore/ServiceRegistry/interface/Service.h"
00020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00021
00022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00023
00024 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00025
00026 #include "DataFormats/DTRecHit/interface/DTRecSegment4D.h"
00027 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
00028 #include "CondFormats/DataRecord/interface/DTMtimeRcd.h"
00029
00030 #include "DQMServices/Core/interface/DQMStore.h"
00031 #include "DQMServices/Core/interface/MonitorElement.h"
00032
00033 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00034
00035 #include "RecoMuon/Navigation/interface/DirectMuonNavigation.h"
00036
00037 #include "DataFormats/DetId/interface/DetId.h"
00038 #include "TrackingTools/DetLayers/interface/DetLayer.h"
00039 #include "DataFormats/Common/interface/RefToBase.h"
00040
00041 #include <TMath.h>
00042 #include <cmath>
00043
00044 using namespace std;
00045 using namespace edm;
00046
00047 DTRunConditionVar::DTRunConditionVar(const ParameterSet& pSet):
00048
00049 debug(pSet.getUntrackedParameter<bool>("debug",false)),
00050 nMinHitsPhi(pSet.getUntrackedParameter<int>("nMinHitsPhi")),
00051 maxAnglePhiSegm(pSet.getUntrackedParameter<double>("maxAnglePhiSegm")),
00052 thedt4DSegments_(pSet.getParameter<InputTag>("recoSegments"))
00053 {
00054
00055
00056
00057
00058 theDbe = Service<DQMStore>().operator->();
00059
00060 }
00061
00062 DTRunConditionVar::~DTRunConditionVar()
00063 {
00064 LogTrace("DTDQM|DTMonitorModule|DTRunConditionVar")
00065 << "DTRunConditionVar: destructor called";
00066
00067
00068 }
00069
00070
00071
00072 void DTRunConditionVar::beginJob() {
00073
00074 LogTrace("DTDQM|DTMonitorModule|DTRunConditionVar")
00075 << "DTRunConditionVar: beginOfJob";
00076
00077 for(int wheel=-2;wheel<=2;wheel++){
00078 for(int sec=1; sec<=14; sec++) {
00079 for(int stat=1; stat<=4; stat++) {
00080
00081 bookChamberHistos(DTChamberId(wheel,stat,sec),"VDrift_FromSegm",100,0.0043,0.0065);
00082 bookChamberHistos(DTChamberId(wheel,stat,sec),"T0_FromSegm",100,-25.,25.);
00083
00084 }
00085 }
00086 }
00087
00088
00089 return;
00090 }
00091
00092
00093
00094
00095
00096 void DTRunConditionVar::beginRun(const Run& run, const EventSetup& setup)
00097 {
00098
00099 setup.get<MuonGeometryRecord>().get(dtGeom);
00100
00101 return;
00102 }
00103
00104
00105
00106
00107 void DTRunConditionVar::endJob()
00108 {
00109 LogTrace("DTDQM|DTMonitorModule|DTRunConditionVar")
00110 << "DTRunConditionVar: endOfJob";
00111
00112 return;
00113 }
00114
00115
00116
00117 void DTRunConditionVar::analyze(const Event & event,
00118 const EventSetup& eventSetup)
00119 {
00120
00121 LogTrace("DTDQM|DTMonitorModule|DTRunConditionVar") <<
00122 "--- [DTRunConditionVar] Event analysed #Run: " <<
00123 event.id().run() << " #Event: " << event.id().event() << endl;
00124
00125
00126 ESHandle<DTGeometry> dtGeom;
00127 eventSetup.get<MuonGeometryRecord>().get(dtGeom);
00128
00129
00130 eventSetup.get<DTMtimeRcd>().get(mTime);
00131 mTimeMap_ = &*mTime;
00132
00133
00134 Handle<DTRecSegment4DCollection> all4DSegments;
00135 event.getByLabel(thedt4DSegments_, all4DSegments);
00136
00137
00138 for(DTRecSegment4DCollection::const_iterator segment = all4DSegments->begin();
00139 segment != all4DSegments->end(); ++segment){
00140
00141
00142 DTChamberId DTid = (DTChamberId) segment->chamberId();
00143 uint32_t indexCh = DTid.rawId();
00144
00145
00146 if( (*segment).hasPhi() ) {
00147
00148 int nHitsPhi = (*segment).phiSegment()->degreesOfFreedom()+2;
00149 double xdir = (*segment).phiSegment()->localDirection().x();
00150 double zdir = (*segment).phiSegment()->localDirection().z();
00151
00152 double anglePhiSegm = fabs(atan(xdir/zdir))*180./TMath::Pi();
00153
00154 if( nHitsPhi >= nMinHitsPhi && anglePhiSegm <= maxAnglePhiSegm ) {
00155
00156 double segmentVDrift = segment->phiSegment()->vDrift();
00157
00158
00159 DTSuperLayerId indexSLPhi1(DTid,1);
00160 DTSuperLayerId indexSLPhi2(DTid,3);
00161
00162 float vDriftPhi1(0.), vDriftPhi2(0.);
00163 float ResPhi1(0.), ResPhi2(0.);
00164 int status1 = mTimeMap_->get(indexSLPhi1,vDriftPhi1,ResPhi1,DTVelocityUnits::cm_per_ns);
00165 int status2 = mTimeMap_->get(indexSLPhi2,vDriftPhi2,ResPhi2,DTVelocityUnits::cm_per_ns);
00166
00167 if(status1 != 0 || status2 != 0) {
00168 DTSuperLayerId sl = (status1 != 0) ? indexSLPhi1 : indexSLPhi2;
00169 throw cms::Exception("DTRunConditionVarClient") << "Could not find vDrift entry in DB for"
00170 << sl << endl;
00171 }
00172
00173 float vDriftMed = (vDriftPhi1 + vDriftPhi2) / 2.;
00174
00175 segmentVDrift = vDriftMed*(1. - segmentVDrift);
00176
00177 double segmentT0 = segment->phiSegment()->t0();
00178
00179 if( segment->phiSegment()->ist0Valid() ) (chamberHistos[indexCh])["T0_FromSegm"]->Fill(segmentT0);
00180 if( segmentVDrift != vDriftMed ) (chamberHistos[indexCh])["VDrift_FromSegm"]->Fill(segmentVDrift);
00181
00182 }
00183 }
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 }
00195
00196 }
00197
00198
00199
00200
00201 void DTRunConditionVar::bookChamberHistos(const DTChamberId& dtCh, string histoType, int nbins, float min, float max) {
00202
00203 int wh = dtCh.wheel();
00204 int sc = dtCh.sector();
00205 int st = dtCh.station();
00206 stringstream wheel; wheel << wh;
00207 stringstream station; station << st;
00208 stringstream sector; sector << sc;
00209
00210 string bookingFolder = "DT/02-Segments/Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" + station.str();
00211 string histoTag = "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
00212
00213 theDbe->setCurrentFolder(bookingFolder);
00214
00215 LogTrace ("DTDQM|DTMonitorModule|DTRunConditionVar")
00216 << "[DTRunConditionVar]: booking histos in " << bookingFolder << endl;
00217
00218 string histoName = histoType + histoTag;
00219 string histoLabel = histoType;
00220
00221 (chamberHistos[dtCh.rawId()])[histoType] =
00222 theDbe->book1D(histoName,histoLabel,nbins,min,max);
00223
00224 }