CMS 3D CMS Logo

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

#include <Alignment/Validator/src/TrackerOfflineValidation.cc>

Inheritance diagram for TrackerOfflineValidation:
edm::EDAnalyzer edm::EDConsumerBase

Classes

struct  DirectoryWrapper
 
struct  ModuleHistos
 
struct  SummaryContainer
 

Public Types

enum  HistogrammType {
  XResidual, NormXResidual, YResidual, XprimeResidual,
  NormXprimeResidual, YprimeResidual, NormYprimeResidual, XResidualProfile,
  YResidualProfile
}
 
- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 

Public Member Functions

 TrackerOfflineValidation (const edm::ParameterSet &)
 
 ~TrackerOfflineValidation ()
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 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
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &) override
 
void bookDirHists (DirectoryWrapper &tfd, const Alignable &ali, const TrackerTopology *tTopo)
 
void bookGlobalHists (DirectoryWrapper &tfd)
 
void bookHists (DirectoryWrapper &tfd, const Alignable &ali, const TrackerTopology *tTopo, align::StructureType type, int i)
 
TrackerOfflineValidation::SummaryContainer bookSummaryHists (DirectoryWrapper &tfd, const Alignable &ali, align::StructureType type, int i)
 
TH1 * bookTH1F (bool isTransient, DirectoryWrapper &tfd, const char *histName, const char *histTitle, int nBinsX, double lowX, double highX)
 
TProfile * bookTProfile (bool isTransient, DirectoryWrapper &tfd, const char *histName, const char *histTitle, int nBinsX, double lowX, double highX)
 
TProfile * bookTProfile (bool isTransient, DirectoryWrapper &tfd, const char *histName, const char *histTitle, int nBinsX, double lowX, double highX, double lowY, double highY)
 
virtual void checkBookHists (const edm::EventSetup &setup)
 
void collateSummaryHists (DirectoryWrapper &tfd, const Alignable &ali, int i, std::vector< TrackerOfflineValidation::SummaryContainer > &vLevelProfiles)
 
virtual void endJob () override
 
void fillTree (TTree &tree, const std::map< int, TrackerOfflineValidation::ModuleHistos > &moduleHist_, TkOffTreeVariables &treeMem, const TrackerGeometry &tkgeom, const TrackerTopology *tTopo)
 
std::pair< float, float > fitResiduals (TH1 *hist) const
 
float Fwhm (const TH1 *hist) const
 
void getBinning (uint32_t subDetId, TrackerOfflineValidation::HistogrammType residualtype, int &nBinsX, double &lowerBoundX, double &upperBoundX)
 
ModuleHistosgetHistStructFromMap (const DetId &detid)
 
template<class OBJECT_TYPE >
int GetIndex (const std::vector< OBJECT_TYPE * > &vec, const TString &name)
 
float getMedian (const TH1 *hist) const
 
bool isBarrel (uint32_t subDetId)
 
bool isDetOrDetUnit (align::StructureType type)
 
bool isEndCap (uint32_t subDetId)
 
bool isPixel (uint32_t subDetId)
 
void setSummaryBin (int bin, TH1 *targetHist, TH1 *sourceHist)
 
void summarizeBinInContainer (int bin, SummaryContainer &targetContainer, SummaryContainer &sourceContainer)
 
void summarizeBinInContainer (int bin, uint32_t subDetId, SummaryContainer &targetContainer, ModuleHistos &sourceContainer)
 

Private Attributes

const TrackerGeometrybareTkGeomPtr_
 
const bool dqmMode_
 
const edm::EventSetuplastSetup_
 
const bool lCoorHistOn_
 
const std::string moduleDirectory_
 
const bool moduleLevelHistsTransient_
 
const bool moduleLevelProfiles_
 
std::map< int,
TrackerOfflineValidation::ModuleHistos
mPxbResiduals_
 
std::map< int,
TrackerOfflineValidation::ModuleHistos
mPxeResiduals_
 
std::map< int,
TrackerOfflineValidation::ModuleHistos
mTecResiduals_
 
std::map< int,
TrackerOfflineValidation::ModuleHistos
mTibResiduals_
 
std::map< int,
TrackerOfflineValidation::ModuleHistos
mTidResiduals_
 
std::map< int,
TrackerOfflineValidation::ModuleHistos
mTobResiduals_
 
const edm::ParameterSet parSet_
 
const bool stripYResiduals_
 
edm::ESHandle< TrackerGeometrytkGeom_
 
const bool useFit_
 
const bool useFwhm_
 
const bool useOverflowForRMS_
 
std::vector< TH1 * > vDeleteObjects_
 
std::vector< TH1 * > vTrack2DHistos_
 
std::vector< TH1 * > vTrackHistos_
 
std::vector< TH1 * > vTrackProfiles_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- 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

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

Implementation: <Notes on="" implementation>="">

Definition at line 76 of file TrackerOfflineValidation.cc.

Member Enumeration Documentation

Constructor & Destructor Documentation

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

Definition at line 351 of file TrackerOfflineValidation.cc.

352  : parSet_(iConfig), bareTkGeomPtr_(0), lCoorHistOn_(parSet_.getParameter<bool>("localCoorHistosOn")),
353  moduleLevelHistsTransient_(parSet_.getParameter<bool>("moduleLevelHistsTransient")),
354  moduleLevelProfiles_(parSet_.getParameter<bool>("moduleLevelProfiles")),
355  stripYResiduals_(parSet_.getParameter<bool>("stripYResiduals")),
356  useFwhm_(parSet_.getParameter<bool>("useFwhm")),
357  useFit_(parSet_.getParameter<bool>("useFit")),
358  useOverflowForRMS_(parSet_.getParameter<bool>("useOverflowForRMS")),
359  dqmMode_(parSet_.getParameter<bool>("useInDqmMode")),
360  moduleDirectory_(parSet_.getParameter<std::string>("moduleDirectoryInOutput")),
361  lastSetup_(nullptr)
362 {
363 }
const TrackerGeometry * bareTkGeomPtr_
T getParameter(std::string const &) const
const edm::ParameterSet parSet_
const edm::EventSetup * lastSetup_
TrackerOfflineValidation::~TrackerOfflineValidation ( )

Definition at line 366 of file TrackerOfflineValidation.cc.

References vDeleteObjects_.

367 {
368  // do anything here that needs to be done at desctruction time
369  // (e.g. close files, deallocate resources etc.)
370  for( std::vector<TH1*>::const_iterator it = vDeleteObjects_.begin(), itEnd = vDeleteObjects_.end();
371  it != itEnd;
372  ++it) delete *it;
373 }
std::vector< TH1 * > vDeleteObjects_

Member Function Documentation

void TrackerOfflineValidation::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivatevirtual

Implements edm::EDAnalyzer.

Definition at line 969 of file TrackerOfflineValidation.cc.

References checkBookHists(), cond::rpcobgas::detid, TrackerValidationVariables::fillTrackQuantities(), getHistStructFromMap(), GetIndex(), isPixel(), lCoorHistOn_, TrackerOfflineValidation::ModuleHistos::LocalX, TrackerOfflineValidation::ModuleHistos::LocalY, moduleLevelProfiles_, TrackerOfflineValidation::ModuleHistos::NormResHisto, TrackerOfflineValidation::ModuleHistos::NormResXprimeHisto, TrackerOfflineValidation::ModuleHistos::NormResYprimeHisto, parSet_, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, TrackerOfflineValidation::ModuleHistos::ResHisto, TrackerOfflineValidation::ModuleHistos::ResXprimeHisto, TrackerOfflineValidation::ModuleHistos::ResXvsXProfile, TrackerOfflineValidation::ModuleHistos::ResXvsYProfile, TrackerOfflineValidation::ModuleHistos::ResYHisto, TrackerOfflineValidation::ModuleHistos::ResYprimeHisto, TrackerOfflineValidation::ModuleHistos::ResYvsXProfile, TrackerOfflineValidation::ModuleHistos::ResYvsYProfile, stripYResiduals_, DetId::subdetId(), funct::tan(), StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, useOverflowForRMS_, vTrack2DHistos_, vTrackHistos_, and vTrackProfiles_.

