CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
AlCaHOCalibProducer Class Reference

#include <Calibration/AlCaHOCalibProducer/src/AlCaHOCalibProducer.cc>

Inheritance diagram for AlCaHOCalibProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef Basic3DVector< float > DirectionType
 
typedef Basic3DVector< float > PositionType
 
typedef Basic3DVector< float > RotationType
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 AlCaHOCalibProducer (const edm::ParameterSet &)
 
 ~AlCaHOCalibProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Types

typedef math::Error< 5 >::type CovarianceMatrix
 

Private Member Functions

virtual void beginJob () override
 
virtual void beginRun (edm::Run const &, edm::EventSetup const &) override
 
virtual void endJob () override
 
void fillHOStore (const reco::TrackRef &ncosm, HOCalibVariables &tmpHOCalib, std::auto_ptr< HOCalibVariableCollection > &hostore, int Noccu_old, int indx, edm::Handle< reco::TrackCollection > cosmicmuon, edm::View< reco::Muon >::const_iterator muon1, const edm::Event &iEvent, const edm::EventSetup &iSetup)
 
void findHOEtaPhi (int iphsect, int &ietaho, int &iphiho)
 
FreeTrajectoryState getFreeTrajectoryState (const reco::Track &tk, const MagneticField *field, int itag, bool dir)
 
virtual void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::map< std::string, bool > fired
 
edm::ESHandle
< HcalSeverityLevelComputer
hcalSevLvlComputerHndl
 
TH2F * ho_occupency [5]
 
int iring
 
float localxhor0
 
float localxhor1
 
float localyhor0
 
float localyhor1
 
bool m_cosmic
 
int m_endTS
 
bool m_hbinfo
 
bool m_occupancy
 
double m_sigma
 
int m_startTS
 
edm::InputTag muonTags_
 
const int ncidmx = 5
 
const int netabin = 16
 
const int netamx = 32
 
int Nevents
 
int Noccu
 
const int nphimx = 72
 
int nRuns
 
unsigned int Ntp
 
const double rHOL0 = 382.0
 
const double rHOL1 = 407.0
 
const HcalChannelQualitytheHcalChStatus
 
edm::EDGetTokenT
< HBHERecHitCollection
tok_hbhe_
 
edm::EDGetTokenT
< HORecHitCollection
tok_ho_
 
edm::EDGetTokenT
< LumiScalersCollection
tok_lumi_
 
edm::EDGetTokenT< edm::View
< reco::Muon > > 
tok_muons_
 
edm::EDGetTokenT
< reco::TrackCollection
tok_muonsCosmic_
 
edm::EDGetTokenT
< CaloTowerCollection
tok_tower_
 
edm::EDGetTokenT
< reco::VertexCollection
tok_vertex_
 
float xhor0
 
float xhor1
 
float yhor0
 
float yhor1
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

change magnetic field inside ../data/HOCosmicCalib_RecoLocalMuon.cff ../data/HOCosmicCalib_RecoLocalTracker.cff

Description: <one line="" class="" summary>="">

Implementation: <Notes on="" implementation>=""> Missing towers : eta=5, phi=18-19 : eta = -5, phi =11-14

HO tile sizes Ring +-2 : width Tray 6:404.6, 5&4:347.6, 3:352.6, 2:364.6, 1:315.6 (phi ordering is opposite) lenght Tile 1:420.1, 2:545.1, 3:583.3, 4:626.0, 5:335.5

    (five tiles, 1 is close to Ring 1 and 5 is towardslc endcap)

Ring +-1 : width Tray 6:404.6, 5&4:347.6, 3:352.6, 2:364.6, 1:315.6 (same as Ring+-2) lenght Tile 1:391.5, 2:394.2, 3:411.0, 4:430.9, 5:454.0, 6:426.0 (1: near R0 and 6 near R2)

Ring 0 L1 : Width Tray (6:290.6, 5&4:345.6, 3:350.6, 2:362.6, 1:298.6 lenght 1:351.2, 2:353.8, 3:359.2, 4:189.1 (4 is towards Ring1)

Ring 0 L0 : Width Tray 6:266.6, 5&4:325.6, 3:330.6, 2:341.6, 1:272.6 length 1:331.5, 2:334.0, 3:339.0, 4:248.8 (4 is towards Ring1)

Definition at line 154 of file AlCaHOCalibProducer.cc.

Member Typedef Documentation

Definition at line 219 of file AlCaHOCalibProducer.cc.

Definition at line 160 of file AlCaHOCalibProducer.cc.

Definition at line 159 of file AlCaHOCalibProducer.cc.

Definition at line 161 of file AlCaHOCalibProducer.cc.

Constructor & Destructor Documentation

AlCaHOCalibProducer::AlCaHOCalibProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 247 of file AlCaHOCalibProducer.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), ho_occupency, m_cosmic, m_hbinfo, m_occupancy, m_sigma, TFileService::make(), muonTags_, netamx, nphimx, indexGen::title, tok_hbhe_, tok_ho_, tok_lumi_, tok_muons_, tok_muonsCosmic_, tok_tower_, and tok_vertex_.

