CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
ApeEstimator Class Reference

#include <Alignment/APEEstimation/src/ApeEstimator.cc>

Inheritance diagram for ApeEstimator:
edm::EDAnalyzer edm::EDConsumerBase

Classes

struct  PositionAndError2
 

Public Member Functions

 ApeEstimator (const edm::ParameterSet &)
 
 ~ApeEstimator () override
 
- 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
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

typedef std::pair< TrackStruct::HitState, PositionAndError2StatePositionAndError2
 

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void beginJob () override
 
void bookSectorHistsForAnalyzerMode ()
 
void bookSectorHistsForApeCalculation ()
 
void bookTrackHists ()
 
void calculateAPE ()
 
bool checkIntervalsForSectors (const unsigned int sectorCounter, const std::vector< double > &) const
 
bool checkModuleBools (const bool, const std::vector< unsigned int > &) const
 
bool checkModuleDirections (const int, const std::vector< int > &) const
 
bool checkModuleIds (const unsigned int, const std::vector< unsigned int > &) const
 
bool checkModulePositions (const float, const std::vector< double > &) const
 
void endJob () override
 
void fillHistsForAnalyzerMode (const TrackStruct &)
 
void fillHistsForApeCalculation (const TrackStruct &)
 
void fillHitHistsXForAnalyzerMode (const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
 
void fillHitHistsYForAnalyzerMode (const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
 
TrackStruct::HitParameterStruct fillHitVariables (const TrajectoryMeasurement &, const edm::EventSetup &)
 
TrackStruct::TrackParameterStruct fillTrackVariables (const reco::Track &, const Trajectory &, const reco::BeamSpot &)
 
bool hitSelected (TrackStruct::HitParameterStruct &) const
 
void hitSelection ()
 
bool inDoubleInterval (const std::vector< double > &, const float) const
 
bool inUintInterval (const std::vector< unsigned int > &, const unsigned int, const unsigned int=999) const
 
bool isHit2D (const TrackingRecHit &) const
 
StatePositionAndError2 positionAndError2 (const LocalPoint &, const LocalError &, const TransientTrackingRecHit &)
 
PositionAndError2 radialPositionAndError2 (const LocalPoint &, const LocalError &, const RadialStripTopology &)
 
PositionAndError2 rectangularPositionAndError2 (const LocalPoint &, const LocalError &)
 
void residualErrorBinning ()
 
void sectorBuilder ()
 
void setHitSelectionMap (const std::string &)
 
void setHitSelectionMapUInt (const std::string &)
 
void statistics (const TrackerSectorStruct &, const Int_t) const
 

Private Attributes

const bool analyzerMode_
 
const bool calculateApe_
 
unsigned int counter1
 
unsigned int counter2
 
unsigned int counter3
 
unsigned int counter4
 
unsigned int counter5
 
unsigned int counter6
 
std::map< std::string, std::vector< double > > m_hitSelection_
 
std::map< std::string, std::vector< unsigned int > > m_hitSelectionUInt_
 
std::map< unsigned int, std::pair< double, double > > m_resErrBins_
 
std::map< unsigned int, TrackerSectorStructm_tkSector_
 
std::map< unsigned int, ReducedTrackerTreeVariablesm_tkTreeVar_
 
const unsigned int maxTracksPerEvent_
 
const unsigned int minGoodHitsPerTrack_
 
edm::EDGetTokenT< reco::BeamSpotofflinebeamSpot_
 
const edm::ParameterSet parameterSet_
 
edm::EDGetTokenT< TrajTrackAssociationCollectiontjTagToken_
 
TrackerDetectorStruct tkDetector_
 
bool trackCut_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- 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 129 of file ApeEstimator.cc.

Member Typedef Documentation

Definition at line 144 of file ApeEstimator.cc.

Constructor & Destructor Documentation

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

Definition at line 226 of file ApeEstimator.cc.

References counter1, counter2, counter3, counter4, counter5, and counter6.

226  :
227 parameterSet_(iConfig),
228 tjTagToken_(consumes<TrajTrackAssociationCollection>(parameterSet_.getParameter<edm::InputTag>("tjTkAssociationMapTag"))),
229 offlinebeamSpot_(consumes<reco::BeamSpot>(edm::InputTag("offlineBeamSpot"))),
230 trackCut_(false), maxTracksPerEvent_(parameterSet_.getParameter<unsigned int>("maxTracksPerEvent")),
231 minGoodHitsPerTrack_(parameterSet_.getParameter<unsigned int>("minGoodHitsPerTrack")),
232 analyzerMode_(parameterSet_.getParameter<bool>("analyzerMode")),
233 calculateApe_(parameterSet_.getParameter<bool>("calculateApe"))
234 {
236 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
const bool calculateApe_
unsigned int counter1
unsigned int counter3
unsigned int counter4
const unsigned int maxTracksPerEvent_
const bool analyzerMode_
edm::EDGetTokenT< reco::BeamSpot > offlinebeamSpot_
unsigned int counter6
unsigned int counter5
unsigned int counter2
const unsigned int minGoodHitsPerTrack_
edm::EDGetTokenT< TrajTrackAssociationCollection > tjTagToken_
ApeEstimator::~ApeEstimator ( )
override

Definition at line 239 of file ApeEstimator.cc.

240 {
241 }

Member Function Documentation

void ApeEstimator::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 2141 of file ApeEstimator.cc.

References analyzerMode_, ecalDrivenElectronSeedsParameters_cff::beamSpot, edm::AssociationMap< Tag >::begin(), calculateApe_, edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > >::const_iterator, edm::AssociationMap< Tag >::end(), fillHistsForAnalyzerMode(), fillHistsForApeCalculation(), fillHitVariables(), fillTrackVariables(), edm::Event::getByToken(), hitSelected(), edm::HandleBase::isValid(), maxTracksPerEvent_, offlinebeamSpot_, edm::AssociationMap< Tag >::size(), tjTagToken_, tkDetector_, HiIsolationCommonParameters_cff::track, trackCut_, TrackStruct::trkParams, TrackerDetectorStruct::TrkSize, TrackerDetectorStruct::TrkSizeGood, and TrackStruct::v_hitParams.

2142 {
2143 
2145  edm::Handle<reco::BeamSpot> beamSpotHandle;
2146  iEvent.getByToken(offlinebeamSpot_, beamSpotHandle);
2147 
2148  if (beamSpotHandle.isValid()){
2149  beamSpot = *beamSpotHandle;
2150  }
2151  else
2152  {
2153  edm::LogError("ApeEstimator")<<"No beam spot available from EventSetup"
2154  <<"\n...skip event";
2155  return;
2156  }
2157 
2159  iEvent.getByToken(tjTagToken_, m_TrajTracksMap);
2160 
2161  if(analyzerMode_)tkDetector_.TrkSize->Fill(m_TrajTracksMap->size());
2162 
2163  if(maxTracksPerEvent_!=0 && m_TrajTracksMap->size()>maxTracksPerEvent_)return;
2164 
2165  //Creation of (traj,track)
2166  typedef std::pair<const Trajectory*, const reco::Track*> ConstTrajTrackPair;
2167  typedef std::vector<ConstTrajTrackPair> ConstTrajTrackPairCollection;
2168  ConstTrajTrackPairCollection trajTracks;
2169 
2171  for(i_trajTrack = m_TrajTracksMap->begin();i_trajTrack != m_TrajTracksMap->end();++i_trajTrack){
2172  trajTracks.push_back(ConstTrajTrackPair(&(*(*i_trajTrack).key), &(*(*i_trajTrack).val)));
2173  }
2174 
2175 
2176  //Loop over Tracks & Hits
2177  unsigned int trackSizeGood(0);
2178  ConstTrajTrackPairCollection::const_iterator iTrack;
2179  for(iTrack = trajTracks.begin(); iTrack != trajTracks.end();++iTrack){
2180 
2181  const Trajectory *traj = (*iTrack).first;
2182  const reco::Track *track = (*iTrack).second;
2183 
2184  TrackStruct trackStruct;
2185  trackStruct.trkParams = this->fillTrackVariables(*track, *traj, beamSpot);
2186 
2187  if(trackCut_)continue;
2188 
2189  const std::vector<TrajectoryMeasurement> v_meas = (*traj).measurements();
2190 
2191  //Loop over Hits
2192  for(std::vector<TrajectoryMeasurement>::const_iterator i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
2193  TrackStruct::HitParameterStruct hitParams = this->fillHitVariables(*i_meas, iSetup);
2194  if(this->hitSelected(hitParams))trackStruct.v_hitParams.push_back(hitParams);
2195  }
2196 
2197  if(analyzerMode_)this->fillHistsForAnalyzerMode(trackStruct);
2198  if(calculateApe_)this->fillHistsForApeCalculation(trackStruct);
2199 
2200  if(!trackStruct.v_hitParams.empty())++trackSizeGood;
2201  }
2202  if(analyzerMode_ && trackSizeGood>0)tkDetector_.TrkSizeGood->Fill(trackSizeGood);
2203 }
const_iterator end() const
last iterator over the map (read only)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:508
const bool calculateApe_
TrackerDetectorStruct tkDetector_
const unsigned int maxTracksPerEvent_
TrackStruct::HitParameterStruct fillHitVariables(const TrajectoryMeasurement &, const edm::EventSetup &)
const bool analyzerMode_
std::vector< HitParameterStruct > v_hitParams
TrackStruct::TrackParameterStruct fillTrackVariables(const reco::Track &, const Trajectory &, const reco::BeamSpot &)
TrackParameterStruct trkParams
edm::EDGetTokenT< reco::BeamSpot > offlinebeamSpot_
bool hitSelected(TrackStruct::HitParameterStruct &) const
bool isValid() const
Definition: HandleBase.h:74
std::pair< const Trajectory *, const reco::Track * > ConstTrajTrackPair
size_type size() const
map size
void fillHistsForApeCalculation(const TrackStruct &)
edm::EDGetTokenT< TrajTrackAssociationCollection > tjTagToken_
const_iterator begin() const
first iterator over the map (read only)
void fillHistsForAnalyzerMode(const TrackStruct &)
void ApeEstimator::beginJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 2208 of file ApeEstimator.cc.

References analyzerMode_, bookSectorHistsForAnalyzerMode(), bookSectorHistsForApeCalculation(), bookTrackHists(), calculateApe_, hitSelection(), residualErrorBinning(), and sectorBuilder().

2208  {
2209 
2210  this->hitSelection();
2211 
2212  this->sectorBuilder();
2213 
2214  this->residualErrorBinning();
2215 
2217 
2219 
2220  if(analyzerMode_)this->bookTrackHists();
2221 
2222 
2223 }
void hitSelection()
void bookSectorHistsForAnalyzerMode()
const bool calculateApe_
void sectorBuilder()
void residualErrorBinning()
const bool analyzerMode_
void bookTrackHists()
void bookSectorHistsForApeCalculation()
void ApeEstimator::bookSectorHistsForAnalyzerMode ( )
private

Definition at line 556 of file ApeEstimator.cc.

References edm::errors::Configuration, AlignmentTrackSelector_cfi::d0Max, AlignmentTrackSelector_cfi::dzMax, Exception, fileService, edm::ParameterSet::getParameter(), m_tkSector_, TFileDirectory::make(), TFileService::mkdir(), parameterSet_, AlignmentTrackSelector_cfi::pMax, fftjetvertexadder_cfi::sigmaX, beamspotanalyzer_cfi::sigmaXMax, beamspotanalyzer_cfi::sigmaXMin, fftjetvertexadder_cfi::sigmaY, anotherprimaryvertexanalyzer_cfi::xMax, and anotherprimaryvertexanalyzer_cfi::xMin.

Referenced by beginJob().

556  {
557 
558  std::vector<unsigned int> v_errHists(parameterSet_.getParameter<std::vector<unsigned int> >("vErrHists"));
559  for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
560  for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
561  ++i_errHists2;
562  if(*i_errHists==*i_errHists2){
563  edm::LogError("BookSectorHists")<<"Value of vErrHists in config exists twice: "<<*i_errHists<<"\n... delete one of both";
564  v_errHists.erase(i_errHists2);
565  }
566  }
567  }
568 
569 
570  for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
571  bool zoomHists(parameterSet_.getParameter<bool>("zoomHists"));
572 
573  double widthMax = zoomHists ? 20. : 200.;
574  double chargePixelMax = zoomHists ? 200000. : 2000000.;
575  double chargeStripMax = zoomHists ? 1000. : 10000.;
576  double sOverNMax = zoomHists ? 200. : 2000.;
577  double logClusterProbMin = zoomHists ? -5. : -15.;
578 
579  double resXAbsMax = zoomHists ? 0.5 : 5.;
580  double norResXAbsMax = zoomHists ? 10. : 50.;
581  double probXMin = zoomHists ? -0.01 : -0.1;
582  double probXMax = zoomHists ? 0.11 : 1.1;
583  double sigmaXMin = zoomHists ? 0. : -0.05;
584  double sigmaXMax = zoomHists ? 0.02 : 1.;
585  double sigmaX2Max = sigmaXMax*sigmaXMax;
586  double sigmaXHitMax = zoomHists ? 0.02 : 1.;
587  double phiSensXMax = zoomHists ? 31. : 93.;
588 
589  double norChi2Max = zoomHists ? 5. : 1000.;
590  double d0Max = zoomHists ? 0.02 : 40.; // cosmics: 100.|100.
591  double dzMax = zoomHists ? 15. : 100.; // cosmics: 200.|600.
592  double pMax = zoomHists ? 200. : 2000.;
593  double invPMax = zoomHists ? 0.05 : 10.; //begins at 20GeV, 0.1GeV
594 
595 
597  if(!fileService){
599  "TFileService is not registered in cfg file" );
600  }
601 
602  std::stringstream sector; sector << "Sector_" << (*i_sector).first;
603  TFileDirectory secDir = fileService->mkdir(sector.str());
604 
605  // Dummy histo containing the sector name as title
606  (*i_sector).second.Name = secDir.make<TH1F>("z_name",(*i_sector).second.name.c_str(),1,0,1);
607 
608  // Do not book histos for empty sectors
609  if((*i_sector).second.v_rawId.empty()){
610  continue;
611  }
612  // Set parameters for correlationHists
613  (*i_sector).second.setCorrHistParams(&secDir,norResXAbsMax,sigmaXHitMax,sigmaXMax);
614 
615 
616  // Book pixel or strip specific hists
617  const bool pixelSector(i_sector->second.isPixel);
618 
619 
620  // Cluster Parameters
621  (*i_sector).second.m_correlationHistsX["WidthX"] = (*i_sector).second.bookCorrHistsX("WidthX","cluster width","w_{cl,x}","[# channels]",static_cast<int>(widthMax),static_cast<int>(widthMax),0.,widthMax,"nph");
622  (*i_sector).second.m_correlationHistsX["BaryStripX"] = (*i_sector).second.bookCorrHistsX("BaryStripX","barycenter of cluster charge","b_{cl,x}","[# channels]",800,100,-10.,790.,"nph");
623 
624  if(pixelSector){
625  (*i_sector).second.m_correlationHistsY["WidthY"] = (*i_sector).second.bookCorrHistsY("WidthY","cluster width","w_{cl,y}","[# channels]",static_cast<int>(widthMax),static_cast<int>(widthMax),0.,widthMax,"nph");
626  (*i_sector).second.m_correlationHistsY["BaryStripY"] = (*i_sector).second.bookCorrHistsY("BaryStripY","barycenter of cluster charge","b_{cl,y}","[# channels]",800,100,-10.,790.,"nph");
627 
628  (*i_sector).second.m_correlationHistsX["ChargePixel"] = (*i_sector).second.bookCorrHistsX("ChargePixel","cluster charge","c_{cl}","[e]",100,50,0.,chargePixelMax,"nph");
629  (*i_sector).second.m_correlationHistsX["ClusterProbXY"] = (*i_sector).second.bookCorrHistsX("ClusterProbXY","cluster probability xy","prob_{cl,xy}","",100,50,0.,1.,"nph");
630  (*i_sector).second.m_correlationHistsX["ClusterProbQ"] = (*i_sector).second.bookCorrHistsX("ClusterProbQ","cluster probability q","prob_{cl,q}","",100,50,0.,1.,"nph");
631  (*i_sector).second.m_correlationHistsX["ClusterProbXYQ"] = (*i_sector).second.bookCorrHistsX("ClusterProbXYQ","cluster probability xyq","prob_{cl,xyq}","",100,50,0.,1.,"nph");
632  (*i_sector).second.m_correlationHistsX["LogClusterProb"] = (*i_sector).second.bookCorrHistsX("LogClusterProb","cluster probability xy","log(prob_{cl,xy})","",60,30,logClusterProbMin,0.,"nph");
633  (*i_sector).second.m_correlationHistsX["IsOnEdge"] = (*i_sector).second.bookCorrHistsX("IsOnEdge","IsOnEdge","isOnEdge","",2,2,0,2,"nph");
634  (*i_sector).second.m_correlationHistsX["HasBadPixels"] = (*i_sector).second.bookCorrHistsX("HasBadPixels","HasBadPixels","hasBadPixels","",2,2,0,2,"nph");
635  (*i_sector).second.m_correlationHistsX["SpansTwoRoc"] = (*i_sector).second.bookCorrHistsX("SpansTwoRoc","SpansTwoRoc","spansTwoRoc","",2,2,0,2,"nph");
636  (*i_sector).second.m_correlationHistsX["QBin"] = (*i_sector).second.bookCorrHistsX("QBin","q bin","q bin","",8,8,0,8,"nph");
637 
638  (*i_sector).second.m_correlationHistsY["ChargePixel"] = (*i_sector).second.bookCorrHistsY("ChargePixel","cluster charge","c_{cl}","[e]",100,50,0.,chargePixelMax,"nph");
639  (*i_sector).second.m_correlationHistsY["ClusterProbXY"] = (*i_sector).second.bookCorrHistsY("ClusterProbXY","cluster probability xy","prob_{cl,xy}","",100,50,0.,1.,"nph");
640  (*i_sector).second.m_correlationHistsY["ClusterProbQ"] = (*i_sector).second.bookCorrHistsY("ClusterProbQ","cluster probability q","prob_{cl,q}","",100,50,0.,1.,"nph");
641  (*i_sector).second.m_correlationHistsY["ClusterProbXYQ"] = (*i_sector).second.bookCorrHistsY("ClusterProbXYQ","cluster probability xyq","prob_{cl,xyq}","",100,50,0.,1.,"nph");
642  (*i_sector).second.m_correlationHistsY["LogClusterProb"] = (*i_sector).second.bookCorrHistsY("LogClusterProb","cluster probability xy","log(prob_{cl,xy})","",60,30,logClusterProbMin,0.,"nph");
643  (*i_sector).second.m_correlationHistsY["IsOnEdge"] = (*i_sector).second.bookCorrHistsY("IsOnEdge","IsOnEdge","isOnEdge","",2,2,0,2,"nph");
644  (*i_sector).second.m_correlationHistsY["HasBadPixels"] = (*i_sector).second.bookCorrHistsY("HasBadPixels","HasBadPixels","hasBadPixels","",2,2,0,2,"nph");
645  (*i_sector).second.m_correlationHistsY["SpansTwoRoc"] = (*i_sector).second.bookCorrHistsY("SpansTwoRoc","SpansTwoRoc","spansTwoRoc","",2,2,0,2,"nph");
646  (*i_sector).second.m_correlationHistsY["QBin"] = (*i_sector).second.bookCorrHistsY("QBin","q bin","q bin","",8,8,0,8,"nph");
647  }
648 
649  else{
650  (*i_sector).second.m_correlationHistsX["ChargeStrip"] = (*i_sector).second.bookCorrHistsX("ChargeStrip","cluster charge","c_{cl}","[APV counts]",100,50,0.,chargeStripMax,"nph");
651  (*i_sector).second.m_correlationHistsX["MaxStrip"] = (*i_sector).second.bookCorrHistsX("MaxStrip","strip with max. charge","n_{cl,max}","[# strips]",800,800,-10.,790.,"npht");
652  (*i_sector).second.m_correlationHistsX["MaxCharge"] = (*i_sector).second.bookCorrHistsX("MaxCharge","charge of strip with max. charge","c_{cl,max}","[APV counts]",300,75,-10.,290.,"nph");
653  (*i_sector).second.m_correlationHistsX["MaxIndex"] = (*i_sector).second.bookCorrHistsX("MaxIndex","cluster-index of strip with max. charge","i_{cl,max}","[# strips]",10,10,0.,10.,"nph");
654  (*i_sector).second.m_correlationHistsX["ChargeOnEdges"] = (*i_sector).second.bookCorrHistsX("ChargeOnEdges","fraction of charge on edge strips","(c_{st,L}+c_{st,R})/c_{cl}","",60,60,-0.1,1.1,"nph");
655  (*i_sector).second.m_correlationHistsX["ChargeAsymmetry"] = (*i_sector).second.bookCorrHistsX("ChargeAsymmetry","asymmetry of charge on edge strips","(c_{st,L}-c_{st,R})/c_{cl}","",110,55,-1.1,1.1,"nph");
656  (*i_sector).second.m_correlationHistsX["ChargeLRplus"] = (*i_sector).second.bookCorrHistsX("ChargeLRplus","fraction of charge not on maxStrip","(c_{cl,L}+c_{cl,R})/c_{cl}","",60,60,-0.1,1.1,"nph");
657  (*i_sector).second.m_correlationHistsX["ChargeLRminus"] = (*i_sector).second.bookCorrHistsX("ChargeLRminus","asymmetry of charge L and R of maxStrip","(c_{cl,L}-c_{cl,R})/c_{cl}","",110,55,-1.1,1.1,"nph");
658  (*i_sector).second.m_correlationHistsX["SOverN"] = (*i_sector).second.bookCorrHistsX("SOverN","signal over noise","s/N","",100,50,0,sOverNMax,"nph");
659  (*i_sector).second.m_correlationHistsX["WidthProj"] = (*i_sector).second.bookCorrHistsX("WidthProj","projected width","w_{p}","[# strips]",200,20,0.,widthMax,"nph");
660  (*i_sector).second.m_correlationHistsX["WidthDiff"] = (*i_sector).second.bookCorrHistsX("WidthDiff","width difference","w_{p} - w_{cl}","[# strips]",200,20,-widthMax/2.,widthMax/2.,"nph");
661 
662  (*i_sector).second.WidthVsWidthProjected = secDir.make<TH2F>("h2_widthVsWidthProj","w_{cl} vs. w_{p};w_{p} [# strips];w_{cl} [# strips]",static_cast<int>(widthMax),0,widthMax,static_cast<int>(widthMax),0,widthMax);
663  (*i_sector).second.PWidthVsWidthProjected = secDir.make<TProfile>("p_widthVsWidthProj","w_{cl} vs. w_{p};w_{p} [# strips];w_{cl} [# strips]",static_cast<int>(widthMax),0,widthMax);
664 
665  (*i_sector).second.WidthDiffVsMaxStrip = secDir.make<TH2F>("h2_widthDiffVsMaxStrip","(w_{p} - w_{cl}) vs. n_{cl,max};n_{cl,max};w_{p} - w_{cl} [# strips]",800,-10.,790.,static_cast<int>(widthMax),-widthMax/2.,widthMax/2.);
666  (*i_sector).second.PWidthDiffVsMaxStrip = secDir.make<TProfile>("p_widthDiffVsMaxStrip","(w_{p} - w_{cl}) vs. n_{cl,max};n_{cl,max};w_{p} - w_{cl} [# strips]",800,-10.,790.);
667 
668  (*i_sector).second.WidthDiffVsSigmaXHit = secDir.make<TH2F>("h2_widthDiffVsSigmaXHit","(w_{p} - w_{cl}) vs. #sigma_{hit,x};#sigma_{hit,x} [cm];w_{p} - w_{cl} [# strips]",100,0.,sigmaXMax,100,-10.,10.);
669  (*i_sector).second.PWidthDiffVsSigmaXHit = secDir.make<TProfile>("p_widthDiffVsSigmaXHit","(w_{p} - w_{cl}) vs. #sigma_{hit,x};#sigma_{hit,x} [cm];w_{p} - w_{cl} [# strips]",100,0.,sigmaXMax);
670 
671  (*i_sector).second.WidthVsPhiSensX = secDir.make<TH2F>("h2_widthVsPhiSensX","w_{cl} vs. #phi_{module,x};#phi_{module,x} [ ^{o}];w_{cl} [# strips]",93,-93,93,static_cast<int>(widthMax),0,widthMax);
672  (*i_sector).second.PWidthVsPhiSensX = secDir.make<TProfile>("p_widthVsPhiSensX","w_{cl} vs. #phi_{module,x};#phi_{module,x} [ ^{o}];w_{cl} [# strips]",93,-93,93);
673  }
674 
675 
676  // Hit Parameters (transform errors and residuals from [cm] in [mum])
677  (*i_sector).second.m_correlationHistsX["SigmaXHit"] = (*i_sector).second.bookCorrHistsX("SigmaXHit","hit error","#sigma_{hit,x}","[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,"np");
678  (*i_sector).second.m_correlationHistsX["SigmaXTrk"] = (*i_sector).second.bookCorrHistsX("SigmaXTrk","track error","#sigma_{trk,x}","[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,"np");
679  (*i_sector).second.m_correlationHistsX["SigmaX"] = (*i_sector).second.bookCorrHistsX("SigmaX","residual error","#sigma_{r,x}","[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,"np");
680  (*i_sector).second.m_correlationHistsX["PhiSens"] = (*i_sector).second.bookCorrHistsX("PhiSens","track angle on sensor","#phi_{module}","[ ^{o}]",96,48,-3,93,"nphtr");
681  (*i_sector).second.m_correlationHistsX["PhiSensX"] = (*i_sector).second.bookCorrHistsX("PhiSensX","track angle on sensor","#phi_{module,x}","[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,"nphtr");
682  (*i_sector).second.m_correlationHistsX["PhiSensY"] = (*i_sector).second.bookCorrHistsX("PhiSensY","track angle on sensor","#phi_{module,y}","[ ^{o}]",186,93,-93,93,"nphtr");
683 
684  (*i_sector).second.XHit = secDir.make<TH1F>("h_XHit"," hit measurement x_{hit};x_{hit} [cm];# hits",100,-20,20);
685  (*i_sector).second.XTrk = secDir.make<TH1F>("h_XTrk","track prediction x_{trk};x_{trk} [cm];# hits",100,-20,20);
686  (*i_sector).second.SigmaX2 = secDir.make<TH1F>("h_SigmaX2","squared residual error #sigma_{r,x}^{2};#sigma_{r,x}^{2} [#mum^{2}];# hits",105,sigmaXMin*10000.,sigmaX2Max*10000.*10000.); //no mistake !
687  (*i_sector).second.ResX = secDir.make<TH1F>("h_ResX","residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
688  (*i_sector).second.NorResX = secDir.make<TH1F>("h_NorResX","normalized residual r_{x}/#sigma_{r,x};(x_{trk}-x_{hit})/#sigma_{r,x};# hits",100,-norResXAbsMax,norResXAbsMax);
689  (*i_sector).second.ProbX = secDir.make<TH1F>("h_ProbX","residual probability;prob(r_{x}^{2}/#sigma_{r,x}^{2},1);# hits",60,probXMin,probXMax);
690 
691  (*i_sector).second.PhiSensXVsBarycentreX = secDir.make<TH2F>("h2_phiSensXVsBarycentreX","#phi_{module,x} vs. b_{cl,x};b_{cl,x} [# channels];#phi_{module,x} [ ^{o}]",200,-10.,790.,93,-93,93);
692  (*i_sector).second.PPhiSensXVsBarycentreX = secDir.make<TProfile>("p_phiSensXVsBarycentreX","#phi_{module,x} vs. b_{cl,x};b_{cl,x} [# channels];#phi_{module,x} [ ^{o}]",200,-10.,790.);
693 
694  if(pixelSector){
695  (*i_sector).second.m_correlationHistsY["SigmaYHit"] = (*i_sector).second.bookCorrHistsY("SigmaYHit","hit error","#sigma_{hit,y}","[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,"np");
696  (*i_sector).second.m_correlationHistsY["SigmaYTrk"] = (*i_sector).second.bookCorrHistsY("SigmaYTrk","track error","#sigma_{trk,y}","[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,"np");
697  (*i_sector).second.m_correlationHistsY["SigmaY"] = (*i_sector).second.bookCorrHistsY("SigmaY","residual error","#sigma_{r,y}","[#mum]",105,20,sigmaXMin*10000.,sigmaXMax*10000.,"np");
698  (*i_sector).second.m_correlationHistsY["PhiSens"] = (*i_sector).second.bookCorrHistsY("PhiSens","track angle on sensor","#phi_{module}","[ ^{o}]",96,48,-3,93,"nphtr");
699  (*i_sector).second.m_correlationHistsY["PhiSensX"] = (*i_sector).second.bookCorrHistsY("PhiSensX","track angle on sensor","#phi_{module,x}","[ ^{o}]",186,93,-phiSensXMax,phiSensXMax,"nphtr");
700  (*i_sector).second.m_correlationHistsY["PhiSensY"] = (*i_sector).second.bookCorrHistsY("PhiSensY","track angle on sensor","#phi_{module,y}","[ ^{o}]",186,93,-93,93,"nphtr");
701 
702  (*i_sector).second.YHit = secDir.make<TH1F>("h_YHit"," hit measurement y_{hit};y_{hit} [cm];# hits",100,-20,20);
703  (*i_sector).second.YTrk = secDir.make<TH1F>("h_YTrk","track prediction y_{trk};y_{trk} [cm];# hits",100,-20,20);
704  (*i_sector).second.SigmaY2 = secDir.make<TH1F>("h_SigmaY2","squared residual error #sigma_{r,y}^{2};#sigma_{r,y}^{2} [#mum^{2}];# hits",105,sigmaXMin*10000.,sigmaX2Max*10000.*10000.); //no mistake !
705  (*i_sector).second.ResY = secDir.make<TH1F>("h_ResY","residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-resXAbsMax*10000.,resXAbsMax*10000.);
706  (*i_sector).second.NorResY = secDir.make<TH1F>("h_NorResY","normalized residual r_{y}/#sigma_{r,y};(y_{trk}-y_{hit})/#sigma_{r,y};# hits",100,-norResXAbsMax,norResXAbsMax);
707  (*i_sector).second.ProbY = secDir.make<TH1F>("h_ProbY","residual probability;prob(r_{y}^{2}/#sigma_{r,y}^{2},1);# hits",60,probXMin,probXMax);
708 
709  (*i_sector).second.PhiSensYVsBarycentreY = secDir.make<TH2F>("h2_phiSensYVsBarycentreY","#phi_{module,y} vs. b_{cl,y};b_{cl,y} [# channels];#phi_{module,y} [ ^{o}]",200,-10.,790.,93,-93,93);
710  (*i_sector).second.PPhiSensYVsBarycentreY = secDir.make<TProfile>("p_phiSensYVsBarycentreY","#phi_{module,y} vs. b_{cl,y};b_{cl,y} [# channels];#phi_{module,y} [ ^{o}]",200,-10.,790.);
711  }
712 
713 
714  // Track Parameters
715  (*i_sector).second.m_correlationHistsX["HitsValid"] = (*i_sector).second.bookCorrHistsX("HitsValid","# hits","[valid]",50,0,50,"npt");
716  (*i_sector).second.m_correlationHistsX["HitsInvalid"] = (*i_sector).second.bookCorrHistsX("HitsInvalid","# hits","[invalid]",20,0,20,"npt");
717  (*i_sector).second.m_correlationHistsX["Hits2D"] = (*i_sector).second.bookCorrHistsX("Hits2D","# hits","[2D]",20,0,20,"npt");
718  (*i_sector).second.m_correlationHistsX["LayersMissed"] = (*i_sector).second.bookCorrHistsX("LayersMissed","# layers","[missed]",10,0,10,"npt");
719  (*i_sector).second.m_correlationHistsX["HitsPixel"] = (*i_sector).second.bookCorrHistsX("HitsPixel","# hits","[pixel]",10,0,10,"npt");
720  (*i_sector).second.m_correlationHistsX["HitsStrip"] = (*i_sector).second.bookCorrHistsX("HitsStrip","# hits","[strip]",40,0,40,"npt");
721  (*i_sector).second.m_correlationHistsX["HitsGood"] = (*i_sector).second.bookCorrHistsX("HitsGood","# hits","[good]",50,0,50,"npt");
722  (*i_sector).second.m_correlationHistsX["NorChi2"] = (*i_sector).second.bookCorrHistsX("NorChi2","#chi^{2}/f","",50,0,norChi2Max,"npr");
723  (*i_sector).second.m_correlationHistsX["Theta"] = (*i_sector).second.bookCorrHistsX("Theta","#theta","[ ^{o}]",40,-10,190,"npt");
724  (*i_sector).second.m_correlationHistsX["Phi"] = (*i_sector).second.bookCorrHistsX("Phi","#phi","[ ^{o}]",76,-190,190,"npt");
725  (*i_sector).second.m_correlationHistsX["D0Beamspot"] = (*i_sector).second.bookCorrHistsX("D0Beamspot","d_{0, BS}","[cm]",40,-d0Max,d0Max,"npt");
726  (*i_sector).second.m_correlationHistsX["Dz"] = (*i_sector).second.bookCorrHistsX("Dz","d_{z}","[cm]",40,-dzMax,dzMax,"npt");
727  (*i_sector).second.m_correlationHistsX["Pt"] = (*i_sector).second.bookCorrHistsX("Pt","p_{t}","[GeV]",50,0,pMax,"npt");
728  (*i_sector).second.m_correlationHistsX["P"] = (*i_sector).second.bookCorrHistsX("P","|p|","[GeV]",50,0,pMax,"npt");
729  (*i_sector).second.m_correlationHistsX["InvP"] = (*i_sector).second.bookCorrHistsX("InvP","1/|p|","[GeV^{-1}]",25,0,invPMax,"t");
730  (*i_sector).second.m_correlationHistsX["MeanAngle"] = (*i_sector).second.bookCorrHistsX("MeanAngle","<#phi_{module}>","[ ^{o}]",25,-5,95,"npt");
731  //(*i_sector).second.m_correlationHistsX[""] = (*i_sector).second.bookCorrHistsX("","","",,,,"nphtr");
732 
733  if(pixelSector){
734  (*i_sector).second.m_correlationHistsY["HitsValid"] = (*i_sector).second.bookCorrHistsY("HitsValid","# hits","[valid]",50,0,50,"npt");
735  (*i_sector).second.m_correlationHistsY["HitsInvalid"] = (*i_sector).second.bookCorrHistsY("HitsInvalid","# hits","[invalid]",20,0,20,"npt");
736  (*i_sector).second.m_correlationHistsY["Hits2D"] = (*i_sector).second.bookCorrHistsY("Hits2D","# hits","[2D]",20,0,20,"npt");
737  (*i_sector).second.m_correlationHistsY["LayersMissed"] = (*i_sector).second.bookCorrHistsY("LayersMissed","# layers","[missed]",10,0,10,"npt");
738  (*i_sector).second.m_correlationHistsY["HitsPixel"] = (*i_sector).second.bookCorrHistsY("HitsPixel","# hits","[pixel]",10,0,10,"npt");
739  (*i_sector).second.m_correlationHistsY["HitsStrip"] = (*i_sector).second.bookCorrHistsY("HitsStrip","# hits","[strip]",40,0,40,"npt");
740  (*i_sector).second.m_correlationHistsY["HitsGood"] = (*i_sector).second.bookCorrHistsY("HitsGood","# hits","[good]",50,0,50,"npt");
741  (*i_sector).second.m_correlationHistsY["NorChi2"] = (*i_sector).second.bookCorrHistsY("NorChi2","#chi^{2}/f","",50,0,norChi2Max,"npr");
742  (*i_sector).second.m_correlationHistsY["Theta"] = (*i_sector).second.bookCorrHistsY("Theta","#theta","[ ^{o}]",40,-10,190,"npt");
743  (*i_sector).second.m_correlationHistsY["Phi"] = (*i_sector).second.bookCorrHistsY("Phi","#phi","[ ^{o}]",76,-190,190,"npt");
744  (*i_sector).second.m_correlationHistsY["D0Beamspot"] = (*i_sector).second.bookCorrHistsY("D0Beamspot","d_{0, BS}","[cm]",40,-d0Max,d0Max,"npt");
745  (*i_sector).second.m_correlationHistsY["Dz"] = (*i_sector).second.bookCorrHistsY("Dz","d_{z}","[cm]",40,-dzMax,dzMax,"npt");
746  (*i_sector).second.m_correlationHistsY["Pt"] = (*i_sector).second.bookCorrHistsY("Pt","p_{t}","[GeV]",50,0,pMax,"npt");
747  (*i_sector).second.m_correlationHistsY["P"] = (*i_sector).second.bookCorrHistsY("P","|p|","[GeV]",50,0,pMax,"npt");
748  (*i_sector).second.m_correlationHistsY["InvP"] = (*i_sector).second.bookCorrHistsY("InvP","1/|p|","[GeV^{-1}]",25,0,invPMax,"t");
749  (*i_sector).second.m_correlationHistsY["MeanAngle"] = (*i_sector).second.bookCorrHistsY("MeanAngle","<#phi_{module}>","[ ^{o}]",25,-5,95,"npt");
750  }
751 
752 
753  // (transform errors and residuals from [cm] in [mum])
754  for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
755  double xMin(0.01*(*i_errHists-1)), xMax(0.01*(*i_errHists));
756  std::stringstream sigmaXHit, sigmaXTrk, sigmaX;
757  sigmaXHit << "h_sigmaXHit_" << *i_errHists;
758  sigmaXTrk << "h_sigmaXTrk_" << *i_errHists;
759  sigmaX << "h_sigmaX_" << *i_errHists;
760  (*i_sector).second.m_sigmaX["sigmaXHit"].push_back(secDir.make<TH1F>(sigmaXHit.str().c_str(),"hit error #sigma_{hit,x};#sigma_{hit,x} [#mum];# hits",100,xMin*10000.,xMax*10000.));
761  (*i_sector).second.m_sigmaX["sigmaXTrk"].push_back(secDir.make<TH1F>(sigmaXTrk.str().c_str(),"track error #sigma_{trk,x};#sigma_{trk,x} [#mum];# hits",100,xMin*10000.,xMax*10000.));
762  (*i_sector).second.m_sigmaX["sigmaX" ].push_back(secDir.make<TH1F>(sigmaX.str().c_str(),"residual error #sigma_{r,x};#sigma_{r,x} [#mum];# hits",100,xMin*10000.,xMax*10000.));
763  if(pixelSector){
764  std::stringstream sigmaYHit, sigmaYTrk, sigmaY;
765  sigmaYHit << "h_sigmaYHit_" << *i_errHists;
766  sigmaYTrk << "h_sigmaYTrk_" << *i_errHists;
767  sigmaY << "h_sigmaY_" << *i_errHists;
768  (*i_sector).second.m_sigmaY["sigmaYHit"].push_back(secDir.make<TH1F>(sigmaYHit.str().c_str(),"hit error #sigma_{hit,y};#sigma_{hit,y} [#mum];# hits",100,xMin*10000.,xMax*10000.));
769  (*i_sector).second.m_sigmaY["sigmaYTrk"].push_back(secDir.make<TH1F>(sigmaYTrk.str().c_str(),"track error #sigma_{trk,y};#sigma_{trk,y} [#mum];# hits",100,xMin*10000.,xMax*10000.));
770  (*i_sector).second.m_sigmaY["sigmaY" ].push_back(secDir.make<TH1F>(sigmaY.str().c_str(),"residual error #sigma_{r,y};#sigma_{r,y} [#mum];# hits",100,xMin*10000.,xMax*10000.));
771  }
772  }
773 
774  }
775 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
T * make(const Args &...args) const
make new ROOT object
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
edm::Service< TFileService > fileService
void ApeEstimator::bookSectorHistsForApeCalculation ( )
private

Definition at line 780 of file ApeEstimator.cc.

References edm::errors::Configuration, Exception, fileService, edm::ParameterSet::getParameter(), m_resErrBins_, m_tkSector_, TFileDirectory::make(), genParticles_cff::map, TFileDirectory::mkdir(), TFileService::mkdir(), and parameterSet_.

Referenced by beginJob().

780  {
781 
782  std::vector<unsigned int> v_errHists(parameterSet_.getParameter<std::vector<unsigned int> >("vErrHists"));
783  for(std::vector<unsigned int>::iterator i_errHists = v_errHists.begin(); i_errHists != v_errHists.end(); ++i_errHists){
784  for(std::vector<unsigned int>::iterator i_errHists2 = i_errHists; i_errHists2 != v_errHists.end();){
785  ++i_errHists2;
786  if(*i_errHists==*i_errHists2){
787  edm::LogError("BookSectorHists")<<"Value of vErrHists in config exists twice: "<<*i_errHists<<"\n... delete one of both";
788  v_errHists.erase(i_errHists2);
789  }
790  }
791  }
792 
793  for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
794 
796  if(!fileService){
798  "TFileService is not registered in cfg file" );
799  }
800 
801  std::stringstream sector; sector << "Sector_" << (*i_sector).first;
802  TFileDirectory secDir = fileService->mkdir(sector.str());
803 
804  // Dummy histo containing the sector name as title
805  (*i_sector).second.Name = secDir.make<TH1F>("z_name",(*i_sector).second.name.c_str(),1,0,1);
806 
807  // Do not book histos for empty sectors
808  if((*i_sector).second.v_rawId.empty()){
809  continue;
810  }
811 
812 
813  // Distributions in each interval (stay in [cm], to have all calculations in [cm])
814  if(m_resErrBins_.empty()){m_resErrBins_[1].first = 0.;m_resErrBins_[1].second = 0.01;} // default if no selection taken into account: calculate APE with one bin with residual error 0-100um
815  for(std::map<unsigned int,std::pair<double,double> >::const_iterator i_errBins = m_resErrBins_.begin();
816  i_errBins != m_resErrBins_.end(); ++i_errBins){
817  std::stringstream interval; interval << "Interval_" << (*i_errBins).first;
818  TFileDirectory intDir = secDir.mkdir(interval.str());
819  (*i_sector).second.m_binnedHists[(*i_errBins).first]["sigmaX"] = intDir.make<TH1F>("h_sigmaX","residual resolution #sigma_{x};#sigma_{x} [cm];# hits",100,0.,0.01);
820  (*i_sector).second.m_binnedHists[(*i_errBins).first]["norResX"] = intDir.make<TH1F>("h_norResX","normalized residual r_{x}/#sigma_{r,x};(x_{trk}-x_{hit})/#sigma_{r,x};# hits",100,-10,10);
821  if((*i_sector).second.isPixel){
822  (*i_sector).second.m_binnedHists[(*i_errBins).first]["sigmaY"] = intDir.make<TH1F>("h_sigmaY","residual resolution #sigma_{y};#sigma_{y} [cm];# hits",100,0.,0.01);
823  (*i_sector).second.m_binnedHists[(*i_errBins).first]["norResY"] = intDir.make<TH1F>("h_norResY","normalized residual r_{y}/#sigma_{r,y};(y_{trk}-y_{hit})/#sigma_{r,y};# hits",100,-10,10);
824  }
825  }
826 
827 
828  TFileDirectory resDir = secDir.mkdir("Results");
829 
830  // TTree containing rawIds of all modules in sector
831  unsigned int rawId(0);
832  (*i_sector).second.RawId = resDir.make<TTree>("rawIdTree","Tree containing rawIds of all modules in sector");
833  (*i_sector).second.RawId->Branch("RawId", &rawId, "RawId/i");
834  for(std::vector<unsigned int>::const_iterator i_rawId=(*i_sector).second.v_rawId.begin(); i_rawId!=(*i_sector).second.v_rawId.end(); ++i_rawId){
835  rawId = (*i_rawId);
836  (*i_sector).second.RawId->Fill();
837  }
838 
839  // Result plots (one hist per sector containing one bin per interval)
840  // (transform errors and residuals from [cm] in [mum])
841  std::vector<double> v_binX(parameterSet_.getParameter<std::vector<double> >("residualErrorBinning"));
842  for(std::vector<double>::iterator i_binX = v_binX.begin(); i_binX != v_binX.end(); ++i_binX){
843  *i_binX *= 10000.;
844  }
845  (*i_sector).second.EntriesX = resDir.make<TH1F>("h_entriesX","# hits used;#sigma_{x} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
846  if((*i_sector).second.isPixel){
847  (*i_sector).second.EntriesY = resDir.make<TH1F>("h_entriesY","# hits used;#sigma_{y} [#mum];# hits",v_binX.size()-1,&(v_binX[0]));
848  }
849 
850  // In fact these are un-needed Analyzer plots, but I want to have them always for every sector visible
851  // (transform errors and residuals from [cm] in [mum])
852  (*i_sector).second.ResX = resDir.make<TH1F>("h_ResX","residual r_{x};x_{trk}-x_{hit} [#mum];# hits",100,-0.03*10000.,0.03*10000.);
853  (*i_sector).second.NorResX = resDir.make<TH1F>("h_NorResX","normalized residual r_{x}/#sigma_{r,x};(x_{trk}-x_{hit})/#sigma_{r,x};# hits",100,-5.,5.);
854  if((*i_sector).second.isPixel){
855  (*i_sector).second.ResY = resDir.make<TH1F>("h_ResY","residual r_{y};y_{trk}-y_{hit} [#mum];# hits",100,-0.03*10000.,0.03*10000.);
856  (*i_sector).second.NorResY = resDir.make<TH1F>("h_NorResY","normalized residual r_{y}/#sigma_{r,y};(y_{trk}-y_{hit})/#sigma_{r,y};# hits",100,-5.,5.);
857  }
858  }
859 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
std::map< unsigned int, std::pair< double, double > > m_resErrBins_
T * make(const Args &...args) const
make new ROOT object
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
edm::Service< TFileService > fileService
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
void ApeEstimator::bookTrackHists ( )
private

Definition at line 865 of file ApeEstimator.cc.

References TrackerDetectorStruct::Charge, TrackerDetectorStruct::Chi2, CSCSegmentAlgorithmDF_cfi::chi2Max, TrackerDetectorStruct::D0Beamspot, TrackerDetectorStruct::D0BeamspotErr, TrackerDetectorStruct::D0BeamspotSig, TrackerDetectorStruct::Dz, TrackerDetectorStruct::DzErr, TrackerDetectorStruct::DzSig, TrackerDetectorStruct::Eta, TrackerDetectorStruct::EtaErr, TrackerDetectorStruct::EtaSig, fileService, edm::ParameterSet::getParameter(), TrackerDetectorStruct::Hits2D, TrackerDetectorStruct::HitsGood, TrackerDetectorStruct::HitsGoodVsHitsValid, TrackerDetectorStruct::HitsInvalid, TrackerDetectorStruct::HitsPixel, TrackerDetectorStruct::HitsPixelVsEta, TrackerDetectorStruct::HitsPixelVsTheta, TrackerDetectorStruct::HitsSize, TrackerDetectorStruct::HitsStrip, TrackerDetectorStruct::HitsStripVsEta, TrackerDetectorStruct::HitsStripVsTheta, TrackerDetectorStruct::HitsValid, TrackerDetectorStruct::LayersMissed, TFileDirectory::make(), TrackerDetectorStruct::MeanAngle, TrackerDetectorStruct::MeanAngleVsHits, TFileService::mkdir(), TrackerDetectorStruct::Ndof, TrackerDetectorStruct::NorChi2, TrackerDetectorStruct::P, parameterSet_, TrackerDetectorStruct::Phi, TrackerDetectorStruct::PhiErr, TrackerDetectorStruct::PhiSig, TrackerDetectorStruct::PHitsGoodVsHitsValid, TrackerDetectorStruct::PHitsPixelVsEta, TrackerDetectorStruct::PHitsPixelVsTheta, TrackerDetectorStruct::PHitsStripVsEta, TrackerDetectorStruct::PHitsStripVsTheta, AlignmentTrackSelector_cfi::pMax, TrackerDetectorStruct::PMeanAngleVsHits, TrackerDetectorStruct::PPtVsEta, TrackerDetectorStruct::PPtVsTheta, TrackerDetectorStruct::Prob, TrackerDetectorStruct::Pt, TrackerDetectorStruct::PtErr, TrackerDetectorStruct::PtSig, TrackerDetectorStruct::PtVsEta, TrackerDetectorStruct::PtVsTheta, TrackerDetectorStruct::Theta, tkDetector_, TrackerDetectorStruct::TrkSize, and TrackerDetectorStruct::TrkSizeGood.

Referenced by beginJob().

865  {
866 
867  bool zoomHists(parameterSet_.getParameter<bool>("zoomHists"));
868 
869  int trackSizeBins = zoomHists ? 6 : 201;
870  double trackSizeMax = trackSizeBins -1;
871 
872  double chi2Max = zoomHists ? 100. : 2000.;
873  double norChi2Max = zoomHists ? 5. : 1000.;
874  double d0max = zoomHists ? 0.02 : 40.; // cosmics: 100.|100.
875  double dzmax = zoomHists ? 15. : 100.; // cosmics: 200.|600.
876  double pMax = zoomHists ? 200. : 2000.;
877 
879  TFileDirectory evtDir = fileService->mkdir("EventVariables");
880  tkDetector_.TrkSize = evtDir.make<TH1F>("h_trackSize","# tracks [all];# tracks;# events",trackSizeBins,-1,trackSizeMax);
881  tkDetector_.TrkSizeGood = evtDir.make<TH1F>("h_trackSizeGood","# tracks [good];# tracks;# events",trackSizeBins,-1,trackSizeMax);
882  TFileDirectory trkDir = fileService->mkdir("TrackVariables");
883  tkDetector_.HitsSize = trkDir.make<TH1F>("h_hitsSize","# hits;# hits;# tracks",51,-1,50);
884  tkDetector_.HitsValid = trkDir.make<TH1F>("h_hitsValid","# hits [valid];# hits [valid];# tracks",51,-1,50);
885  tkDetector_.HitsInvalid = trkDir.make<TH1F>("h_hitsInvalid","# hits [invalid];# hits [invalid];# tracks",21,-1,20);
886  tkDetector_.Hits2D = trkDir.make<TH1F>("h_hits2D","# hits [2D];# hits [2D];# tracks",21,-1,20);
887  tkDetector_.LayersMissed = trkDir.make<TH1F>("h_layersMissed","# layers [missed];# layers [missed];# tracks",11,-1,10);
888  tkDetector_.HitsPixel = trkDir.make<TH1F>("h_hitsPixel","# hits [pixel];# hits [pixel];# tracks",11,-1,10);
889  tkDetector_.HitsStrip = trkDir.make<TH1F>("h_hitsStrip","# hits [strip];# hits [strip];# tracks",41,-1,40);
890  tkDetector_.Charge = trkDir.make<TH1F>("h_charge","charge q;q [e];# tracks",5,-2,3);
891  tkDetector_.Chi2 = trkDir.make<TH1F>("h_chi2"," #chi^{2};#chi^{2};# tracks",100,0,chi2Max);
892  tkDetector_.Ndof = trkDir.make<TH1F>("h_ndof","# degrees of freedom f;f;# tracks",101,-1,100);
893  tkDetector_.NorChi2 = trkDir.make<TH1F>("h_norChi2","normalized #chi^{2};#chi^{2}/f;# tracks",200,0,norChi2Max);
894  tkDetector_.Prob = trkDir.make<TH1F>("h_prob"," #chi^{2} probability;prob(#chi^{2},f);# tracks",50,0,1);
895  tkDetector_.Eta = trkDir.make<TH1F>("h_eta","pseudorapidity #eta;#eta;# tracks",100,-5,5);
896  tkDetector_.EtaErr = trkDir.make<TH1F>("h_etaErr","Error of #eta;#sigma(#eta);# tracks",100,0,0.001);
897  tkDetector_.EtaSig = trkDir.make<TH1F>("h_etaSig","Significance of #eta;#eta/#sigma(#eta);# tracks",100,-20000,20000);
898  tkDetector_.Theta = trkDir.make<TH1F>("h_theta","polar angle #theta;#theta [ ^{o}];# tracks",100,-10,190);
899  tkDetector_.Phi = trkDir.make<TH1F>("h_phi","azimuth angle #phi;#phi [ ^{o}];# tracks",190,-190,190);
900  tkDetector_.PhiErr = trkDir.make<TH1F>("h_phiErr","Error of #phi;#sigma(#phi) [ ^{o}];# tracks",100,0,0.04);
901  tkDetector_.PhiSig = trkDir.make<TH1F>("h_phiSig","Significance of #phi;#phi/#sigma(#phi) [ ^{o}];# tracks",100,-50000,50000);
902  tkDetector_.D0Beamspot = trkDir.make<TH1F>("h_d0Beamspot","Closest approach d_{0} wrt. beamspot;d_{0, BS} [cm];# tracks",200,-d0max,d0max);
903  tkDetector_.D0BeamspotErr = trkDir.make<TH1F>("h_d0BeamspotErr","Error of d_{0, BS};#sigma(d_{0, BS}) [cm];# tracks",200,0,0.01);
904  tkDetector_.D0BeamspotSig = trkDir.make<TH1F>("h_d0BeamspotSig","Significance of d_{0, BS};d_{0, BS}/#sigma(d_{0, BS});# tracks",100,-5,5);
905  tkDetector_.Dz = trkDir.make<TH1F>("h_dz","Closest approach d_{z};d_{z} [cm];# tracks",200,-dzmax,dzmax);
906  tkDetector_.DzErr = trkDir.make<TH1F>("h_dzErr","Error of d_{z};#sigma(d_{z}) [cm];# tracks",200,0,0.01);
907  tkDetector_.DzSig = trkDir.make<TH1F>("h_dzSig","Significance of d_{z};d_{z}/#sigma(d_{z});# tracks",100,-10000,10000);
908  tkDetector_.Pt = trkDir.make<TH1F>("h_pt","transverse momentum p_{t};p_{t} [GeV];# tracks",100,0,pMax);
909  tkDetector_.PtErr = trkDir.make<TH1F>("h_ptErr","Error of p_{t};#sigma(p_{t}) [GeV];# tracks",100,0,1.6);
910  tkDetector_.PtSig = trkDir.make<TH1F>("h_ptSig","Significance of p_{t};p_{t}/#sigma(p_{t});# tracks",100,0,200);
911  tkDetector_.P = trkDir.make<TH1F>("h_p","momentum magnitude |p|;|p| [GeV];# tracks",100,0,pMax);
912  tkDetector_.MeanAngle = trkDir.make<TH1F>("h_meanAngle","mean angle on module <#phi_{module}>;<#phi_{module}> [ ^{o}];# tracks",100,-5,95);
913  tkDetector_.HitsGood = trkDir.make<TH1F>("h_hitsGood","# hits [good];# hits [good];# tracks",51,-1,50);
914 
915  tkDetector_.MeanAngleVsHits = trkDir.make<TH2F>("h2_meanAngleVsHits","<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50,50,-5,95);
916  tkDetector_.HitsGoodVsHitsValid = trkDir.make<TH2F>("h2_hitsGoodVsHitsValid","# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50,51,-1,50);
917  tkDetector_.HitsPixelVsEta = trkDir.make<TH2F>("h2_hitsPixelVsEta","# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3,11,-1,10);
918  tkDetector_.HitsPixelVsTheta = trkDir.make<TH2F>("h2_hitsPixelVsTheta","# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190,11,-1,10);
919  tkDetector_.HitsStripVsEta = trkDir.make<TH2F>("h2_hitsStripVsEta","# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3,31,-1,40);
920  tkDetector_.HitsStripVsTheta = trkDir.make<TH2F>("h2_hitsStripVsTheta","# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190,31,-1,40);
921  tkDetector_.PtVsEta = trkDir.make<TH2F>("h2_ptVsEta","p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3,100,0,pMax);
922  tkDetector_.PtVsTheta = trkDir.make<TH2F>("h2_ptVsTheta","p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190,100,0,pMax);
923 
924  tkDetector_.PMeanAngleVsHits = trkDir.make<TProfile>("p_meanAngleVsHits","<#phi_{module}> vs. # hits;# hits;<#phi_{module}> [ ^{o}]",51,-1,50);
925  tkDetector_.PHitsGoodVsHitsValid = trkDir.make<TProfile>("p_hitsGoodVsHitsValid","# hits [good] vs. # hits [valid];# hits [valid];# hits [good]",51,-1,50);
926  tkDetector_.PHitsPixelVsEta = trkDir.make<TProfile>("p_hitsPixelVsEta","# hits [pixel] vs. #eta;#eta;# hits [pixel]",60,-3,3);
927  tkDetector_.PHitsPixelVsTheta = trkDir.make<TProfile>("p_hitsPixelVsTheta","# hits [pixel] vs. #theta;#theta;# hits [pixel]",100,-10,190);
928  tkDetector_.PHitsStripVsEta = trkDir.make<TProfile>("p_hitsStripVsEta","# hits [strip] vs. #eta;#eta;# hits [strip]",60,-3,3);
929  tkDetector_.PHitsStripVsTheta = trkDir.make<TProfile>("p_hitsStripVsTheta","# hits [strip] vs. #theta;#theta;# hits [strip]",100,-10,190);
930  tkDetector_.PPtVsEta = trkDir.make<TProfile>("p_ptVsEta","p_{t} vs. #eta;#eta;p_{t} [GeV]",60,-3,3);
931  tkDetector_.PPtVsTheta = trkDir.make<TProfile>("p_ptVsTheta","p_{t} vs. #theta;#theta;p_{t} [GeV]",100,-10,190);
932 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
TrackerDetectorStruct tkDetector_
T * make(const Args &...args) const
make new ROOT object
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
edm::Service< TFileService > fileService
void ApeEstimator::calculateAPE ( )
private

Definition at line 2068 of file ApeEstimator.cc.

References m_tkSector_, and genParticles_cff::map.

Referenced by endJob().

2068  {
2069  // Loop over sectors for calculating APE
2070  for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
2071 
2072  // Loop over residual error bins to calculate APE for every bin
2073  for(std::map<unsigned int, std::map<std::string,TH1*> >::const_iterator i_errBins = (*i_sector).second.m_binnedHists.begin();
2074  i_errBins != (*i_sector).second.m_binnedHists.end(); ++i_errBins){
2075  std::map<std::string,TH1*> m_Hists = (*i_errBins).second;
2076 
2077  // Fitting Parameters
2078  double integralX = m_Hists["norResX"]->Integral();
2079  (*i_sector).second.EntriesX->SetBinContent((*i_errBins).first, integralX);
2080 
2081  if((*i_sector).second.isPixel){
2082  double integralY = m_Hists["norResY"]->Integral();
2083  (*i_sector).second.EntriesY->SetBinContent((*i_errBins).first, integralY);
2084  }
2085  }
2086  }
2087 }
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
bool ApeEstimator::checkIntervalsForSectors ( const unsigned int  sectorCounter,
const std::vector< double > &  v_id 
) const
private

Definition at line 427 of file ApeEstimator.cc.

References mps_splice::entry.

Referenced by sectorBuilder().

427  {
428  if(v_id.empty())return true;
429  if(v_id.size()%2==1){
430  edm::LogError("SectorBuilder")<<"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)"
431  <<"\n... sector selection is not applied, sector "<<sectorCounter<<" is not built";
432  return false;
433  }
434  int entry(1); double intervalBegin(999.);
435  for(std::vector<double>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id, ++entry){
436  if(entry%2==1)intervalBegin = *i_id;
437  if(entry%2==0 && intervalBegin>*i_id){
438  edm::LogError("SectorBuilder")<<"Incorrect Sector Definition (Position Vector Intervals): \t"
439  <<intervalBegin<<" is bigger than "<<*i_id<<" but is expected to be smaller"
440  <<"\n... sector selection is not applied, sector "<<sectorCounter<<" is not built";
441  return false;
442  }
443  }
444  return true;
445 }
bool ApeEstimator::checkModuleBools ( const bool  id,
const std::vector< unsigned int > &  v_id 
) const
private

Definition at line 457 of file ApeEstimator.cc.

Referenced by sectorBuilder().

457  {
458  if(v_id.empty())return true;
459  for(std::vector<unsigned int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
460  if(1==*i_id && id)return true;
461  if(2==*i_id && !id)return true;
462  }
463  return false;
464 }
bool ApeEstimator::checkModuleDirections ( const int  id,
const std::vector< int > &  v_id 
) const
private

Definition at line 467 of file ApeEstimator.cc.

Referenced by sectorBuilder().

467  {
468  if(v_id.empty())return true;
469  for(std::vector<int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
470  if(id==*i_id)return true;
471  }
472  return false;
473 }
bool ApeEstimator::checkModuleIds ( const unsigned int  id,
const std::vector< unsigned int > &  v_id 
) const
private

Definition at line 448 of file ApeEstimator.cc.

Referenced by sectorBuilder().

448  {
449  if(v_id.empty())return true;
450  for(std::vector<unsigned int>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id){
451  if(id==*i_id)return true;
452  }
453  return false;
454 }
bool ApeEstimator::checkModulePositions ( const float  id,
const std::vector< double > &  v_id 
) const
private

Definition at line 476 of file ApeEstimator.cc.

References mps_splice::entry.

Referenced by sectorBuilder().

476  {
477  if(v_id.empty())return true;
478  int entry(1); double intervalBegin(999.);
479  for(std::vector<double>::const_iterator i_id = v_id.begin(); i_id != v_id.end(); ++i_id, ++entry){
480  if(entry%2==1)intervalBegin = *i_id;
481  if(entry%2==0 && id>=intervalBegin && id<*i_id)return true;
482  }
483  return false;
484 }
void ApeEstimator::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 2227 of file ApeEstimator.cc.

References calculateAPE(), calculateApe_, counter1, and DEFINE_FWK_MODULE.

Referenced by o2olib.O2ORunMgr::executeJob().

2227  {
2228 
2229  if(calculateApe_)this->calculateAPE();
2230 
2231  edm::LogInfo("HitSelector")<<"\nThere are "<<counter1<< " negative Errors calculated\n";
2232 }
const bool calculateApe_
unsigned int counter1
void calculateAPE()
void ApeEstimator::fillHistsForAnalyzerMode ( const TrackStruct trackStruct)
private

Definition at line 1738 of file ApeEstimator.cc.

References TrackerDetectorStruct::Charge, TrackStruct::TrackParameterStruct::charge, TrackerDetectorStruct::Chi2, TrackStruct::TrackParameterStruct::chi2, TrackerDetectorStruct::D0Beamspot, TrackStruct::TrackParameterStruct::d0Beamspot, TrackerDetectorStruct::D0BeamspotErr, TrackStruct::TrackParameterStruct::d0BeamspotErr, TrackerDetectorStruct::D0BeamspotSig, TrackerDetectorStruct::Dz, TrackStruct::TrackParameterStruct::dz, TrackerDetectorStruct::DzErr, TrackStruct::TrackParameterStruct::dzErr, TrackerDetectorStruct::DzSig, TrackStruct::HitParameterStruct::errX, TrackStruct::HitParameterStruct::errXHit, TrackStruct::HitParameterStruct::errXTrk, TrackStruct::HitParameterStruct::errY, TrackStruct::HitParameterStruct::errYHit, TrackStruct::HitParameterStruct::errYTrk, TrackerDetectorStruct::Eta, TrackStruct::TrackParameterStruct::eta, TrackerDetectorStruct::EtaErr, TrackStruct::TrackParameterStruct::etaErr, TrackerDetectorStruct::EtaSig, fillHitHistsXForAnalyzerMode(), fillHitHistsYForAnalyzerMode(), edm::ParameterSet::getParameter(), TrackStruct::HitParameterStruct::goodXMeasurement, TrackStruct::HitParameterStruct::goodYMeasurement, TrackerDetectorStruct::Hits2D, TrackStruct::TrackParameterStruct::hits2D, TrackerDetectorStruct::HitsGood, TrackerDetectorStruct::HitsGoodVsHitsValid, TrackerDetectorStruct::HitsInvalid, TrackStruct::TrackParameterStruct::hitsInvalid, TrackerDetectorStruct::HitsPixel, TrackStruct::TrackParameterStruct::hitsPixel, TrackerDetectorStruct::HitsPixelVsEta, TrackerDetectorStruct::HitsPixelVsTheta, TrackerDetectorStruct::HitsSize, TrackStruct::TrackParameterStruct::hitsSize, TrackerDetectorStruct::HitsStrip, TrackStruct::TrackParameterStruct::hitsStrip, TrackerDetectorStruct::HitsStripVsEta, TrackerDetectorStruct::HitsStripVsTheta, TrackStruct::HitParameterStruct::hitState, TrackerDetectorStruct::HitsValid, TrackStruct::TrackParameterStruct::hitsValid, TrackerDetectorStruct::LayersMissed, TrackStruct::TrackParameterStruct::layersMissed, TrackerSectorStruct::m_correlationHistsX, TrackerSectorStruct::m_correlationHistsY, M_PI, TrackerSectorStruct::m_sigmaX, TrackerSectorStruct::m_sigmaY, m_tkSector_, genParticles_cff::map, TrackerDetectorStruct::MeanAngle, TrackerDetectorStruct::MeanAngleVsHits, TrackStruct::TrackParameterStruct::meanPhiSensToNorm, minGoodHitsPerTrack_, TrackerDetectorStruct::Ndof, TrackStruct::TrackParameterStruct::ndof, TrackerDetectorStruct::NorChi2, TrackStruct::TrackParameterStruct::norChi2, TrackStruct::notAssignedToSectors, TrackerDetectorStruct::P, TrackStruct::TrackParameterStruct::p, parameterSet_, TrackerDetectorStruct::Phi, TrackStruct::TrackParameterStruct::phi, TrackerDetectorStruct::PhiErr, TrackStruct::TrackParameterStruct::phiErr, TrackerDetectorStruct::PhiSig, TrackerDetectorStruct::PHitsGoodVsHitsValid, TrackerDetectorStruct::PHitsPixelVsEta, TrackerDetectorStruct::PHitsPixelVsTheta, TrackerDetectorStruct::PHitsStripVsEta, TrackerDetectorStruct::PHitsStripVsTheta, TrackerDetectorStruct::PMeanAngleVsHits, TrackerDetectorStruct::PPtVsEta, TrackerDetectorStruct::PPtVsTheta, TrackerDetectorStruct::Prob, TrackStruct::TrackParameterStruct::prob, TrackerDetectorStruct::Pt, TrackStruct::TrackParameterStruct::pt, TrackerDetectorStruct::PtErr, TrackStruct::TrackParameterStruct::ptErr, TrackerDetectorStruct::PtSig, TrackerDetectorStruct::PtVsEta, TrackerDetectorStruct::PtVsTheta, AlCaHLTBitMon_QueryRunRegistry::string, TrackerDetectorStruct::Theta, TrackStruct::TrackParameterStruct::theta, tkDetector_, TrackStruct::trkParams, TrackStruct::v_hitParams, and TrackStruct::HitParameterStruct::v_sector.

Referenced by analyze().

1738  {
1739 
1740  unsigned int goodHitsPerTrack(trackStruct.v_hitParams.size());
1741  tkDetector_.HitsGood->Fill(goodHitsPerTrack);
1742  tkDetector_.HitsGoodVsHitsValid->Fill(trackStruct.trkParams.hitsValid,goodHitsPerTrack);
1743  tkDetector_.PHitsGoodVsHitsValid->Fill(trackStruct.trkParams.hitsValid,goodHitsPerTrack);
1744 
1745  if(parameterSet_.getParameter<bool>("applyTrackCuts")){
1746  // which tracks to take? need min. nr. of selected hits?
1747  if(goodHitsPerTrack < minGoodHitsPerTrack_)return;
1748  }
1749 
1750  tkDetector_.HitsSize ->Fill(trackStruct.trkParams.hitsSize);
1751  tkDetector_.HitsValid ->Fill(trackStruct.trkParams.hitsValid);
1752  tkDetector_.HitsInvalid ->Fill(trackStruct.trkParams.hitsInvalid);
1753  tkDetector_.Hits2D ->Fill(trackStruct.trkParams.hits2D);
1754  tkDetector_.LayersMissed ->Fill(trackStruct.trkParams.layersMissed);
1755  tkDetector_.HitsPixel ->Fill(trackStruct.trkParams.hitsPixel);
1756  tkDetector_.HitsStrip ->Fill(trackStruct.trkParams.hitsStrip);
1757  tkDetector_.Charge ->Fill(trackStruct.trkParams.charge);
1758  tkDetector_.Chi2 ->Fill(trackStruct.trkParams.chi2);
1759  tkDetector_.Ndof ->Fill(trackStruct.trkParams.ndof);
1760  tkDetector_.NorChi2 ->Fill(trackStruct.trkParams.norChi2);
1761  tkDetector_.Prob ->Fill(trackStruct.trkParams.prob);
1762  tkDetector_.Eta ->Fill(trackStruct.trkParams.eta);
1763  tkDetector_.EtaErr ->Fill(trackStruct.trkParams.etaErr);
1764  tkDetector_.EtaSig ->Fill(trackStruct.trkParams.eta/trackStruct.trkParams.etaErr);
1765  tkDetector_.Theta ->Fill(trackStruct.trkParams.theta*180./M_PI);
1766  tkDetector_.Phi ->Fill(trackStruct.trkParams.phi*180./M_PI);
1767  tkDetector_.PhiErr ->Fill(trackStruct.trkParams.phiErr*180./M_PI);
1768  tkDetector_.PhiSig ->Fill(trackStruct.trkParams.phi/trackStruct.trkParams.phiErr);
1769  tkDetector_.D0Beamspot ->Fill(trackStruct.trkParams.d0Beamspot);
1770  tkDetector_.D0BeamspotErr->Fill(trackStruct.trkParams.d0BeamspotErr);
1771  tkDetector_.D0BeamspotSig->Fill(trackStruct.trkParams.d0Beamspot/trackStruct.trkParams.d0BeamspotErr);
1772  tkDetector_.Dz ->Fill(trackStruct.trkParams.dz);
1773  tkDetector_.DzErr ->Fill(trackStruct.trkParams.dzErr);
1774  tkDetector_.DzSig ->Fill(trackStruct.trkParams.dz/trackStruct.trkParams.dzErr);
1775  tkDetector_.P ->Fill(trackStruct.trkParams.p);
1776  tkDetector_.Pt ->Fill(trackStruct.trkParams.pt);
1777  tkDetector_.PtErr ->Fill(trackStruct.trkParams.ptErr);
1778  tkDetector_.PtSig ->Fill(trackStruct.trkParams.pt/trackStruct.trkParams.ptErr);
1779  tkDetector_.MeanAngle ->Fill(trackStruct.trkParams.meanPhiSensToNorm*180./M_PI);
1780 
1781  tkDetector_.MeanAngleVsHits ->Fill(trackStruct.trkParams.hitsSize,trackStruct.trkParams.meanPhiSensToNorm*180./M_PI);
1782  tkDetector_.HitsPixelVsEta ->Fill(trackStruct.trkParams.eta,trackStruct.trkParams.hitsPixel);
1783  tkDetector_.HitsPixelVsTheta->Fill(trackStruct.trkParams.theta*180./M_PI,trackStruct.trkParams.hitsPixel);
1784  tkDetector_.HitsStripVsEta ->Fill(trackStruct.trkParams.eta,trackStruct.trkParams.hitsStrip);
1785  tkDetector_.HitsStripVsTheta->Fill(trackStruct.trkParams.theta*180./M_PI,trackStruct.trkParams.hitsStrip);
1786  tkDetector_.PtVsEta ->Fill(trackStruct.trkParams.eta,trackStruct.trkParams.pt);
1787  tkDetector_.PtVsTheta ->Fill(trackStruct.trkParams.theta*180./M_PI,trackStruct.trkParams.pt);
1788 
1789  tkDetector_.PMeanAngleVsHits ->Fill(trackStruct.trkParams.hitsSize,trackStruct.trkParams.meanPhiSensToNorm*180./M_PI);
1790  tkDetector_.PHitsPixelVsEta ->Fill(trackStruct.trkParams.eta,trackStruct.trkParams.hitsPixel);
1791  tkDetector_.PHitsPixelVsTheta->Fill(trackStruct.trkParams.theta*180./M_PI,trackStruct.trkParams.hitsPixel);
1792  tkDetector_.PHitsStripVsEta ->Fill(trackStruct.trkParams.eta,trackStruct.trkParams.hitsStrip);
1793  tkDetector_.PHitsStripVsTheta->Fill(trackStruct.trkParams.theta*180./M_PI,trackStruct.trkParams.hitsStrip);
1794  tkDetector_.PPtVsEta ->Fill(trackStruct.trkParams.eta,trackStruct.trkParams.pt);
1795  tkDetector_.PPtVsTheta ->Fill(trackStruct.trkParams.theta*180./M_PI,trackStruct.trkParams.pt);
1796 
1797 
1798  for(std::vector<TrackStruct::HitParameterStruct>::const_iterator i_hit = trackStruct.v_hitParams.begin();
1799  i_hit != trackStruct.v_hitParams.end(); ++i_hit){
1800  const TrackStruct::HitParameterStruct& hit(*i_hit);
1801  //Put here from earlier method
1802  if(hit.hitState == TrackStruct::notAssignedToSectors)continue;
1803 
1804  for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
1805  bool moduleInSector(false);
1806  for(std::vector<unsigned int>::const_iterator i_hitSector = hit.v_sector.begin(); i_hitSector != hit.v_sector.end(); ++i_hitSector){
1807  if((*i_sector).first == *i_hitSector){moduleInSector = true; break;}
1808  }
1809  if(!moduleInSector)continue;
1810  TrackerSectorStruct& sector((*i_sector).second);
1811 
1812  if(hit.goodXMeasurement){
1813  std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.m_correlationHistsX);
1814 
1815  // Cluster and Hit Parameters
1816  this->fillHitHistsXForAnalyzerMode(hit, sector);
1817 
1818  // Track Parameters
1819  m_corrHists["HitsValid"].fillCorrHistsX(hit,trackStruct.trkParams.hitsValid);
1820  m_corrHists["HitsGood"].fillCorrHistsX(hit,goodHitsPerTrack);
1821  m_corrHists["HitsInvalid"].fillCorrHistsX(hit,trackStruct.trkParams.hitsInvalid);
1822  m_corrHists["Hits2D"].fillCorrHistsX(hit,trackStruct.trkParams.hits2D);
1823  m_corrHists["LayersMissed"].fillCorrHistsX(hit,trackStruct.trkParams.layersMissed);
1824  m_corrHists["HitsPixel"].fillCorrHistsX(hit,trackStruct.trkParams.hitsPixel);
1825  m_corrHists["HitsStrip"].fillCorrHistsX(hit,trackStruct.trkParams.hitsStrip);
1826  m_corrHists["NorChi2"].fillCorrHistsX(hit,trackStruct.trkParams.norChi2);
1827  m_corrHists["Theta"].fillCorrHistsX(hit,trackStruct.trkParams.theta*180./M_PI);
1828  m_corrHists["Phi"].fillCorrHistsX(hit,trackStruct.trkParams.phi*180./M_PI);
1829  m_corrHists["D0Beamspot"].fillCorrHistsX(hit,trackStruct.trkParams.d0Beamspot);
1830  m_corrHists["Dz"].fillCorrHistsX(hit,trackStruct.trkParams.dz);
1831  m_corrHists["Pt"].fillCorrHistsX(hit,trackStruct.trkParams.pt);
1832  m_corrHists["P"].fillCorrHistsX(hit,trackStruct.trkParams.p);
1833  m_corrHists["InvP"].fillCorrHistsX(hit,1./trackStruct.trkParams.p);
1834  m_corrHists["MeanAngle"].fillCorrHistsX(hit,trackStruct.trkParams.meanPhiSensToNorm*180./M_PI);
1835  //m_corrHists[""].fillCorrHistsX(hit, hit.);
1836  }
1837 
1838  if(hit.goodYMeasurement){
1839  std::map<std::string,TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.m_correlationHistsY);
1840 
1841  // Cluster and Hit Parameters
1842  this->fillHitHistsYForAnalyzerMode(hit, sector);
1843 
1844  // Track Parameters
1845  m_corrHists["HitsValid"].fillCorrHistsY(hit,trackStruct.trkParams.hitsValid);
1846  m_corrHists["HitsGood"].fillCorrHistsY(hit,goodHitsPerTrack);
1847  m_corrHists["HitsInvalid"].fillCorrHistsY(hit,trackStruct.trkParams.hitsInvalid);
1848  m_corrHists["Hits2D"].fillCorrHistsY(hit,trackStruct.trkParams.hits2D);
1849  m_corrHists["LayersMissed"].fillCorrHistsY(hit,trackStruct.trkParams.layersMissed);
1850  m_corrHists["HitsPixel"].fillCorrHistsY(hit,trackStruct.trkParams.hitsPixel);
1851  m_corrHists["HitsStrip"].fillCorrHistsY(hit,trackStruct.trkParams.hitsStrip);
1852  m_corrHists["NorChi2"].fillCorrHistsY(hit,trackStruct.trkParams.norChi2);
1853  m_corrHists["Theta"].fillCorrHistsY(hit,trackStruct.trkParams.theta*180./M_PI);
1854  m_corrHists["Phi"].fillCorrHistsY(hit,trackStruct.trkParams.phi*180./M_PI);
1855  m_corrHists["D0Beamspot"].fillCorrHistsY(hit,trackStruct.trkParams.d0Beamspot);
1856  m_corrHists["Dz"].fillCorrHistsY(hit,trackStruct.trkParams.dz);
1857  m_corrHists["Pt"].fillCorrHistsY(hit,trackStruct.trkParams.pt);
1858  m_corrHists["P"].fillCorrHistsY(hit,trackStruct.trkParams.p);
1859  m_corrHists["InvP"].fillCorrHistsY(hit,1./trackStruct.trkParams.p);
1860  m_corrHists["MeanAngle"].fillCorrHistsY(hit,trackStruct.trkParams.meanPhiSensToNorm*180./M_PI);
1861  }
1862 
1863  // Special Histograms
1864  for(std::map<std::string,std::vector<TH1*> >::iterator i_sigmaX = sector.m_sigmaX.begin(); i_sigmaX != sector.m_sigmaX.end(); ++i_sigmaX){
1865  for(std::vector<TH1*>::iterator iHist = (*i_sigmaX).second.begin(); iHist != (*i_sigmaX).second.end(); ++iHist){
1866  if ((*i_sigmaX).first=="sigmaXHit")(*iHist)->Fill(hit.errXHit*10000.);
1867  else if((*i_sigmaX).first=="sigmaXTrk")(*iHist)->Fill(hit.errXTrk*10000.);
1868  else if((*i_sigmaX).first=="sigmaX") (*iHist)->Fill(hit.errX*10000.);
1869  }
1870  }
1871  for(std::map<std::string,std::vector<TH1*> >::iterator i_sigmaY = sector.m_sigmaY.begin(); i_sigmaY != sector.m_sigmaY.end(); ++i_sigmaY){
1872  for(std::vector<TH1*>::iterator iHist = (*i_sigmaY).second.begin(); iHist != (*i_sigmaY).second.end(); ++iHist){
1873  if ((*i_sigmaY).first=="sigmaYHit")(*iHist)->Fill(hit.errYHit*10000.);
1874  else if((*i_sigmaY).first=="sigmaYTrk")(*iHist)->Fill(hit.errYTrk*10000.);
1875  else if((*i_sigmaY).first=="sigmaY") (*iHist)->Fill(hit.errY*10000.);
1876  }
1877  }
1878  }
1879  }
1880 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
void fillHitHistsYForAnalyzerMode(const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
TrackerDetectorStruct tkDetector_
std::vector< HitParameterStruct > v_hitParams
TrackParameterStruct trkParams
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
#define M_PI
const unsigned int minGoodHitsPerTrack_
void fillHitHistsXForAnalyzerMode(const TrackStruct::HitParameterStruct &, TrackerSectorStruct &)
void ApeEstimator::fillHistsForApeCalculation ( const TrackStruct trackStruct)
private

Definition at line 1999 of file ApeEstimator.cc.

References calculateApe_, edm::ParameterSet::getParameter(), m_resErrBins_, m_tkSector_, genParticles_cff::map, minGoodHitsPerTrack_, TrackStruct::notAssignedToSectors, parameterSet_, and TrackStruct::v_hitParams.

Referenced by analyze().

1999  {
2000 
2001  unsigned int goodHitsPerTrack(trackStruct.v_hitParams.size());
2002 
2003  if(parameterSet_.getParameter<bool>("applyTrackCuts")){
2004  // which tracks to take? need min. nr. of selected hits?
2005  if(goodHitsPerTrack < minGoodHitsPerTrack_)return;
2006  }
2007 
2008  for(std::vector<TrackStruct::HitParameterStruct>::const_iterator i_hit = trackStruct.v_hitParams.begin();
2009  i_hit != trackStruct.v_hitParams.end(); ++i_hit){
2010  // Put here from earlier method
2011  if(i_hit->hitState == TrackStruct::notAssignedToSectors)continue;
2012 
2013  for(std::map<unsigned int,TrackerSectorStruct>::iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
2014 
2015  bool moduleInSector(false);
2016  for(std::vector<unsigned int>::const_iterator i_hitSector = (*i_hit).v_sector.begin(); i_hitSector != (*i_hit).v_sector.end(); ++i_hitSector){
2017  if((*i_sector).first == *i_hitSector){moduleInSector = true; break;}
2018  }
2019  if(!moduleInSector)continue;
2020 
2021  if(!calculateApe_)continue;
2022 
2023  if((*i_hit).goodXMeasurement){
2024  for(std::map<unsigned int,std::pair<double,double> >::const_iterator i_errBins = m_resErrBins_.begin();
2025  i_errBins != m_resErrBins_.end(); ++i_errBins){
2026  // Separate the bins for residual resolution w/o APE, to be consistent within iterations where APE will change (have same hit always in same bin)
2027  // So also fill this value in the histogram sigmaX
2028  // But of course use the normalized residual regarding the APE to have its influence in its width
2029  if((*i_hit).errXWoApe < (*i_errBins).second.first || (*i_hit).errXWoApe >= (*i_errBins).second.second){
2030  continue;
2031  }
2032  (*i_sector).second.m_binnedHists[(*i_errBins).first]["sigmaX"] ->Fill((*i_hit).errXWoApe);
2033  (*i_sector).second.m_binnedHists[(*i_errBins).first]["norResX"]->Fill((*i_hit).norResX);
2034  break;
2035  }
2036  (*i_sector).second.ResX->Fill((*i_hit).resX*10000.);
2037  (*i_sector).second.NorResX->Fill((*i_hit).norResX);
2038  }
2039 
2040  if((*i_hit).goodYMeasurement){
2041  for(std::map<unsigned int,std::pair<double,double> >::const_iterator i_errBins = m_resErrBins_.begin();
2042  i_errBins != m_resErrBins_.end(); ++i_errBins){
2043  // Separate the bins for residual resolution w/o APE, to be consistent within iterations where APE will change (have same hit always in same bin)
2044  // So also fill this value in the histogram sigmaY
2045  // But of course use the normalized residual regarding the APE to have its influence in its width
2046  if((*i_hit).errYWoApe < (*i_errBins).second.first || (*i_hit).errYWoApe >= (*i_errBins).second.second){
2047  continue;
2048  }
2049  (*i_sector).second.m_binnedHists[(*i_errBins).first]["sigmaY"] ->Fill((*i_hit).errYWoApe);
2050  (*i_sector).second.m_binnedHists[(*i_errBins).first]["norResY"]->Fill((*i_hit).norResY);
2051  break;
2052  }
2053  (*i_sector).second.ResY->Fill((*i_hit).resY*10000.);
2054  (*i_sector).second.NorResY->Fill((*i_hit).norResY);
2055  }
2056  }
2057  }
2058 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
const bool calculateApe_
std::map< unsigned int, std::pair< double, double > > m_resErrBins_
std::vector< HitParameterStruct > v_hitParams
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
const unsigned int minGoodHitsPerTrack_
void ApeEstimator::fillHitHistsXForAnalyzerMode ( const TrackStruct::HitParameterStruct hit,
TrackerSectorStruct sector 
)
private

Definition at line 1885 of file ApeEstimator.cc.

References TrackStruct::HitParameterStruct::baryStripX, TrackStruct::HitParameterStruct::chargeAsymmetry, TrackStruct::HitParameterStruct::chargeLRminus, TrackStruct::HitParameterStruct::chargeLRplus, TrackStruct::HitParameterStruct::chargeOnEdges, TrackStruct::HitParameterStruct::chargePixel, TrackStruct::HitParameterStruct::chargeStrip, TrackStruct::HitParameterStruct::clusterProbabilityQ, TrackStruct::HitParameterStruct::clusterProbabilityXY, TrackStruct::HitParameterStruct::clusterProbabilityXYQ, TrackStruct::HitParameterStruct::errX, TrackStruct::HitParameterStruct::errX2, TrackStruct::HitParameterStruct::errXHit, TrackStruct::HitParameterStruct::errXTrk, TrackStruct::HitParameterStruct::hasBadPixels, TrackStruct::HitParameterStruct::isOnEdge, TrackStruct::HitParameterStruct::isPixelHit, TrackStruct::HitParameterStruct::logClusterProbability, TrackerSectorStruct::m_correlationHistsX, M_PI, TrackStruct::HitParameterStruct::maxCharge, TrackStruct::HitParameterStruct::maxIndex, TrackStruct::HitParameterStruct::maxStrip, TrackStruct::HitParameterStruct::norResX, TrackerSectorStruct::NorResX, TrackStruct::HitParameterStruct::phiSens, TrackStruct::HitParameterStruct::phiSensX, TrackerSectorStruct::PhiSensXVsBarycentreX, TrackStruct::HitParameterStruct::phiSensY, TrackerSectorStruct::PPhiSensXVsBarycentreX, TrackStruct::HitParameterStruct::probX, TrackerSectorStruct::ProbX, TrackStruct::HitParameterStruct::projWidth, TrackerSectorStruct::PWidthDiffVsMaxStrip, TrackerSectorStruct::PWidthDiffVsSigmaXHit, TrackerSectorStruct::PWidthVsPhiSensX, TrackerSectorStruct::PWidthVsWidthProjected, TrackStruct::HitParameterStruct::qBin, TrackStruct::HitParameterStruct::resX, TrackerSectorStruct::ResX, TrackerSectorStruct::SigmaX2, TrackStruct::HitParameterStruct::sOverN, TrackStruct::HitParameterStruct::spansTwoRoc, TrackerSectorStruct::WidthDiffVsMaxStrip, TrackerSectorStruct::WidthDiffVsSigmaXHit, TrackerSectorStruct::WidthVsPhiSensX, TrackerSectorStruct::WidthVsWidthProjected, TrackStruct::HitParameterStruct::widthX, TrackStruct::HitParameterStruct::xHit, TrackerSectorStruct::XHit, TrackStruct::HitParameterStruct::xTrk, and TrackerSectorStruct::XTrk.

Referenced by fillHistsForAnalyzerMode().

1885  {
1886  std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.m_correlationHistsX);
1887 
1888  // Cluster Parameters
1889  m_corrHists["WidthX"].fillCorrHistsX(hit, hit.widthX);
1890  m_corrHists["BaryStripX"].fillCorrHistsX(hit, hit.baryStripX);
1891 
1892  if(hit.isPixelHit){
1893  m_corrHists["ChargePixel"].fillCorrHistsX(hit, hit.chargePixel);
1894  m_corrHists["ClusterProbXY"].fillCorrHistsX(hit, hit.clusterProbabilityXY);
1895  m_corrHists["ClusterProbQ"].fillCorrHistsX(hit, hit.clusterProbabilityQ);
1896  m_corrHists["ClusterProbXYQ"].fillCorrHistsX(hit, hit.clusterProbabilityXYQ);
1897  m_corrHists["LogClusterProb"].fillCorrHistsX(hit, hit.logClusterProbability);
1898  m_corrHists["IsOnEdge"].fillCorrHistsX(hit, hit.isOnEdge);
1899  m_corrHists["HasBadPixels"].fillCorrHistsX(hit, hit.hasBadPixels);
1900  m_corrHists["SpansTwoRoc"].fillCorrHistsX(hit, hit.spansTwoRoc);
1901  m_corrHists["QBin"].fillCorrHistsX(hit, hit.qBin);
1902 
1903  }
1904  else{
1905  m_corrHists["ChargeStrip"].fillCorrHistsX(hit, hit.chargeStrip);
1906  m_corrHists["MaxStrip"].fillCorrHistsX(hit, hit.maxStrip);
1907  m_corrHists["MaxCharge"].fillCorrHistsX(hit, hit.maxCharge);
1908  m_corrHists["MaxIndex"].fillCorrHistsX(hit, hit.maxIndex);
1909  m_corrHists["ChargeOnEdges"].fillCorrHistsX(hit, hit.chargeOnEdges);
1910  m_corrHists["ChargeAsymmetry"].fillCorrHistsX(hit, hit.chargeAsymmetry);
1911  m_corrHists["ChargeLRplus"].fillCorrHistsX(hit, hit.chargeLRplus);
1912  m_corrHists["ChargeLRminus"].fillCorrHistsX(hit, hit.chargeLRminus);
1913  m_corrHists["SOverN"].fillCorrHistsX(hit, hit.sOverN);
1914  m_corrHists["WidthProj"].fillCorrHistsX(hit, hit.projWidth);
1915  m_corrHists["WidthDiff"].fillCorrHistsX(hit, hit.projWidth-static_cast<float>( hit.widthX));
1916 
1917  sector.WidthVsWidthProjected->Fill( hit.projWidth, hit.widthX);
1918  sector.PWidthVsWidthProjected->Fill( hit.projWidth, hit.widthX);
1919 
1920  sector.WidthDiffVsMaxStrip->Fill( hit.maxStrip, hit.projWidth-static_cast<float>( hit.widthX));
1921  sector.PWidthDiffVsMaxStrip->Fill( hit.maxStrip, hit.projWidth-static_cast<float>( hit.widthX));
1922 
1923  sector.WidthDiffVsSigmaXHit->Fill( hit.errXHit, hit.projWidth-static_cast<float>( hit.widthX));
1924  sector.PWidthDiffVsSigmaXHit->Fill( hit.errXHit, hit.projWidth-static_cast<float>( hit.widthX));
1925 
1926  sector.WidthVsPhiSensX->Fill( hit.phiSensX*180./M_PI, hit.widthX);
1927  sector.PWidthVsPhiSensX->Fill( hit.phiSensX*180./M_PI, hit.widthX);
1928  }
1929 
1930  // Hit Parameters
1931  m_corrHists["SigmaXHit"].fillCorrHistsX(hit, hit.errXHit*10000.);
1932  m_corrHists["SigmaXTrk"].fillCorrHistsX(hit, hit.errXTrk*10000.);
1933  m_corrHists["SigmaX"].fillCorrHistsX(hit, hit.errX*10000.);
1934 
1935  m_corrHists["PhiSens"].fillCorrHistsX(hit, hit.phiSens*180./M_PI);
1936  m_corrHists["PhiSensX"].fillCorrHistsX(hit, hit.phiSensX*180./M_PI);
1937  m_corrHists["PhiSensY"].fillCorrHistsX(hit, hit.phiSensY*180./M_PI);
1938 
1939  sector.XHit ->Fill(hit.xHit);
1940  sector.XTrk ->Fill(hit.xTrk);
1941  sector.SigmaX2->Fill(hit.errX2*10000.*10000.);
1942 
1943  sector.ResX ->Fill(hit.resX*10000.);
1944  sector.NorResX->Fill(hit.norResX);
1945 
1946  sector.ProbX->Fill(hit.probX);
1947 
1948  sector.PhiSensXVsBarycentreX->Fill(hit.baryStripX, hit.phiSensX*180./M_PI);
1949  sector.PPhiSensXVsBarycentreX->Fill(hit.baryStripX, hit.phiSensX*180./M_PI);
1950 }
TProfile * PPhiSensXVsBarycentreX
TProfile * PWidthVsWidthProjected
#define M_PI
std::map< std::string, CorrelationHists > m_correlationHistsX
TProfile * PWidthDiffVsSigmaXHit
void ApeEstimator::fillHitHistsYForAnalyzerMode ( const TrackStruct::HitParameterStruct hit,
TrackerSectorStruct sector 
)
private

Definition at line 1955 of file ApeEstimator.cc.

References TrackStruct::HitParameterStruct::baryStripY, TrackStruct::HitParameterStruct::chargePixel, TrackStruct::HitParameterStruct::clusterProbabilityQ, TrackStruct::HitParameterStruct::clusterProbabilityXY, TrackStruct::HitParameterStruct::clusterProbabilityXYQ, TrackStruct::HitParameterStruct::errY, TrackStruct::HitParameterStruct::errY2, TrackStruct::HitParameterStruct::errYHit, TrackStruct::HitParameterStruct::errYTrk, TrackStruct::HitParameterStruct::hasBadPixels, TrackStruct::HitParameterStruct::isOnEdge, TrackStruct::HitParameterStruct::isPixelHit, TrackStruct::HitParameterStruct::logClusterProbability, TrackerSectorStruct::m_correlationHistsY, M_PI, TrackStruct::HitParameterStruct::norResY, TrackerSectorStruct::NorResY, TrackStruct::HitParameterStruct::phiSens, TrackStruct::HitParameterStruct::phiSensX, TrackStruct::HitParameterStruct::phiSensY, TrackerSectorStruct::PhiSensYVsBarycentreY, TrackerSectorStruct::PPhiSensYVsBarycentreY, TrackStruct::HitParameterStruct::probY, TrackerSectorStruct::ProbY, TrackStruct::HitParameterStruct::qBin, TrackStruct::HitParameterStruct::resY, TrackerSectorStruct::ResY, TrackerSectorStruct::SigmaY2, TrackStruct::HitParameterStruct::spansTwoRoc, TrackStruct::HitParameterStruct::widthY, TrackStruct::HitParameterStruct::yHit, TrackerSectorStruct::YHit, TrackStruct::HitParameterStruct::yTrk, and TrackerSectorStruct::YTrk.

Referenced by fillHistsForAnalyzerMode().

1955  {
1956  std::map<std::string, TrackerSectorStruct::CorrelationHists>& m_corrHists(sector.m_correlationHistsY);
1957  // Do not fill anything for strip
1958  if(!hit.isPixelHit)return;
1959 
1960  // Cluster Parameters
1961  m_corrHists["WidthY"].fillCorrHistsY(hit,hit.widthY);
1962  m_corrHists["BaryStripY"].fillCorrHistsY(hit,hit.baryStripY);
1963 
1964  m_corrHists["ChargePixel"].fillCorrHistsY(hit, hit.chargePixel);
1965  m_corrHists["ClusterProbXY"].fillCorrHistsY(hit, hit.clusterProbabilityXY);
1966  m_corrHists["ClusterProbQ"].fillCorrHistsY(hit, hit.clusterProbabilityQ);
1967  m_corrHists["ClusterProbXYQ"].fillCorrHistsY(hit, hit.clusterProbabilityXYQ);
1968  m_corrHists["LogClusterProb"].fillCorrHistsY(hit, hit.logClusterProbability);
1969  m_corrHists["IsOnEdge"].fillCorrHistsY(hit, hit.isOnEdge);
1970  m_corrHists["HasBadPixels"].fillCorrHistsY(hit, hit.hasBadPixels);
1971  m_corrHists["SpansTwoRoc"].fillCorrHistsY(hit, hit.spansTwoRoc);
1972  m_corrHists["QBin"].fillCorrHistsY(hit, hit.qBin);
1973 
1974  // Hit Parameters
1975  m_corrHists["SigmaYHit"].fillCorrHistsY(hit, hit.errYHit*10000.);
1976  m_corrHists["SigmaYTrk"].fillCorrHistsY(hit, hit.errYTrk*10000.);
1977  m_corrHists["SigmaY"].fillCorrHistsY(hit, hit.errY*10000.);
1978 
1979  m_corrHists["PhiSens"].fillCorrHistsY(hit, hit.phiSens*180./M_PI);
1980  m_corrHists["PhiSensX"].fillCorrHistsY(hit, hit.phiSensX*180./M_PI);
1981  m_corrHists["PhiSensY"].fillCorrHistsY(hit, hit.phiSensY*180./M_PI);
1982 
1983  sector.YHit ->Fill(hit.yHit);
1984  sector.YTrk ->Fill(hit.yTrk);
1985  sector.SigmaY2->Fill(hit.errY2*10000.*10000.);
1986 
1987  sector.ResY ->Fill(hit.resY*10000.);
1988  sector.NorResY->Fill(hit.norResY);
1989 
1990  sector.ProbY->Fill(hit.probY);
1991 
1992  sector.PhiSensYVsBarycentreY->Fill(hit.baryStripY, hit.phiSensY*180./M_PI);
1993  sector.PPhiSensYVsBarycentreY->Fill(hit.baryStripY, hit.phiSensY*180./M_PI);
1994 }
#define M_PI
std::map< std::string, CorrelationHists > m_correlationHistsY
TrackStruct::HitParameterStruct ApeEstimator::fillHitVariables ( const TrajectoryMeasurement i_meas,
const edm::EventSetup iSetup 
)
private

Definition at line 1014 of file ApeEstimator.cc.

References TrajectoryMeasurement::backwardPredictedState(), SiStripClusterInfo::baryStrip(), TrackStruct::HitParameterStruct::baryStripX, TrackStruct::HitParameterStruct::baryStripY, ecalTB2006H4_GenSimDigiReco_cfg::bField, Surface::bounds(), SiStripClusterInfo::charge(), SiPixelCluster::charge(), TrackStruct::HitParameterStruct::chargeAsymmetry, SiStripClusterInfo::chargeLR(), TrackStruct::HitParameterStruct::chargeLRminus, TrackStruct::HitParameterStruct::chargeLRplus, TrackStruct::HitParameterStruct::chargeOnEdges, TrackStruct::HitParameterStruct::chargePixel, TrackStruct::HitParameterStruct::chargeStrip, SiStripRecHit1D::cluster(), SiStripRecHit2D::cluster(), SiPixelRecHit::cluster(), SiPixelRecHit::clusterProbability(), TrackStruct::HitParameterStruct::clusterProbabilityQ, TrackStruct::HitParameterStruct::clusterProbabilityXY, TrackStruct::HitParameterStruct::clusterProbabilityXYQ, counter1, gather_cfg::cout, gamEcalExtractorBlocks_cff::detector, TrackingRecHit::detUnit(), fftjetvertexadder_cfi::errX, TrackStruct::HitParameterStruct::errX, TrackStruct::HitParameterStruct::errX2, TrackStruct::HitParameterStruct::errXHit, TrackStruct::HitParameterStruct::errXHitWoApe, TrackStruct::HitParameterStruct::errXTrk, TrackStruct::HitParameterStruct::errXWoApe, fftjetvertexadder_cfi::errY, TrackStruct::HitParameterStruct::errY, TrackStruct::HitParameterStruct::errY2, TrackStruct::HitParameterStruct::errYHit, TrackStruct::HitParameterStruct::errYHitWoApe, TrackStruct::HitParameterStruct::errYTrk, TrackStruct::HitParameterStruct::errYWoApe, F(), TrajectoryMeasurement::forwardPredictedState(), GeomDet::geographicalId(), TrackingRecHit::geographicalId(), edm::EventSetup::get(), SiStripLorentzAngle::getLorentzAngle(), TrackStruct::HitParameterStruct::hasBadPixels, SiPixelRecHit::hasBadPixels(), TrackingRecHit::hit(), TrackStruct::HitParameterStruct::hitState, TrackStruct::invalid, SiStripClusterInfo::IsModuleUsable(), TrackStruct::HitParameterStruct::isModuleUsable, TrackStruct::HitParameterStruct::isOnEdge, SiPixelRecHit::isOnEdge(), TrackStruct::HitParameterStruct::isPixelHit, TrackingRecHit::isValid(), Bounds::length(), TrackerGeomDet::localAlignmentError(), TrajectoryStateOnSurface::localDirection(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localPosition(), TrackingRecHit::localPosition(), TrackingRecHit::localPositionError(), TrackStruct::HitParameterStruct::logClusterProbability, m_tkSector_, m_tkTreeVar_, SiStripClusterInfo::maxCharge(), TrackStruct::HitParameterStruct::maxCharge, SiStripClusterInfo::maxIndex(), TrackStruct::HitParameterStruct::maxIndex, SiStripClusterInfo::maxStrip(), TrackStruct::HitParameterStruct::maxStrip, TrackStruct::HitParameterStruct::maxStripInv, Topology::measurementPosition(), TrackStruct::negativeError, TrackStruct::HitParameterStruct::norResX, TrackStruct::HitParameterStruct::norResY, TrackStruct::notAssignedToSectors, TrackStruct::notInTracker, TrackStruct::HitParameterStruct::phiSens, TrackStruct::HitParameterStruct::phiSensX, TrackStruct::HitParameterStruct::phiSensY, align::Pixel, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, GloballyPositioned< T >::position(), positionAndError2(), LocalTrajectoryError::positionError(), funct::pow(), TrackStruct::HitParameterStruct::probX, TrackStruct::HitParameterStruct::probY, edm::ESHandle< T >::product(), TrackStruct::HitParameterStruct::projWidth, TrackStruct::HitParameterStruct::qBin, SiPixelRecHit::qBin(), DetId::rawId(), rpcPointValidation_cfi::recHit, TrajectoryMeasurement::recHit(), TrackStruct::HitParameterStruct::resX, TrackStruct::HitParameterStruct::resY, SiStripClusterInfo::signalOverNoise(), SiPixelCluster::sizeX(), SiPixelCluster::sizeY(), TrackStruct::HitParameterStruct::sOverN, TrackStruct::HitParameterStruct::spansTwoRoc, SiPixelRecHit::spansTwoROCs(), GeomDet::specificSurface(), mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, align::Strip, SiStripClusterInfo::stripCharges(), GeomDet::surface(), StripSubdetector::TEC, Bounds::thickness(), StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, toLocal(), GeomDetType::topology(), DetId::Tracker, GeomDet::type(), TrackStruct::HitParameterStruct::v_sector, LocalError::valid(), SiStripClusterInfo::width(), Bounds::width(), TrackStruct::HitParameterStruct::widthX, TrackStruct::HitParameterStruct::widthY, PV2DBase< T, PVType, FrameType >::x(), SiPixelCluster::x(), TrackStruct::HitParameterStruct::xHit, TrackStruct::HitParameterStruct::xTrk, LocalError::xx(), LocalError::xy(), SiPixelCluster::y(), TrackStruct::HitParameterStruct::yHit, TrackStruct::HitParameterStruct::yTrk, and LocalError::yy().

Referenced by analyze().

1014  {
1015 
1016 
1018 
1019  static TrajectoryStateCombiner tsoscomb;
1020 
1021  const TrajectoryMeasurement& meas = i_meas;
1022  const TransientTrackingRecHit& hit = *meas.recHit();
1023  const TrackingRecHit& recHit = *hit.hit();
1024  const TrajectoryStateOnSurface& tsos = tsoscomb(meas.forwardPredictedState(),meas.backwardPredictedState());
1025 
1026  const DetId& detId(hit.geographicalId());
1027  const DetId::Detector& detector = detId.det(); if(detector != DetId::Tracker){hitParams.hitState = TrackStruct::notInTracker; return hitParams;}
1028  const uint32_t rawId(detId.rawId());
1029 
1030  for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
1031  for(std::vector<unsigned int>::const_iterator i_rawId = (*i_sector).second.v_rawId.begin();
1032  i_rawId != (*i_sector).second.v_rawId.end(); ++i_rawId){
1033  if(rawId==*i_rawId){hitParams.v_sector.push_back((*i_sector).first); break;}
1034  }
1035  }
1036 
1037  const align::LocalVector& mom(tsos.localDirection());
1038  int xMomentum(0), yMomentum(0), zMomentum(0);
1039  xMomentum = mom.x()>0. ? 1 : -1;
1040  yMomentum = mom.y()>0. ? 1 : -1;
1041  zMomentum = mom.z()>0. ? 1 : -1;
1042  float phiSensX = std::atan(std::fabs(mom.x()/mom.z()))*static_cast<float>(m_tkTreeVar_[rawId].vDirection); // check for orientation of E- and B- Field (thoughts for barrel)
1043  float phiSensY = std::atan(std::fabs(mom.y()/mom.z()))*static_cast<float>(m_tkTreeVar_[rawId].vDirection);
1044  hitParams.phiSens = std::atan(std::fabs(std::sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
1045  hitParams.phiSensX = (xMomentum==zMomentum ? phiSensX : -phiSensX );
1046  hitParams.phiSensY = (yMomentum==zMomentum ? phiSensY : -phiSensY );
1047 
1048  if(!hit.isValid()){hitParams.hitState = TrackStruct::invalid; return hitParams;}
1049 
1050 
1051  // Get local positions and errors of hit and track
1052 
1053  const LocalPoint& lPHit = hit.localPosition();
1054  const LocalPoint& lPTrk = tsos.localPosition();
1055 
1056  // use APE also for the hit error, while APE is automatically included in tsos error
1057  //
1058  // no need to add APE to hitError anymore by Ajay 27 Oct 2014
1059 
1060 
1061  const LocalError& errHitApe = hit.localPositionError(); // now sum of CPE+APE as said by MARCO?
1062  LocalError errorWithoutAPE;
1063 
1064  bool Pixel(false);
1065  bool Strip(false);
1066 
1068  Pixel = true;
1069  }
1070  else if(m_tkTreeVar_[rawId].subdetId==StripSubdetector::TIB || m_tkTreeVar_[rawId].subdetId==StripSubdetector::TOB ||
1071  m_tkTreeVar_[rawId].subdetId==StripSubdetector::TID || m_tkTreeVar_[rawId].subdetId==StripSubdetector::TEC){
1072  Strip = true;
1073  }
1074  else { edm::LogWarning("FillHitVariables")<<"cant identify wether hit is from pixel or strip";
1075  hitParams.hitState = TrackStruct::invalid; return hitParams;}
1076 
1077 
1078  if(!hit.detUnit()){hitParams.hitState = TrackStruct::invalid; return hitParams;} // is it a single physical module?
1079  const GeomDetUnit& detUnit = *hit.detUnit();
1080 
1081 
1082  if(Pixel){
1083  if(!dynamic_cast<const PixelTopology*>(&detUnit.type().topology())){hitParams.hitState = TrackStruct::invalid; return hitParams;}
1084  const PixelGeomDetUnit * pixelDet = (const PixelGeomDetUnit*)(&detUnit);
1085  const LocalError& lape = pixelDet->localAlignmentError();
1086  if (lape.valid())
1087  { errorWithoutAPE = LocalError(errHitApe.xx() -lape.xx(), errHitApe.xy()- lape.xy(), errHitApe.yy()-lape.yy());
1088 
1089  }
1090  }
1091  if(Strip){
1092  if(!dynamic_cast<const StripTopology*>(&detUnit.type().topology())){hitParams.hitState = TrackStruct::invalid; return hitParams;}
1093  const StripGeomDetUnit * stripDet = (const StripGeomDetUnit*)(&detUnit);
1094  const LocalError& lape = stripDet->localAlignmentError();
1095  if (lape.valid())
1096  { errorWithoutAPE = LocalError(errHitApe.xx() -lape.xx(), errHitApe.xy()- lape.xy(), errHitApe.yy()-lape.yy());
1097  }
1098  }
1099 
1100 
1101  const LocalError& errHitWoApe = errorWithoutAPE;
1102  const LocalError& errTrk = tsos.localError().positionError();
1103 
1104  const StatePositionAndError2 positionAndError2Hit = this->positionAndError2(lPHit, errHitApe, hit);
1105  const StatePositionAndError2 positionAndError2HitWoApe = this->positionAndError2(lPHit, errHitWoApe, hit);
1106  std::cout<<"errHitWoApe " <<errHitWoApe<<"errHitApe "<<errHitApe<<std::endl;
1107 
1108  const StatePositionAndError2 positionAndError2Trk = this->positionAndError2(lPTrk, errTrk, hit);
1109 
1110  const TrackStruct::HitState& stateHit(positionAndError2Hit.first);
1111  const TrackStruct::HitState& stateHitWoApe(positionAndError2HitWoApe.first);
1112  const TrackStruct::HitState& stateTrk(positionAndError2Trk.first);
1113 
1114  if(stateHit==TrackStruct::invalid || stateHitWoApe==TrackStruct::invalid || stateTrk==TrackStruct::invalid){
1115  hitParams.hitState = TrackStruct::invalid;
1116  return hitParams;
1117  }
1118  else if(stateHit==TrackStruct::negativeError || stateHitWoApe==TrackStruct::negativeError || stateTrk==TrackStruct::negativeError){
1119  ++counter1;
1120  // Do not print error message by default
1121  //std::stringstream ss_error;
1122  //ss_error<<"Upper values belong to: ";
1123  //if(stateHit==TrackStruct::negativeError)ss_error<<"Hit without APE, ";
1124  //if(stateHitWoApe==TrackStruct::negativeError)ss_error<<"Hit with APE, ";
1125  //if(stateTrk==TrackStruct::negativeError)ss_error<<"Track,";
1126  //edm::LogError("Negative error Value")<<"@SUB=ApeEstimator::fillHitVariables"<<ss_error.str();
1128  return hitParams;
1129  }
1130 
1131 
1132  // Calculate residuals
1133 
1134  const float xHit = positionAndError2Hit.second.posX;
1135  const float xTrk = positionAndError2Trk.second.posX;
1136  const float yHit = positionAndError2Hit.second.posY;
1137  const float yTrk = positionAndError2Trk.second.posY;
1138 
1139  const float errXHit2(positionAndError2Hit.second.errX2);
1140  const float errXHitWoApe2(positionAndError2HitWoApe.second.errX2);
1141  const float errXTrk2(positionAndError2Trk.second.errX2);
1142  const float errYHit2(positionAndError2Hit.second.errY2);
1143  const float errYHitWoApe2(positionAndError2HitWoApe.second.errY2);
1144  const float errYTrk2(positionAndError2Trk.second.errY2);
1145 
1146  const float errXHit = std::sqrt(positionAndError2Hit.second.errX2);
1147  const float errXHitWoApe = std::sqrt(positionAndError2HitWoApe.second.errX2);
1148  const float errXTrk = std::sqrt(positionAndError2Trk.second.errX2);
1149  const float errYHit = std::sqrt(positionAndError2Hit.second.errY2);
1150  const float errYHitWoApe = std::sqrt(positionAndError2HitWoApe.second.errY2);
1151  const float errYTrk = std::sqrt(positionAndError2Trk.second.errY2);
1152 
1153  const float resX = xTrk - xHit;
1154  const float resY = yTrk - yHit;
1155 
1156  const float errX = std::sqrt(errXHit2 + errXTrk2);
1157  const float errXWoApe2 = errXHitWoApe2 + errXTrk2;
1158  const float errXWoApe = std::sqrt(errXWoApe2);
1159  const float errY = std::sqrt(errYHit2 + errYTrk2);
1160  const float errYWoApe2 = errYHitWoApe2 + errYTrk2;
1161  const float errYWoApe = std::sqrt(errYWoApe2);
1162 
1163  const float norResX = resX/errX;
1164  const float norResY = resY/errY;
1165 
1166 
1167  // Take global orientation into account for residuals (sign is not important for errors)
1168 
1169  float resXprime(999.F), resYprime(999.F), norResXprime(999.F), norResYprime(999.F);
1170  if(m_tkTreeVar_[rawId].uDirection == 1){resXprime = resX; norResXprime = norResX;}
1171  else if(m_tkTreeVar_[rawId].uDirection == -1){resXprime = -resX; norResXprime = -norResX;}
1172  else {edm::LogError("FillHitVariables")<<"Incorrect value of uDirection, which gives global module orientation"; hitParams.hitState = TrackStruct::invalid; return hitParams;}
1173  if(m_tkTreeVar_[rawId].vDirection == 1){resYprime = resY; norResYprime = norResY;}
1174  else if(m_tkTreeVar_[rawId].vDirection == -1){resYprime = -resY; norResYprime = -norResY;}
1175  else {edm::LogError("FillHitVariables")<<"Incorrect value of vDirection, which gives global module orientation"; hitParams.hitState = TrackStruct::invalid; return hitParams;}
1176 
1177  hitParams.xHit = xHit;
1178  hitParams.xTrk = xTrk;
1179 
1180  hitParams.errXHit = errXHit;
1181  hitParams.errXHitWoApe = errXHitWoApe;
1182  hitParams.errXTrk = errXTrk;
1183 
1184  hitParams.errX2 = errX*errX;
1185  hitParams.errX = errX;
1186  hitParams.errXWoApe = errXWoApe;
1187 
1188  hitParams.resX = resXprime;
1189  hitParams.norResX = norResXprime;
1190 
1191  const float norResX2(norResXprime*norResXprime);
1192  hitParams.probX = TMath::Prob(norResX2,1);
1193 
1194 
1195  hitParams.yHit = yHit;
1196  hitParams.yTrk = yTrk;
1197 
1198  hitParams.errYHit = errYHit;
1199  hitParams.errYHitWoApe = errYHitWoApe;
1200  hitParams.errYTrk = errYTrk;
1201 
1202  hitParams.errY2 = errY*errY;
1203  hitParams.errY = errY;
1204  hitParams.errYWoApe = errYWoApe;
1205 
1206  hitParams.resY = resYprime;
1207  hitParams.norResY = norResYprime;
1208 
1209  const float norResY2(norResYprime*norResYprime);
1210  hitParams.probY = TMath::Prob(norResY2,1);
1211 
1212 
1213  // Cluster parameters
1214 
1216  const SiPixelRecHit& pixelHit = dynamic_cast<const SiPixelRecHit&>(recHit);
1217  const SiPixelCluster& pixelCluster = *pixelHit.cluster();
1218 
1219  hitParams.chargePixel = pixelCluster.charge();
1220  hitParams.widthX = pixelCluster.sizeX();
1221  hitParams.baryStripX = pixelCluster.x();
1222  hitParams.widthY = pixelCluster.sizeY();
1223  hitParams.baryStripY = pixelCluster.y();
1224 
1225  hitParams.clusterProbabilityXY = pixelHit.clusterProbability(0);
1226  hitParams.clusterProbabilityQ = pixelHit.clusterProbability(2);
1227  hitParams.clusterProbabilityXYQ = pixelHit.clusterProbability(1);
1228  hitParams.logClusterProbability = std::log10(hitParams.clusterProbabilityXY);
1229 
1230  hitParams.isOnEdge = pixelHit.isOnEdge();
1231  hitParams.hasBadPixels = pixelHit.hasBadPixels();
1232  hitParams.spansTwoRoc = pixelHit.spansTwoROCs();
1233  hitParams.qBin = pixelHit.qBin();
1234 
1235  hitParams.isPixelHit = true;
1236  }
1237  else if(m_tkTreeVar_[rawId].subdetId==StripSubdetector::TIB || m_tkTreeVar_[rawId].subdetId==StripSubdetector::TOB ||
1238  m_tkTreeVar_[rawId].subdetId==StripSubdetector::TID || m_tkTreeVar_[rawId].subdetId==StripSubdetector::TEC){
1239  if(!(dynamic_cast<const SiStripRecHit2D*>(&recHit) || dynamic_cast<const SiStripRecHit1D*>(&recHit))){
1240  edm::LogError("FillHitVariables")<<"RecHit in Strip is 'Matched' or 'Projected', but here all should be monohits per module";
1241  hitParams.hitState = TrackStruct::invalid; return hitParams;
1242  }
1243  const SiStripCluster* clusterPtr(nullptr);
1244  if(m_tkTreeVar_[rawId].subdetId==StripSubdetector::TIB || m_tkTreeVar_[rawId].subdetId==StripSubdetector::TOB){
1245  if(dynamic_cast<const SiStripRecHit1D*>(&recHit)){
1246  const SiStripRecHit1D& stripHit = dynamic_cast<const SiStripRecHit1D&>(recHit);
1247  clusterPtr = &(*stripHit.cluster());
1248  }
1249  else if(dynamic_cast<const SiStripRecHit2D*>(&recHit)){
1250  edm::LogWarning("FillHitVariables")<<"Data has TIB/TOB hits as SiStripRecHit2D and not 1D. Probably data is processed with CMSSW<34X. Nevertheless everything should work fine";
1251  const SiStripRecHit2D& stripHit = dynamic_cast<const SiStripRecHit2D&>(recHit);
1252  clusterPtr = &(*stripHit.cluster());
1253  }
1254  }
1255  else if(m_tkTreeVar_[rawId].subdetId==StripSubdetector::TID || m_tkTreeVar_[rawId].subdetId==StripSubdetector::TEC){
1256  const SiStripRecHit2D& stripHit = dynamic_cast<const SiStripRecHit2D&>(recHit);
1257  clusterPtr = &(*stripHit.cluster());
1258  }
1259  if(!clusterPtr){
1260  edm::LogError("FillHitVariables")<<"Pointer to cluster not valid!!! This should never happen...";
1261  hitParams.hitState = TrackStruct::invalid; return hitParams;
1262  }
1263  const SiStripCluster& stripCluster(*clusterPtr);
1264 
1265  const SiStripClusterInfo clusterInfo =SiStripClusterInfo(stripCluster,iSetup,rawId,std::string(""));
1266 
1267  const std::vector<uint8_t>::const_iterator stripChargeL(clusterInfo.stripCharges().begin());
1268  const std::vector<uint8_t>::const_iterator stripChargeR(--(clusterInfo.stripCharges().end()));
1269  const std::pair<uint16_t, uint16_t> stripChargeLR = std::make_pair(*stripChargeL,*stripChargeR);
1270 
1271  hitParams.chargeStrip = clusterInfo.charge();
1272  hitParams.widthX = clusterInfo.width();
1273  hitParams.baryStripX = clusterInfo.baryStrip() +1.;
1274  hitParams.isModuleUsable = clusterInfo.IsModuleUsable();
1275  hitParams.maxStrip = clusterInfo.maxStrip() +1;
1276  hitParams.maxStripInv = m_tkTreeVar_[rawId].nStrips - hitParams.maxStrip +1;
1277  hitParams.maxCharge = clusterInfo.maxCharge();
1278  hitParams.maxIndex = clusterInfo.maxIndex();
1279  hitParams.chargeOnEdges = static_cast<float>(stripChargeLR.first + stripChargeLR.second)/static_cast<float>(hitParams.chargeStrip);
1280  hitParams.chargeAsymmetry = static_cast<float>(stripChargeLR.first - stripChargeLR.second)/static_cast<float>(stripChargeLR.first + stripChargeLR.second);
1281  hitParams.chargeLRplus = static_cast<float>(clusterInfo.chargeLR().first + clusterInfo.chargeLR().second)/static_cast<float>(hitParams.chargeStrip);
1282  hitParams.chargeLRminus = static_cast<float>(clusterInfo.chargeLR().first - clusterInfo.chargeLR().second)/static_cast<float>(hitParams.chargeStrip);
1283  hitParams.sOverN = clusterInfo.signalOverNoise();
1284 
1285 
1286  // Calculate projection length corrected by drift
1287  if(!hit.detUnit()){hitParams.hitState = TrackStruct::invalid; return hitParams;} // is it a single physical module?
1288  const GeomDetUnit& detUnit = *hit.detUnit();
1289  if(!dynamic_cast<const StripTopology*>(&detUnit.type().topology())){hitParams.hitState = TrackStruct::invalid; return hitParams;}
1290 
1291 
1292  edm::ESHandle<MagneticField> magFieldHandle;
1293  iSetup.get<IdealMagneticFieldRecord>().get(magFieldHandle);
1294 
1295  edm::ESHandle<SiStripLorentzAngle> lorentzAngleHandle;
1296  iSetup.get<SiStripLorentzAngleDepRcd>().get(lorentzAngleHandle); //MODIFIED BY LOIC QUERTENMONT
1297 
1298 
1299  const StripGeomDetUnit * stripDet = (const StripGeomDetUnit*)(&detUnit);
1300  const MagneticField * magField(magFieldHandle.product());
1301  LocalVector bField = (stripDet->surface()).toLocal(magField->inTesla(stripDet->surface().position()));
1302  const SiStripLorentzAngle * lorentzAngle(lorentzAngleHandle.product());
1303  float tanLorentzAnglePerTesla = lorentzAngle->getLorentzAngle(stripDet->geographicalId().rawId());
1304 
1305  float dirX = -tanLorentzAnglePerTesla * bField.y();
1306  float dirY = tanLorentzAnglePerTesla * bField.x();
1307  float dirZ = 1.; // E field always in z direction
1308  LocalVector driftDirection(dirX,dirY,dirZ);
1309 
1310 
1311  const Bounds& bounds = stripDet->specificSurface().bounds();
1312  float maxLength = std::sqrt(std::pow(bounds.length(),2)+std::pow(bounds.width(),2));
1313  float thickness = bounds.thickness();
1314 
1315 
1316 
1317  const StripTopology& topol = dynamic_cast<const StripTopology&>(detUnit.type().topology());
1318  LocalVector momentumDir(tsos.localDirection());
1319  LocalPoint momentumPos(tsos.localPosition());
1320  LocalVector scaledMomentumDir(momentumDir);
1321  if(momentumDir.z() > 0.)scaledMomentumDir *= std::fabs(thickness/momentumDir.z());
1322  else if(momentumDir.z() < 0.)scaledMomentumDir *= -std::fabs(thickness/momentumDir.z());
1323  else scaledMomentumDir *= maxLength/momentumDir.mag();
1324 
1325  float projEdge1 = topol.measurementPosition(momentumPos - 0.5*scaledMomentumDir).x();
1326  if(projEdge1 < 0.)projEdge1 = 0.;
1327  else if(projEdge1 > m_tkTreeVar_[rawId].nStrips)projEdge1 = m_tkTreeVar_[rawId].nStrips;
1328  float projEdge2 = topol.measurementPosition(momentumPos + 0.5*scaledMomentumDir).x();
1329  if(projEdge2 < 0.)projEdge1 = 0.;
1330  else if(projEdge2 > m_tkTreeVar_[rawId].nStrips)projEdge1 = m_tkTreeVar_[rawId].nStrips;
1331 
1332 
1333  float coveredStrips = std::fabs(projEdge2 - projEdge1);
1334 
1335  hitParams.projWidth = coveredStrips;
1336 
1337 
1338  }
1339  else{
1340  edm::LogError("FillHitVariables")<<"Incorrect subdetector ID, hit not associated to tracker";
1341  hitParams.hitState = TrackStruct::notInTracker; return hitParams;
1342  }
1343 
1344 
1345  if(!hitParams.isModuleUsable){hitParams.hitState = TrackStruct::invalid; return hitParams;}
1346 
1347  if(hitParams.v_sector.empty()){hitParams.hitState = TrackStruct::notAssignedToSectors; return hitParams;}
1348 
1349  return hitParams;
1350 //}
1351 }
ClusterRef cluster() const
virtual const Topology & topology() const =0
uint8_t maxCharge() const
bool valid() const
Definition: LocalError.h:21
std::vector< unsigned int > v_sector
float xx() const
Definition: LocalError.h:24
virtual float length() const =0
float clusterProbability(unsigned int flags=0) const
ConstRecHitPointer const & recHit() const
virtual const GeomDetType & type() const
Definition: GeomDet.cc:85
std::pair< uint16_t, uint16_t > chargeLR() const
LocalVector localDirection() const
unsigned int counter1
float baryStrip() const
const Bounds & bounds() const
Definition: Surface.h:120
int charge() const
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
uint16_t maxIndex() const
auto stripCharges() const -> decltype(cluster() ->amplitudes())
bool isOnEdge() const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
LocalError positionError() const
bool hasBadPixels() const
std::pair< TrackStruct::HitState, PositionAndError2 > StatePositionAndError2
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
virtual float width() const =0
float signalOverNoise() const
float xy() const
Definition: LocalError.h:25
float getLorentzAngle(const uint32_t &) const
uint16_t charge() const
float yy() const
Definition: LocalError.h:26
T sqrt(T t)
Definition: SSEVec.h:18
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
uint16_t width() const
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:79
ClusterRef cluster() const
const LocalTrajectoryError & localError() const
virtual LocalPoint localPosition() const =0
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
int qBin() const
Definition: DetId.h:18
virtual TrackingRecHit const * hit() const
uint16_t maxStrip() const
virtual float thickness() const =0
Detector
Definition: DetId.h:24
ClusterRef cluster() const
Definition: SiPixelRecHit.h:49
const T & get() const
Definition: EventSetup.h:55
bool isValid() const
int sizeY() const
bool IsModuleUsable() const
std::map< unsigned int, ReducedTrackerTreeVariables > m_tkTreeVar_
Pixel cluster – collection of neighboring pixels above threshold.
virtual const GeomDetUnit * detUnit() const
bool spansTwoROCs() const
float y() const
Definition: Bounds.h:22
DetId geographicalId() const
virtual LocalError localPositionError() const =0
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
T x() const
Definition: PV2DBase.h:45
int sizeX() const
const PositionType & position() const
T const * product() const
Definition: ESHandle.h:86
float x() const
LocalError const & localAlignmentError() const
Return local alligment error.
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
Definition: GeomDet.h:45
TrajectoryStateOnSurface const & backwardPredictedState() const
Access to backward predicted state (from smoother)
Our base class.
Definition: SiPixelRecHit.h:23
StatePositionAndError2 positionAndError2(const LocalPoint &, const LocalError &, const TransientTrackingRecHit &)
TrackStruct::TrackParameterStruct ApeEstimator::fillTrackVariables ( const reco::Track track,
const Trajectory traj,
const reco::BeamSpot beamSpot 
)
private

Definition at line 940 of file ApeEstimator.cc.

References funct::abs(), TrajectoryMeasurement::backwardPredictedState(), reco::BeamSpot::BeamWidthX(), reco::BeamSpot::BeamWidthY(), reco::TrackBase::charge(), reco::TrackBase::chi2(), reco::TrackBase::d0(), reco::TrackBase::d0Error(), reco::TrackBase::dxy(), reco::TrackBase::dz(), reco::TrackBase::dzError(), reco::TrackBase::eta(), reco::TrackBase::etaError(), F(), TrajectoryMeasurement::forwardPredictedState(), reco::Track::found(), edm::ParameterSet::getParameter(), TrackingRecHit::hit(), reco::TrackBase::hitPattern(), TrackStruct::TrackParameterStruct::hitsSize, isHit2D(), TrajectoryStateOnSurface::localDirection(), reco::Track::lost(), Trajectory::measurements(), reco::TrackBase::ndof(), reco::TrackBase::p(), parameterSet_, reco::TrackBase::phi(), reco::TrackBase::phiError(), reco::TrackBase::pt(), reco::TrackBase::ptError(), rpcPointValidation_cfi::recHit, TrajectoryMeasurement::recHit(), reco::Track::recHitsSize(), mathSSE::sqrt(), reco::TrackBase::theta(), trackCut_, reco::BeamSpot::x0(), reco::BeamSpot::y0(), and reco::BeamSpot::z0().

Referenced by analyze().

940  {
941 
942  const math::XYZPoint beamPoint(beamSpot.x0(),beamSpot.y0(), beamSpot.z0());
943  double d0BeamspotErr = std::sqrt( track.d0Error()*track.d0Error() + 0.5*beamSpot.BeamWidthX()*beamSpot.BeamWidthX() + 0.5*beamSpot.BeamWidthY()*beamSpot.BeamWidthY() );
944 
945  static TrajectoryStateCombiner tsoscomb;
946 
947  const reco::HitPattern& hitPattern(track.hitPattern());
948 
950 
951  trkParams.hitsSize = track.recHitsSize();
952  trkParams.hitsValid = track.found(); // invalid is every hit from every single module that expects a hit
953  trkParams.hitsInvalid = trkParams.hitsSize-trkParams.hitsValid;
954  trkParams.layersMissed = track.lost(); // lost hit means, that a crossed layer doesn't contain a hit (can be more than one invalid hit)
955  trkParams.hitsPixel = hitPattern.numberOfValidPixelHits();
956  trkParams.hitsStrip = hitPattern.numberOfValidStripHits();
957  trkParams.charge = track.charge();
958  trkParams.chi2 = track.chi2();
959  trkParams.ndof = track.ndof();
960  trkParams.norChi2 = trkParams.chi2/trkParams.ndof;
961  trkParams.prob = TMath::Prob(trkParams.chi2,trkParams.ndof);
962  trkParams.eta = track.eta();
963  trkParams.etaErr = track.etaError();
964  trkParams.theta = track.theta();
965  trkParams.phi = track.phi();
966  trkParams.phiErr = track.phiError();
967  trkParams.d0 = track.d0();
968  trkParams.d0Beamspot = -1.*track.dxy(beamPoint);
969  trkParams.d0BeamspotErr = d0BeamspotErr;
970  trkParams.dz = track.dz();
971  trkParams.dzErr = track.dzError();
972  trkParams.dzBeamspot = track.dz(beamPoint);
973  trkParams.p = track.p();
974  trkParams.pt = track.pt();
975  trkParams.ptErr = track.ptError();
976 
977  const std::vector<TrajectoryMeasurement>& v_meas = traj.measurements();
978 
979  int count2D(0); float meanPhiSensToNorm(0.F);
980  std::vector<TrajectoryMeasurement>::const_iterator i_meas;
981  for(i_meas = v_meas.begin(); i_meas != v_meas.end(); ++i_meas){
982  const TrajectoryMeasurement& meas = *i_meas;
983  const TransientTrackingRecHit& hit = *meas.recHit();
984  const TrackingRecHit& recHit = *hit.hit();
985  if(this->isHit2D(recHit))++count2D;
986 
988  const align::LocalVector mom(tsos.localDirection());
989  meanPhiSensToNorm += atan(fabs(sqrt(mom.x()*mom.x()+mom.y()*mom.y())/mom.z()));
990  }
991  meanPhiSensToNorm *= (1./static_cast<float>(trkParams.hitsSize));
992 
993  trkParams.hits2D = count2D;
994  trkParams.meanPhiSensToNorm = meanPhiSensToNorm;
995 
996  if(parameterSet_.getParameter<bool>("applyTrackCuts")){
997  trackCut_ = false;
998  if(trkParams.hitsStrip<11 || trkParams.hits2D<2 || trkParams.hitsPixel<2 || //trkParams.hitsInvalid>2 ||
999  trkParams.hitsStrip>35 || trkParams.hitsPixel>7 ||
1000  trkParams.norChi2>5. ||
1001  trkParams.pt<25. || trkParams.pt>150. ||
1002  std::abs(trkParams.d0Beamspot)>0.02 || std::abs(trkParams.dz)>15.)trackCut_ = true;
1003  }
1004  else{
1005  trackCut_ = false;
1006  }
1007 
1008  return trkParams;
1009 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:615
T getParameter(std::string const &) const
double z0() const
z coordinate
Definition: BeamSpot.h:68
const edm::ParameterSet parameterSet_
double d0Error() const
error on d0
Definition: TrackBase.h:802
unsigned short lost() const
Number of lost (=invalid) hits on track.
Definition: Track.h:199
ConstRecHitPointer const & recHit() const
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
Definition: TrackBase.h:597
double theta() const
polar angle
Definition: TrackBase.h:579
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
Definition: Track.h:119
LocalVector localDirection() const
double etaError() const
error on eta
Definition: TrackBase.h:784
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:645
DataContainer const & measurements() const
Definition: Trajectory.h:196
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:651
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:549
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:555
T sqrt(T t)
Definition: SSEVec.h:18
bool isHit2D(const TrackingRecHit &) const
double pt() const
track transverse momentum
Definition: TrackBase.h:621
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:763
double phiError() const
error on phi
Definition: TrackBase.h:790
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:86
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:609
double dzError() const
error on dz
Definition: TrackBase.h:814
virtual TrackingRecHit const * hit() const
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:446
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
double BeamWidthY() const
beam width Y
Definition: BeamSpot.h:88
unsigned short found() const
Number of valid hits on track.
Definition: Track.h:194
double y0() const
y coordinate
Definition: BeamSpot.h:66
int charge() const
track electric charge
Definition: TrackBase.h:567
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:591
TrajectoryStateOnSurface const & backwardPredictedState() const
Access to backward predicted state (from smoother)
double x0() const
x coordinate
Definition: BeamSpot.h:64
bool ApeEstimator::hitSelected ( TrackStruct::HitParameterStruct hitParams) const
private

Definition at line 1605 of file ApeEstimator.cc.

References TrackStruct::HitParameterStruct::baryStripX, TrackStruct::HitParameterStruct::baryStripY, TrackStruct::HitParameterStruct::chargeAsymmetry, TrackStruct::HitParameterStruct::chargeLRminus, TrackStruct::HitParameterStruct::chargeLRplus, TrackStruct::HitParameterStruct::chargeOnEdges, TrackStruct::HitParameterStruct::chargePixel, TrackStruct::HitParameterStruct::chargeStrip, TrackStruct::HitParameterStruct::clusterProbabilityQ, TrackStruct::HitParameterStruct::clusterProbabilityXY, TrackStruct::HitParameterStruct::clusterProbabilityXYQ, TrackStruct::HitParameterStruct::errX, TrackStruct::HitParameterStruct::errX2, TrackStruct::HitParameterStruct::errXHit, TrackStruct::HitParameterStruct::errXTrk, TrackStruct::HitParameterStruct::errY, TrackStruct::HitParameterStruct::errY2, TrackStruct::HitParameterStruct::errYHit, TrackStruct::HitParameterStruct::errYTrk, TrackStruct::HitParameterStruct::goodXMeasurement, TrackStruct::HitParameterStruct::goodYMeasurement, TrackStruct::HitParameterStruct::hasBadPixels, hitSelection(), TrackStruct::HitParameterStruct::hitState, inDoubleInterval(), inUintInterval(), TrackStruct::invalid, TrackStruct::HitParameterStruct::isOnEdge, TrackStruct::HitParameterStruct::isPixelHit, TrackStruct::HitParameterStruct::logClusterProbability, m_hitSelection_, m_hitSelectionUInt_, genParticles_cff::map, TrackStruct::HitParameterStruct::maxCharge, TrackStruct::HitParameterStruct::maxIndex, TrackStruct::HitParameterStruct::maxStrip, TrackStruct::HitParameterStruct::maxStripInv, TrackStruct::negativeError, TrackStruct::HitParameterStruct::norResX, TrackStruct::HitParameterStruct::norResY, TrackStruct::notInTracker, TrackStruct::HitParameterStruct::phiSens, TrackStruct::HitParameterStruct::phiSensX, TrackStruct::HitParameterStruct::phiSensY, TrackStruct::HitParameterStruct::probX, TrackStruct::HitParameterStruct::probY, TrackStruct::HitParameterStruct::projWidth, TrackStruct::HitParameterStruct::qBin, TrackStruct::HitParameterStruct::resX, TrackStruct::HitParameterStruct::resY, TrackStruct::HitParameterStruct::sOverN, TrackStruct::HitParameterStruct::spansTwoRoc, AlCaHLTBitMon_QueryRunRegistry::string, TrackStruct::HitParameterStruct::widthX, and TrackStruct::HitParameterStruct::widthY.

Referenced by analyze().

1605  {
1606  if(hitParams.hitState == TrackStruct::notInTracker)return false;
1607  if(hitParams.hitState == TrackStruct::invalid || hitParams.hitState == TrackStruct::negativeError)return false;
1608 
1609  bool isGoodHit(true);
1610  bool isGoodHitX(true);
1611  bool isGoodHitY(true);
1612 
1613  for(std::map<std::string, std::vector<double> >::const_iterator i_hitSelection = m_hitSelection_.begin(); i_hitSelection != m_hitSelection_.end(); ++i_hitSelection){
1614  const std::string& hitSelection((*i_hitSelection).first);
1615  const std::vector<double>& v_hitSelection((*i_hitSelection).second);
1616  if(v_hitSelection.empty())continue;
1617 
1618  // For pixel and strip sectors in common
1619  if (hitSelection == "phiSens") {if(!this->inDoubleInterval(v_hitSelection, hitParams.phiSens))isGoodHit = false;}
1620  else if(hitSelection == "phiSensX") {if(!this->inDoubleInterval(v_hitSelection, hitParams.phiSensX))isGoodHit = false;}
1621  else if(hitSelection == "phiSensY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.phiSensY))isGoodHit = false;}
1622 
1623  else if(hitSelection == "resX") {if(!this->inDoubleInterval(v_hitSelection, hitParams.resX))isGoodHitX = false;}
1624  else if(hitSelection == "norResX") {if(!this->inDoubleInterval(v_hitSelection, hitParams.norResX))isGoodHitX = false;}
1625  else if(hitSelection == "probX") {if(!this->inDoubleInterval(v_hitSelection, hitParams.probX))isGoodHitX = false;}
1626  else if(hitSelection == "errXHit") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errXHit))isGoodHitX = false;}
1627  else if(hitSelection == "errXTrk") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errXTrk))isGoodHitX = false;}
1628  else if(hitSelection == "errX") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errX))isGoodHitX = false;}
1629  else if(hitSelection == "errX2") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errX2))isGoodHitX = false;}
1630 
1631  // For pixel only
1632  if(hitParams.isPixelHit){
1633  if (hitSelection == "chargePixel") {if(!this->inDoubleInterval(v_hitSelection, hitParams.chargePixel))isGoodHit = false;}
1634  else if(hitSelection == "clusterProbabilityXY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.clusterProbabilityXY))isGoodHit = false;}
1635  else if(hitSelection == "clusterProbabilityQ") {if(!this->inDoubleInterval(v_hitSelection, hitParams.clusterProbabilityQ))isGoodHit = false;}
1636  else if(hitSelection == "clusterProbabilityXYQ"){if(!this->inDoubleInterval(v_hitSelection, hitParams.clusterProbabilityXYQ))isGoodHit = false;}
1637  else if(hitSelection == "logClusterProbability"){if(!this->inDoubleInterval(v_hitSelection, hitParams.logClusterProbability))isGoodHit = false;}
1638 
1639  else if(hitSelection == "baryStripX") {if(!this->inDoubleInterval(v_hitSelection, hitParams.baryStripX))isGoodHitX = false;}
1640  else if(hitSelection == "baryStripY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.baryStripY))isGoodHitY = false;}
1641 
1642 
1643 
1644  else if(hitSelection == "resY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.resY))isGoodHitY = false;}
1645  else if(hitSelection == "norResY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.norResY))isGoodHitY = false;}
1646  else if(hitSelection == "probY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.probY))isGoodHitY = false;}
1647  else if(hitSelection == "errYHit") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errYHit))isGoodHitY = false;}
1648  else if(hitSelection == "errYTrk") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errYTrk))isGoodHitY = false;}
1649  else if(hitSelection == "errY") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errY))isGoodHitY = false;}
1650  else if(hitSelection == "errY2") {if(!this->inDoubleInterval(v_hitSelection, hitParams.errY2))isGoodHitY = false;}
1651  }
1652 
1653  // For strip only
1654  else{
1655  if (hitSelection == "widthProj") {if(!this->inDoubleInterval(v_hitSelection, hitParams.projWidth))isGoodHit = false;}
1656  else if(hitSelection == "widthDiff") {if(!this->inDoubleInterval(v_hitSelection, hitParams.projWidth-static_cast<float>(hitParams.widthX)))isGoodHit = false;}
1657  else if(hitSelection == "charge") {if(!this->inDoubleInterval(v_hitSelection, hitParams.chargeStrip))isGoodHit = false;}
1658  else if(hitSelection == "maxCharge") {if(!this->inDoubleInterval(v_hitSelection, hitParams.maxCharge))isGoodHit = false;}
1659  else if(hitSelection == "chargeOnEdges") {if(!this->inDoubleInterval(v_hitSelection, hitParams.chargeOnEdges))isGoodHit = false;}
1660  else if(hitSelection == "chargeAsymmetry"){if(!this->inDoubleInterval(v_hitSelection, hitParams.chargeAsymmetry))isGoodHit = false;}
1661  else if(hitSelection == "chargeLRplus") {if(!this->inDoubleInterval(v_hitSelection, hitParams.chargeLRplus))isGoodHit = false;}
1662  else if(hitSelection == "chargeLRminus") {if(!this->inDoubleInterval(v_hitSelection, hitParams.chargeLRminus))isGoodHit = false;}
1663  else if(hitSelection == "sOverN") {if(!this->inDoubleInterval(v_hitSelection, hitParams.sOverN))isGoodHit = false;}
1664  }
1665  }
1666 
1667  for(std::map<std::string, std::vector<unsigned int> >::const_iterator i_hitSelection = m_hitSelectionUInt_.begin(); i_hitSelection != m_hitSelectionUInt_.end(); ++i_hitSelection){
1668  const std::string& hitSelection((*i_hitSelection).first);
1669  const std::vector<unsigned int>& v_hitSelection((*i_hitSelection).second);
1670  if(v_hitSelection.empty())continue;
1671 
1672  // For pixel and strip sectors in common
1673 
1674  // For pixel only
1675  if(hitParams.isPixelHit){
1676  if(hitSelection == "isOnEdge") {if(!this->inUintInterval(v_hitSelection, hitParams.isOnEdge))isGoodHit = false;}
1677  else if(hitSelection == "hasBadPixels"){if(!this->inUintInterval(v_hitSelection, hitParams.hasBadPixels))isGoodHit = false;}
1678  else if(hitSelection == "spansTwoRoc") {if(!this->inUintInterval(v_hitSelection, hitParams.spansTwoRoc))isGoodHit = false;}
1679  else if(hitSelection == "qBin") {if(!this->inUintInterval(v_hitSelection, hitParams.qBin))isGoodHit = false;}
1680 
1681  else if(hitSelection == "widthX") {if(!this->inUintInterval(v_hitSelection, hitParams.widthX))isGoodHitX = false;}
1682  else if(hitSelection == "widthY") {if(!this->inUintInterval(v_hitSelection, hitParams.widthY))isGoodHitY = false;}
1683  }
1684 
1685  // For strip only
1686  else{
1687  if (hitSelection == "width") {if(!this->inUintInterval(v_hitSelection, hitParams.widthX))isGoodHit = false;}
1688  else if(hitSelection == "edgeStrips"){if(!this->inUintInterval(v_hitSelection, hitParams.maxStrip, hitParams.maxStripInv))isGoodHit = false;}
1689  else if(hitSelection == "maxIndex") {if(!this->inUintInterval(v_hitSelection, hitParams.maxIndex))isGoodHit = false;}
1690  }
1691  }
1692 
1693  if(hitParams.isPixelHit){
1694  hitParams.goodXMeasurement = isGoodHit && isGoodHitX;
1695  hitParams.goodYMeasurement = isGoodHit && isGoodHitY;
1696  }
1697  else{
1698  hitParams.goodXMeasurement = isGoodHit && isGoodHitX;
1699  hitParams.goodYMeasurement = false;
1700  }
1701 
1702  if(!hitParams.goodXMeasurement && !hitParams.goodYMeasurement)return false;
1703  else return true;
1704 }
bool inDoubleInterval(const std::vector< double > &, const float) const
void hitSelection()
std::map< std::string, std::vector< unsigned int > > m_hitSelectionUInt_
bool inUintInterval(const std::vector< unsigned int > &, const unsigned int, const unsigned int=999) const
std::map< std::string, std::vector< double > > m_hitSelection_
void ApeEstimator::hitSelection ( )
private