970 {
971  if (useOverflowForRMS_)TH1::StatOverflows(kTRUE);
972  this->checkBookHists(iSetup); // check whether hists are booked and do so if not yet done
973 
974  TrackerValidationVariables avalidator_(iSetup,parSet_);
975 
976  std::vector<TrackerValidationVariables::AVTrackStruct> vTrackstruct;
977  avalidator_.fillTrackQuantities(iEvent, vTrackstruct);
978 
979  for (std::vector<TrackerValidationVariables::AVTrackStruct>::const_iterator itT = vTrackstruct.begin();
980  itT != vTrackstruct.end();
981  ++itT) {
982 
983  // Fill 1D track histos
984  static const int etaindex = this->GetIndex(vTrackHistos_,"h_tracketa");
985  vTrackHistos_[etaindex]->Fill(itT->eta);
986  static const int phiindex = this->GetIndex(vTrackHistos_,"h_trackphi");
987  vTrackHistos_[phiindex]->Fill(itT->phi);
988  static const int numOfValidHitsindex = this->GetIndex(vTrackHistos_,"h_trackNumberOfValidHits");
989  vTrackHistos_[numOfValidHitsindex]->Fill(itT->numberOfValidHits);
990  static const int numOfLostHitsindex = this->GetIndex(vTrackHistos_,"h_trackNumberOfLostHits");
991  vTrackHistos_[numOfLostHitsindex]->Fill(itT->numberOfLostHits);
992  static const int kappaindex = this->GetIndex(vTrackHistos_,"h_curvature");
993  vTrackHistos_[kappaindex]->Fill(itT->kappa);
994  static const int kappaposindex = this->GetIndex(vTrackHistos_,"h_curvature_pos");
995  if (itT->charge > 0)
996  vTrackHistos_[kappaposindex]->Fill(fabs(itT->kappa));
997  static const int kappanegindex = this->GetIndex(vTrackHistos_,"h_curvature_neg");
998  if (itT->charge < 0)
999  vTrackHistos_[kappanegindex]->Fill(fabs(itT->kappa));
1000  static const int normchi2index = this->GetIndex(vTrackHistos_,"h_normchi2");
1001  vTrackHistos_[normchi2index]->Fill(itT->normchi2);
1002  static const int chi2index = this->GetIndex(vTrackHistos_,"h_chi2");
1003  vTrackHistos_[chi2index]->Fill(itT->chi2);
1004  static const int chi2Probindex = this->GetIndex(vTrackHistos_,"h_chi2Prob");
1005  vTrackHistos_[chi2Probindex]->Fill(itT->chi2Prob);
1006  static const int ptindex = this->GetIndex(vTrackHistos_,"h_pt");
1007  vTrackHistos_[ptindex]->Fill(itT->pt);
1008  if (itT->ptError != 0.) {
1009  static const int ptResolutionindex = this->GetIndex(vTrackHistos_,"h_ptResolution");
1010  vTrackHistos_[ptResolutionindex]->Fill(itT->ptError/itT->pt);
1011  }
1012  // Fill track profiles
1013  static const int d0phiindex = this->GetIndex(vTrackProfiles_,"p_d0_vs_phi");
1014  vTrackProfiles_[d0phiindex]->Fill(itT->phi,itT->d0);
1015  static const int dzphiindex = this->GetIndex(vTrackProfiles_,"p_dz_vs_phi");
1016  vTrackProfiles_[dzphiindex]->Fill(itT->phi,itT->dz);
1017  static const int d0etaindex = this->GetIndex(vTrackProfiles_,"p_d0_vs_eta");
1018  vTrackProfiles_[d0etaindex]->Fill(itT->eta,itT->d0);
1019  static const int dzetaindex = this->GetIndex(vTrackProfiles_,"p_dz_vs_eta");
1020  vTrackProfiles_[dzetaindex]->Fill(itT->eta,itT->dz);
1021  static const int chiphiindex = this->GetIndex(vTrackProfiles_,"p_chi2_vs_phi");
1022  vTrackProfiles_[chiphiindex]->Fill(itT->phi,itT->chi2);
1023  static const int chiProbphiindex = this->GetIndex(vTrackProfiles_,"p_chi2Prob_vs_phi");
1024  vTrackProfiles_[chiProbphiindex]->Fill(itT->phi,itT->chi2Prob);
1025  static const int chiProbabsd0index = this->GetIndex(vTrackProfiles_,"p_chi2Prob_vs_d0");
1026  vTrackProfiles_[chiProbabsd0index]->Fill(fabs(itT->d0),itT->chi2Prob);
1027  static const int normchiphiindex = this->GetIndex(vTrackProfiles_,"p_normchi2_vs_phi");
1028  vTrackProfiles_[normchiphiindex]->Fill(itT->phi,itT->normchi2);
1029  static const int chietaindex = this->GetIndex(vTrackProfiles_,"p_chi2_vs_eta");
1030  vTrackProfiles_[chietaindex]->Fill(itT->eta,itT->chi2);
1031  static const int normchiptindex = this->GetIndex(vTrackProfiles_,"p_normchi2_vs_pt");
1032  vTrackProfiles_[normchiptindex]->Fill(itT->pt,itT->normchi2);
1033  static const int normchipindex = this->GetIndex(vTrackProfiles_,"p_normchi2_vs_p");
1034  vTrackProfiles_[normchipindex]->Fill(itT->p,itT->normchi2);
1035  static const int chiProbetaindex = this->GetIndex(vTrackProfiles_,"p_chi2Prob_vs_eta");
1036  vTrackProfiles_[chiProbetaindex]->Fill(itT->eta,itT->chi2Prob);
1037  static const int normchietaindex = this->GetIndex(vTrackProfiles_,"p_normchi2_vs_eta");
1038  vTrackProfiles_[normchietaindex]->Fill(itT->eta,itT->normchi2);
1039  static const int kappaphiindex = this->GetIndex(vTrackProfiles_,"p_kappa_vs_phi");
1040  vTrackProfiles_[kappaphiindex]->Fill(itT->phi,itT->kappa);
1041  static const int kappaetaindex = this->GetIndex(vTrackProfiles_,"p_kappa_vs_eta");
1042  vTrackProfiles_[kappaetaindex]->Fill(itT->eta,itT->kappa);
1043  static const int ptResphiindex = this->GetIndex(vTrackProfiles_,"p_ptResolution_vs_phi");
1044  vTrackProfiles_[ptResphiindex]->Fill(itT->phi,itT->ptError/itT->pt);
1045  static const int ptResetaindex = this->GetIndex(vTrackProfiles_,"p_ptResolution_vs_eta");
1046  vTrackProfiles_[ptResetaindex]->Fill(itT->eta,itT->ptError/itT->pt);
1047 
1048  // Fill 2D track histos
1049  static const int d0phiindex_2d = this->GetIndex(vTrack2DHistos_,"h2_d0_vs_phi");
1050  vTrack2DHistos_[d0phiindex_2d]->Fill(itT->phi,itT->d0);
1051  static const int dzphiindex_2d = this->GetIndex(vTrack2DHistos_,"h2_dz_vs_phi");
1052  vTrack2DHistos_[dzphiindex_2d]->Fill(itT->phi,itT->dz);
1053  static const int d0etaindex_2d = this->GetIndex(vTrack2DHistos_,"h2_d0_vs_eta");
1054  vTrack2DHistos_[d0etaindex_2d]->Fill(itT->eta,itT->d0);
1055  static const int dzetaindex_2d = this->GetIndex(vTrack2DHistos_,"h2_dz_vs_eta");
1056  vTrack2DHistos_[dzetaindex_2d]->Fill(itT->eta,itT->dz);
1057  static const int chiphiindex_2d = this->GetIndex(vTrack2DHistos_,"h2_chi2_vs_phi");
1058  vTrack2DHistos_[chiphiindex_2d]->Fill(itT->phi,itT->chi2);
1059  static const int chiProbphiindex_2d = this->GetIndex(vTrack2DHistos_,"h2_chi2Prob_vs_phi");
1060  vTrack2DHistos_[chiProbphiindex_2d]->Fill(itT->phi,itT->chi2Prob);
1061  static const int chiProbabsd0index_2d = this->GetIndex(vTrack2DHistos_,"h2_chi2Prob_vs_d0");
1062  vTrack2DHistos_[chiProbabsd0index_2d]->Fill(fabs(itT->d0),itT->chi2Prob);
1063  static const int normchiphiindex_2d = this->GetIndex(vTrack2DHistos_,"h2_normchi2_vs_phi");
1064  vTrack2DHistos_[normchiphiindex_2d]->Fill(itT->phi,itT->normchi2);
1065  static const int chietaindex_2d = this->GetIndex(vTrack2DHistos_,"h2_chi2_vs_eta");
1066  vTrack2DHistos_[chietaindex_2d]->Fill(itT->eta,itT->chi2);
1067  static const int chiProbetaindex_2d = this->GetIndex(vTrack2DHistos_,"h2_chi2Prob_vs_eta");
1068  vTrack2DHistos_[chiProbetaindex_2d]->Fill(itT->eta,itT->chi2Prob);
1069  static const int normchietaindex_2d = this->GetIndex(vTrack2DHistos_,"h2_normchi2_vs_eta");
1070  vTrack2DHistos_[normchietaindex_2d]->Fill(itT->eta,itT->normchi2);
1071  static const int kappaphiindex_2d = this->GetIndex(vTrack2DHistos_,"h2_kappa_vs_phi");
1072  vTrack2DHistos_[kappaphiindex_2d]->Fill(itT->phi,itT->kappa);
1073  static const int kappaetaindex_2d = this->GetIndex(vTrack2DHistos_,"h2_kappa_vs_eta");
1074  vTrack2DHistos_[kappaetaindex_2d]->Fill(itT->eta,itT->kappa);
1075  static const int normchi2kappa_2d = this->GetIndex(vTrack2DHistos_,"h2_normchi2_vs_kappa");
1076  vTrack2DHistos_[normchi2kappa_2d]->Fill(itT->normchi2,itT->kappa);
1077 
1078  // hit quantities: residuals, normalized residuals
1079  for (std::vector<TrackerValidationVariables::AVHitStruct>::const_iterator itH = itT->hits.begin();
1080  itH != itT->hits.end();
1081  ++itH) {
1082 
1083  DetId detid(itH->rawDetId);
1084  ModuleHistos &histStruct = this->getHistStructFromMap(detid);
1085 
1086  // fill histos in local coordinates if set in cf
1087  if (lCoorHistOn_) {
1088  histStruct.ResHisto->Fill(itH->resX);
1089  if(itH->resErrX != 0) histStruct.NormResHisto->Fill(itH->resX/itH->resErrX);
1090  if (this->isPixel(detid.subdetId()) || stripYResiduals_ ) {
1091  histStruct.ResYHisto->Fill(itH->resY);
1092  // here add un-primed normalised y-residuals if wanted
1093  }
1094  }
1095  if (itH->resXprime != -999.) {
1096  histStruct.ResXprimeHisto->Fill(itH->resXprime);
1097 
1098  /******************************* Fill 2-D histo ResX vs momenta *****************************/
1099  if (detid.subdetId() == PixelSubdetector::PixelBarrel) {
1100  static const int resXvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resXprime_pixB");
1101  vTrack2DHistos_[resXvsPindex_2d]->Fill(itT->p,itH->resXprime);
1102  }
1103  if (detid.subdetId() == PixelSubdetector::PixelEndcap) {
1104  static const int resXvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resXprime_pixE");
1105  vTrack2DHistos_[resXvsPindex_2d]->Fill(itT->p,itH->resXprime);
1106  }
1107  if (detid.subdetId() == StripSubdetector::TIB) {
1108  static const int resXvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resXprime_TIB");
1109  vTrack2DHistos_[resXvsPindex_2d]->Fill(itT->p,itH->resXprime);
1110  }
1111  if (detid.subdetId() == StripSubdetector::TID) {
1112  static const int resXvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resXprime_TID");
1113  vTrack2DHistos_[resXvsPindex_2d]->Fill(itT->p,itH->resXprime);
1114  }
1115  if (detid.subdetId() == StripSubdetector::TOB) {
1116  static const int resXvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resXprime_TOB");
1117  vTrack2DHistos_[resXvsPindex_2d]->Fill(itT->p,itH->resXprime);
1118  }
1119  if (detid.subdetId() == StripSubdetector::TEC) {
1120  static const int resXvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resXprime_TEC");
1121  vTrack2DHistos_[resXvsPindex_2d]->Fill(itT->p,itH->resXprime);
1122  }
1123  /******************************************/
1124 
1125  if ( moduleLevelProfiles_ && itH->inside ) {
1126  float tgalpha = tan(itH->localAlpha);
1127  if ( fabs(tgalpha)!=0 ){
1128  histStruct.LocalX->Fill(itH->localXnorm, tgalpha*tgalpha);
1129  histStruct.LocalY->Fill(itH->localYnorm, tgalpha*tgalpha);
1130 /* if (this->isEndCap(detid.subdetId()) && !this->isPixel(detid.subdetId())) {
1131  if((itH->resX)*(itH->resXprime)>0){
1132  histStruct.ResXvsXProfile->Fill(itH->localXnorm, itH->resXatTrkY/tgalpha, tgalpha*tgalpha);
1133  histStruct.ResXvsYProfile->Fill(itH->localYnorm, itH->resXatTrkY/tgalpha, tgalpha*tgalpha);
1134  } else {
1135  histStruct.ResXvsXProfile->Fill(itH->localXnorm, (-1)*itH->resXatTrkY/tgalpha, tgalpha*tgalpha);
1136  histStruct.ResXvsYProfile->Fill(itH->localYnorm, (-1)*itH->resXatTrkY/tgalpha, tgalpha*tgalpha);
1137  }
1138 
1139  }else {
1140 */
1141  histStruct.ResXvsXProfile->Fill(itH->localXnorm, itH->resXatTrkY/tgalpha, tgalpha*tgalpha);
1142  histStruct.ResXvsYProfile->Fill(itH->localYnorm, itH->resXatTrkY/tgalpha, tgalpha*tgalpha);
1143 
1144 // }
1145 
1146  }
1147  }
1148 
1149  if(itH->resXprimeErr != 0 && itH->resXprimeErr != -999 ) {
1150  histStruct.NormResXprimeHisto->Fill(itH->resXprime/itH->resXprimeErr);
1151  }
1152  }
1153 
1154  if (itH->resYprime != -999.) {
1155  if (this->isPixel(detid.subdetId()) || stripYResiduals_ ) {
1156  histStruct.ResYprimeHisto->Fill(itH->resYprime);
1157 
1158  /******************************* Fill 2-D histo ResY vs momenta *****************************/
1159  if (detid.subdetId() == PixelSubdetector::PixelBarrel) {
1160  static const int resYvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resYprime_pixB");
1161  vTrack2DHistos_[resYvsPindex_2d]->Fill(itT->p,itH->resYprime);
1162  }
1163  if (detid.subdetId() == PixelSubdetector::PixelEndcap) {
1164  static const int resYvsPindex_2d = this->GetIndex(vTrack2DHistos_,"p_vs_resYprime_pixE");
1165  vTrack2DHistos_[resYvsPindex_2d]->Fill(itT->p,itH->resYprime);
1166  }
1167  /******************************************/
1168 
1169  if ( moduleLevelProfiles_ && itH->inside ) {
1170  float tgbeta = tan(itH->localBeta);
1171  if ( fabs(tgbeta)!=0 ){
1172 /* if (this->isEndCap(detid.subdetId()) && !this->isPixel(detid.subdetId())) {
1173 
1174  if((itH->resY)*(itH->resYprime)>0){
1175  histStruct.ResYvsXProfile->Fill(itH->localXnorm, itH->resYprime/tgbeta, tgbeta*tgbeta);
1176  histStruct.ResYvsYProfile->Fill(itH->localYnorm, itH->resYprime/tgbeta, tgbeta*tgbeta);
1177  } else {
1178  histStruct.ResYvsXProfile->Fill(itH->localXnorm, (-1)*itH->resYprime/tgbeta, tgbeta*tgbeta);
1179  histStruct.ResYvsYProfile->Fill(itH->localYnorm, (-1)*itH->resYprime/tgbeta, tgbeta*tgbeta);
1180  }
1181 
1182  }else {
1183 */
1184  histStruct.ResYvsXProfile->Fill(itH->localXnorm, itH->resY/tgbeta, tgbeta*tgbeta);
1185  histStruct.ResYvsYProfile->Fill(itH->localYnorm, itH->resY/tgbeta, tgbeta*tgbeta);
1186 // }
1187  }
1188  }
1189 
1190  if (itH->resYprimeErr != 0 && itH->resYprimeErr != -999. ) {
1191  histStruct.NormResYprimeHisto->Fill(itH->resYprime/itH->resYprimeErr);
1192  }
1193  }
1194  }
1195 
1196  } // finish loop over hit quantities
1197  } // finish loop over track quantities
1198 
1199  if (useOverflowForRMS_) TH1::StatOverflows(kFALSE);
1200 }
bool isPixel(uint32_t subDetId)
std::vector< TH1 * > vTrack2DHistos_
int GetIndex(const std::vector< OBJECT_TYPE * > &vec, const TString &name)
ModuleHistos & getHistStructFromMap(const DetId &detid)
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
virtual void checkBookHists(const edm::EventSetup &setup)
Definition: DetId.h:18
std::vector< TH1 * > vTrackProfiles_
const edm::ParameterSet parSet_
void TrackerOfflineValidation::bookDirHists ( DirectoryWrapper tfd,
const Alignable ali,
const TrackerTopology tTopo 
)
private

Definition at line 595 of file TrackerOfflineValidation.cc.

References Alignable::alignableObjectId(), bookHists(), makeMuonMisalignmentScenario::components, Alignable::components(), dqmMode_, f, i, AlignableObjectId::idToString(), isDetOrDetUnit(), LogDebug, moduleDirectory_, findQualityFiles::size, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by checkBookHists().