247  {
248  //register your products
249 
250  m_hbinfo = iConfig.getUntrackedParameter<bool>("hbinfo", false);
251  m_sigma = iConfig.getUntrackedParameter<double>("sigma", 0.05);
252  m_occupancy = iConfig.getUntrackedParameter<bool>("plotOccupancy", false);
253  m_cosmic = iConfig.getUntrackedParameter<bool>("CosmicData", false);
254 
255  // keep InputTag muonTags_ since it is used below. - cowden
256  muonTags_ = iConfig.getUntrackedParameter<edm::InputTag>("muons");
257  tok_muonsCosmic_ = consumes<reco::TrackCollection>(muonTags_);
258  tok_muons_ = consumes<edm::View<reco::Muon> >(muonTags_);
259  tok_vertex_ = consumes<reco::VertexCollection >(iConfig.getParameter<edm::InputTag>("vertexTags"));
260  // tok_lumi_ = consumes<LumiDetails ,edm::InLumi>(iConfig.getParameter<edm::InputTag>("lumiTags"));
261  tok_lumi_ = consumes<LumiScalersCollection>(iConfig.getParameter<edm::InputTag>("lumiTags"));
262  tok_ho_ = consumes<HORecHitCollection>(iConfig.getParameter<edm::InputTag>("hoInput"));
263  tok_hbhe_ = consumes<HBHERecHitCollection>(iConfig.getParameter<edm::InputTag>("hbheInput"));
264  tok_tower_ = consumes<CaloTowerCollection>(iConfig.getParameter<edm::InputTag>("towerInput"));
265 
266  produces<HOCalibVariableCollection>("HOCalibVariableCollection").setBranchAlias("HOCalibVariableCollection");
267 
268  if (m_occupancy) {
270 
271  char title[200];
272 
273  for (int ij=0; ij<5; ij++) {
274  sprintf(title, "ho_occupency (>%i #sigma)", ij+2);
275  ho_occupency[ij] = fs->make<TH2F>(title, title, netamx+1, -netamx-0.5, netamx/2+0.5, nphimx, 0.5, nphimx+0.5);
276  }
277  }
278 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< CaloTowerCollection > tok_tower_
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
edm::EDGetTokenT< reco::TrackCollection > tok_muonsCosmic_
edm::EDGetTokenT< LumiScalersCollection > tok_lumi_
edm::EDGetTokenT< reco::VertexCollection > tok_vertex_
edm::EDGetTokenT< edm::View< reco::Muon > > tok_muons_
edm::EDGetTokenT< HORecHitCollection > tok_ho_
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
AlCaHOCalibProducer::~AlCaHOCalibProducer ( )

Definition at line 281 of file AlCaHOCalibProducer.cc.

282 {
283 
284  // do anything here that needs to be done at desctruction time
285  // (e.g. close files, deallocate resources etc.)
286 }

Member Function Documentation

void AlCaHOCalibProducer::beginJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDProducer.

Definition at line 368 of file AlCaHOCalibProducer.cc.

References Nevents, Noccu, and nRuns.

369 {
370  Nevents = 0;
371  nRuns = 0;
372  Noccu = 0;
373 }
void AlCaHOCalibProducer::beginRun ( edm::Run const &  run,
edm::EventSetup const &  es 
)
overrideprivatevirtual

Reimplemented from edm::EDProducer.

Definition at line 390 of file AlCaHOCalibProducer.cc.

References edm::EventSetup::get(), edm::ESHandle< class >::product(), and theHcalChStatus.

391  {
392 
393  // HCAL channel status map ****************************************
394  edm::ESHandle<HcalChannelQuality> hcalChStatus;
395  es.get<HcalChannelQualityRcd>().get("withTopo", hcalChStatus );
396  theHcalChStatus = hcalChStatus.product();
397 }
const HcalChannelQuality * theHcalChStatus
T const * product() const
Definition: ESHandle.h:86
void AlCaHOCalibProducer::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDProducer.

Definition at line 376 of file AlCaHOCalibProducer.cc.

References ho_occupency, m_occupancy, bookConverter::max, Nevents, and Noccu.

376  {
377  if (m_occupancy) {
378  for (int ij=0; ij<5; ij++) {
379  ho_occupency[ij]->Scale(1./std::max(1,Noccu));
380  }
381  }
382  edm::LogInfo("HOCalib") <<" AlCaHOCalibProducer processed event "<< Nevents;
383 }
void AlCaHOCalibProducer::fillHOStore ( const reco::TrackRef ncosm,
HOCalibVariables tmpHOCalib,
std::auto_ptr< HOCalibVariableCollection > &  hostore,
int  Noccu_old,
int  indx,
edm::Handle< reco::TrackCollection cosmicmuon,
edm::View< reco::Muon >::const_iterator  muon1,
const edm::Event iEvent,
const edm::EventSetup iSetup 
)
private

Definition at line 400 of file AlCaHOCalibProducer.cc.

References funct::abs(), angle(), anyDirection, SteppingHelixPropagator::applyRadX0Correction(), HOCalibVariables::caloen, RecoTauCleanerPlugins::charge, HOCalibVariables::chisq, funct::cos(), Vector3DBase< T, FrameTag >::cross(), dot(), HOCalibVariables::ecal03, CaloRecHit::energy(), findHOEtaPhi(), edm::EventSetup::get(), edm::Event::getByToken(), CaloSubdetectorGeometry::getClosestCell(), getFreeTrajectoryState(), HcalSeverityLevelComputer::getSeverityLevel(), CaloGeometry::getSubdetectorGeometry(), HcalChannelStatus::getValue(), HcalCondObjectContainer< Item >::getValues(), reco::MuonEnergy::had, reco::MuonIsolation::hadEt, HOCalibVariables::hbhesig, DetId::Hcal, HOCalibVariables::hcal03, HcalOuter, hcalSevLvlComputerHndl, ho_occupency, HOCalibVariables::hoang, HOCalibVariables::hocorsig, HOCalibVariables::hocro, HOCalibVariables::hodx, HOCalibVariables::hody, HOCalibVariables::hoflag, HOCalibVariables::hosig, HOCalibVariables::htime, HORecHit::id(), HcalDetId::ieta(), HcalDetId::iphi(), iring, HOCalibVariables::isect, HOCalibVariables::isect2, SteppingHelixStateInfo::isValid(), localxhor0, localxhor1, localyhor0, localyhor1, m_cosmic, m_hbinfo, m_occupancy, m_sigma, HOCalibVariables::momatho, SteppingHelixStateInfo::momentum(), HOCalibVariables::ndof, netabin, HOCalibVariables::nmuon, Noccu, nphimx, HOCalibVariables::pherr, Basic3DVector< T >::phi(), pi, PlaneBuilder::plane(), SteppingHelixStateInfo::position(), edm::ESHandle< class >::product(), SteppingHelixPropagator::propagate(), rHOL0, rHOL1, makeMuonMisalignmentScenario::rot, SteppingHelixPropagator::setMaterialMode(), funct::sin(), mathSSE::sqrt(), reco::MuonIsolation::sumPt, theHcalChStatus, HOCalibVariables::therr, Basic3DVector< T >::theta(), HOCalibVariables::tkpt03, tok_hbhe_, tok_ho_, tok_tower_, HOCalibVariables::trkdr, HOCalibVariables::trkdz, HOCalibVariables::trkmm, HOCalibVariables::trkph, HOCalibVariables::trkth, HOCalibVariables::trkvx, HOCalibVariables::trkvy, HOCalibVariables::trkvz, PV3DBase< T, PVType, FrameType >::x(), xhor0, xhor1, PV3DBase< T, PVType, FrameType >::y(), yhor0, yhor1, and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

407  {
408 
410  iSetup.get<CaloGeometryRecord>().get(pG);
411  const CaloGeometry* geo = pG.product();
412  const CaloSubdetectorGeometry* gHO =
414 
415  // Get Hcal Severity Level Computer, so that the severity of each rechit flag/status may be determined
416  // edm::ESHandle<HcalSeverityLevelComputer> hcalSevLvlComputerHndl;
418  const HcalSeverityLevelComputer* hcalSevLvlComputer = hcalSevLvlComputerHndl.product();
419 
420  int charge = ncosm->charge();
421 
422  double innerr = (*ncosm).innerPosition().Perp2();
423  double outerr = (*ncosm).outerPosition().Perp2();
424  int iiner = (innerr <outerr) ? 1 : 0;
425 
426  //---------------------------------------------------
427  // in_to_out Dir in_to_out Dir
428  // StandAlone ^ ^ Cosmic ^ |
429  // | | | v
430  //---------------------------------------------------Y=0
431  // StandAlone | | Cosmic ^ |
432  // v v | v
433  //----------------------------------------------------
434 
435  double posx, posy, posz;
436  double momx, momy, momz;
437 
438  if (iiner==1) {
439  posx = (*ncosm).innerPosition().X();
440  posy = (*ncosm).innerPosition().Y();
441  posz = (*ncosm).innerPosition().Z();
442 
443  momx = (*ncosm).innerMomentum().X();
444  momy = (*ncosm).innerMomentum().Y();
445  momz = (*ncosm).innerMomentum().Z();
446 
447  } else {
448  posx = (*ncosm).outerPosition().X();
449  posy = (*ncosm).outerPosition().Y();
450  posz = (*ncosm).outerPosition().Z();
451 
452  momx = (*ncosm).outerMomentum().X();
453  momy = (*ncosm).outerMomentum().Y();
454  momz = (*ncosm).outerMomentum().Z();
455  }
456 
457 
458  PositionType trkpos(posx, posy, posz);
459 
460  CLHEP::Hep3Vector tmpmuon3v(posx, posy, posz);
461  CLHEP::Hep3Vector tmpmuondir(momx, momy, momz);
462 
463  bool samedir = (tmpmuon3v.dot(tmpmuondir) >0) ? true : false;
464  for (int ij=0; ij<3; ij++) {tmpHOCalib.caloen[ij] = 0.0;}
465  int inearbymuon = 0;
466  localxhor0 = localyhor0 = 20000; //GM for 22OCT07 data
467 
468  if (m_cosmic) {
469  int ind(0);
470  for(reco::TrackCollection::const_iterator ncosmcor=cosmicmuon->begin();
471  ncosmcor != cosmicmuon->end(); ++ncosmcor,++ind) {
472  if (indx==ind) continue;
473  CLHEP::Hep3Vector tmpmuon3vcor;
474  CLHEP::Hep3Vector tmpmom3v;
475  if (iiner==1) {
476  tmpmuon3vcor = CLHEP::Hep3Vector((*ncosmcor).innerPosition().X(),(*ncosmcor).innerPosition().Y(),(*ncosmcor).innerPosition().Z());
477  tmpmom3v = CLHEP::Hep3Vector((*ncosmcor).innerMomentum().X(),(*ncosmcor).innerMomentum().Y(),(*ncosmcor).innerMomentum().Z());
478  } else {
479  tmpmuon3vcor = CLHEP::Hep3Vector((*ncosmcor).outerPosition().X(),(*ncosmcor).outerPosition().Y(),(*ncosmcor).outerPosition().Z());
480  tmpmom3v = CLHEP::Hep3Vector((*ncosmcor).outerMomentum().X(),(*ncosmcor).outerMomentum().Y(),(*ncosmcor).outerMomentum().Z());
481 
482  }
483 
484  if (tmpmom3v.mag()<0.2 || (*ncosmcor).ndof()<5) continue;
485 
486  double angle = tmpmuon3v.angle(tmpmuon3vcor);
487  if (angle < 7.5*CLHEP::deg) {inearbymuon=1;} // break;}
488 
489  // if (muonTagsi_.label() =="cosmicMuons") {
490  if (angle <7.5*CLHEP::deg) { tmpHOCalib.caloen[0] +=1.;}
491  if (angle <15.0*CLHEP::deg) { tmpHOCalib.caloen[1] +=1.;}
492  if (angle <35.0*CLHEP::deg) { tmpHOCalib.caloen[2] +=1.;}
493  }
494  } else {
495  // if (muonTags_.label() =="muons") {
497  iEvent.getByToken(tok_tower_, calotower);
498 
499  for (CaloTowerCollection::const_iterator calt = calotower->begin();
500  calt !=calotower->end(); calt++) {
501  //CMSSW_2_1_x const math::XYZVector towermom = (*calt).momentum();
502  double ith = (*calt).momentum().theta();
503  double iph = (*calt).momentum().phi();
504 
505  CLHEP::Hep3Vector calo3v(sin(ith)*cos(iph), sin(ith)*sin(iph), cos(ith));
506 
507  double angle = tmpmuon3v.angle(calo3v);
508 
509  if (angle < 7.5*CLHEP::deg) {tmpHOCalib.caloen[0] += calt->emEnergy()+calt->hadEnergy();}
510  if (angle < 15*CLHEP::deg) {tmpHOCalib.caloen[1] += calt->emEnergy()+calt->hadEnergy();}
511  if (angle < 35*CLHEP::deg) {tmpHOCalib.caloen[2] += calt->emEnergy()+calt->hadEnergy();}
512  }
513  }
514  if ((m_cosmic) || (tmpHOCalib.caloen[0] <=10.0)) {
515 
516  GlobalPoint glbpt(posx, posy, posz);
517 
518  double mom = sqrt(momx*momx + momy*momy +momz*momz);
519 
520  momx /= mom;
521  momy /= mom;
522  momz /= mom;
523 
524  DirectionType trkdir(momx, momy, momz);
525 
526  tmpHOCalib.trkdr = (*ncosm).d0();
527  tmpHOCalib.trkdz = (*ncosm).dz();
528  tmpHOCalib.nmuon = (m_cosmic) ? cosmicmuon->size() : 1;
529  tmpHOCalib.trkvx = glbpt.x();
530  tmpHOCalib.trkvy = glbpt.y();
531  tmpHOCalib.trkvz = glbpt.z();
532  tmpHOCalib.trkmm = mom*charge;
533  tmpHOCalib.trkth = trkdir.theta();
534  tmpHOCalib.trkph = trkdir.phi();
535  tmpHOCalib.isect2 = -2;
536  tmpHOCalib.isect = -2;
537  tmpHOCalib.hodx = -100;
538  tmpHOCalib.hody = -100;
539  tmpHOCalib.hoang = -2.0;
540  tmpHOCalib.momatho = -2;
541  tmpHOCalib.ndof = (inearbymuon ==0) ? (int)(*ncosm).ndof() : -(int)(*ncosm).ndof();
542  tmpHOCalib.chisq = (*ncosm).normalizedChi2(); // max(1.,tmpHOCalib.ndof);
543  if (!m_cosmic) {
544  reco::MuonEnergy muonenr = muon1->calEnergy();
545  reco::MuonIsolation iso03 = muon1->isolationR03();
546  reco::MuonIsolation iso05 = muon1->isolationR05();
547 
548  tmpHOCalib.tkpt03 = iso03.sumPt;
549  tmpHOCalib.ecal03 = iso05.sumPt; // iso03.emEt+muonenr.em;
550  tmpHOCalib.hcal03 = iso03.hadEt+muonenr.had;
551  }
552  tmpHOCalib.therr = 0.;
553  tmpHOCalib.pherr = 0.;
554  if (iiner==1) {
555  reco::TrackBase::CovarianceMatrix innercov = (*ncosm).innerStateCovariance();
556  tmpHOCalib.therr = innercov(1,1); //thetaError();
557  tmpHOCalib.pherr = innercov(2,2); //phi0Error();
558  } else {
559  reco::TrackBase::CovarianceMatrix outercov = (*ncosm).outerStateCovariance();
560  tmpHOCalib.therr = outercov(1,1); //thetaError();
561  tmpHOCalib.pherr = outercov(2,2); //phi0Error();
562  }
563  edm::ESHandle<MagneticField> theMagField;
564  iSetup.get<IdealMagneticFieldRecord>().get(theMagField );
565 
566  SteppingHelixPropagator myHelix(&*theMagField,anyDirection);
567  myHelix.setMaterialMode(false);
568  myHelix.applyRadX0Correction(true);
569  double phiho = trkpos.phi();
570  if (phiho<0) phiho +=CLHEP::twopi;
571 
572  int iphisect_dt=int(6*(phiho+10.0*CLHEP::deg)/CLHEP::pi); //for u 18/12/06
573  if (iphisect_dt>=12) iphisect_dt=0;
574 
575  int iphisect = -1;
576  bool ipath = false;
577  for (int kl = 0; kl<=2; kl++) {
578 
579  int iphisecttmp = (kl<2) ? iphisect_dt + kl : iphisect_dt - 1;
580  if (iphisecttmp <0) iphisecttmp = 11;
581  if (iphisecttmp >=12) iphisecttmp = 0;
582 
583  double phipos = iphisecttmp*CLHEP::pi/6.;
584  double phirot = phipos;
585 
586  GlobalVector xLocal(-sin(phirot), cos(phirot), 0.);
587  GlobalVector yLocal(0., 0., 1.);
588  GlobalVector zLocal = xLocal.cross(yLocal).unit();
589  // GlobalVector zLocal(cos(phirot), sin(phirot), 0.0);
590 
591 
592  FreeTrajectoryState freetrajectorystate_ = getFreeTrajectoryState(*ncosm,&(*theMagField), iiner, samedir);
593 
594  Surface::RotationType rot(xLocal, yLocal, zLocal);
595 
596  for (int ik=1; ik>=0; ik--) { //propagate track in two HO layers
597 
598  double radial = rHOL1;
599  if (ik==0) radial = rHOL0;
600 
601  Surface::PositionType pos(radial*cos(phipos), radial*sin(phipos), 0.);
603 
604  auto aPlane2 = new Plane(pos,rot);
605 
606  SteppingHelixStateInfo steppingHelixstateinfo_;
607  myHelix.propagate(SteppingHelixStateInfo(freetrajectorystate_), (*aPlane2), steppingHelixstateinfo_);
608 
609  if (steppingHelixstateinfo_.isValid()) {
610 
611  GlobalPoint hotrkpos2xx(steppingHelixstateinfo_.position().x(), steppingHelixstateinfo_.position().y(), steppingHelixstateinfo_.position().z());
612 
613  if (ik==1) {
614  HcalDetId ClosestCell = (HcalDetId) gHO->getClosestCell(hotrkpos2xx);
615  int ixeta = ClosestCell.ieta();
616  int ixphi = ClosestCell.iphi();
617  tmpHOCalib.isect2 = 100*std::abs(ixeta+50)+std::abs(ixphi);
618  }
619 
620 
621  GlobalVector hotrkpos2(steppingHelixstateinfo_.position().x(), steppingHelixstateinfo_.position().y(), steppingHelixstateinfo_.position().z());
622  CLHEP::Hep3Vector hotrkdir2(steppingHelixstateinfo_.momentum().x(), steppingHelixstateinfo_.momentum().y(),steppingHelixstateinfo_.momentum().z());
623 
624  LocalVector lclvt0 = (*aPlane).toLocal(hotrkpos2);
625 
626  double xx = lclvt0.x();
627  double yy = lclvt0.y();
628 
629  if (ik ==1) {
630  if ((std::abs(yy) < 130 && xx >-64.7 && xx <138.2) //Ring-0
631  ||(std::abs(yy) > 130 && std::abs(yy) <700 && xx >-76.3 && xx <140.5)) { //Ring +-1,2
632  ipath = true; //Only look for tracks which as hits in layer 1
633  iphisect = iphisecttmp;
634  }
635  }
636 
637  if (iphisect != iphisecttmp) continue; //Look for ring-0 only when ring1 is accepted for that sector
638 
639  switch (ik)
640  {
641  case 0 :
642  xhor0 = xx; //lclvt0.x();
643  yhor0 = yy; //lclvt0.y();
644  break;
645  case 1 :
646  xhor1 = xx; //lclvt0.x();
647  yhor1 = yy; //lclvt0.y();
648  tmpHOCalib.momatho = hotrkdir2.mag();
649  tmpHOCalib.hoang = CLHEP::Hep3Vector(zLocal.x(),zLocal.y(),zLocal.z()).dot(hotrkdir2.unit());
650  break;
651  default : break;
652  }
653  } else {
654  break;
655  }
656  }
657  if (ipath) break;
658  }
659  if (ipath) { //If muon crossed HO laeyrs
660 
661  int ietaho = 50;
662  int iphiho = -1;
663 
664  for (int ij=0; ij<9; ij++) {tmpHOCalib.hosig[ij]=-100.0;}
665  for (int ij=0; ij<18; ij++) {tmpHOCalib.hocorsig[ij]=-100.0;}
666  for (int ij=0; ij<9; ij++) {tmpHOCalib.hbhesig[ij]=-100.0;}
667  tmpHOCalib.hocro = -100;
668  tmpHOCalib.htime = -1000;
669 
670  int isect = 0;
671 
672  findHOEtaPhi(iphisect, ietaho, iphiho);
673 
674  if (ietaho !=0 && iphiho !=0 && std::abs(iring)<=2) { //Muon passed through a tower
675  isect = 100*std::abs(ietaho+50)+std::abs(iphiho);
676  if (std::abs(ietaho) >=netabin || iphiho<0) isect *=-1; //Not extrapolated to any tower
677  if (std::abs(ietaho) >=netabin) isect -=1000000; //not matched with eta
678  if (iphiho<0) isect -=2000000; //not matched with phi
679  tmpHOCalib.isect = isect;
680 
681  tmpHOCalib.hodx = localxhor1;
682  tmpHOCalib.hody = localyhor1;
683 
684  if (iring==0) {
685  tmpHOCalib.hocorsig[8] = localxhor0;
686  tmpHOCalib.hocorsig[9] = localyhor0;
687  }
688 
689  int etamn=-4;
690  int etamx=4;
691  if (iring==1) {etamn=5; etamx = 10;}
692  if (iring==2) {etamn=11; etamx = 16;}
693  if (iring==-1){etamn=-10; etamx = -5;}
694  if (iring==-2){etamn=-16; etamx = -11;}
695 
696  int phimn = 1;
697  int phimx = 2;
698  if (iring ==0) {
699  phimx =2*int((iphiho+1)/2.);
700  phimn = phimx - 1;
701  } else {
702  phimn = 3*int((iphiho+1)/3.) - 1;
703  phimx = phimn + 2;
704  }
705 
706  if (phimn <1) phimn += nphimx;
707  if (phimx >72) phimx -= nphimx;
708 
709  if (m_hbinfo) {
710  for (int ij=0; ij<9; ij++) {tmpHOCalib.hbhesig[ij]=-100.0;}
711 
712  edm::Handle<HBHERecHitCollection> hbheht;// iEvent.getByType(hbheht);
713  iEvent.getByToken(tok_hbhe_,hbheht);
714 
715  if ((*hbheht).size()>0) {
716  if(!(*hbheht).size()) throw (int)(*hbheht).size();
717 
718  for (HBHERecHitCollection::const_iterator jk=(*hbheht).begin(); jk!=(*hbheht).end(); jk++){
719  HcalDetId id =(*jk).id();
720  int tmpeta= id.ieta();
721  int tmpphi= id.iphi();
722 
723  int deta = tmpeta-ietaho;
724  if (tmpeta<0 && ietaho>0) deta += 1;
725  if (tmpeta>0 && ietaho<0) deta -= 1;
726 
727  // if (tmpeta==-1 && ietaho== 1) deta = -1;
728  // if (tmpeta== 1 && ietaho==-1) deta = 1;
729 
730  int dphi = tmpphi-iphiho;
731  if (dphi>nphimx/2) { dphi -=nphimx;}
732  if (dphi<-nphimx/2) { dphi +=nphimx;}
733 
734  // if (phimn >phimx) {
735  // if (dphi==71) dphi=-1;
736  // if (dphi==-71) dphi=1;
737  // }
738 
739  if (m_occupancy) {
740  float signal = (*jk).energy();
741  // int tmpeta1 = (tmpeta>0) ? tmpeta -1 : -tmpeta +14;
742  if (signal >-100 && Noccu == Noccu_old) {
743  for (int ij=0; ij<5; ij++) {
744  if (signal >(ij+2)*m_sigma) {
745  ho_occupency[ij]->Fill(tmpeta, tmpphi);
746  }
747  }
748  }
749  }
750 
751  int ipass2 = (std::abs(deta) <=1 && std::abs(dphi)<=1) ? 1 : 0; //NEED correction in full CMS detector
752  if ( ipass2 ==0 ) continue;
753 
754  float signal = (*jk).energy();
755 
756  if (3*(deta+1)+dphi+1<9) tmpHOCalib.hbhesig[3*(deta+1)+dphi+1] = signal;
757  }
758  }
759  } //m_hbinfo #endif
760 
762  iEvent.getByToken(tok_ho_,hoht);
763 
764  if ((*hoht).size()>0) {
765  for (HORecHitCollection::const_iterator jk=(*hoht).begin(); jk!=(*hoht).end(); jk++){
766  HcalDetId id =(*jk).id();
767  int tmpeta= id.ieta();
768  int tmpphi= id.iphi();
769 
770  int ipass1 =0;
771  if (tmpeta >=etamn && tmpeta <=etamx) {
772  if (phimn < phimx) {
773  ipass1 = (tmpphi >=phimn && tmpphi <=phimx ) ? 1 : 0;
774  } else {
775  ipass1 = (tmpphi==71 || tmpphi ==72 || tmpphi==1) ? 1 : 0;
776  }
777  }
778 
779  int deta = tmpeta-ietaho;
780  int dphi = tmpphi -iphiho;
781 
782  if (tmpeta<0 && ietaho>0) deta += 1;
783  if (tmpeta>0 && ietaho<0) deta -= 1;
784  // if (tmpeta==-1 && ietaho== 1) deta = -1;
785  // if (tmpeta== 1 && ietaho==-1) deta = 1;
786 
787  if (dphi>nphimx/2) { dphi -=nphimx;}
788  if (dphi<-nphimx/2) { dphi +=nphimx;}
789  // if (phimn>phimx) {
790  // if (dphi==71) dphi=-1;
791  // if (dphi==-71) dphi=1;
792  // }
793 
794  float signal = (*jk).energy();
795 
796  int ipass2 = (std::abs(deta) <=1 && std::abs(dphi)<=1) ? 1 : 0;
797 
798  if (ipass1 ==0 && ipass2 ==0 ) continue;
799 
800  if (ipass1 ==1) {
801  int tmpdph = tmpphi-phimn;
802  if (tmpdph<0) tmpdph = 2; //only case of iphi==1, where phimn=71
803 
804  int ilog = 2*(tmpeta-etamn)+tmpdph;
805  if (iring !=0) {
806  if (iring >0) {
807  ilog = 3*(tmpeta-etamn)+tmpdph; //Again CMS correction
808  } else {
809  ilog = 3*(etamx-tmpeta)+tmpdph; //Again CMS correction
810  }
811  }
812  if (ilog>-1 && ilog<18) {
813  tmpHOCalib.hocorsig[ilog] = signal;
814  }
815  }
816 
817  if (ipass2 ==1) {
818 
819  if (3*(deta+1)+dphi+1<9) {
820  tmpHOCalib.hosig[3*(deta+1)+dphi+1] = signal; //Again CMS azimuthal near phi 1&72
821  }
822  }
823 
824  if (deta==0 && dphi ==0) {
825  tmpHOCalib.htime = (*jk).time();
826  tmpHOCalib.hoflag = (*jk).flags();
827 
828  // Get Channel Quality information for the given detID
829  unsigned theStatusValue = theHcalChStatus->getValues(id)->getValue();
830  // Now get severity of problems for the given detID, based on the rechit flag word and the channel quality status value
831  int hitSeverity=hcalSevLvlComputer->getSeverityLevel(id, (*jk).flags(),theStatusValue);
832  tmpHOCalib.hoflag = hitSeverity;
833  int crphi = tmpphi + 6;
834  if (crphi >72) crphi -=72;
835 
836  for (HORecHitCollection::const_iterator jcr=(*hoht).begin(); jcr!=(*hoht).end(); jcr++){
837  const HORecHit reccr = (const HORecHit)(*jcr);
838  HcalDetId idcr =reccr.id();
839  int etacr= idcr.ieta();
840  int phicr= idcr.iphi();
841  if (tmpeta==etacr && crphi ==phicr) {
842 
843  tmpHOCalib.hocro = reccr.energy();
844 
845  }
846  }
847  }
848  }
849  }
850  }
851 
852  //GMA Npass++;
853  if (Noccu == Noccu_old) Noccu++;
854  hostore->push_back(tmpHOCalib);
855  } // if (ipath)
856  } // Cut on calo energy
857 }
float hadEt
hcal sum-Et
Definition: MuonIsolation.h:9
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:43
Basic3DVector< float > DirectionType
edm::EDGetTokenT< CaloTowerCollection > tok_tower_
FreeTrajectoryState getFreeTrajectoryState(const reco::Track &tk, const MagneticField *field, int itag, bool dir)
float sumPt
sum-pt of tracks
Definition: MuonIsolation.h:7
const HcalChannelQuality * theHcalChStatus
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
ReturnType plane(const PositionType &pos, const RotationType &rot) const
Definition: PlaneBuilder.h:22
std::vector< CaloTower >::const_iterator const_iterator
T y() const
Definition: PV3DBase.h:63
const Item * getValues(DetId fId, bool throwOnFail=true) const
GlobalVector momentum() const
void findHOEtaPhi(int iphsect, int &ietaho, int &iphiho)
Definition: Plane.h:17
unsigned int hoflag
const Double_t pi
float energy() const
Definition: CaloRecHit.h:17
GlobalPoint position() const
T sqrt(T t)
Definition: SSEVec.h:18
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:119
T z() const
Definition: PV3DBase.h:64
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
int ieta() const
get the cell ieta
Definition: HcalDetId.h:56
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Basic3DVector< float > PositionType
virtual DetId getClosestCell(const GlobalPoint &r) const
int iphi() const
get the cell iphi
Definition: HcalDetId.cc:101
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
int getSeverityLevel(const DetId &myid, const uint32_t &myflag, const uint32_t &mystatus) const
edm::EDGetTokenT< HORecHitCollection > tok_ho_
T dot(const Basic3DVector &v) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
uint32_t getValue() const
T x() const
Definition: PV3DBase.h:62
edm::ESHandle< HcalSeverityLevelComputer > hcalSevLvlComputerHndl
HcalDetId id() const
get the id
Definition: HORecHit.h:19
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix
Definition: TrackBase.h:77
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
void AlCaHOCalibProducer::findHOEtaPhi ( int  iphsect,
int &  ietaho,
int &  iphiho 
)
private

Definition at line 859 of file AlCaHOCalibProducer.cc.

References funct::abs(), iring, localxhor0, localxhor1, localyhor0, localyhor1, netabin, nphimx, xhor0, xhor1, yhor0, and yhor1.

Referenced by fillHOStore().

859  {
860 
861  //18/12/06 : use only position, not angle phi
862 
863  const double etalow[16]={ 0.025, 35.195, 70.625, 106.595, 141.565, 180.765, 220.235, 261.385, 304.525, 349.975, 410.025, 452.085, 506.645, 565.025, 627.725, 660.25};
864  const double etahgh[16]={ 35.145, 70.575, 106.545, 125.505, 180.715, 220.185, 261.335, 304.475, 349.925, 392.575, 452.035, 506.595, 564.975, 627.675, 661.075, 700.25};
865 
866  const double philow[6]={-76.27, -35.11, 0.35, 35.81, 71.77, 108.93}; //Ring+/-1 & 2
867  const double phihgh[6]={-35.81, -0.35, 35.11, 71.07, 108.23, 140.49};
868 
869  const double philow00[6]={-60.27, -32.91, 0.35, 33.61, 67.37, 102.23}; //Ring0 L0
870  const double phihgh00[6]={-33.61, -0.35, 32.91, 66.67, 101.53, 129.49};
871 
872  const double philow01[6]={-64.67, -34.91, 0.35, 35.61, 71.37, 108.33}; //Ring0 L1
873  const double phihgh01[6]={-35.61, -0.35, 34.91, 70.67, 107.63, 138.19};
874 
875  iring = -10;
876 
877  double tmpdy = std::abs(yhor1);
878  for (int ij=0; ij<netabin; ij++) {
879  if (tmpdy >etalow[ij] && tmpdy <etahgh[ij]) {
880  ietaho = ij+1;
881  float tmp1 = fabs(tmpdy-etalow[ij]);
882  float tmp2 = fabs(tmpdy-etahgh[ij]);
883 
884  localyhor1 = (tmp1 < tmp2) ? -tmp1 : tmp2;
885  if (yhor1 <0) localyhor1 *=-1.;
886 
887  if (ij<4) iring =0;
888  if (ij>=4 && ij<10) iring=1;
889  if (ij>=10 && ij<netabin) iring=2;
890  break;
891  }
892  }
893 
894  int tmpphi = 0;
895  int tmpphi0 = 0;
896 
897  if (ietaho >4) { //Ring 1 and 2
898  for (int ij=0; ij<6; ij++) {
899  if (xhor1 >philow[ij] && xhor1 <phihgh[ij]) {
900  tmpphi=ij+1;
901  float tmp1 = fabs(xhor1-philow[ij]);
902  float tmp2 = fabs(xhor1-phihgh[ij]);
903  localxhor1 = (tmp1 < tmp2) ? -tmp1 : tmp2;
904  break;
905  }
906  }
907  } else { //Ring 0
908  for (int ij=0; ij<6; ij++) {
909  if (xhor1 >philow01[ij] && xhor1 <phihgh01[ij]) {
910  tmpphi=ij+1;
911  float tmp1 = fabs(xhor1-philow01[ij]);
912  float tmp2 = fabs(xhor1-phihgh01[ij]);
913  localxhor1 = (tmp1 < tmp2) ? -tmp1 : tmp2;
914  break;
915  }
916  }
917 
918  for (int ij=0; ij<6; ij++) {
919  if (xhor0 >philow00[ij] && xhor0 <phihgh00[ij]) {
920  tmpphi0=ij+1;
921  float tmp1 = fabs(xhor0-philow00[ij]);
922  float tmp2 = fabs(xhor0-phihgh00[ij]);
923  localxhor0 = (tmp1 < tmp2) ? -tmp1 : tmp2;
924  if (tmpphi !=tmpphi0) localxhor0 +=10000.;
925  break;
926  }
927  }
928 
929  double tmpdy = std::abs(yhor0);
930  for (int ij=0; ij<4; ij++) {
931  if (tmpdy >etalow[ij] && tmpdy <etahgh[ij]) {
932  float tmp1 = fabs(tmpdy-etalow[ij]);
933  float tmp2 = fabs(tmpdy-etahgh[ij]);
934  localyhor0 = (tmp1 < tmp2) ? -tmp1 : tmp2;
935  if (yhor0 <0) localyhor0 *=-1.;
936  if (ij+1 != ietaho) localyhor0 +=10000.;
937  break;
938  }
939  }
940  }
941 
942  if (tmpphi!=0) {
943  iphiho = 6*iphisect -2 + tmpphi;
944  if (iphiho <=0) iphiho +=nphimx;
945  if (iphiho >nphimx) iphiho -=nphimx;
946  }
947 
948  // isect2 = 15*iring+iphisect+1;
949 
950  if (yhor1 <0) {
951  if (std::abs(ietaho) >netabin) { //Initialised with 50
952  ietaho +=1;
953  } else {
954  ietaho *=-1;
955  }
956  // isect2 *=-1;
957  iring *=-1;
958  }
959 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
FreeTrajectoryState AlCaHOCalibProducer::getFreeTrajectoryState ( const reco::Track tk,
const MagneticField field,
int  itag,
bool  dir 
)
private

Definition at line 961 of file AlCaHOCalibProducer.cc.

References reco::TrackBase::charge(), reco::Track::extra(), reco::Track::innerMomentum(), reco::Track::innerPosition(), reco::Track::outerPx(), reco::Track::outerPy(), reco::Track::outerPz(), reco::Track::outerX(), reco::Track::outerY(), and reco::Track::outerZ().

Referenced by fillHOStore().

962 {
963 
964  if (iiner ==0) {
965  GlobalPoint gpos( tk.outerX(), tk.outerY(), tk.outerZ());
966  GlobalVector gmom( tk.outerPx(), tk.outerPy(), tk.outerPz());
967  if (dir) gmom *=-1.;
968  GlobalTrajectoryParameters par( gpos, gmom, tk.charge(), field);
969  CurvilinearTrajectoryError err( tk.extra()->outerStateCovariance());
970  return FreeTrajectoryState( par, err);
971  } else {
972  GlobalPoint gpos( tk.innerPosition().X(), tk.innerPosition().Y(), tk.innerPosition().Z());
973  GlobalVector gmom( tk.innerMomentum().X(), tk.innerMomentum().Y(), tk.innerMomentum().Z());
974  if (dir) gmom *=-1.;
975  GlobalTrajectoryParameters par( gpos, -gmom, tk.charge(), field);
976  CurvilinearTrajectoryError err( tk.extra()->innerStateCovariance());
977  return FreeTrajectoryState( par, err);
978  }
979 
980 }
double outerPy() const
y coordinate of momentum vector at the outermost hit position
Definition: Track.h:129
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:189
double outerZ() const
z coordinate of the outermost hit position
Definition: Track.h:149
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:55
double outerX() const
x coordinate of the outermost hit position
Definition: Track.h:139
double outerPz() const
z coordinate of momentum vector at the outermost hit position
Definition: Track.h:134
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:60
double outerY() const
y coordinate of the outermost hit position
Definition: Track.h:144
int charge() const
track electric charge
Definition: TrackBase.h:562
dbl *** dir
Definition: mlp_gen.cc:35
double outerPx() const
x coordinate of momentum vector at the outermost hit position
Definition: Track.h:124
void AlCaHOCalibProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivatevirtual

Implements edm::EDProducer.

Definition at line 295 of file AlCaHOCalibProducer.cc.

References edm::EventID::event(), fillHOStore(), edm::Event::getByToken(), edm::EventBase::id(), HOCalibVariables::inslumi, edm::EventBase::isRealData(), edm::HandleBase::isValid(), m_cosmic, Nevents, Noccu, HOCalibVariables::nprim, HLT_FULL_cff::primaryVertices, edm::Event::put(), edm::EventID::run(), tok_lumi_, tok_muons_, tok_muonsCosmic_, and tok_vertex_.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

296 {
297 
298  int irun = iEvent.id().run();
299  // int ilumi = iEvent.luminosityBlock();
300 
301  Nevents++;
302 
303  if (Nevents%5000==1) edm::LogInfo("HOCalib") <<"AlCaHOCalibProducer Processing event # "<<Nevents<<" "<<Noccu<<" "<<irun<<" "<<iEvent.id().event();
304 
305  std::auto_ptr<HOCalibVariableCollection> hostore (new HOCalibVariableCollection);
306 
308  edm::Handle<edm::View<reco::Muon> > collisionmuon;
309 
310  bool muonOK(true);
311  HOCalibVariables tmpHOCalib;
312  tmpHOCalib.nprim = -1;
313  tmpHOCalib.inslumi=-1.;
314 
315  if (m_cosmic) {
316  iEvent.getByToken(tok_muonsCosmic_, cosmicmuon);
317  muonOK = (cosmicmuon.isValid() && cosmicmuon->size()>0);
318  } else {
319  iEvent.getByToken(tok_muons_,collisionmuon);
320  muonOK = (collisionmuon.isValid() && collisionmuon->size()>0);
321 
322  if (iEvent.isRealData()) {
324  iEvent.getByToken(tok_vertex_, primaryVertices);
325  if (primaryVertices.isValid()) { tmpHOCalib.nprim = primaryVertices->size();}
326 
327  tmpHOCalib.inslumi=0.;
328 
330  iEvent.getByToken(tok_lumi_, lumiScale);
331 
332  if (lumiScale.isValid()) {
333  tmpHOCalib.inslumi=lumiScale->begin()->pileup();
334  }
335  }
336  }
337 
338  if (muonOK) {
339 
340  int Noccu_old = Noccu;
342  if (m_cosmic) {
343  int indx(0);
344  for(reco::TrackCollection::const_iterator ncosm = cosmicmuon->begin();
345  ncosm != cosmicmuon->end(); ++ncosm,++indx) {
346  if ((*ncosm).ndof() < 15) continue;
347  if ((*ncosm).normalizedChi2() >30.0) continue;
348  reco::TrackRef tRef = reco::TrackRef(cosmicmuon,indx);
349  fillHOStore(tRef,tmpHOCalib,hostore,Noccu_old,indx,cosmicmuon,muon1,
350  iEvent, iSetup);
351  }
352  } else {
353  for( muon1 = collisionmuon->begin(); muon1 < collisionmuon->end(); muon1++ ) {
354  if ((!muon1->isGlobalMuon()) || (!muon1->isTrackerMuon())) continue;
355  reco::TrackRef ncosm = muon1->innerTrack();
356  fillHOStore(ncosm,tmpHOCalib,hostore,Noccu_old,0,cosmicmuon,muon1,
357  iEvent, iSetup);
358  }
359  }
360  }
361 
362  iEvent.put(hostore, "HOCalibVariableCollection");
363 
364 }
RunNumber_t run() const
Definition: EventID.h:39
EventNumber_t event() const
Definition: EventID.h:41
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
tuple primaryVertices
edm::EDGetTokenT< reco::TrackCollection > tok_muonsCosmic_
bool isRealData() const
Definition: EventBase.h:63
void fillHOStore(const reco::TrackRef &ncosm, HOCalibVariables &tmpHOCalib, std::auto_ptr< HOCalibVariableCollection > &hostore, int Noccu_old, int indx, edm::Handle< reco::TrackCollection > cosmicmuon, edm::View< reco::Muon >::const_iterator muon1, const edm::Event &iEvent, const edm::EventSetup &iSetup)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:121
bool isValid() const
Definition: HandleBase.h:75
edm::EDGetTokenT< LumiScalersCollection > tok_lumi_
edm::EDGetTokenT< reco::VertexCollection > tok_vertex_
edm::EDGetTokenT< edm::View< reco::Muon > > tok_muons_
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
std::vector< HOCalibVariables > HOCalibVariableCollection
collection of HOcalibration variabale
edm::EventID id() const
Definition: EventBase.h:59
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81

Member Data Documentation

std::map<std::string, bool> AlCaHOCalibProducer::fired
private

Definition at line 227 of file AlCaHOCalibProducer.cc.

edm::ESHandle<HcalSeverityLevelComputer> AlCaHOCalibProducer::hcalSevLvlComputerHndl
private

Definition at line 232 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore().

TH2F* AlCaHOCalibProducer::ho_occupency[5]
private

Definition at line 191 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), endJob(), and fillHOStore().

int AlCaHOCalibProducer::iring
private

Definition at line 184 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::localxhor0
private

Definition at line 186 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::localxhor1
private

Definition at line 188 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::localyhor0
private

Definition at line 187 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::localyhor1
private

Definition at line 189 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

bool AlCaHOCalibProducer::m_cosmic
private

Definition at line 193 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), fillHOStore(), and produce().