Definition at line 1464 of file ApeEstimator.cc.

References mps_splice::entry, m_hitSelection_, m_hitSelectionUInt_, genParticles_cff::map, setHitSelectionMap(), setHitSelectionMapUInt(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by beginJob(), and hitSelected().

1464  {
1465  this->setHitSelectionMapUInt("width");
1466  this->setHitSelectionMap("widthProj");
1467  this->setHitSelectionMap("widthDiff");
1468  this->setHitSelectionMap("charge");
1469  this->setHitSelectionMapUInt("edgeStrips");
1470  this->setHitSelectionMap("maxCharge");
1471  this->setHitSelectionMapUInt("maxIndex");
1472  this->setHitSelectionMap("chargeOnEdges");
1473  this->setHitSelectionMap("chargeAsymmetry");
1474  this->setHitSelectionMap("chargeLRplus");
1475  this->setHitSelectionMap("chargeLRminus");
1476  this->setHitSelectionMap("sOverN");
1477 
1478  this->setHitSelectionMap("chargePixel");
1479  this->setHitSelectionMapUInt("widthX");
1480  this->setHitSelectionMapUInt("widthY");
1481 
1482 
1483  this->setHitSelectionMap("baryStripX");
1484  this->setHitSelectionMap("baryStripY");
1485  this->setHitSelectionMap("clusterProbabilityXY");
1486  this->setHitSelectionMap("clusterProbabilityQ");
1487  this->setHitSelectionMap("clusterProbabilityXYQ");
1488  this->setHitSelectionMap("logClusterProbability");
1489  this->setHitSelectionMapUInt("isOnEdge");
1490  this->setHitSelectionMapUInt("hasBadPixels");
1491  this->setHitSelectionMapUInt("spansTwoRoc");
1492  this->setHitSelectionMapUInt("qBin");
1493 
1494 
1495 
1496  this->setHitSelectionMap("phiSens");
1497  this->setHitSelectionMap("phiSensX");
1498  this->setHitSelectionMap("phiSensY");
1499  this->setHitSelectionMap("resX");
1500  this->setHitSelectionMap("norResX");
1501  this->setHitSelectionMap("probX");
1502  this->setHitSelectionMap("errXHit");
1503  this->setHitSelectionMap("errXTrk");
1504  this->setHitSelectionMap("errX");
1505  this->setHitSelectionMap("errX2");
1506 
1507  this->setHitSelectionMap("resY");
1508  this->setHitSelectionMap("norResY");
1509  this->setHitSelectionMap("probY");
1510  this->setHitSelectionMap("errYHit");
1511  this->setHitSelectionMap("errYTrk");
1512  this->setHitSelectionMap("errY");
1513  this->setHitSelectionMap("errY2");
1514 
1515  edm::LogInfo("HitSelector")<<"applying hit cuts ...";
1516  bool emptyMap(true);
1517  for(std::map<std::string, std::vector<double> >::iterator i_hitSelection = m_hitSelection_.begin(); i_hitSelection != m_hitSelection_.end(); ++i_hitSelection){
1518  if(!(*i_hitSelection).second.empty()){
1519  int entry(1); double intervalBegin(999.);
1520  for(std::vector<double>::iterator i_hitInterval = (*i_hitSelection).second.begin(); i_hitInterval != (*i_hitSelection).second.end(); ++entry){
1521  if(entry%2==1){intervalBegin = *i_hitInterval; ++i_hitInterval;}
1522  else{
1523  if(intervalBegin > *i_hitInterval){
1524  edm::LogError("HitSelector")<<"INVALID Interval selected for "<<(*i_hitSelection).first<<":\t"<<intervalBegin<<" > "<<(*i_hitInterval)
1525  <<"\n ... delete Selection for "<<(*i_hitSelection).first;
1526  (*i_hitSelection).second.clear(); i_hitInterval = (*i_hitSelection).second.begin(); //emptyMap = true; i_hitSelection = m_hitSelection_.begin();
1527  }else{
1528  edm::LogInfo("HitSelector")<<"Interval selected for "<<(*i_hitSelection).first<<":\t"<<intervalBegin<<", "<<(*i_hitInterval);
1529  ++i_hitInterval;
1530  }
1531  }
1532  }
1533  if(!(*i_hitSelection).second.empty())emptyMap = false;
1534  }
1535  }
1536 
1537 
1538  bool emptyMapUInt(true);
1539  for(std::map<std::string, std::vector<unsigned int> >::iterator i_hitSelection = m_hitSelectionUInt_.begin(); i_hitSelection != m_hitSelectionUInt_.end(); ++i_hitSelection){
1540  if(!(*i_hitSelection).second.empty()){
1541  int entry(1); unsigned int intervalBegin(999);
1542  for(std::vector<unsigned int>::iterator i_hitInterval = (*i_hitSelection).second.begin(); i_hitInterval != (*i_hitSelection).second.end(); ++entry){
1543  if(entry%2==1){intervalBegin = *i_hitInterval; ++i_hitInterval;}
1544  else{
1545  if(intervalBegin > *i_hitInterval){
1546  edm::LogError("HitSelector")<<"INVALID Interval selected for "<<(*i_hitSelection).first<<":\t"<<intervalBegin<<" > "<<(*i_hitInterval)
1547  <<"\n ... delete Selection for "<<(*i_hitSelection).first;
1548  (*i_hitSelection).second.clear(); i_hitInterval = (*i_hitSelection).second.begin(); //emptyMap = true; i_hitSelection = m_hitSelection_.begin();
1549  }else{
1550  edm::LogInfo("HitSelector")<<"Interval selected for "<<(*i_hitSelection).first<<":\t"<<intervalBegin<<", "<<(*i_hitInterval);
1551  ++i_hitInterval;
1552  }
1553  }
1554  }
1555  if(!(*i_hitSelection).second.empty())emptyMapUInt = false;
1556  }
1557  }
1558 
1559  if(emptyMap && emptyMapUInt){
1560  m_hitSelection_.clear();
1561  m_hitSelectionUInt_.clear();
1562  edm::LogInfo("HitSelector")<<"NO hit cuts applied";
1563  }
1564  return;
1565 }
std::map< std::string, std::vector< unsigned int > > m_hitSelectionUInt_
void setHitSelectionMap(const std::string &)
std::map< std::string, std::vector< double > > m_hitSelection_
void setHitSelectionMapUInt(const std::string &)
bool ApeEstimator::inDoubleInterval ( const std::vector< double > &  v_hitSelection,
const float  variable 
) const
private

Definition at line 1708 of file ApeEstimator.cc.

References mps_splice::entry.

Referenced by hitSelected().

1708  {
1709  int entry(1); double intervalBegin(999.);
1710  bool isSelected(false);
1711  for(std::vector<double>::const_iterator i_hitInterval = v_hitSelection.begin(); i_hitInterval != v_hitSelection.end(); ++i_hitInterval, ++entry){
1712  if(entry%2==1)intervalBegin = *i_hitInterval;
1713  else if(variable>=intervalBegin && variable<*i_hitInterval)isSelected = true;
1714  }
1715  return isSelected;
1716 }
bool ApeEstimator::inUintInterval ( const std::vector< unsigned int > &  v_hitSelection,
const unsigned int  variable,
const unsigned int  variable2 = 999 
) const
private

Definition at line 1720 of file ApeEstimator.cc.

References mps_splice::entry.

Referenced by hitSelected().

1720  {
1721  int entry(1); unsigned int intervalBegin(999);
1722  bool isSelected(false);
1723  for(std::vector<unsigned int>::const_iterator i_hitInterval = v_hitSelection.begin(); i_hitInterval != v_hitSelection.end(); ++i_hitInterval, ++entry){
1724  if(entry%2==1)intervalBegin = *i_hitInterval;
1725  else if(variable>=intervalBegin && variable<=*i_hitInterval){
1726  if(variable2==999 || (variable2>=intervalBegin && variable2<=*i_hitInterval))isSelected = true;
1727  }
1728  }
1729  return isSelected;
1730 }
bool ApeEstimator::isHit2D ( const TrackingRecHit hit) const
private

Definition at line 2096 of file ApeEstimator.cc.

References TrackingRecHit::dimension(), TrackingRecHit::geographicalId(), TrackingRecHit::isValid(), ProjectedSiStripRecHit2D::originalHit(), PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, SiStripDetId::stereo(), and DetId::Tracker.

Referenced by fillTrackVariables().

2097 {
2098  // we count SiStrip stereo modules as 2D if selected via countStereoHitAs2D_
2099  // (since they provide theta information)
2100  // --- NO, here it is always set to true ---
2101  if (!hit.isValid() ||
2102  (hit.dimension() < 2 && !dynamic_cast<const SiStripRecHit1D*>(&hit))){
2103  return false; // real RecHit1D - but SiStripRecHit1D depends on countStereoHitAs2D_
2104  } else {
2105  const DetId detId(hit.geographicalId());
2106  if (detId.det() == DetId::Tracker) {
2107  if (detId.subdetId() == PixelSubdetector::PixelBarrel || detId.subdetId() == PixelSubdetector::PixelEndcap) {
2108  return true; // pixel is always 2D
2109  } else { // should be SiStrip now
2110  const SiStripDetId stripId(detId);
2111  if (stripId.stereo()) return true; // stereo modules
2112  else if (dynamic_cast<const SiStripRecHit1D*>(&hit)
2113  || dynamic_cast<const SiStripRecHit2D*>(&hit)) return false; // rphi modules hit
2114  //the following two are not used any more since ages...
2115  else if (dynamic_cast<const SiStripMatchedRecHit2D*>(&hit)) return true; // matched is 2D
2116  else if (dynamic_cast<const ProjectedSiStripRecHit2D*>(&hit)) {
2117  const ProjectedSiStripRecHit2D* pH = static_cast<const ProjectedSiStripRecHit2D*>(&hit);
2118  return (this->isHit2D(pH->originalHit())); // depends on original...
2119  } else {
2120  edm::LogError("UnkownType") << "@SUB=AlignmentTrackSelector::isHit2D"
2121  << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor "
2122  << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
2123  return false;
2124  }
2125  }
2126  } else { // not tracker??
2127  edm::LogWarning("DetectorMismatch") << "@SUB=AlignmentTrackSelector::isHit2D"
2128  << "Hit not in tracker with 'official' dimension >=2.";
2129  return true; // dimension() >= 2 so accept that...
2130  }
2131  }
2132  // never reached...
2133 }
virtual int dimension() const =0
bool isHit2D(const TrackingRecHit &) const
SiStripRecHit2D originalHit() const
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
Definition: DetId.h:18
bool isValid() const
DetId geographicalId() const
ApeEstimator::StatePositionAndError2 ApeEstimator::positionAndError2 ( const LocalPoint localPoint,
const LocalError localError,
const TransientTrackingRecHit hit 
)
private

Definition at line 1356 of file ApeEstimator.cc.

References TrackingRecHit::detUnit(), TrackingRecHit::geographicalId(), TrackStruct::invalid, m_tkTreeVar_, RadialStripTopology::measurementError(), TrackStruct::negativeError, TrackStruct::ok, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, radialPositionAndError2(), rectangularPositionAndError2(), StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, GeomDetType::topology(), GeomDet::type(), MeasurementError::uu(), MeasurementError::vv(), LocalError::xx(), and LocalError::yy().

Referenced by fillHitVariables().

1356  {
1357  StatePositionAndError2 vPE2 = std::make_pair(TrackStruct::invalid,PositionAndError2());
1358 
1359  const DetId& detId(hit.geographicalId());
1360  const uint32_t& rawId(detId.rawId());
1361  const UInt_t& subdetId(m_tkTreeVar_[rawId].subdetId);
1362 
1363  if(localError.xx()<0. || localError.yy()<0.){
1364  // Do not print error message by default
1365  //edm::LogError("Negative error Value")<<"@SUB=ApeEstimator::fillHitVariables"
1366  // <<"One of the squared error methods gives negative result\n"
1367  // <<"\tSubdetector\tlocalError.xx()\tlocalError.yy()\n"
1368  // <<"\t"<<subdetId<<"\t\t"<<localError.xx()<<"\t"<<localError.yy();
1369  vPE2.first = TrackStruct::negativeError;
1370  return vPE2;
1371  }
1372 
1374  subdetId==StripSubdetector::TIB || subdetId==StripSubdetector::TOB){
1375  // Cartesian coordinates
1376  vPE2 = std::make_pair(TrackStruct::ok, this->rectangularPositionAndError2(localPoint, localError));
1377  }
1378  else if(subdetId==StripSubdetector::TID || subdetId==StripSubdetector::TEC){
1379  // Local x in radial coordinates
1380  if(!hit.detUnit())return vPE2; // is it a single physical module?
1381  const GeomDetUnit& detUnit = *hit.detUnit();
1382 
1383  if(!dynamic_cast<const RadialStripTopology*>(&detUnit.type().topology()))return vPE2;
1384  const RadialStripTopology& topol = dynamic_cast<const RadialStripTopology&>(detUnit.type().topology());
1385 
1386  MeasurementError measError = topol.measurementError(localPoint,localError);
1387  if(measError.uu()<0. || measError.vv()<0.){
1388  // Do not print error message by default
1389  //edm::LogError("Negative error Value")<<"@SUB=ApeEstimator::fillHitVariables"
1390  // <<"One of the squared error methods gives negative result\n"
1391  // <<"\tmeasError.uu()\tmeasError.vv()\n"
1392  // <<"\t"<<measError.uu()<<"\t"<<measError.vv()
1393  // <<"\n\nOriginalValues:\n"
1394  // <<localPoint.x()<<" "<<localPoint.y()<<"\n"
1395  // <<localError.xx()<<" "<<localError.yy()<<"\n"
1396  // <<"Subdet: "<<subdetId;
1397  vPE2.first = TrackStruct::negativeError;
1398  return vPE2;
1399  }
1400  vPE2 = std::make_pair(TrackStruct::ok, this->radialPositionAndError2(localPoint, localError, topol));
1401  }
1402  else{
1403  edm::LogError("FillHitVariables")<<"Incorrect subdetector ID, hit not associated to tracker";
1404  }
1405 
1406  return vPE2;
1407 }
virtual const Topology & topology() const =0
float xx() const
Definition: LocalError.h:24
float vv() const
virtual const GeomDetType & type() const
Definition: GeomDet.cc:85
PositionAndError2 radialPositionAndError2(const LocalPoint &, const LocalError &, const RadialStripTopology &)
PositionAndError2 rectangularPositionAndError2(const LocalPoint &, const LocalError &)
std::pair< TrackStruct::HitState, PositionAndError2 > StatePositionAndError2
float yy() const
Definition: LocalError.h:26
float uu() const
MeasurementError measurementError(const LocalPoint &, const LocalError &) const override=0
Definition: DetId.h:18
std::map< unsigned int, ReducedTrackerTreeVariables > m_tkTreeVar_
virtual const GeomDetUnit * detUnit() const
DetId geographicalId() const
ApeEstimator::PositionAndError2 ApeEstimator::radialPositionAndError2 ( const LocalPoint lP,
const LocalError lE,
const RadialStripTopology topol 
)
private