596 {
597  std::vector<Alignable*> alivec(ali.components());
598  for(int i=0, iEnd = ali.components().size();i < iEnd; ++i) {
599  std::string structurename = AlignableObjectId::idToString((alivec)[i]->alignableObjectId());
600  LogDebug("TrackerOfflineValidation") << "StructureName = " << structurename;
601  std::stringstream dirname;
602  dirname << structurename;
603  // add no suffix counter to Strip and Pixel, just aesthetics
604  if (structurename != "Strip" && structurename != "Pixel") dirname << "_" << i+1;
605 
606  if (structurename.find("Endcap",0) != std::string::npos ) {
607  DirectoryWrapper f(tfd,dirname.str(),moduleDirectory_,dqmMode_);
608  bookHists(f, *(alivec)[i], tTopo, ali.alignableObjectId() , i);
609  bookDirHists( f, *(alivec)[i], tTopo);
610  } else if( !(this->isDetOrDetUnit( (alivec)[i]->alignableObjectId()) )
611  || alivec[i]->components().size() > 1) {
612  DirectoryWrapper f(tfd,dirname.str(),moduleDirectory_,dqmMode_);
613  bookHists(tfd, *(alivec)[i], tTopo, ali.alignableObjectId() , i);
614  bookDirHists( f, *(alivec)[i], tTopo);
615  } else {
616  bookHists(tfd, *(alivec)[i], tTopo, ali.alignableObjectId() , i);
617  }
618  }
619 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
virtual Alignables components() const =0
Return vector of all direct components.
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
double f[11][100]
bool isDetOrDetUnit(align::StructureType type)
void bookDirHists(DirectoryWrapper &tfd, const Alignable &ali, const TrackerTopology *tTopo)
static const char * idToString(align::StructureType type)
tuple size
Write out results.
void bookHists(DirectoryWrapper &tfd, const Alignable &ali, const TrackerTopology *tTopo, align::StructureType type, int i)
void TrackerOfflineValidation::bookGlobalHists ( DirectoryWrapper tfd)
private

Definition at line 422 of file TrackerOfflineValidation.cc.

References TrackerOfflineValidation::DirectoryWrapper::make(), vTrack2DHistos_, vTrackHistos_, and vTrackProfiles_.

Referenced by checkBookHists().

423 {
424 
425  vTrackHistos_.push_back(tfd.make<TH1F>("h_tracketa",
426  "Track #eta;#eta_{Track};Number of Tracks",
427  90,-3.,3.));
428  vTrackHistos_.push_back(tfd.make<TH1F>("h_trackphi",
429  "Track #phi;#phi_{Track};Number of Tracks",
430  90,-3.15,3.15));
431  vTrackHistos_.push_back(tfd.make<TH1F>("h_trackNumberOfValidHits",
432  "Track # of valid hits;# of valid hits _{Track};Number of Tracks",
433  40,0.,40.));
434  vTrackHistos_.push_back(tfd.make<TH1F>("h_trackNumberOfLostHits",
435  "Track # of lost hits;# of lost hits _{Track};Number of Tracks",
436  10,0.,10.));
437  vTrackHistos_.push_back(tfd.make<TH1F>("h_curvature",
438  "Curvature #kappa;#kappa_{Track};Number of Tracks",
439  100,-.05,.05));
440  vTrackHistos_.push_back(tfd.make<TH1F>("h_curvature_pos",
441  "Curvature |#kappa| Positive Tracks;|#kappa_{pos Track}|;Number of Tracks",
442  100,.0,.05));
443  vTrackHistos_.push_back(tfd.make<TH1F>("h_curvature_neg",
444  "Curvature |#kappa| Negative Tracks;|#kappa_{neg Track}|;Number of Tracks",
445  100,.0,.05));
446  vTrackHistos_.push_back(tfd.make<TH1F>("h_diff_curvature",
447  "Curvature |#kappa| Tracks Difference;|#kappa_{Track}|;# Pos Tracks - # Neg Tracks",
448  100,.0,.05));
449  vTrackHistos_.push_back(tfd.make<TH1F>("h_chi2",
450  "#chi^{2};#chi^{2}_{Track};Number of Tracks",
451  500,-0.01,500.));
452  vTrackHistos_.push_back(tfd.make<TH1F>("h_chi2Prob",
453  "#chi^{2} probability;#chi^{2}prob_{Track};Number of Tracks",
454  100,0.0,1.));
455  vTrackHistos_.push_back(tfd.make<TH1F>("h_normchi2",
456  "#chi^{2}/ndof;#chi^{2}/ndof;Number of Tracks",
457  100,-0.01,10.));
458  vTrackHistos_.push_back(tfd.make<TH1F>("h_pt",
459  "p_{T}^{track};p_{T}^{track} [GeV];Number of Tracks",
460  250,0.,250));
461  vTrackHistos_.push_back(tfd.make<TH1F>("h_ptResolution",
462  "#delta{p_{T}/p_{T}^{track}};#delta_{p_{T}/p_{T}^{track}};Number of Tracks",
463  100,0.,0.5));
464 
465  vTrackProfiles_.push_back(tfd.make<TProfile>("p_d0_vs_phi",
466  "Transverse Impact Parameter vs. #phi;#phi_{Track};#LT d_{0} #GT [cm]",
467  100,-3.15,3.15));
468  vTrackProfiles_.push_back(tfd.make<TProfile>("p_dz_vs_phi",
469  "Longitudinal Impact Parameter vs. #phi;#phi_{Track};#LT d_{z} #GT [cm]",
470  100,-3.15,3.15));
471  vTrackProfiles_.push_back(tfd.make<TProfile>("p_d0_vs_eta",
472  "Transverse Impact Parameter vs. #eta;#eta_{Track};#LT d_{0} #GT [cm]",
473  100,-3.15,3.15));
474  vTrackProfiles_.push_back(tfd.make<TProfile>("p_dz_vs_eta",
475  "Longitudinal Impact Parameter vs. #eta;#eta_{Track};#LT d_{z} #GT [cm]",
476  100,-3.15,3.15));
477  vTrackProfiles_.push_back(tfd.make<TProfile>("p_chi2_vs_phi",
478  "#chi^{2} vs. #phi;#phi_{Track};#LT #chi^{2} #GT",
479  100,-3.15,3.15));
480  vTrackProfiles_.push_back(tfd.make<TProfile>("p_chi2Prob_vs_phi",
481  "#chi^{2} probablility vs. #phi;#phi_{Track};#LT #chi^{2} probability#GT",
482  100,-3.15,3.15));
483  vTrackProfiles_.push_back(tfd.make<TProfile>("p_chi2Prob_vs_d0",
484  "#chi^{2} probablility vs. |d_{0}|;|d_{0}|[cm];#LT #chi^{2} probability#GT",
485  100,0,80));
486  vTrackProfiles_.push_back(tfd.make<TProfile>("p_normchi2_vs_phi",
487  "#chi^{2}/ndof vs. #phi;#phi_{Track};#LT #chi^{2}/ndof #GT",
488  100,-3.15,3.15));
489  vTrackProfiles_.push_back(tfd.make<TProfile>("p_chi2_vs_eta",
490  "#chi^{2} vs. #eta;#eta_{Track};#LT #chi^{2} #GT",
491  100,-3.15,3.15));
492  //variable binning for chi2/ndof vs. pT
493  double xBins[19]={0.,0.15,0.5,1.,1.5,2.,2.5,3.,3.5,4.,4.5,5.,7.,10.,15.,25.,40.,100.,200.};
494  vTrackProfiles_.push_back(tfd.make<TProfile>("p_normchi2_vs_pt",
495  "norm #chi^{2} vs. p_{T}_{Track}; p_{T}_{Track};#LT #chi^{2}/ndof #GT",
496  18,xBins));
497 
498  vTrackProfiles_.push_back(tfd.make<TProfile>("p_normchi2_vs_p",
499  "#chi^{2}/ndof vs. p_{Track};p_{Track};#LT #chi^{2}/ndof #GT",
500  18,xBins));
501  vTrackProfiles_.push_back(tfd.make<TProfile>("p_chi2Prob_vs_eta",
502  "#chi^{2} probability vs. #eta;#eta_{Track};#LT #chi^{2} probability #GT",
503  100,-3.15,3.15));
504  vTrackProfiles_.push_back(tfd.make<TProfile>("p_normchi2_vs_eta",
505  "#chi^{2}/ndof vs. #eta;#eta_{Track};#LT #chi^{2}/ndof #GT",
506  100,-3.15,3.15));
507  vTrackProfiles_.push_back(tfd.make<TProfile>("p_kappa_vs_phi",
508  "#kappa vs. #phi;#phi_{Track};#kappa",
509  100,-3.15,3.15));
510  vTrackProfiles_.push_back(tfd.make<TProfile>("p_kappa_vs_eta",
511  "#kappa vs. #eta;#eta_{Track};#kappa",
512  100,-3.15,3.15));
513  vTrackProfiles_.push_back(tfd.make<TProfile>("p_ptResolution_vs_phi",
514  "#delta_{p_{T}}/p_{T}^{track};#phi^{track};#delta_{p_{T}}/p_{T}^{track}",
515  100, -3.15,3.15));
516  vTrackProfiles_.push_back(tfd.make<TProfile>("p_ptResolution_vs_eta",
517  "#delta_{p_{T}}/p_{T}^{track};#eta^{track};#delta_{p_{T}}/p_{T}^{track}",
518  100, -3.15,3.15));
519 
520  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_d0_vs_phi",
521  "Transverse Impact Parameter vs. #phi;#phi_{Track};d_{0} [cm]",
522  100, -3.15, 3.15, 100,-1.,1.) );
523  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_dz_vs_phi",
524  "Longitudinal Impact Parameter vs. #phi;#phi_{Track};d_{z} [cm]",
525  100, -3.15, 3.15, 100,-100.,100.));
526  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_d0_vs_eta",
527  "Transverse Impact Parameter vs. #eta;#eta_{Track};d_{0} [cm]",
528  100, -3.15, 3.15, 100,-1.,1.));
529  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_dz_vs_eta",
530  "Longitudinal Impact Parameter vs. #eta;#eta_{Track};d_{z} [cm]",
531  100, -3.15, 3.15, 100,-100.,100.));
532  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_chi2_vs_phi",
533  "#chi^{2} vs. #phi;#phi_{Track};#chi^{2}",
534  100, -3.15, 3.15, 500, 0., 500.));
535  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_chi2Prob_vs_phi",
536  "#chi^{2} probability vs. #phi;#phi_{Track};#chi^{2} probability",
537  100, -3.15, 3.15, 100, 0., 1.));
538  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_chi2Prob_vs_d0",
539  "#chi^{2} probability vs. |d_{0}|;|d_{0}| [cm];#chi^{2} probability",
540  100, 0, 80, 100, 0., 1.));
541  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_normchi2_vs_phi",
542  "#chi^{2}/ndof vs. #phi;#phi_{Track};#chi^{2}/ndof",
543  100, -3.15, 3.15, 100, 0., 10.));
544  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_chi2_vs_eta",
545  "#chi^{2} vs. #eta;#eta_{Track};#chi^{2}",
546  100, -3.15, 3.15, 500, 0., 500.));
547  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_chi2Prob_vs_eta",
548  "#chi^{2} probaility vs. #eta;#eta_{Track};#chi^{2} probability",
549  100, -3.15, 3.15, 100, 0., 1.));
550  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_normchi2_vs_eta",
551  "#chi^{2}/ndof vs. #eta;#eta_{Track};#chi^{2}/ndof",
552  100,-3.15,3.15, 100, 0., 10.));
553  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_kappa_vs_phi",
554  "#kappa vs. #phi;#phi_{Track};#kappa",
555  100,-3.15,3.15, 100, .0,.05));
556  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_kappa_vs_eta",
557  "#kappa vs. #eta;#eta_{Track};#kappa",
558  100,-3.15,3.15, 100, .0,.05));
559  vTrack2DHistos_.push_back(tfd.make<TH2F>("h2_normchi2_vs_kappa",
560  "#kappa vs. #chi^{2}/ndof;#chi^{2}/ndof;#kappa",
561  100,0.,10, 100,-.03,.03));
562 
563  /****************** Definition of 2-D Histos of ResX vs momenta ****************************/
564  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resXprime_pixB",
565  "#momentum vs. #resX in pixB;#momentum;#resX",
566  15,0.,15., 200, -0.1,0.1));
567  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resXprime_pixE",
568  "#momentum vs. #resX in pixE;#momentum;#resX",
569  15,0.,15., 200, -0.1,0.1));
570  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resXprime_TIB",
571  "#momentum vs. #resX in TIB;#momentum;#resX",
572  15,0.,15., 200, -0.1,0.1));
573  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resXprime_TID",
574  "#momentum vs. #resX in TID;#momentum;#resX",
575  15,0.,15., 200, -0.1,0.1));
576  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resXprime_TOB",
577  "#momentum vs. #resX in TOB;#momentum;#resX",
578  15,0.,15., 200, -0.1,0.1));
579  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resXprime_TEC",
580  "#momentum vs. #resX in TEC;#momentum;#resX",
581  15,0.,15., 200, -0.1,0.1));
582 
583  /****************** Definition of 2-D Histos of ResY vs momenta ****************************/
584  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resYprime_pixB",
585  "#momentum vs. #resY in pixB;#momentum;#resY",
586  15,0.,15., 200, -0.1,0.1));
587  vTrack2DHistos_.push_back(tfd.make<TH2F>("p_vs_resYprime_pixE",
588  "#momentum vs. #resY in pixE;#momentum;#resY",
589  15,0.,15., 200, -0.1,0.1));
590 
591 }
std::vector< TH1 * > vTrack2DHistos_
std::vector< TH1 * > vTrackProfiles_
void TrackerOfflineValidation::bookHists ( DirectoryWrapper tfd,
const Alignable ali,
const TrackerTopology tTopo,
align::StructureType  type,
int  i 
)
private

Definition at line 623 of file TrackerOfflineValidation.cc.

References align::AlignableDetUnit, Alignable::alignableObjectId(), bookTH1F(), bookTProfile(), dqmMode_, getBinning(), getHistStructFromMap(), Alignable::id(), align::invalid, isBarrel(), isDetOrDetUnit(), isEndCap(), isPixel(), lCoorHistOn_, TrackerOfflineValidation::ModuleHistos::LocalX, TrackerOfflineValidation::ModuleHistos::LocalY, moduleLevelHistsTransient_, moduleLevelProfiles_, pileupCalc::nbins, TrackerOfflineValidation::ModuleHistos::NormResHisto, TrackerOfflineValidation::ModuleHistos::NormResXprimeHisto, TrackerOfflineValidation::ModuleHistos::NormResYprimeHisto, NormXprimeResidual, NormXResidual, NormYprimeResidual, TrackerOfflineValidation::ModuleHistos::ResHisto, TrackerOfflineValidation::ModuleHistos::ResXprimeHisto, TrackerOfflineValidation::ModuleHistos::ResXvsXProfile, TrackerOfflineValidation::ModuleHistos::ResXvsYProfile, TrackerOfflineValidation::ModuleHistos::ResYHisto, TrackerOfflineValidation::ModuleHistos::ResYprimeHisto, TrackerOfflineValidation::ModuleHistos::ResYvsXProfile, TrackerOfflineValidation::ModuleHistos::ResYvsYProfile, AlCaHLTBitMon_QueryRunRegistry::string, stripYResiduals_, TrackerAlignableId::typeAndLayerFromDetId(), SiStripMonitorClusterAlca_cfi::xmax, SiStripMonitorClusterAlca_cfi::xmin, XprimeResidual, XResidual, XResidualProfile, SiStripMonitorClusterAlca_cfi::ymax, SiStripMonitorClusterAlca_cfi::ymin, YprimeResidual, YResidual, and YResidualProfile.

Referenced by bookDirHists().