int AlCaHOCalibProducer::m_endTS
private

Definition at line 216 of file AlCaHOCalibProducer.cc.

bool AlCaHOCalibProducer::m_hbinfo
private

Definition at line 214 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and fillHOStore().

bool AlCaHOCalibProducer::m_occupancy
private

Definition at line 192 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), endJob(), and fillHOStore().

double AlCaHOCalibProducer::m_sigma
private

Definition at line 217 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and fillHOStore().

int AlCaHOCalibProducer::m_startTS
private

Definition at line 215 of file AlCaHOCalibProducer.cc.

edm::InputTag AlCaHOCalibProducer::muonTags_
private

Definition at line 202 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer().

const int AlCaHOCalibProducer::ncidmx = 5
private

Definition at line 198 of file AlCaHOCalibProducer.cc.

const int AlCaHOCalibProducer::netabin = 16
private

Definition at line 195 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

const int AlCaHOCalibProducer::netamx = 32
private

Definition at line 197 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer().

int AlCaHOCalibProducer::Nevents
private

Definition at line 233 of file AlCaHOCalibProducer.cc.

Referenced by beginJob(), endJob(), and produce().

int AlCaHOCalibProducer::Noccu
private

Definition at line 220 of file AlCaHOCalibProducer.cc.

Referenced by beginJob(), endJob(), fillHOStore(), and produce().