Definition at line 1425 of file ApeEstimator.cc.

References RadialStripTopology::angularWidth(), funct::cos(), RadialStripTopology::detHeight(), F(), RadialStripTopology::localStripLength(), RadialStripTopology::measurementError(), RadialStripTopology::measurementPosition(), RadialStripTopology::originToIntersection(), phi, funct::pow(), funct::sin(), RadialStripTopology::stripAngle(), MeasurementError::uu(), MeasurementError::vv(), x, PV2DBase< T, PVType, FrameType >::x(), y, and PV2DBase< T, PVType, FrameType >::y().

Referenced by positionAndError2().

1425  {
1426 
1427  MeasurementPoint measPos = topol.measurementPosition(lP);
1428  MeasurementError measErr = topol.measurementError(lP,lE);
1429 
1430  const float r_0 = topol.originToIntersection();
1431  const float stripLength = topol.localStripLength(lP);
1432  const float phi = topol.stripAngle(measPos.x());
1433 
1434  float x(-999.F);
1435  float y(-999.F);
1436  float errX2(-999.F);
1437  float errY2(-999.F);
1438 
1439  x = phi*r_0;
1440  // Radial y (not symmetric around 0; radial distance with minimum at middle strip at lower edge [0, yMax])
1441  const float l_0 = r_0 - topol.detHeight()/2;
1442  const float cosPhi(std::cos(phi));
1443  y = measPos.y()*stripLength - 0.5*stripLength + l_0*(1./cosPhi - 1.);
1444 
1445  const float angularWidth2(topol.angularWidth()*topol.angularWidth());
1446  const float errPhi2(measErr.uu()*angularWidth2);
1447 
1448  errX2 = errPhi2*r_0*r_0;
1449  // Radial y (not symmetric around 0, real radial distance from intersection point)
1450  const float cosPhi4(std::pow(cosPhi,4)), sinPhi2(std::sin(phi)*std::sin(phi));
1451  const float helpSummand = l_0*l_0*(sinPhi2/cosPhi4*errPhi2);
1452  errY2 = measErr.vv()*stripLength*stripLength + helpSummand;
1453 
1454  return PositionAndError2(x, y, errX2, errY2);
1455 }
virtual float angularWidth() const =0
float vv() const
T y() const
Definition: PV2DBase.h:46
virtual float originToIntersection() const =0
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
float localStripLength(const LocalPoint &) const override=0
float stripAngle(float strip) const override=0
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
float uu() const
MeasurementError measurementError(const LocalPoint &, const LocalError &) const override=0
virtual float detHeight() const =0
MeasurementPoint measurementPosition(const LocalPoint &) const override=0
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
T x() const
Definition: PV2DBase.h:45
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
ApeEstimator::PositionAndError2 ApeEstimator::rectangularPositionAndError2 ( const LocalPoint lP,
const LocalError lE 
)
private