624 {
625  TrackerAlignableId aliid;
626  const DetId id = ali.id();
627 
628  // comparing subdetandlayer to subdetIds gives a warning at compile time
629  // -> subdetandlayer could also be pair<uint,uint> but this has to be adapted
630  // in AlignableObjId
631  std::pair<int,int> subdetandlayer = aliid.typeAndLayerFromDetId(id, tTopo);
632 
634 
635  // are we on or just above det, detunit level respectively?
636  if (type == align::AlignableDetUnit )subtype = type;
637  else if( this->isDetOrDetUnit(ali.alignableObjectId()) ) subtype = ali.alignableObjectId();
638 
639  // construct histogramm title and name
640  std::stringstream histoname, histotitle, normhistoname, normhistotitle,
641  yhistoname, yhistotitle,
642  xprimehistoname, xprimehistotitle, normxprimehistoname, normxprimehistotitle,
643  yprimehistoname, yprimehistotitle, normyprimehistoname, normyprimehistotitle,
644  localxname, localxtitle, localyname, localytitle,
645  resxvsxprofilename, resxvsxprofiletitle, resyvsxprofilename, resyvsxprofiletitle,
646  resxvsyprofilename, resxvsyprofiletitle, resyvsyprofilename, resyvsyprofiletitle;
647 
648  std::string wheel_or_layer;
649 
650  if( this->isEndCap(static_cast<uint32_t>(subdetandlayer.first)) ) wheel_or_layer = "_wheel_";
651  else if ( this->isBarrel(static_cast<uint32_t>(subdetandlayer.first)) ) wheel_or_layer = "_layer_";
652  else edm::LogWarning("TrackerOfflineValidation") << "@SUB=TrackerOfflineValidation::bookHists"
653  << "Unknown subdetid: " << subdetandlayer.first;
654 
655  histoname << "h_residuals_subdet_" << subdetandlayer.first
656  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
657  yhistoname << "h_y_residuals_subdet_" << subdetandlayer.first
658  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
659  xprimehistoname << "h_xprime_residuals_subdet_" << subdetandlayer.first
660  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
661  yprimehistoname << "h_yprime_residuals_subdet_" << subdetandlayer.first
662  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
663  normhistoname << "h_normresiduals_subdet_" << subdetandlayer.first
664  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
665  normxprimehistoname << "h_normxprimeresiduals_subdet_" << subdetandlayer.first
666  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
667  normyprimehistoname << "h_normyprimeresiduals_subdet_" << subdetandlayer.first
668  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
669  histotitle << "X Residual for module " << id.rawId() << ";x_{tr} - x_{hit} [cm]";
670  yhistotitle << "Y Residual for module " << id.rawId() << ";y_{tr} - y_{hit} [cm]";
671  normhistotitle << "Normalized Residual for module " << id.rawId() << ";x_{tr} - x_{hit}/#sigma";
672  xprimehistotitle << "X' Residual for module " << id.rawId() << ";(x_{tr} - x_{hit})' [cm]";
673  normxprimehistotitle << "Normalized X' Residual for module " << id.rawId() << ";(x_{tr} - x_{hit})'/#sigma";
674  yprimehistotitle << "Y' Residual for module " << id.rawId() << ";(y_{tr} - y_{hit})' [cm]";
675  normyprimehistotitle << "Normalized Y' Residual for module " << id.rawId() << ";(y_{tr} - y_{hit})'/#sigma";
676 
677  if ( moduleLevelProfiles_ ) {
678  localxname << "h_localx_subdet_" << subdetandlayer.first
679  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
680  localyname << "h_localy_subdet_" << subdetandlayer.first
681  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
682  localxtitle << "u local for module " << id.rawId() << "; u_{tr,r}";
683  localytitle << "v local for module " << id.rawId() << "; v_{tr,r}";
684 
685  resxvsxprofilename << "p_residuals_x_vs_x_subdet_" << subdetandlayer.first
686  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
687  resyvsxprofilename << "p_residuals_y_vs_x_subdet_" << subdetandlayer.first
688  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
689  resxvsyprofilename << "p_residuals_x_vs_y_subdet_" << subdetandlayer.first
690  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
691  resyvsyprofilename << "p_residuals_y_vs_y_subdet_" << subdetandlayer.first
692  << wheel_or_layer << subdetandlayer.second << "_module_" << id.rawId();
693  resxvsxprofiletitle << "U Residual vs u for module " << id.rawId() << "; u_{tr,r} ;(u_{tr} - u_{hit})/tan#alpha [cm]";
694  resyvsxprofiletitle << "V Residual vs u for module " << id.rawId() << "; u_{tr,r} ;(v_{tr} - v_{hit})/tan#beta [cm]";
695  resxvsyprofiletitle << "U Residual vs v for module " << id.rawId() << "; v_{tr,r} ;(u_{tr} - u_{hit})/tan#alpha [cm]";
696  resyvsyprofiletitle << "V Residual vs v for module " << id.rawId() << "; v_{tr,r} ;(v_{tr} - v_{hit})/tan#beta [cm]";
697  }
698 
699  if( this->isDetOrDetUnit( subtype ) ) {
700  ModuleHistos &histStruct = this->getHistStructFromMap(id);
701  int nbins = 0;
702  double xmin = 0., xmax = 0.;
703  double ymin = -0.1, ymax = 0.1;
704 
705  // do not allow transient hists in DQM mode
706  bool moduleLevelHistsTransient(moduleLevelHistsTransient_);
707  if (dqmMode_) moduleLevelHistsTransient = false;
708 
709  // decide via cfg if hists in local coordinates should be booked
710  if(lCoorHistOn_) {
711  this->getBinning(id.subdetId(), XResidual, nbins, xmin, xmax);
712  histStruct.ResHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
713  histoname.str().c_str(),histotitle.str().c_str(),
714  nbins, xmin, xmax);
715  this->getBinning(id.subdetId(), NormXResidual, nbins, xmin, xmax);
716  histStruct.NormResHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
717  normhistoname.str().c_str(),normhistotitle.str().c_str(),
718  nbins, xmin, xmax);
719  }
720  this->getBinning(id.subdetId(), XprimeResidual, nbins, xmin, xmax);
721  histStruct.ResXprimeHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
722  xprimehistoname.str().c_str(),xprimehistotitle.str().c_str(),
723  nbins, xmin, xmax);
724  this->getBinning(id.subdetId(), NormXprimeResidual, nbins, xmin, xmax);
725  histStruct.NormResXprimeHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
726  normxprimehistoname.str().c_str(),normxprimehistotitle.str().c_str(),
727  nbins, xmin, xmax);
728 
729  if ( moduleLevelProfiles_ ) {
730  this->getBinning(id.subdetId(), XResidualProfile, nbins, xmin, xmax);
731 
732  histStruct.LocalX = this->bookTH1F(moduleLevelHistsTransient, tfd,
733  localxname.str().c_str(),localxtitle.str().c_str(),
734  nbins, xmin, xmax);
735  histStruct.LocalY = this->bookTH1F(moduleLevelHistsTransient, tfd,
736  localyname.str().c_str(),localytitle.str().c_str(),
737  nbins, xmin, xmax);
738  histStruct.ResXvsXProfile = this->bookTProfile(moduleLevelHistsTransient, tfd,
739  resxvsxprofilename.str().c_str(),resxvsxprofiletitle.str().c_str(),
740  nbins, xmin, xmax, ymin, ymax);
741  histStruct.ResXvsXProfile->Sumw2(); // to be filled with weights, so uncertainties need sum of square of weights
742  histStruct.ResXvsYProfile = this->bookTProfile(moduleLevelHistsTransient, tfd,
743  resxvsyprofilename.str().c_str(),resxvsyprofiletitle.str().c_str(),
744  nbins, xmin, xmax, ymin, ymax);
745  histStruct.ResXvsYProfile->Sumw2(); // to be filled with weights, so uncertainties need sum of square of weights
746  }
747 
748  if( this->isPixel(subdetandlayer.first) || stripYResiduals_ ) {
749  this->getBinning(id.subdetId(), YprimeResidual, nbins, xmin, xmax);
750  histStruct.ResYprimeHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
751  yprimehistoname.str().c_str(),yprimehistotitle.str().c_str(),
752  nbins, xmin, xmax);
753  if (lCoorHistOn_) { // un-primed y-residual
754  this->getBinning(id.subdetId(), YResidual, nbins, xmin, xmax);
755  histStruct.ResYHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
756  yhistoname.str().c_str(), yhistotitle.str().c_str(),
757  nbins, xmin, xmax);
758  }
759  this->getBinning(id.subdetId(), NormYprimeResidual, nbins, xmin, xmax);
760  histStruct.NormResYprimeHisto = this->bookTH1F(moduleLevelHistsTransient, tfd,
761  normyprimehistoname.str().c_str(),normyprimehistotitle.str().c_str(),
762  nbins, xmin, xmax);
763  // Here we could add un-primed normalised y-residuals if(lCoorHistOn_)...
764  if ( moduleLevelProfiles_ ) {
765  this->getBinning(id.subdetId(), YResidualProfile, nbins, xmin, xmax);
766 
767  histStruct.ResYvsXProfile = this->bookTProfile(moduleLevelHistsTransient, tfd,
768  resyvsxprofilename.str().c_str(),resyvsxprofiletitle.str().c_str(),
769  nbins, xmin, xmax, ymin, ymax);
770  histStruct.ResYvsXProfile->Sumw2(); // to be filled with weights, so uncertainties need sum of square of weights
771  histStruct.ResYvsYProfile = this->bookTProfile(moduleLevelHistsTransient, tfd,
772  resyvsyprofilename.str().c_str(),resyvsyprofiletitle.str().c_str(),
773  nbins, xmin, xmax, ymin, ymax);
774  histStruct.ResYvsYProfile->Sumw2(); // to be filled with weights, so uncertainties need sum of square of weights
775  }
776  }
777  }
778 }
type
Definition: HCALResponse.h:21
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
std::pair< int, int > typeAndLayerFromDetId(const DetId &detId, const TrackerTopology *tTopo) const
bool isPixel(uint32_t subDetId)
TH1 * bookTH1F(bool isTransient, DirectoryWrapper &tfd, const char *histName, const char *histTitle, int nBinsX, double lowX, double highX)
ModuleHistos & getHistStructFromMap(const DetId &detid)
void getBinning(uint32_t subDetId, TrackerOfflineValidation::HistogrammType residualtype, int &nBinsX, double &lowerBoundX, double &upperBoundX)
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
TProfile * bookTProfile(bool isTransient, DirectoryWrapper &tfd, const char *histName, const char *histTitle, int nBinsX, double lowX, double highX)
bool isDetOrDetUnit(align::StructureType type)
Definition: DetId.h:18
bool isEndCap(uint32_t subDetId)
bool isBarrel(uint32_t subDetId)
TrackerOfflineValidation::SummaryContainer TrackerOfflineValidation::bookSummaryHists ( DirectoryWrapper tfd,
const Alignable ali,
align::StructureType  type,
int  i 
)
private

Definition at line 1298 of file TrackerOfflineValidation.cc.

References align::AlignableDet, align::AlignableDetUnit, Alignable::alignableObjectId(), Alignable::components(), cond::rpcobgas::detid, getBinning(), getHistStructFromMap(), Alignable::id(), AlignableObjectId::idToString(), isPixel(), j, gen::k, TrackerOfflineValidation::DirectoryWrapper::make(), pileupCalc::nbins, TrackerOfflineValidation::ModuleHistos::NormResXprimeHisto, TrackerOfflineValidation::ModuleHistos::NormResYprimeHisto, NormXprimeResidual, NormYprimeResidual, TrackerOfflineValidation::ModuleHistos::ResXprimeHisto, TrackerOfflineValidation::ModuleHistos::ResYprimeHisto, stripYResiduals_, DetId::subdetId(), summarizeBinInContainer(), indexGen::title, SiStripMonitorClusterAlca_cfi::xmax, SiStripMonitorClusterAlca_cfi::xmin, XprimeResidual, and YprimeResidual.

Referenced by collateSummaryHists().

1300 {
1301  const uint aliSize = ali.components().size();
1302  const align::StructureType alitype = ali.alignableObjectId();
1303  const align::StructureType subtype = ali.components()[0]->alignableObjectId();
1304  const char *aliTypeName = AlignableObjectId::idToString(alitype); // lifetime of char* OK
1305  const char *aliSubtypeName = AlignableObjectId::idToString(subtype);
1306  const char *typeName = AlignableObjectId::idToString(type);
1307 
1308  const DetId aliDetId = ali.id();
1309  // y residuals only if pixel or specially requested for strip:
1310  const bool bookResidY = this->isPixel(aliDetId.subdetId()) || stripYResiduals_;
1311 
1312  SummaryContainer sumContainer;
1313 
1314  // Book summary hists with one bin per component,
1315  // but special case for Det with two DetUnit that we want to summarize one level up
1316  // (e.g. in TOBRods with 12 bins for 6 stereo and 6 rphi DetUnit.)
1317  // component of ali is not Det or Det with just one components
1318  const uint subcompSize = ali.components()[0]->components().size();
1319  if (subtype != align::AlignableDet || subcompSize == 1) { // Det with 1 comp. should not exist anymore...
1320  const TString title(Form("Summary for substructures in %s %d;%s;",aliTypeName,i,aliSubtypeName));
1321 
1322  sumContainer.summaryXResiduals_ = tfd.make<TH1F>(Form("h_summaryX%s_%d",aliTypeName,i),
1323  title + "#LT #Delta x' #GT",
1324  aliSize, 0.5, aliSize+0.5);
1325  sumContainer.summaryNormXResiduals_ = tfd.make<TH1F>(Form("h_summaryNormX%s_%d",aliTypeName,i),
1326  title + "#LT #Delta x'/#sigma #GT",
1327  aliSize,0.5,aliSize+0.5);
1328 
1329  if (bookResidY) {
1330  sumContainer.summaryYResiduals_ = tfd.make<TH1F>(Form("h_summaryY%s_%d",aliTypeName,i),
1331  title + "#LT #Delta y' #GT",
1332  aliSize, 0.5, aliSize+0.5);
1333  sumContainer.summaryNormYResiduals_ = tfd.make<TH1F>(Form("h_summaryNormY%s_%d",aliTypeName,i),
1334  title + "#LT #Delta y'/#sigma #GT",
1335  aliSize,0.5,aliSize+0.5);
1336  }
1337 
1338  } else if (subtype == align::AlignableDet && subcompSize > 1) { // fixed: was aliSize before
1339  if (subcompSize != 2) { // strange... expect only 2 DetUnits in DS layers
1340  // this 2 is hardcoded factor 2 in binning below and also assumed later on
1341  edm::LogError("Alignment") << "@SUB=bookSummaryHists"
1342  << "Det with " << subcompSize << " components";
1343  }
1344  // title contains x-title
1345  const TString title(Form("Summary for substructures in %s %d;%s;", aliTypeName, i,
1346  AlignableObjectId::idToString(ali.components()[0]->components()[0]->alignableObjectId())));
1347 
1348  sumContainer.summaryXResiduals_
1349  = tfd.make<TH1F>(Form("h_summaryX%s_%d", aliTypeName, i),
1350  title + "#LT #Delta x' #GT", (2*aliSize), 0.5, 2*aliSize+0.5);
1351  sumContainer.summaryNormXResiduals_
1352  = tfd.make<TH1F>(Form("h_summaryNormX%s_%d", aliTypeName, i),
1353  title + "#LT #Delta x'/#sigma #GT", (2*aliSize), 0.5, 2*aliSize+0.5);
1354 
1355  if (bookResidY) {
1356  sumContainer.summaryYResiduals_
1357  = tfd.make<TH1F>(Form("h_summaryY%s_%d", aliTypeName, i),
1358  title + "#LT #Delta y' #GT", (2*aliSize), 0.5, 2*aliSize+0.5);
1359  sumContainer.summaryNormYResiduals_
1360  = tfd.make<TH1F>(Form("h_summaryNormY%s_%d", aliTypeName, i),
1361  title + "#LT #Delta y'/#sigma #GT", (2*aliSize), 0.5, 2*aliSize+0.5);
1362  }
1363 
1364  } else {
1365  edm::LogError("TrackerOfflineValidation") << "@SUB=TrackerOfflineValidation::bookSummaryHists"
1366  << "No summary histogramm for hierarchy level "
1367  << aliTypeName << " in subdet " << aliDetId.subdetId();
1368  }
1369 
1370  // Now book hists that just sum up the residual histograms from lower levels.
1371  // Axis title is copied from lowest level module of structure.
1372  // Should be safe that y-hists are only touched if non-null pointers...
1373  int nbins = 0;
1374  double xmin = 0., xmax = 0.;
1375  const TString sumTitle(Form("Residual for %s %d in %s;", aliTypeName, i, typeName));
1376  const ModuleHistos &xTitHists = this->getHistStructFromMap(aliDetId); // for x-axis titles
1377  this->getBinning(aliDetId.subdetId(), XprimeResidual, nbins, xmin, xmax);
1378 
1379  sumContainer.sumXResiduals_ = tfd.make<TH1F>(Form("h_Xprime_%s_%d", aliTypeName, i),
1380  sumTitle + xTitHists.ResXprimeHisto->GetXaxis()->GetTitle(),
1381  nbins, xmin, xmax);
1382 
1383  this->getBinning(aliDetId.subdetId(), NormXprimeResidual, nbins, xmin, xmax);
1384  sumContainer.sumNormXResiduals_ = tfd.make<TH1F>(Form("h_NormXprime_%s_%d",aliTypeName,i),
1385  sumTitle + xTitHists.NormResXprimeHisto->GetXaxis()->GetTitle(),
1386  nbins, xmin, xmax);
1387  if (bookResidY) {
1388  this->getBinning(aliDetId.subdetId(), YprimeResidual, nbins, xmin, xmax);
1389  sumContainer.sumYResiduals_ = tfd.make<TH1F>(Form("h_Yprime_%s_%d",aliTypeName,i),
1390  sumTitle + xTitHists.ResYprimeHisto->GetXaxis()->GetTitle(),
1391  nbins, xmin, xmax);
1392 
1393  this->getBinning(aliDetId.subdetId(), NormYprimeResidual, nbins, xmin, xmax);
1394  sumContainer.sumNormYResiduals_ = tfd.make<TH1F>(Form("h_NormYprime_%s_%d",aliTypeName,i),
1395  sumTitle + xTitHists.NormResYprimeHisto->GetXaxis()->GetTitle(),
1396  nbins, xmin, xmax);
1397  }
1398 
1399  // If we are at the lowest level, we already sum up and fill the summary.
1400 
1401  // special case I: For DetUnits and Dets with only one subcomponent start filling summary histos
1402  if( ( subtype == align::AlignableDet && subcompSize == 1) || subtype == align::AlignableDetUnit ) {
1403  for(uint k = 0; k < aliSize; ++k) {
1404  DetId detid = ali.components()[k]->id();
1405  ModuleHistos &histStruct = this->getHistStructFromMap(detid);
1406  this->summarizeBinInContainer(k+1, detid.subdetId() ,sumContainer, histStruct );
1407  sumContainer.sumXResiduals_->Add(histStruct.ResXprimeHisto);
1408  sumContainer.sumNormXResiduals_->Add(histStruct.NormResXprimeHisto);
1409  if( this->isPixel(detid.subdetId()) || stripYResiduals_ ) {
1410  sumContainer.sumYResiduals_->Add(histStruct.ResYprimeHisto);
1411  sumContainer.sumNormYResiduals_->Add(histStruct.NormResYprimeHisto);
1412  }
1413  }
1414  } else if( subtype == align::AlignableDet && subcompSize > 1) { // fixed: was aliSize before
1415  // special case II: Fill summary histos for dets with two detunits
1416  for(uint k = 0; k < aliSize; ++k) {
1417  for(uint j = 0; j < subcompSize; ++j) { // assumes all have same size (as binning does)
1418  DetId detid = ali.components()[k]->components()[j]->id();
1419  ModuleHistos &histStruct = this->getHistStructFromMap(detid);
1420  this->summarizeBinInContainer(2*k+j+1, detid.subdetId() ,sumContainer, histStruct );
1421  sumContainer.sumXResiduals_->Add( histStruct.ResXprimeHisto);
1422  sumContainer.sumNormXResiduals_->Add( histStruct.NormResXprimeHisto);
1423  if( this->isPixel(detid.subdetId()) || stripYResiduals_ ) {
1424  sumContainer.sumYResiduals_->Add( histStruct.ResYprimeHisto);
1425  sumContainer.sumNormYResiduals_->Add( histStruct.NormResYprimeHisto);
1426  }
1427  }
1428  }
1429  }
1430  return sumContainer;
1431 }
type
Definition: HCALResponse.h:21
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
int i
Definition: DBlmapReader.cc:9
bool isPixel(uint32_t subDetId)
ModuleHistos & getHistStructFromMap(const DetId &detid)
virtual Alignables components() const =0
Return vector of all direct components.
void getBinning(uint32_t subDetId, TrackerOfflineValidation::HistogrammType residualtype, int &nBinsX, double &lowerBoundX, double &upperBoundX)
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
int j
Definition: DBlmapReader.cc:9
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
int k[5][pyjets_maxn]
Definition: DetId.h:18
void summarizeBinInContainer(int bin, SummaryContainer &targetContainer, SummaryContainer &sourceContainer)
static const char * idToString(align::StructureType type)
TH1 * TrackerOfflineValidation::bookTH1F ( bool  isTransient,
DirectoryWrapper tfd,
const char *  histName,
const char *  histTitle,
int  nBinsX,
double  lowX,
double  highX 
)
private