const int AlCaHOCalibProducer::nphimx = 72
private

Definition at line 196 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), fillHOStore(), and findHOEtaPhi().

int AlCaHOCalibProducer::nRuns
private

Definition at line 221 of file AlCaHOCalibProducer.cc.

Referenced by beginJob().

unsigned int AlCaHOCalibProducer::Ntp
private

Definition at line 226 of file AlCaHOCalibProducer.cc.

const double AlCaHOCalibProducer::rHOL0 = 382.0
private

Definition at line 199 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore().

const double AlCaHOCalibProducer::rHOL1 = 407.0
private

Definition at line 200 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore().

const HcalChannelQuality* AlCaHOCalibProducer::theHcalChStatus
private

Definition at line 230 of file AlCaHOCalibProducer.cc.

Referenced by beginRun(), and fillHOStore().

edm::EDGetTokenT<HBHERecHitCollection> AlCaHOCalibProducer::tok_hbhe_
private

Definition at line 210 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and fillHOStore().

edm::EDGetTokenT<HORecHitCollection> AlCaHOCalibProducer::tok_ho_
private

Definition at line 211 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and fillHOStore().

edm::EDGetTokenT<LumiScalersCollection> AlCaHOCalibProducer::tok_lumi_
private

Definition at line 208 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and produce().

edm::EDGetTokenT<edm::View<reco::Muon> > AlCaHOCalibProducer::tok_muons_
private

Definition at line 205 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and produce().

edm::EDGetTokenT<reco::TrackCollection> AlCaHOCalibProducer::tok_muonsCosmic_
private

Definition at line 204 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and produce().

edm::EDGetTokenT<CaloTowerCollection> AlCaHOCalibProducer::tok_tower_
private

Definition at line 212 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and fillHOStore().

edm::EDGetTokenT<reco::VertexCollection> AlCaHOCalibProducer::tok_vertex_
private

Definition at line 206 of file AlCaHOCalibProducer.cc.

Referenced by AlCaHOCalibProducer(), and produce().

float AlCaHOCalibProducer::xhor0
private

Definition at line 180 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::xhor1
private

Definition at line 182 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::yhor0
private

Definition at line 181 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().

float AlCaHOCalibProducer::yhor1
private

Definition at line 183 of file AlCaHOCalibProducer.cc.

Referenced by fillHOStore(), and findHOEtaPhi().