Definition at line 1412 of file ApeEstimator.cc.

References x, PV3DBase< T, PVType, FrameType >::x(), LocalError::xx(), y, PV3DBase< T, PVType, FrameType >::y(), and LocalError::yy().

Referenced by positionAndError2().

1412  {
1413 
1414  const float x(lP.x());
1415  const float y(lP.y());
1416  const float errX2(lE.xx());
1417  const float errY2(lE.yy());
1418 
1419  return PositionAndError2(x, y, errX2, errY2);
1420 }
float xx() const
Definition: LocalError.h:24
T y() const
Definition: PV3DBase.h:63
float yy() const
Definition: LocalError.h:26
T x() const
Definition: PV3DBase.h:62
void ApeEstimator::residualErrorBinning ( )
private

Definition at line 522 of file ApeEstimator.cc.

References edm::ParameterSet::getParameter(), m_resErrBins_, parameterSet_, anotherprimaryvertexanalyzer_cfi::xMax, and anotherprimaryvertexanalyzer_cfi::xMin.

Referenced by beginJob().

522  {
523  std::vector<double> v_residualErrorBinning(parameterSet_.getParameter<std::vector<double> >("residualErrorBinning"));
524  if(v_residualErrorBinning.size()==1){
525  edm::LogError("ResidualErrorBinning")<<"Incorrect selection of Residual Error Bins (used for APE calculation): \t"
526  <<"Only one argument passed, so no interval is specified"
527  <<"\n... delete whole bin selection"; //m_resErrBins_ remains empty
528  return;
529  }
530  double xMin(0.), xMax(0.);
531  unsigned int binCounter(0);
532  for(std::vector<double>::const_iterator i_binning = v_residualErrorBinning.begin(); i_binning != v_residualErrorBinning.end(); ++i_binning, ++binCounter){
533  if(binCounter == 0){xMin = *i_binning;continue;}
534  xMax = *i_binning;
535  if(xMax<=xMin){
536  edm::LogError("ResidualErrorBinning")<<"Incorrect selection of Residual Error Bins (used for APE calculation): \t"
537  <<xMin<<" is bigger than "<<xMax<<" but is expected to be smaller"
538  <<"\n... delete whole bin selection";
539  m_resErrBins_.clear();
540  return;
541  }
542  m_resErrBins_[binCounter].first = xMin;
543  m_resErrBins_[binCounter].second = xMax;
544  xMin = xMax;
545  }
546  edm::LogInfo("ResidualErrorBinning")<<m_resErrBins_.size()<<" Intervals of residual errors used for separate APE calculation sucessfully set";
547 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
std::map< unsigned int, std::pair< double, double > > m_resErrBins_
void ApeEstimator::sectorBuilder ( )
private

Definition at line 251 of file ApeEstimator.cc.

References checkIntervalsForSectors(), checkModuleBools(), checkModuleDirections(), checkModuleIds(), checkModulePositions(), F(), edm::ParameterSet::getParameter(), fastTrackerRecHitType::isPixel(), TrackerSectorStruct::isPixel, m_tkSector_, m_tkTreeVar_, python.rootplot.argparse::module, TrackerSectorStruct::name, ReducedTrackerTreeVariables::nStrips, parameterSet_, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, RecoTauValidation_cfi::posX, RecoTauValidation_cfi::posY, relativeConstraints::ring, statistics(), AlCaHLTBitMon_QueryRunRegistry::string, ReducedTrackerTreeVariables::subdetId, StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, ReducedTrackerTreeVariables::uDirection, TrackerSectorStruct::v_rawId, ReducedTrackerTreeVariables::vDirection, and ReducedTrackerTreeVariables::wDirection.

Referenced by beginJob().

251  {
252 
253  TFile* tkTreeFile(TFile::Open((parameterSet_.getParameter<std::string>("TrackerTreeFile")).c_str()));
254  if(tkTreeFile){
255  edm::LogInfo("SectorBuilder")<<"TrackerTreeFile OK";
256  }else{
257  edm::LogError("SectorBuilder")<<"TrackerTreeFile not found";
258  return;
259  }
260  TTree* tkTree(nullptr);
261  tkTreeFile->GetObject("TrackerTreeGenerator/TrackerTree/TrackerTree",tkTree);
262  if(tkTree){
263  edm::LogInfo("SectorBuilder")<<"TrackerTree OK";
264  }else{
265  edm::LogError("SectorBuilder")<<"TrackerTree not found in file";
266  return;
267  }
268  UInt_t rawId(999), subdetId(999), layer(999), side(999), half(999), rod(999), ring(999), petal(999),
269  blade(999), panel(999), outerInner(999), module(999), nStrips(999);
270  Bool_t isDoubleSide(false), isRPhi(false), isStereo(false);
271  Int_t uDirection(999), vDirection(999), wDirection(999);
272  Float_t posR(999.F), posPhi(999.F), posEta(999.F), posX(999.F), posY(999.F), posZ(999.F);
273  tkTree->SetBranchAddress("RawId", &rawId);
274  tkTree->SetBranchAddress("SubdetId", &subdetId);
275  tkTree->SetBranchAddress("Layer", &layer);
276  tkTree->SetBranchAddress("Side", &side);
277  tkTree->SetBranchAddress("Half", &half);
278  tkTree->SetBranchAddress("Rod", &rod);
279  tkTree->SetBranchAddress("Ring", &ring);
280  tkTree->SetBranchAddress("Petal", &petal);
281  tkTree->SetBranchAddress("Blade", &blade);
282  tkTree->SetBranchAddress("Panel", &panel);
283  tkTree->SetBranchAddress("OuterInner", &outerInner);
284  tkTree->SetBranchAddress("Module", &module);
285  tkTree->SetBranchAddress("NStrips", &nStrips);
286  tkTree->SetBranchAddress("IsDoubleSide", &isDoubleSide);
287  tkTree->SetBranchAddress("IsRPhi", &isRPhi);
288  tkTree->SetBranchAddress("IsStereo", &isStereo);
289  tkTree->SetBranchAddress("UDirection", &uDirection);
290  tkTree->SetBranchAddress("VDirection", &vDirection);
291  tkTree->SetBranchAddress("WDirection", &wDirection);
292  tkTree->SetBranchAddress("PosR", &posR);
293  tkTree->SetBranchAddress("PosPhi", &posPhi);
294  tkTree->SetBranchAddress("PosEta", &posEta);
295  tkTree->SetBranchAddress("PosX", &posX);
296  tkTree->SetBranchAddress("PosY", &posY);
297  tkTree->SetBranchAddress("PosZ", &posZ);
298 
299  Int_t nModules(tkTree->GetEntries());
300  TrackerSectorStruct allSectors;
301 
302  //Loop over all Sectors
303  unsigned int sectorCounter(1);
304  std::vector<edm::ParameterSet> v_sectorDef(parameterSet_.getParameter<std::vector<edm::ParameterSet> >("Sectors"));
305  edm::LogInfo("SectorBuilder")<<"There are "<<v_sectorDef.size()<<" Sectors definded";
306  std::vector<edm::ParameterSet>::const_iterator i_parSet;
307  for(i_parSet = v_sectorDef.begin(); i_parSet != v_sectorDef.end();++i_parSet, ++sectorCounter){
308  const edm::ParameterSet& parSet = *i_parSet;
309  const std::string& sectorName(parSet.getParameter<std::string>("name"));
310  std::vector<unsigned int> v_rawId(parSet.getParameter<std::vector<unsigned int> >("rawId")),
311  v_subdetId(parSet.getParameter<std::vector<unsigned int> >("subdetId")),
312  v_layer(parSet.getParameter<std::vector<unsigned int> >("layer")),
313  v_side(parSet.getParameter<std::vector<unsigned int> >("side")),
314  v_half(parSet.getParameter<std::vector<unsigned int> >("half")),
315  v_rod(parSet.getParameter<std::vector<unsigned int> >("rod")),
316  v_ring(parSet.getParameter<std::vector<unsigned int> >("ring")),
317  v_petal(parSet.getParameter<std::vector<unsigned int> >("petal")),
318  v_blade(parSet.getParameter<std::vector<unsigned int> >("blade")),
319  v_panel(parSet.getParameter<std::vector<unsigned int> >("panel")),
320  v_outerInner(parSet.getParameter<std::vector<unsigned int> >("outerInner")),
321  v_module(parSet.getParameter<std::vector<unsigned int> >("module")),
322  v_nStrips(parSet.getParameter<std::vector<unsigned int> >("nStrips")),
323  v_isDoubleSide(parSet.getParameter<std::vector<unsigned int> >("isDoubleSide")),
324  v_isRPhi(parSet.getParameter<std::vector<unsigned int> >("isRPhi")),
325  v_isStereo(parSet.getParameter<std::vector<unsigned int> >("isStereo"));
326  std::vector<int> v_uDirection(parSet.getParameter<std::vector<int> >("uDirection")),
327  v_vDirection(parSet.getParameter<std::vector<int> >("vDirection")),
328  v_wDirection(parSet.getParameter<std::vector<int> >("wDirection"));
329  std::vector<double> v_posR(parSet.getParameter<std::vector<double> >("posR")),
330  v_posPhi(parSet.getParameter<std::vector<double> >("posPhi")),
331  v_posEta(parSet.getParameter<std::vector<double> >("posEta")),
332  v_posX(parSet.getParameter<std::vector<double> >("posX")),
333  v_posY(parSet.getParameter<std::vector<double> >("posY")),
334  v_posZ(parSet.getParameter<std::vector<double> >("posZ"));
335 
336  if(!this->checkIntervalsForSectors(sectorCounter,v_posR) || !this->checkIntervalsForSectors(sectorCounter,v_posPhi) ||
337  !this->checkIntervalsForSectors(sectorCounter,v_posEta) || !this->checkIntervalsForSectors(sectorCounter,v_posX) ||
338  !this->checkIntervalsForSectors(sectorCounter,v_posY) || !this->checkIntervalsForSectors(sectorCounter,v_posZ))continue;
339 
340 
341  TrackerSectorStruct tkSector;
342  tkSector.name = sectorName;
343 
344  ReducedTrackerTreeVariables tkTreeVar;
345 
346  //Loop over all Modules
347  for(Int_t module = 0; module < nModules; ++module){
348  tkTree->GetEntry(module);
349 
350  if(sectorCounter==1){
351  tkTreeVar.subdetId = subdetId;
352  tkTreeVar.nStrips = nStrips;
353  tkTreeVar.uDirection = uDirection;
354  tkTreeVar.vDirection = vDirection;
355  tkTreeVar.wDirection = wDirection;
356  m_tkTreeVar_[rawId] = tkTreeVar;
357  }
358 
359  if(!this->checkModuleIds(rawId,v_rawId))continue;
360  if(!this->checkModuleIds(subdetId,v_subdetId))continue;
361  if(!this->checkModuleIds(layer,v_layer))continue;
362  if(!this->checkModuleIds(side,v_side))continue;
363  if(!this->checkModuleIds(half,v_half))continue;
364  if(!this->checkModuleIds(rod,v_rod))continue;
365  if(!this->checkModuleIds(ring,v_ring))continue;
366  if(!this->checkModuleIds(petal,v_petal))continue;
367  if(!this->checkModuleIds(blade,v_blade))continue;
368  if(!this->checkModuleIds(panel,v_panel))continue;
369  if(!this->checkModuleIds(outerInner,v_outerInner))continue;
370  if(!this->checkModuleIds(module,v_module))continue;
371  if(!this->checkModuleIds(nStrips,v_nStrips))continue;
372  if(!this->checkModuleBools(isDoubleSide,v_isDoubleSide))continue;
373  if(!this->checkModuleBools(isRPhi,v_isRPhi))continue;
374  if(!this->checkModuleBools(isStereo,v_isStereo))continue;
375  if(!this->checkModuleDirections(uDirection,v_uDirection))continue;
376  if(!this->checkModuleDirections(vDirection,v_vDirection))continue;
377  if(!this->checkModuleDirections(wDirection,v_wDirection))continue;
378  if(!this->checkModulePositions(posR,v_posR))continue;
379  if(!this->checkModulePositions(posPhi,v_posPhi))continue;
380  if(!this->checkModulePositions(posEta,v_posEta))continue;
381  if(!this->checkModulePositions(posX,v_posX))continue;
382  if(!this->checkModulePositions(posY,v_posY))continue;
383  if(!this->checkModulePositions(posZ,v_posZ))continue;
384 
385  tkSector.v_rawId.push_back(rawId);
386  bool moduleSelected(false);
387  for(std::vector<unsigned int>::const_iterator i_rawId = allSectors.v_rawId.begin();
388  i_rawId != allSectors.v_rawId.end(); ++i_rawId){
389  if(rawId == *i_rawId)moduleSelected = true;
390  }
391  if(!moduleSelected)allSectors.v_rawId.push_back(rawId);
392  }
393 
394  bool isPixel(false);
395  bool isStrip(false);
396  for(std::vector<unsigned int>::const_iterator i_rawId = tkSector.v_rawId.begin();
397  i_rawId != tkSector.v_rawId.end(); ++i_rawId){
398  if(m_tkTreeVar_[*i_rawId].subdetId==PixelSubdetector::PixelBarrel || m_tkTreeVar_[*i_rawId].subdetId==PixelSubdetector::PixelEndcap){
399  isPixel = true;
400  }
401  if(m_tkTreeVar_[*i_rawId].subdetId==StripSubdetector::TIB || m_tkTreeVar_[*i_rawId].subdetId==StripSubdetector::TOB ||
402  m_tkTreeVar_[*i_rawId].subdetId==StripSubdetector::TID || m_tkTreeVar_[*i_rawId].subdetId==StripSubdetector::TEC){
403  isStrip = true;
404  }
405  }
406 
407  if(isPixel && isStrip){
408  edm::LogError("SectorBuilder")<<"Incorrect Sector Definition: there are pixel and strip modules within one sector"
409  <<"\n... sector selection is not applied, sector "<<sectorCounter<<" is not built";
410  continue;
411  }
412  tkSector.isPixel = isPixel;
413 
414  m_tkSector_[sectorCounter] = tkSector;
415  edm::LogInfo("SectorBuilder")<<"There are "<<tkSector.v_rawId.size()<<" Modules in Sector "<<sectorCounter;
416  }
417  this->statistics(allSectors, nModules);
418  return;
419 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
void statistics(const TrackerSectorStruct &, const Int_t) const
bool checkModulePositions(const float, const std::vector< double > &) const
bool checkModuleBools(const bool, const std::vector< unsigned int > &) const
bool checkModuleIds(const unsigned int, const std::vector< unsigned int > &) const
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
bool checkIntervalsForSectors(const unsigned int sectorCounter, const std::vector< double > &) const
bool checkModuleDirections(const int, const std::vector< int > &) const
std::map< unsigned int, ReducedTrackerTreeVariables > m_tkTreeVar_
bool isPixel(HitType hitType)
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
Definition: vlib.h:208
std::vector< unsigned int > v_rawId
void ApeEstimator::setHitSelectionMap ( const std::string &  cutVariable)
private

Definition at line 1570 of file ApeEstimator.cc.

References edm::ParameterSet::getParameter(), m_hitSelection_, and parameterSet_.

Referenced by hitSelection().

1570  {
1572  std::vector<double> v_cutVariable(parSet.getParameter<std::vector<double> >(cutVariable));
1573  if(v_cutVariable.size()%2==1){
1574  edm::LogError("HitSelector")<<"Invalid Hit Selection for "<<cutVariable<<": need even number of arguments (intervals)"
1575  <<"\n ... delete Selection for "<<cutVariable;
1576  v_cutVariable.clear();
1577  m_hitSelection_[cutVariable] = v_cutVariable;
1578  return;
1579  }
1580  m_hitSelection_[cutVariable] = v_cutVariable;
1581  return;
1582 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
std::map< std::string, std::vector< double > > m_hitSelection_
void ApeEstimator::setHitSelectionMapUInt ( const std::string &  cutVariable)
private

Definition at line 1586 of file ApeEstimator.cc.

References edm::ParameterSet::getParameter(), m_hitSelectionUInt_, and parameterSet_.

Referenced by hitSelection().

1586  {
1588  std::vector<unsigned int> v_cutVariable(parSet.getParameter<std::vector<unsigned int> >(cutVariable));
1589  if(v_cutVariable.size()%2==1){
1590  edm::LogError("HitSelector")<<"Invalid Hit Selection for "<<cutVariable<<": need even number of arguments (intervals)"
1591  <<"\n ... delete Selection for "<<cutVariable;
1592  v_cutVariable.clear();
1593  m_hitSelectionUInt_[cutVariable] = v_cutVariable;
1594  return;
1595  }
1596  m_hitSelectionUInt_[cutVariable] = v_cutVariable;
1597  return;
1598 }
T getParameter(std::string const &) const
const edm::ParameterSet parameterSet_
std::map< std::string, std::vector< unsigned int > > m_hitSelectionUInt_
void ApeEstimator::statistics ( const TrackerSectorStruct allSectors,
const Int_t  nModules 
) const
private

Definition at line 487 of file ApeEstimator.cc.

References m_tkSector_, and TrackerSectorStruct::v_rawId.

Referenced by sectorBuilder().

487  {
488  bool commonModules(false);
489  for(std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector = m_tkSector_.begin(); i_sector != m_tkSector_.end(); ++i_sector){
490  std::map<unsigned int,TrackerSectorStruct>::const_iterator i_sector2(i_sector);
491  for(++i_sector2; i_sector2 != m_tkSector_.end(); ++i_sector2){
492  unsigned int nCommonModules(0);
493  for(std::vector<unsigned int>::const_iterator i_module = (*i_sector).second.v_rawId.begin(); i_module != (*i_sector).second.v_rawId.end(); ++i_module){
494  for(std::vector<unsigned int>::const_iterator i_module2 = (*i_sector2).second.v_rawId.begin(); i_module2 != (*i_sector2).second.v_rawId.end(); ++i_module2){
495  if(*i_module2 == *i_module)++nCommonModules;
496  }
497  }
498  if(nCommonModules==0)
499  ;//edm::LogInfo("SectorBuilder")<<"Sector "<<(*i_sector).first<<" and Sector "<<(*i_sector2).first<< " have ZERO Modules in common";
500  else{
501  edm::LogError("SectorBuilder")<<"Sector "<<(*i_sector).first<<" and Sector "<<(*i_sector2).first<< " have "<<nCommonModules<<" Modules in common";
502  commonModules = true;
503  }
504  }
505  }
506  if(static_cast<int>(allSectors.v_rawId.size())==nModules)
507  edm::LogInfo("SectorBuilder")<<"ALL Tracker Modules are contained in the Sectors";
508  else
509  edm::LogWarning("SectorBuilder")<<"There are "<<allSectors.v_rawId.size()<<" Modules in all Sectors"
510  <<" out of "<<nModules<<" Tracker Modules";
511  if(!commonModules)
512  edm::LogInfo("SectorBuilder")<<"There are ZERO modules associated to different sectors, no ambiguities exist";
513  else
514  edm::LogError("SectorBuilder")<<"There are modules associated to different sectors, APE value cannot be assigned reasonably";
515 }
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
std::vector< unsigned int > v_rawId

Member Data Documentation

const bool ApeEstimator::analyzerMode_
private

Definition at line 207 of file ApeEstimator.cc.

Referenced by analyze(), and beginJob().

const bool ApeEstimator::calculateApe_
private

Definition at line 209 of file ApeEstimator.cc.

Referenced by analyze(), beginJob(), endJob(), and fillHistsForApeCalculation().

unsigned int ApeEstimator::counter1
private

Definition at line 211 of file ApeEstimator.cc.

Referenced by ApeEstimator(), endJob(), and fillHitVariables().

unsigned int ApeEstimator::counter2
private

Definition at line 211 of file ApeEstimator.cc.

Referenced by ApeEstimator().

unsigned int ApeEstimator::counter3
private

Definition at line 211 of file ApeEstimator.cc.

Referenced by ApeEstimator().

unsigned int ApeEstimator::counter4
private

Definition at line 211 of file ApeEstimator.cc.

Referenced by ApeEstimator().

unsigned int ApeEstimator::counter5
private

Definition at line 211 of file ApeEstimator.cc.

Referenced by ApeEstimator().

unsigned int ApeEstimator::counter6
private

Definition at line 211 of file ApeEstimator.cc.

Referenced by ApeEstimator().

std::map<std::string,std::vector<double> > ApeEstimator::m_hitSelection_
private

Definition at line 199 of file ApeEstimator.cc.

Referenced by hitSelected(), hitSelection(), and setHitSelectionMap().

std::map<std::string,std::vector<unsigned int> > ApeEstimator::m_hitSelectionUInt_
private

Definition at line 200 of file ApeEstimator.cc.

Referenced by hitSelected(), hitSelection(), and setHitSelectionMapUInt().

std::map<unsigned int, std::pair<double,double> > ApeEstimator::m_resErrBins_
private
std::map<unsigned int, TrackerSectorStruct> ApeEstimator::m_tkSector_
private
std::map<unsigned int, ReducedTrackerTreeVariables> ApeEstimator::m_tkTreeVar_
private

Definition at line 197 of file ApeEstimator.cc.

Referenced by fillHitVariables(), positionAndError2(), and sectorBuilder().

const unsigned int ApeEstimator::maxTracksPerEvent_
private

Definition at line 204 of file ApeEstimator.cc.

Referenced by analyze().

const unsigned int ApeEstimator::minGoodHitsPerTrack_
private

Definition at line 205 of file ApeEstimator.cc.

Referenced by fillHistsForAnalyzerMode(), and fillHistsForApeCalculation().

edm::EDGetTokenT<reco::BeamSpot> ApeEstimator::offlinebeamSpot_
private

Definition at line 193 of file ApeEstimator.cc.

Referenced by analyze().

const edm::ParameterSet ApeEstimator::parameterSet_
private
edm::EDGetTokenT<TrajTrackAssociationCollection> ApeEstimator::tjTagToken_
private

Definition at line 192 of file ApeEstimator.cc.

Referenced by analyze().

TrackerDetectorStruct ApeEstimator::tkDetector_
private

Definition at line 190 of file ApeEstimator.cc.

Referenced by analyze(), bookTrackHists(), and fillHistsForAnalyzerMode().

bool ApeEstimator::trackCut_
private

Definition at line 202 of file ApeEstimator.cc.

Referenced by analyze(), and fillTrackVariables().