Definition at line 781 of file TrackerOfflineValidation.cc.

References TrackerOfflineValidation::DirectoryWrapper::make(), and vDeleteObjects_.

Referenced by bookHists().

783 {
784  if (isTransient) {
785  vDeleteObjects_.push_back(new TH1F(histName, histTitle, nBinsX, lowX, highX));
786  return vDeleteObjects_.back(); // return last element of vector
787  }
788  else
789  return tfd.make<TH1F>(histName, histTitle, nBinsX, lowX, highX);
790 }
std::vector< TH1 * > vDeleteObjects_
TProfile * TrackerOfflineValidation::bookTProfile ( bool  isTransient,
DirectoryWrapper tfd,
const char *  histName,
const char *  histTitle,
int  nBinsX,
double  lowX,
double  highX 
)
private

Definition at line 792 of file TrackerOfflineValidation.cc.

References TrackerOfflineValidation::DirectoryWrapper::make(), and vDeleteObjects_.

Referenced by bookHists().

794 {
795  if (isTransient) {
796  TProfile * profile = new TProfile(histName, histTitle, nBinsX, lowX, highX);
797  vDeleteObjects_.push_back(profile);
798  return profile;
799  }
800  else
801  return (TProfile*)tfd.make<TProfile>(histName, histTitle, nBinsX, lowX, highX);
802 }
std::vector< TH1 * > vDeleteObjects_
TProfile * TrackerOfflineValidation::bookTProfile ( bool  isTransient,
DirectoryWrapper tfd,
const char *  histName,
const char *  histTitle,
int  nBinsX,
double  lowX,
double  highX,
double  lowY,
double  highY 
)
private

Definition at line 805 of file TrackerOfflineValidation.cc.

References TrackerOfflineValidation::DirectoryWrapper::make(), and vDeleteObjects_.

807 {
808  if (isTransient) {
809  TProfile * profile = new TProfile(histName, histTitle, nBinsX, lowX, highX, lowY, highY);
810  vDeleteObjects_.push_back(profile);
811  return profile;
812  }
813  else
814  return (TProfile*)tfd.make<TProfile>(histName, histTitle, nBinsX, lowX, highX, lowY, highY);
815 }
std::vector< TH1 * > vDeleteObjects_
void TrackerOfflineValidation::checkBookHists ( const edm::EventSetup setup)
privatevirtual

Definition at line 383 of file TrackerOfflineValidation.cc.

References bareTkGeomPtr_, bookDirHists(), bookGlobalHists(), TrackerGeometry::detIds(), TrackerGeometry::detUnitIds(), dqmMode_, edm::EventSetup::get(), moduleDirectory_, edm::ESHandle< class >::product(), AlCaHLTBitMon_QueryRunRegistry::string, and tkGeom_.

Referenced by analyze().

384 {
385  es.get<TrackerDigiGeometryRecord>().get( tkGeom_ );
386  const TrackerGeometry *newBareTkGeomPtr = &(*tkGeom_);
387  if (newBareTkGeomPtr == bareTkGeomPtr_) return; // already booked hists, nothing changed
388 
389  if (!bareTkGeomPtr_) { // pointer not yet set: called the first time => book hists
390 
391  //Retrieve tracker topology from geometry
392  edm::ESHandle<TrackerTopology> tTopoHandle;
393  es.get<IdealGeometryRecord>().get(tTopoHandle);
394  const TrackerTopology* const tTopo = tTopoHandle.product();
395 
396  // construct alignable tracker to get access to alignable hierarchy
397  AlignableTracker aliTracker(&(*tkGeom_), tTopo);
398 
399  edm::LogInfo("TrackerOfflineValidation") << "There are " << newBareTkGeomPtr->detIds().size()
400  << " dets in the Geometry record.\n"
401  << "Out of these "<<newBareTkGeomPtr->detUnitIds().size()
402  <<" are detUnits";
403 
404  // Book Histogramms for global track quantities
405  std::string globDir("GlobalTrackVariables");
406  DirectoryWrapper trackglobal(globDir,moduleDirectory_,dqmMode_);
407  this->bookGlobalHists(trackglobal);
408 
409  // recursively book histogramms on lowest level
410  DirectoryWrapper tfdw("",moduleDirectory_,dqmMode_);
411  this->bookDirHists(tfdw, aliTracker, tTopo);
412  }
413  else { // histograms booked, but changed TrackerGeometry?
414  edm::LogWarning("GeometryChange") << "@SUB=checkBookHists"
415  << "TrackerGeometry changed, but will not re-book hists!";
416  }
417  bareTkGeomPtr_ = newBareTkGeomPtr;
418 }
const TrackerGeometry * bareTkGeomPtr_
edm::ESHandle< TrackerGeometry > tkGeom_
virtual const DetIdContainer & detIds() const
Returm a vector of all GeomDet DetIds (including those of GeomDetUnits)
T const * product() const
Definition: ESHandle.h:62
void bookGlobalHists(DirectoryWrapper &tfd)
virtual const DetIdContainer & detUnitIds() const
Returm a vector of all GeomDetUnit DetIds.
void bookDirHists(DirectoryWrapper &tfd, const Alignable &ali, const TrackerTopology *tTopo)
void TrackerOfflineValidation::collateSummaryHists ( DirectoryWrapper tfd,
const Alignable ali,
int  i,
std::vector< TrackerOfflineValidation::SummaryContainer > &  vLevelProfiles 
)
private

Definition at line 1252 of file TrackerOfflineValidation.cc.

References Alignable::alignableObjectId(), bookSummaryHists(), makeMuonMisalignmentScenario::components, Alignable::components(), dqmMode_, f, fitResiduals(), AlignableObjectId::idToString(), isDetOrDetUnit(), LogDebug, moduleDirectory_, n, findQualityFiles::size, AlCaHLTBitMon_QueryRunRegistry::string, and summarizeBinInContainer().

Referenced by endJob().

1254 {
1255  std::vector<Alignable*> alivec(ali.components());
1256  if( this->isDetOrDetUnit((alivec)[0]->alignableObjectId()) ) return;
1257 
1258  for(int iComp=0, iCompEnd = ali.components().size();iComp < iCompEnd; ++iComp) {
1259  std::vector< TrackerOfflineValidation::SummaryContainer > vProfiles;
1260  std::string structurename = AlignableObjectId::idToString((alivec)[iComp]->alignableObjectId());
1261 
1262  LogDebug("TrackerOfflineValidation") << "StructureName = " << structurename;
1263  std::stringstream dirname;
1264  dirname << structurename;
1265 
1266  // add no suffix counter to strip and pixel -> just aesthetics
1267  if (structurename != "Strip" && structurename != "Pixel") dirname << "_" << iComp+1;
1268 
1269  if( !(this->isDetOrDetUnit( (alivec)[iComp]->alignableObjectId()) )
1270  || (alivec)[0]->components().size() > 1 ) {
1271  DirectoryWrapper f(tfd,dirname.str(),moduleDirectory_,dqmMode_);
1272  this->collateSummaryHists( f, *(alivec)[iComp], i, vProfiles);
1273  vLevelProfiles.push_back(this->bookSummaryHists(tfd, *(alivec[iComp]), ali.alignableObjectId(), iComp+1));
1274  TH1 *hY = vLevelProfiles[iComp].sumYResiduals_;
1275  TH1 *hNormY = vLevelProfiles[iComp].sumNormYResiduals_;
1276  for(uint n = 0; n < vProfiles.size(); ++n) {
1277  this->summarizeBinInContainer(n+1, vLevelProfiles[iComp], vProfiles[n] );
1278  vLevelProfiles[iComp].sumXResiduals_->Add(vProfiles[n].sumXResiduals_);
1279  vLevelProfiles[iComp].sumNormXResiduals_->Add(vProfiles[n].sumNormXResiduals_);
1280  if (hY) hY->Add(vProfiles[n].sumYResiduals_); // only if existing
1281  if (hNormY) hNormY->Add(vProfiles[n].sumNormYResiduals_); // dito (pxl, stripYResiduals_)
1282  }
1283  if(dqmMode_)continue; // No fits in dqmMode
1284  //add fit values to stat box
1285  this->fitResiduals(vLevelProfiles[iComp].sumXResiduals_);
1286  this->fitResiduals(vLevelProfiles[iComp].sumNormXResiduals_);
1287  if (hY) this->fitResiduals(hY); // only if existing (pixel or stripYResiduals_)
1288  if (hNormY) this->fitResiduals(hNormY); // dito
1289  } else {
1290  // nothing to be done for det or detunits
1291  continue;
1292  }
1293  }
1294 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
void collateSummaryHists(DirectoryWrapper &tfd, const Alignable &ali, int i, std::vector< TrackerOfflineValidation::SummaryContainer > &vLevelProfiles)
virtual Alignables components() const =0
Return vector of all direct components.
TrackerOfflineValidation::SummaryContainer bookSummaryHists(DirectoryWrapper &tfd, const Alignable &ali, align::StructureType type, int i)
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
double f[11][100]
bool isDetOrDetUnit(align::StructureType type)
std::pair< float, float > fitResiduals(TH1 *hist) const
void summarizeBinInContainer(int bin, SummaryContainer &targetContainer, SummaryContainer &sourceContainer)
static const char * idToString(align::StructureType type)
tuple size
Write out results.
void TrackerOfflineValidation::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 1205 of file TrackerOfflineValidation.cc.

References collateSummaryHists(), dqmMode_, f, fillTree(), edm::EventSetup::get(), GetIndex(), lastSetup_, TFileService::make(), moduleDirectory_, mPxbResiduals_, mPxeResiduals_, mTecResiduals_, mTibResiduals_, mTidResiduals_, mTobResiduals_, edm::ESHandle< class >::product(), tkGeom_, diffTreeTool::tree, and vTrackHistos_.

1206 {
1207 
1208  if (!tkGeom_.product()) return;
1209 
1210  //Retrieve tracker topology from geometry
1211  edm::ESHandle<TrackerTopology> tTopoHandle;
1212  lastSetup_->get<IdealGeometryRecord>().get(tTopoHandle);
1213  const TrackerTopology* const tTopo = tTopoHandle.product();
1214 
1215  AlignableTracker aliTracker(&(*tkGeom_), tTopo);
1216 
1217  static const int kappadiffindex = this->GetIndex(vTrackHistos_,"h_diff_curvature");
1218  vTrackHistos_[kappadiffindex]->Add(vTrackHistos_[this->GetIndex(vTrackHistos_,"h_curvature_neg")],
1219  vTrackHistos_[this->GetIndex(vTrackHistos_,"h_curvature_pos")],-1,1);
1220 
1221  // Collate Information for Subdetectors
1222  // create summary histogramms recursively
1223  std::vector<TrackerOfflineValidation::SummaryContainer> vTrackerprofiles;
1224  DirectoryWrapper f("",moduleDirectory_,dqmMode_);
1225  this->collateSummaryHists(f,(aliTracker), 0, vTrackerprofiles);
1226 
1227  if (dqmMode_) return;
1228  // Should be excluded in dqmMode, since TTree is not usable
1229  // In dqmMode tree operations are are sourced out to the additional module TrackerOfflineValidationSummary
1230 
1232  TTree *tree = fs->make<TTree>("TkOffVal","TkOffVal");
1233 
1234  TkOffTreeVariables *treeMemPtr = new TkOffTreeVariables;
1235  // We create branches for all members of 'TkOffTreeVariables' (even if not needed).
1236  // This works because we have a dictionary for 'TkOffTreeVariables'
1237  // (see src/classes_def.xml and src/classes.h):
1238  tree->Branch("TkOffTreeVariables", &treeMemPtr); // address of pointer!
1239 
1240  this->fillTree(*tree, mPxbResiduals_, *treeMemPtr, *tkGeom_, tTopo);
1241  this->fillTree(*tree, mPxeResiduals_, *treeMemPtr, *tkGeom_, tTopo);
1242  this->fillTree(*tree, mTibResiduals_, *treeMemPtr, *tkGeom_, tTopo);
1243  this->fillTree(*tree, mTidResiduals_, *treeMemPtr, *tkGeom_, tTopo);
1244  this->fillTree(*tree, mTobResiduals_, *treeMemPtr, *tkGeom_, tTopo);
1245  this->fillTree(*tree, mTecResiduals_, *treeMemPtr, *tkGeom_, tTopo);
1246 
1247  delete treeMemPtr; treeMemPtr = 0;
1248 }
std::map< int, TrackerOfflineValidation::ModuleHistos > mPxeResiduals_
void collateSummaryHists(DirectoryWrapper &tfd, const Alignable &ali, int i, std::vector< TrackerOfflineValidation::SummaryContainer > &vLevelProfiles)
std::map< int, TrackerOfflineValidation::ModuleHistos > mTecResiduals_
container to hold data to be written into TTree
edm::ESHandle< TrackerGeometry > tkGeom_
int GetIndex(const std::vector< OBJECT_TYPE * > &vec, const TString &name)
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
void fillTree(TTree &tree, const std::map< int, TrackerOfflineValidation::ModuleHistos > &moduleHist_, TkOffTreeVariables &treeMem, const TrackerGeometry &tkgeom, const TrackerTopology *tTopo)
std::map< int, TrackerOfflineValidation::ModuleHistos > mTibResiduals_
std::map< int, TrackerOfflineValidation::ModuleHistos > mTidResiduals_
double f[11][100]
std::map< int, TrackerOfflineValidation::ModuleHistos > mTobResiduals_
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::map< int, TrackerOfflineValidation::ModuleHistos > mPxbResiduals_
const edm::EventSetup * lastSetup_
void TrackerOfflineValidation::fillTree ( TTree &  tree,
const std::map< int, TrackerOfflineValidation::ModuleHistos > &  moduleHist_,
TkOffTreeVariables treeMem,
const TrackerGeometry tkgeom,
const TrackerTopology tTopo 
)
private

Definition at line 1465 of file TrackerOfflineValidation.cc.

References TkOffTreeVariables::blade, TkOffTreeVariables::chi2PerDofX, TkOffTreeVariables::chi2PerDofY, TkOffTreeVariables::clear(), SiPixelRawToDigiRegional_cfi::deltaPhi, dPhi(), PFRecoTauDiscriminationAgainstElectronDeadECAL_cfi::dR, TkOffTreeVariables::entries, PV3DBase< T, PVType, FrameType >::eta(), TkOffTreeVariables::fitMeanNormX, TkOffTreeVariables::fitMeanNormY, TkOffTreeVariables::fitMeanX, TkOffTreeVariables::fitMeanY, fitResiduals(), TkOffTreeVariables::fitSigmaNormX, TkOffTreeVariables::fitSigmaNormY, TkOffTreeVariables::fitSigmaX, TkOffTreeVariables::fitSigmaY, Fwhm(), getMedian(), h, TkOffTreeVariables::half, TkOffTreeVariables::histNameLocalX, TkOffTreeVariables::histNameLocalY, TkOffTreeVariables::histNameNormLocalX, TkOffTreeVariables::histNameNormX, TkOffTreeVariables::histNameNormY, TkOffTreeVariables::histNameX, TkOffTreeVariables::histNameY, TrackerGeometry::idToDet(), TkOffTreeVariables::isDoubleSide, TkOffTreeVariables::isStereo, TkOffTreeVariables::layer, lCoorHistOn_, TkOffTreeVariables::meanLocalX, TkOffTreeVariables::meanNormLocalX, TkOffTreeVariables::meanNormX, TkOffTreeVariables::meanNormY, TkOffTreeVariables::meanResXvsX, TkOffTreeVariables::meanResXvsY, TkOffTreeVariables::meanResYvsX, TkOffTreeVariables::meanResYvsY, TkOffTreeVariables::meanX, TkOffTreeVariables::meanY, TkOffTreeVariables::medianX, TkOffTreeVariables::medianY, TkOffTreeVariables::module, TkOffTreeVariables::moduleId, moduleLevelProfiles_, TkOffTreeVariables::numberOfOutliers, TkOffTreeVariables::numberOfOverflows, TkOffTreeVariables::numberOfUnderflows, TkOffTreeVariables::outerInner, TkOffTreeVariables::panel, PV3DBase< T, PVType, FrameType >::perp(), TkOffTreeVariables::petal, PV3DBase< T, PVType, FrameType >::phi(), TkOffTreeVariables::phiDirection, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, TkOffTreeVariables::posEta, GeomDet::position(), TkOffTreeVariables::posPhi, TkOffTreeVariables::posR, TkOffTreeVariables::posX, TkOffTreeVariables::posY, TkOffTreeVariables::posZ, TkOffTreeVariables::profileNameResXvsX, TkOffTreeVariables::profileNameResXvsY, TkOffTreeVariables::profileNameResYvsX, TkOffTreeVariables::profileNameResYvsY, TrackerTopology::pxbLadder(), TrackerTopology::pxbLayer(), TrackerTopology::pxbModule(), TrackerTopology::pxfBlade(), TrackerTopology::pxfDisk(), TrackerTopology::pxfModule(), TrackerTopology::pxfPanel(), TrackerTopology::pxfSide(), DetId::rawId(), TkOffTreeVariables::rDirection, TkOffTreeVariables::ring, TkOffTreeVariables::rmsLocalX, TkOffTreeVariables::rmsNormLocalX, TkOffTreeVariables::rmsNormX, TkOffTreeVariables::rmsNormY, TkOffTreeVariables::rmsResXvsX, TkOffTreeVariables::rmsResXvsY, TkOffTreeVariables::rmsResYvsX, TkOffTreeVariables::rmsResYvsY, TkOffTreeVariables::rmsX, TkOffTreeVariables::rmsY, TkOffTreeVariables::rod, TkOffTreeVariables::rOrZDirection, TkOffTreeVariables::side, TkOffTreeVariables::sigmaNormX, DetId::subdetId(), TkOffTreeVariables::subDetId, GeomDet::surface(), StripSubdetector::TEC, TrackerTopology::tecIsDoubleSide(), TrackerTopology::tecModule(), TrackerTopology::tecPetalInfo(), TrackerTopology::tecRing(), TrackerTopology::tecSide(), TrackerTopology::tecStereo(), TrackerTopology::tecWheel(), StripSubdetector::TIB, TrackerTopology::tibIsDoubleSide(), TrackerTopology::tibLayer(), TrackerTopology::tibModule(), TrackerTopology::tibStereo(), TrackerTopology::tibStringInfo(), StripSubdetector::TID, TrackerTopology::tidIsDoubleSide(), TrackerTopology::tidModuleInfo(), TrackerTopology::tidRing(), TrackerTopology::tidSide(), TrackerTopology::tidStereo(), TrackerTopology::tidWheel(), StripSubdetector::TOB, TrackerTopology::tobIsDoubleSide(), TrackerTopology::tobLayer(), TrackerTopology::tobModule(), TrackerTopology::tobRodInfo(), TrackerTopology::tobStereo(), Surface::toGlobal(), useFit_, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and TkOffTreeVariables::zDirection.

Referenced by endJob().

1468 {
1469 
1470  for(std::map<int, TrackerOfflineValidation::ModuleHistos>::const_iterator it = moduleHist_.begin(),
1471  itEnd= moduleHist_.end(); it != itEnd;++it ) {
1472  treeMem.clear(); // make empty/default
1473 
1474  //variables concerning the tracker components/hierarchy levels
1475  DetId detId_ = it->first;
1476  treeMem.moduleId = detId_;
1477  treeMem.subDetId = detId_.subdetId();
1478  treeMem.isDoubleSide =0;
1479 
1480  if(treeMem.subDetId == PixelSubdetector::PixelBarrel){
1481  unsigned int whichHalfBarrel(1), rawId(detId_.rawId()); //DetId does not know about halfBarrels is PXB ...
1482  if( (rawId>=302056964 && rawId<302059300) || (rawId>=302123268 && rawId<302127140) ||
1483  (rawId>=302189572 && rawId<302194980) ) whichHalfBarrel=2;
1484  treeMem.layer = tTopo->pxbLayer(detId_);
1485  treeMem.half = whichHalfBarrel;
1486  treeMem.rod = tTopo->pxbLadder(detId_); // ... so, ladder is not per halfBarrel-Layer, but per barrel-layer!
1487  treeMem.module = tTopo->pxbModule(detId_);
1488  } else if(treeMem.subDetId == PixelSubdetector::PixelEndcap){
1489  unsigned int whichHalfCylinder(1), rawId(detId_.rawId()); //DetId does not kmow about halfCylinders in PXF
1490  if( (rawId>=352394500 && rawId<352406032) || (rawId>=352460036 && rawId<352471568) ||
1491  (rawId>=344005892 && rawId<344017424) || (rawId>=344071428 && rawId<344082960) ) whichHalfCylinder=2;
1492  treeMem.layer = tTopo->pxfDisk(detId_);
1493  treeMem.side = tTopo->pxfSide(detId_);
1494  treeMem.half = whichHalfCylinder;
1495  treeMem.blade = tTopo->pxfBlade(detId_);
1496  treeMem.panel = tTopo->pxfPanel(detId_);
1497  treeMem.module = tTopo->pxfModule(detId_);
1498  } else if(treeMem.subDetId == StripSubdetector::TIB){
1499  unsigned int whichHalfShell(1), rawId(detId_.rawId()); //DetId does not kmow about halfShells in TIB
1500  if ( (rawId>=369120484 && rawId<369120688) || (rawId>=369121540 && rawId<369121776) ||
1501  (rawId>=369136932 && rawId<369137200) || (rawId>=369137988 && rawId<369138288) ||
1502  (rawId>=369153396 && rawId<369153744) || (rawId>=369154436 && rawId<369154800) ||
1503  (rawId>=369169844 && rawId<369170256) || (rawId>=369170900 && rawId<369171344) ||
1504  (rawId>=369124580 && rawId<369124784) || (rawId>=369125636 && rawId<369125872) ||
1505  (rawId>=369141028 && rawId<369141296) || (rawId>=369142084 && rawId<369142384) ||
1506  (rawId>=369157492 && rawId<369157840) || (rawId>=369158532 && rawId<369158896) ||
1507  (rawId>=369173940 && rawId<369174352) || (rawId>=369174996 && rawId<369175440) ) whichHalfShell=2;
1508  treeMem.layer = tTopo->tibLayer(detId_);
1509  treeMem.side = tTopo->tibStringInfo(detId_)[0];
1510  treeMem.half = whichHalfShell;
1511  treeMem.rod = tTopo->tibStringInfo(detId_)[2];
1512  treeMem.outerInner = tTopo->tibStringInfo(detId_)[1];
1513  treeMem.module = tTopo->tibModule(detId_);
1514  treeMem.isStereo = tTopo->tibStereo(detId_);
1515  treeMem.isDoubleSide = tTopo->tibIsDoubleSide(detId_);
1516  } else if(treeMem.subDetId == StripSubdetector::TID){
1517  treeMem.layer = tTopo->tidWheel(detId_);
1518  treeMem.side = tTopo->tidSide(detId_);
1519  treeMem.ring = tTopo->tidRing(detId_);
1520  treeMem.outerInner = tTopo->tidModuleInfo(detId_)[0];
1521  treeMem.module = tTopo->tidModuleInfo(detId_)[1];
1522  treeMem.isStereo = tTopo->tidStereo(detId_);
1523  treeMem.isDoubleSide = tTopo->tidIsDoubleSide(detId_);
1524  } else if(treeMem.subDetId == StripSubdetector::TOB){
1525  treeMem.layer = tTopo->tobLayer(detId_);
1526  treeMem.side = tTopo->tobRodInfo(detId_)[0];
1527  treeMem.rod = tTopo->tobRodInfo(detId_)[1];
1528  treeMem.module = tTopo->tobModule(detId_);
1529  treeMem.isStereo = tTopo->tobStereo(detId_);
1530  treeMem.isDoubleSide = tTopo->tobIsDoubleSide(detId_);
1531  } else if(treeMem.subDetId == StripSubdetector::TEC) {
1532  treeMem.layer = tTopo->tecWheel(detId_);
1533  treeMem.side = tTopo->tecSide(detId_);
1534  treeMem.ring = tTopo->tecRing(detId_);
1535  treeMem.petal = tTopo->tecPetalInfo(detId_)[1];
1536  treeMem.outerInner = tTopo->tecPetalInfo(detId_)[0];
1537  treeMem.module = tTopo->tecModule(detId_);
1538  treeMem.isStereo = tTopo->tecStereo(detId_);
1539  treeMem.isDoubleSide = tTopo->tecIsDoubleSide(detId_);
1540  }
1541 
1542  //variables concerning the tracker geometry
1543  const Surface::PositionType &gPModule = tkgeom.idToDet(detId_)->position();
1544  treeMem.posPhi = gPModule.phi();
1545  treeMem.posEta = gPModule.eta();
1546  treeMem.posR = gPModule.perp();
1547  treeMem.posX = gPModule.x();
1548  treeMem.posY = gPModule.y();
1549  treeMem.posZ = gPModule.z();
1550 
1551  const Surface& surface = tkgeom.idToDet(detId_)->surface();
1552 
1553  //global Orientation of local coordinate system of dets/detUnits
1554  LocalPoint lUDirection(1.,0.,0.), lVDirection(0.,1.,0.), lWDirection(0.,0.,1.);
1555  GlobalPoint gUDirection = surface.toGlobal(lUDirection),
1556  gVDirection = surface.toGlobal(lVDirection),
1557  gWDirection = surface.toGlobal(lWDirection);
1558  double dR(999.), dPhi(999.), dZ(999.);
1560  dR = gWDirection.perp() - gPModule.perp();
1561  dPhi = deltaPhi(gUDirection.phi(),gPModule.phi());
1562  dZ = gVDirection.z() - gPModule.z();
1563  if(dZ>=0.)treeMem.rOrZDirection = 1; else treeMem.rOrZDirection = -1;
1564  }else if(treeMem.subDetId==PixelSubdetector::PixelEndcap){
1565  dR = gUDirection.perp() - gPModule.perp();
1566  dPhi = deltaPhi(gVDirection.phi(),gPModule.phi());
1567  dZ = gWDirection.z() - gPModule.z();
1568  if(dR>=0.)treeMem.rOrZDirection = 1; else treeMem.rOrZDirection = -1;
1569  }else if(treeMem.subDetId==StripSubdetector::TID || treeMem.subDetId==StripSubdetector::TEC){
1570  dR = gVDirection.perp() - gPModule.perp();
1571  dPhi = deltaPhi(gUDirection.phi(),gPModule.phi());
1572  dZ = gWDirection.z() - gPModule.z();
1573  if(dR>=0.)treeMem.rOrZDirection = 1; else treeMem.rOrZDirection = -1;
1574  }
1575  if(dR>=0.)treeMem.rDirection = 1; else treeMem.rDirection = -1;
1576  if(dPhi>=0.)treeMem.phiDirection = 1; else treeMem.phiDirection = -1;
1577  if(dZ>=0.)treeMem.zDirection = 1; else treeMem.zDirection = -1;
1578 
1579  //mean and RMS values (extracted from histograms(Xprime on module level)
1580  treeMem.entries = static_cast<UInt_t>(it->second.ResXprimeHisto->GetEntries());
1581  treeMem.meanX = it->second.ResXprimeHisto->GetMean();
1582  treeMem.rmsX = it->second.ResXprimeHisto->GetRMS();
1583  //treeMem.sigmaX = Fwhm(it->second.ResXprimeHisto)/2.355;
1584 
1585  if (useFit_) {
1586  //call fit function which returns mean and sigma from the fit
1587  //for absolute residuals
1588  std::pair<float,float> fitResult1 = this->fitResiduals(it->second.ResXprimeHisto);
1589  treeMem.fitMeanX = fitResult1.first;
1590  treeMem.fitSigmaX = fitResult1.second;
1591  //for normalized residuals
1592  std::pair<float,float> fitResult2 = this->fitResiduals(it->second.NormResXprimeHisto);
1593  treeMem.fitMeanNormX = fitResult2.first;
1594  treeMem.fitSigmaNormX = fitResult2.second;
1595  }
1596 
1597  //get median for absolute residuals
1598  treeMem.medianX = this->getMedian(it->second.ResXprimeHisto);
1599 
1600  int numberOfBins=it->second.ResXprimeHisto->GetNbinsX();
1601  treeMem.numberOfUnderflows = it->second.ResXprimeHisto->GetBinContent(0);
1602  treeMem.numberOfOverflows = it->second.ResXprimeHisto->GetBinContent(numberOfBins+1);
1603  treeMem.numberOfOutliers = it->second.ResXprimeHisto->GetBinContent(0)+it->second.ResXprimeHisto->GetBinContent(numberOfBins+1);
1604 
1605  //mean and RMS values (extracted from histograms(normalized Xprime on module level)
1606  treeMem.meanNormX = it->second.NormResXprimeHisto->GetMean();
1607  treeMem.rmsNormX = it->second.NormResXprimeHisto->GetRMS();
1608 
1609  double stats[20];
1610  it->second.NormResXprimeHisto->GetStats(stats);
1611  // GF treeMem.chi2PerDofX = stats[3]/(stats[0]-1);
1612  if (stats[0]) treeMem.chi2PerDofX = stats[3]/stats[0];
1613 
1614  treeMem.sigmaNormX = Fwhm(it->second.NormResXprimeHisto)/2.355;
1615  treeMem.histNameX = it->second.ResXprimeHisto->GetName();
1616  treeMem.histNameNormX = it->second.NormResXprimeHisto->GetName();
1617 
1618  // fill tree variables in local coordinates if set in cfg
1619  if(lCoorHistOn_) {
1620  treeMem.meanLocalX = it->second.ResHisto->GetMean();
1621  treeMem.rmsLocalX = it->second.ResHisto->GetRMS();
1622  treeMem.meanNormLocalX = it->second.NormResHisto->GetMean();
1623  treeMem.rmsNormLocalX = it->second.NormResHisto->GetRMS();
1624 
1625  treeMem.histNameLocalX = it->second.ResHisto->GetName();
1626  treeMem.histNameNormLocalX = it->second.NormResHisto->GetName();
1627  if (it->second.ResYHisto) treeMem.histNameLocalY = it->second.ResYHisto->GetName();
1628  }
1629 
1630  // mean and RMS values in local y (extracted from histograms(normalized Yprime on module level)
1631  // might exist in pixel only
1632  if (it->second.ResYprimeHisto) {//(stripYResiduals_)
1633  TH1 *h = it->second.ResYprimeHisto;
1634  treeMem.meanY = h->GetMean();
1635  treeMem.rmsY = h->GetRMS();
1636 
1637  if (useFit_) { // fit function which returns mean and sigma from the fit
1638  std::pair<float,float> fitMeanSigma = this->fitResiduals(h);
1639  treeMem.fitMeanY = fitMeanSigma.first;
1640  treeMem.fitSigmaY = fitMeanSigma.second;
1641  }
1642 
1643  //get median for absolute residuals
1644  treeMem.medianY = this->getMedian(h);
1645 
1646  treeMem.histNameY = h->GetName();
1647  }
1648  if (it->second.NormResYprimeHisto) {
1649  TH1 *h = it->second.NormResYprimeHisto;
1650  treeMem.meanNormY = h->GetMean();
1651  treeMem.rmsNormY = h->GetRMS();
1652  h->GetStats(stats); // stats buffer defined above
1653  if (stats[0]) treeMem.chi2PerDofY = stats[3]/stats[0];
1654 
1655  if (useFit_) { // fit function which returns mean and sigma from the fit
1656  std::pair<float,float> fitMeanSigma = this->fitResiduals(h);
1657  treeMem.fitMeanNormY = fitMeanSigma.first;
1658  treeMem.fitSigmaNormY = fitMeanSigma.second;
1659  }
1660  treeMem.histNameNormY = h->GetName();
1661  }
1662 
1663  if (moduleLevelProfiles_) {
1664  if (it->second.ResXvsXProfile) {
1665  TH1 *h = it->second.ResXvsXProfile;
1666  treeMem.meanResXvsX = h->GetMean();
1667  treeMem.rmsResXvsX = h->GetRMS();
1668  treeMem.profileNameResXvsX = h->GetName();
1669  }
1670  if (it->second.ResXvsYProfile) {
1671  TH1 *h = it->second.ResXvsYProfile;
1672  treeMem.meanResXvsY = h->GetMean();
1673  treeMem.rmsResXvsY = h->GetRMS();
1674  treeMem.profileNameResXvsY = h->GetName();
1675  }
1676  if (it->second.ResYvsXProfile) {
1677  TH1 *h = it->second.ResYvsXProfile;
1678  treeMem.meanResYvsX = h->GetMean();
1679  treeMem.rmsResYvsX = h->GetRMS();
1680  treeMem.profileNameResYvsX = h->GetName();
1681  }
1682  if (it->second.ResYvsYProfile) {
1683  TH1 *h = it->second.ResYvsYProfile;
1684  treeMem.meanResYvsY = h->GetMean();
1685  treeMem.rmsResYvsY = h->GetRMS();
1686  treeMem.profileNameResYvsY = h->GetName();
1687  }
1688  }
1689 
1690  tree.Fill();
1691  }
1692 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:114
bool tecIsDoubleSide(const DetId &id) const
bool tobIsDoubleSide(const DetId &id) const
bool tibIsDoubleSide(const DetId &id) const
T perp() const
Definition: PV3DBase.h:72
unsigned int tibLayer(const DetId &id) const
unsigned int tidRing(const DetId &id) const
std::vector< unsigned int > tidModuleInfo(const DetId &id) const
unsigned int pxfDisk(const DetId &id) const
std::string profileNameResXvsX
unsigned int tecRing(const DetId &id) const
ring id
uint32_t tobStereo(const DetId &id) const
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
unsigned int pxbLadder(const DetId &id) const
T y() const
Definition: PV3DBase.h:63
unsigned int tidWheel(const DetId &id) const
unsigned int pxbModule(const DetId &id) const
float getMedian(const TH1 *hist) const
std::vector< unsigned int > tibStringInfo(const DetId &id) const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:35
std::string profileNameResYvsX
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
std::vector< unsigned int > tecPetalInfo(const DetId &id) const
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:41
unsigned int tidSide(const DetId &id) const
double dPhi(double phi1, double phi2)
Definition: JetUtil.h:30
uint32_t tidStereo(const DetId &id) const
std::vector< unsigned int > tobRodInfo(const DetId &id) const
T z() const
Definition: PV3DBase.h:64
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::string histNameLocalY
virtual const GeomDet * idToDet(DetId) const
std::string histNameNormLocalX
unsigned int tibModule(const DetId &id) const
unsigned int pxfModule(const DetId &id) const
unsigned int pxbLayer(const DetId &id) const
unsigned int tecModule(const DetId &id) const
Definition: DetId.h:18
std::pair< float, float > fitResiduals(TH1 *hist) const
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
std::string histNameLocalX
bool tidIsDoubleSide(const DetId &id) const
unsigned int tobModule(const DetId &id) const
std::string profileNameResXvsY
T eta() const
Definition: PV3DBase.h:76
void clear()
set to empty values
uint32_t tecStereo(const DetId &id) const
unsigned int pxfSide(const DetId &id) const
uint32_t tibStereo(const DetId &id) const
T x() const
Definition: PV3DBase.h:62
float Fwhm(const TH1 *hist) const
unsigned int tecWheel(const DetId &id) const
unsigned int pxfPanel(const DetId &id) const
unsigned int pxfBlade(const DetId &id) const
std::string profileNameResYvsY
unsigned int tobLayer(const DetId &id) const
unsigned int tecSide(const DetId &id) const
std::pair< float, float > TrackerOfflineValidation::fitResiduals ( TH1 *  hist) const
private

Definition at line 1696 of file TrackerOfflineValidation.cc.

References alignCSCRings::e, statics::func, timingPdfMaker::mean, and cms::Exception::what().

Referenced by collateSummaryHists(), and fillTree().

1697 {
1698  std::pair<float,float> fitResult(9999., 9999.);
1699  if (!hist || hist->GetEntries() < 20) return fitResult;
1700 
1701  float mean = hist->GetMean();
1702  float sigma = hist->GetRMS();
1703 
1704  try { // for < CMSSW_2_2_0 since ROOT warnings from fit are converted to exceptions
1705  // Remove the try/catch for more recent CMSSW!
1706  // first fit: two RMS around mean
1707  TF1 func("tmp", "gaus", mean - 2.*sigma, mean + 2.*sigma);
1708  if (0 == hist->Fit(&func,"QNR")) { // N: do not blow up file by storing fit!
1709  mean = func.GetParameter(1);
1710  sigma = func.GetParameter(2);
1711  // second fit: three sigma of first fit around mean of first fit
1712  func.SetRange(mean - 3.*sigma, mean + 3.*sigma);
1713  // I: integral gives more correct results if binning is too wide
1714  // L: Likelihood can treat empty bins correctly (if hist not weighted...)
1715  if (0 == hist->Fit(&func, "Q0LR")) {
1716  if (hist->GetFunction(func.GetName())) { // Take care that it is later on drawn:
1717  hist->GetFunction(func.GetName())->ResetBit(TF1::kNotDraw);
1718  }
1719  fitResult.first = func.GetParameter(1);
1720  fitResult.second = func.GetParameter(2);
1721  }
1722  }
1723  } catch (cms::Exception const & e) {
1724  edm::LogWarning("Alignment") << "@SUB=TrackerOfflineValidation::fitResiduals"
1725  << "Caught this exception during ROOT fit: "
1726  << e.what();
1727  }
1728  return fitResult;
1729 }
virtual char const * what() const
Definition: Exception.cc:141
string func
Definition: statics.py:48
float TrackerOfflineValidation::Fwhm ( const TH1 *  hist) const
private

Definition at line 1435 of file TrackerOfflineValidation.cc.

References i, and max().

Referenced by fillTree(), and setSummaryBin().

1436 {
1437  float max = hist->GetMaximum();
1438  int left = -1, right = -1;
1439  for(unsigned int i = 1, iEnd = hist->GetNbinsX(); i <= iEnd; ++i) {
1440  if(hist->GetBinContent(i) < max/2. && hist->GetBinContent(i+1) > max/2. && left == -1) {
1441  if(max/2. - hist->GetBinContent(i) < hist->GetBinContent(i+1) - max/2.) {
1442  left = i;
1443  ++i;
1444  } else {
1445  left = i+1;
1446  ++i;
1447  }
1448  }
1449  if(left != -1 && right == -1) {
1450  if(hist->GetBinContent(i) > max/2. && hist->GetBinContent(i+1) < max/2.) {
1451  if( hist->GetBinContent(i) - max/2. < max/2. - hist->GetBinContent(i+1)) {
1452  right = i;
1453  } else {
1454  right = i+1;
1455  }
1456 
1457  }
1458  }
1459  }
1460  return hist->GetXaxis()->GetBinCenter(right) - hist->GetXaxis()->GetBinCenter(left);
1461 }
int i
Definition: DBlmapReader.cc:9
const T & max(const T &a, const T &b)
void TrackerOfflineValidation::getBinning ( uint32_t  subDetId,
TrackerOfflineValidation::HistogrammType  residualtype,
int &  nBinsX,
double &  lowerBoundX,
double &  upperBoundX 
)
private

Definition at line 848 of file TrackerOfflineValidation.cc.

References edm::ParameterSet::getParameter(), isPixel(), NormXprimeResidual, NormXResidual, NormYprimeResidual, parSet_, XprimeResidual, XResidual, XResidualProfile, YprimeResidual, YResidual, and YResidualProfile.

Referenced by bookHists(), and bookSummaryHists().

851 {
852  // determine if
853  const bool isPixel = this->isPixel(subDetId);
854 
855  edm::ParameterSet binningPSet;
856 
857  switch(residualType)
858  {
859  case XResidual :
860  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1XResPixelModules");
861  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1XResStripModules");
862  break;
863  case NormXResidual :
864  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1NormXResPixelModules");
865  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1NormXResStripModules");
866  break;
867  case XprimeResidual :
868  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1XprimeResPixelModules");
869  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1XprimeResStripModules");
870  break;
871  case NormXprimeResidual :
872  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1NormXprimeResPixelModules");
873  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1NormXprimeResStripModules");
874  break;
875  case YResidual : // borrow y-residual binning from yprime
876  case YprimeResidual :
877  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1YResPixelModules");
878  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1YResStripModules");
879  break;
880  /* case NormYResidual :*/
881  case NormYprimeResidual :
882  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1NormYResPixelModules");
883  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TH1NormYResStripModules");
884  break;
885  case XResidualProfile :
886  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TProfileXResPixelModules");
887  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TProfileXResStripModules");
888  break;
889  case YResidualProfile :
890  if(isPixel) binningPSet = parSet_.getParameter<edm::ParameterSet>("TProfileYResPixelModules");
891  else binningPSet = parSet_.getParameter<edm::ParameterSet>("TProfileYResStripModules");
892  break;
893  }
894  nBinsX = binningPSet.getParameter<int32_t>("Nbinx");
895  lowerBoundX = binningPSet.getParameter<double>("xmin");
896  upperBoundX = binningPSet.getParameter<double>("xmax");
897 }
T getParameter(std::string const &) const
bool isPixel(uint32_t subDetId)
constexpr unsigned int subDetId[12]
const edm::ParameterSet parSet_
TrackerOfflineValidation::ModuleHistos & TrackerOfflineValidation::getHistStructFromMap ( const DetId detid)
private

Definition at line 940 of file TrackerOfflineValidation.cc.

References DetId::det(), edm::hlt::Exception, mPxbResiduals_, mPxeResiduals_, mTecResiduals_, mTibResiduals_, mTidResiduals_, mTobResiduals_, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, DetId::rawId(), DetId::subdetId(), StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, and StripSubdetector::TOB.

Referenced by analyze(), bookHists(), and bookSummaryHists().

941 {
942  // get a struct with histograms from the respective map
943  // if no object exist, the reference is automatically created by the map
944  // throw exception if non-tracker id is passed
945  uint subdetid = detid.subdetId();
946  if(subdetid == PixelSubdetector::PixelBarrel ) {
947  return mPxbResiduals_[detid.rawId()];
948  } else if (subdetid == PixelSubdetector::PixelEndcap) {
949  return mPxeResiduals_[detid.rawId()];
950  } else if(subdetid == StripSubdetector::TIB) {
951  return mTibResiduals_[detid.rawId()];
952  } else if(subdetid == StripSubdetector::TID) {
953  return mTidResiduals_[detid.rawId()];
954  } else if(subdetid == StripSubdetector::TOB) {
955  return mTobResiduals_[detid.rawId()];
956  } else if(subdetid == StripSubdetector::TEC) {
957  return mTecResiduals_[detid.rawId()];
958  } else {
959  throw cms::Exception("Geometry Error")
960  << "[TrackerOfflineValidation] Error, tried to get reference for non-tracker subdet " << subdetid
961  << " from detector " << detid.det();
962  return mPxbResiduals_[0];
963  }
964 }
std::map< int, TrackerOfflineValidation::ModuleHistos > mPxeResiduals_
std::map< int, TrackerOfflineValidation::ModuleHistos > mTecResiduals_
std::map< int, TrackerOfflineValidation::ModuleHistos > mTibResiduals_
std::map< int, TrackerOfflineValidation::ModuleHistos > mTidResiduals_
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::map< int, TrackerOfflineValidation::ModuleHistos > mTobResiduals_
std::map< int, TrackerOfflineValidation::ModuleHistos > mPxbResiduals_
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
template<class OBJECT_TYPE >
int TrackerOfflineValidation::GetIndex ( const std::vector< OBJECT_TYPE * > &  vec,
const TString &  name 
)
private

Definition at line 292 of file TrackerOfflineValidation.cc.

References mergeVDriftHistosByStation::name, and query::result.

Referenced by analyze(), and endJob().

293 {
294  int result = 0;
295  for (typename std::vector<OBJECT_TYPE*>::const_iterator iter = vec.begin(), iterEnd = vec.end();
296  iter != iterEnd; ++iter, ++result) {
297  if (*iter && (*iter)->GetName() == name) return result;
298  }
299  edm::LogError("Alignment") << "@SUB=TrackerOfflineValidation::GetIndex" << " could not find " << name;
300  return -1;
301 }
tuple result
Definition: query.py:137
float TrackerOfflineValidation::getMedian ( const TH1 *  hist) const
private

Definition at line 1733 of file TrackerOfflineValidation.cc.

References j, pileupCalc::nbins, x, and detailsBasic3DVector::y.

Referenced by fillTree().

1734 {
1735  float median = 999;
1736  int nbins = histo->GetNbinsX();
1737 
1738  //extract median from histogram
1739  double *x = new double[nbins];
1740  double *y = new double[nbins];
1741  for (int j = 0; j < nbins; j++) {
1742  x[j] = histo->GetBinCenter(j+1);
1743  y[j] = histo->GetBinContent(j+1);
1744  }
1745  median = TMath::Median(nbins, x, y);
1746 
1747  delete[] x; x = 0;
1748  delete [] y; y = 0;
1749 
1750  return median;
1751 
1752 }
int j
Definition: DBlmapReader.cc:9
Definition: DDAxes.h:10
bool TrackerOfflineValidation::isBarrel ( uint32_t  subDetId)
private
bool TrackerOfflineValidation::isDetOrDetUnit ( align::StructureType  type)
private
bool TrackerOfflineValidation::isEndCap ( uint32_t  subDetId)
private
bool TrackerOfflineValidation::isPixel ( uint32_t  subDetId)
private
void TrackerOfflineValidation::setSummaryBin ( int  bin,
TH1 *  targetHist,
TH1 *  sourceHist 
)
private

Definition at line 901 of file TrackerOfflineValidation.cc.

References Fwhm(), and useFwhm_.

Referenced by summarizeBinInContainer().

902 {
903  if(targetHist && sourceHist) {
904  targetHist->SetBinContent(bin, sourceHist->GetMean(1));
905  if(useFwhm_) targetHist->SetBinError(bin, Fwhm(sourceHist)/2.);
906  else targetHist->SetBinError(bin, sourceHist->GetRMS(1) );
907  }
908  else return;
909 }
float Fwhm(const TH1 *hist) const
void TrackerOfflineValidation::summarizeBinInContainer ( int  bin,
SummaryContainer targetContainer,
SummaryContainer sourceContainer 
)
private

Definition at line 913 of file TrackerOfflineValidation.cc.

References setSummaryBin(), TrackerOfflineValidation::SummaryContainer::summaryNormXResiduals_, TrackerOfflineValidation::SummaryContainer::summaryNormYResiduals_, TrackerOfflineValidation::SummaryContainer::summaryXResiduals_, TrackerOfflineValidation::SummaryContainer::summaryYResiduals_, TrackerOfflineValidation::SummaryContainer::sumNormXResiduals_, TrackerOfflineValidation::SummaryContainer::sumNormYResiduals_, TrackerOfflineValidation::SummaryContainer::sumXResiduals_, and TrackerOfflineValidation::SummaryContainer::sumYResiduals_.

Referenced by bookSummaryHists(), and collateSummaryHists().

915 {
916  this->setSummaryBin(bin, targetContainer.summaryXResiduals_, sourceContainer.sumXResiduals_);
917  this->setSummaryBin(bin, targetContainer.summaryNormXResiduals_, sourceContainer.sumNormXResiduals_);
918  // If no y-residual hists, just returns:
919  this->setSummaryBin(bin, targetContainer.summaryYResiduals_, sourceContainer.sumYResiduals_);
920  this->setSummaryBin(bin, targetContainer.summaryNormYResiduals_, sourceContainer.sumNormYResiduals_);
921 }
void setSummaryBin(int bin, TH1 *targetHist, TH1 *sourceHist)
void TrackerOfflineValidation::summarizeBinInContainer ( int  bin,
uint32_t  subDetId,
SummaryContainer targetContainer,
ModuleHistos sourceContainer 
)
private

Definition at line 925 of file TrackerOfflineValidation.cc.

References isPixel(), TrackerOfflineValidation::ModuleHistos::NormResXprimeHisto, TrackerOfflineValidation::ModuleHistos::NormResYprimeHisto, TrackerOfflineValidation::ModuleHistos::ResXprimeHisto, TrackerOfflineValidation::ModuleHistos::ResYprimeHisto, setSummaryBin(), stripYResiduals_, TrackerOfflineValidation::SummaryContainer::summaryNormXResiduals_, TrackerOfflineValidation::SummaryContainer::summaryNormYResiduals_, TrackerOfflineValidation::SummaryContainer::summaryXResiduals_, and TrackerOfflineValidation::SummaryContainer::summaryYResiduals_.

928 {
929  // takes two summary Containers and sets summaryBins for all histograms
930  this->setSummaryBin(bin, targetContainer.summaryXResiduals_, sourceContainer.ResXprimeHisto);
931  this->setSummaryBin(bin, targetContainer.summaryNormXResiduals_, sourceContainer.NormResXprimeHisto);
932  if( this->isPixel(subDetId) || stripYResiduals_ ) {
933  this->setSummaryBin(bin, targetContainer.summaryYResiduals_, sourceContainer.ResYprimeHisto);
934  this->setSummaryBin(bin, targetContainer.summaryNormYResiduals_, sourceContainer.NormResYprimeHisto);
935  }
936 }
bool isPixel(uint32_t subDetId)
void setSummaryBin(int bin, TH1 *targetHist, TH1 *sourceHist)
constexpr unsigned int subDetId[12]

Member Data Documentation

const TrackerGeometry* TrackerOfflineValidation::bareTkGeomPtr_
private

Definition at line 252 of file TrackerOfflineValidation.cc.

Referenced by checkBookHists().

const bool TrackerOfflineValidation::dqmMode_
private
const edm::EventSetup* TrackerOfflineValidation::lastSetup_
private

Definition at line 279 of file TrackerOfflineValidation.cc.

Referenced by endJob().

const bool TrackerOfflineValidation::lCoorHistOn_
private

Definition at line 255 of file TrackerOfflineValidation.cc.

Referenced by analyze(), bookHists(), and fillTree().

const std::string TrackerOfflineValidation::moduleDirectory_
private
const bool TrackerOfflineValidation::moduleLevelHistsTransient_
private

Definition at line 256 of file TrackerOfflineValidation.cc.

Referenced by bookHists().

const bool TrackerOfflineValidation::moduleLevelProfiles_
private

Definition at line 257 of file TrackerOfflineValidation.cc.

Referenced by analyze(), bookHists(), and fillTree().

std::map<int,TrackerOfflineValidation::ModuleHistos> TrackerOfflineValidation::mPxbResiduals_
private

Definition at line 272 of file TrackerOfflineValidation.cc.

Referenced by endJob(), and getHistStructFromMap().

std::map<int,TrackerOfflineValidation::ModuleHistos> TrackerOfflineValidation::mPxeResiduals_
private

Definition at line 273 of file TrackerOfflineValidation.cc.

Referenced by endJob(), and getHistStructFromMap().

std::map<int,TrackerOfflineValidation::ModuleHistos> TrackerOfflineValidation::mTecResiduals_
private

Definition at line 277 of file TrackerOfflineValidation.cc.

Referenced by endJob(), and getHistStructFromMap().

std::map<int,TrackerOfflineValidation::ModuleHistos> TrackerOfflineValidation::mTibResiduals_
private

Definition at line 274 of file TrackerOfflineValidation.cc.

Referenced by endJob(), and getHistStructFromMap().

std::map<int,TrackerOfflineValidation::ModuleHistos> TrackerOfflineValidation::mTidResiduals_
private

Definition at line 275 of file TrackerOfflineValidation.cc.

Referenced by endJob(), and getHistStructFromMap().

std::map<int,TrackerOfflineValidation::ModuleHistos> TrackerOfflineValidation::mTobResiduals_
private

Definition at line 276 of file TrackerOfflineValidation.cc.

Referenced by endJob(), and getHistStructFromMap().

const edm::ParameterSet TrackerOfflineValidation::parSet_
private

Definition at line 250 of file TrackerOfflineValidation.cc.

Referenced by analyze(), and getBinning().

const bool TrackerOfflineValidation::stripYResiduals_
private
edm::ESHandle<TrackerGeometry> TrackerOfflineValidation::tkGeom_
private

Definition at line 251 of file TrackerOfflineValidation.cc.

Referenced by checkBookHists(), and endJob().

const bool TrackerOfflineValidation::useFit_
private

Definition at line 260 of file TrackerOfflineValidation.cc.

Referenced by fillTree().

const bool TrackerOfflineValidation::useFwhm_
private

Definition at line 259 of file TrackerOfflineValidation.cc.

Referenced by setSummaryBin().

const bool TrackerOfflineValidation::useOverflowForRMS_
private

Definition at line 261 of file TrackerOfflineValidation.cc.

Referenced by analyze().

std::vector<TH1*> TrackerOfflineValidation::vDeleteObjects_
private

Definition at line 266 of file TrackerOfflineValidation.cc.

Referenced by bookTH1F(), bookTProfile(), and ~TrackerOfflineValidation().

std::vector<TH1*> TrackerOfflineValidation::vTrack2DHistos_
private

Definition at line 270 of file TrackerOfflineValidation.cc.

Referenced by analyze(), and bookGlobalHists().

std::vector<TH1*> TrackerOfflineValidation::vTrackHistos_
private

Definition at line 268 of file TrackerOfflineValidation.cc.

Referenced by analyze(), bookGlobalHists(), and endJob().

std::vector<TH1*> TrackerOfflineValidation::vTrackProfiles_
private

Definition at line 269 of file TrackerOfflineValidation.cc.

Referenced by analyze(), and bookGlobalHists().