CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
LaserAlignment Class Reference

#include <LaserAlignment.h>

Inheritance diagram for LaserAlignment:
edm::one::EDProducer< edm::EndRunProducer > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void beginJob () override
 
void endJob () override
 
void endRunProduce (edm::Run &, const edm::EventSetup &) override
 
 LaserAlignment (edm::ParameterSet const &theConf)
 
void produce (edm::Event &, edm::EventSetup const &) override
 
void testRoutine (void)
 for debugging & testing only, will disappear.. More...
 
 ~LaserAlignment () override
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndRunProducer >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) 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
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
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
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void ApplyATMaskingCorrections (LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
 same for alignment tube modules More...
 
void ApplyEndcapMaskingCorrections (LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &, LASEndcapAlignmentParameterSet &)
 apply endcap correction to masked modules in TEC More...
 
void CalculateNominalCoordinates (void)
 fills a LASGlobalData<LASCoordinateSet> with nominal module positions More...
 
double ConvertAngle (double)
 convert an angle in the [-pi,pi] range to the [0,2*pi] range More...
 
void DumpHitmaps (LASGlobalData< int > &)
 for debugging only, will disappear More...
 
void DumpPosFileSet (LASGlobalData< LASCoordinateSet > &)
 for debugging only, will disappear More...
 
void DumpStripFileSet (LASGlobalData< std::pair< float, float > > &)
 for debugging only, will disappear More...
 
void fillDataProfiles (edm::Event const &, edm::EventSetup const &)
 fill profiles from SiStrip(Raw)Digi container More...
 
void fillDetectorId (void)
 fill hard coded detIds More...
 
void fillPedestalProfiles (edm::ESHandle< SiStripPedestals > &)
 fill pedestals from dbase More...
 
double getTEC2TECNominalBeamOffset (unsigned int, unsigned int, unsigned int)
 returns the nominal beam position (strips) in TEC (AT) for the profileJudge More...
 
double getTIBTOBNominalBeamOffset (unsigned int, unsigned int, unsigned int)
 returns the nominal beam position (strips) in TOB for the profileJudge More...
 
bool isATBeam (void)
 
bool isTECBeam (void)
 decide whether TEC or AT beams have fired More...
 

Private Attributes

LASGlobalData< LASModuleProfilecollectedDataProfiles
 
LASGlobalData< LASModuleProfilecurrentDataProfiles
 data profiles for the current event More...
 
LASGlobalData< unsigned int > detectorId
 
bool enableJudgeZeroFilter
 config switch More...
 
bool firstEvent_
 
edm::ESHandle< GeometricDetgD
 tracker geometry; More...
 
LASGlobalData< int > isAcceptedProfile
 
LASProfileJudge judge
 
unsigned int judgeOverdriveThreshold
 config parameters for the LASProfileJudge More...
 
bool misalignedByRefGeometry
 config switch More...
 
LASGlobalLoop moduleLoop
 
LASGlobalData< LASCoordinateSetnominalCoordinates
 
LASGlobalData< int > numberOfAcceptedProfiles
 
double peakFinderThreshold
 config parameter More...
 
LASGlobalData< LASModuleProfilepedestalProfiles
 
TDirectory * singleModulesDir
 
LASGlobalData< TH1D * > summedHistograms
 
std::vector< unsigned int > tecDoubleHitDetId
 
AlignableTrackertheAlignableTracker
 
std::string theAlignRecordName
 
bool theApplyBeamKinkCorrections
 config switch More...
 
int theCompression
 config parameter (histograms file compression level) More...
 
std::vector< edm::ParameterSettheDigiProducersList
 
bool theDoPedestalSubtraction
 config switch More...
 
std::string theErrorRecordName
 
int theEvents
 counter for the total number of events processed More...
 
TFile * theFile
 Tree stuff. More...
 
std::string theFileName
 config parameter (histograms file output name) More...
 
edm::ESHandle< AlignmentstheGlobalPositionRcd
 
LASConstants theLasConstants
 
std::vector< unsigned int > theMaskAtModules
 
std::vector< unsigned int > theMaskTecModules
 config parameters More...
 
LASGlobalData< std::string > theProfileNames
 
bool theSaveHistograms
 config switch More...
 
bool theSetNominalStrips
 config switch More...
 
bool theStoreToDB
 config switch More...
 
edm::ESHandle< TrackerGeometrytheTrackerGeometry
 
bool theUseMinuitAlgorithm
 config switch More...
 
bool updateFromInputGeometry
 config switch More...
 

Additional Inherited Members

- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
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

Main reconstruction module for the Laser Alignment System

Date
2012/12/26 20:34:44
Revision
1.32
Author
Maarten Thomas
Jan Olzem

Definition at line 83 of file LaserAlignment.h.

Constructor & Destructor Documentation

LaserAlignment::LaserAlignment ( edm::ParameterSet const &  theConf)
explicit

Definition at line 19 of file LaserAlignment.cc.

References egammaCTFFinalFitWithMaterial_cff::alias, gather_cfg::cout, enableJudgeZeroFilter, LASProfileJudge::EnableZeroFilter(), edm::ParameterSet::getParameter(), judge, judgeOverdriveThreshold, misalignedByRefGeometry, peakFinderThreshold, LASProfileJudge::SetOverdriveThreshold(), AlCaHLTBitMon_QueryRunRegistry::string, theApplyBeamKinkCorrections, theCompression, theDoPedestalSubtraction, theFileName, theMaskAtModules, theMaskTecModules, theSaveHistograms, theSetNominalStrips, theStoreToDB, theUseMinuitAlgorithm, and updateFromInputGeometry.

19  :
20  theEvents(0),
21  theDoPedestalSubtraction( theConf.getUntrackedParameter<bool>( "SubtractPedestals", true ) ),
22  theUseMinuitAlgorithm( theConf.getUntrackedParameter<bool>( "RunMinuitAlignmentTubeAlgorithm", false ) ),
23  theApplyBeamKinkCorrections( theConf.getUntrackedParameter<bool>( "ApplyBeamKinkCorrections", true ) ),
24  peakFinderThreshold( theConf.getUntrackedParameter<double>( "PeakFinderThreshold", 10. ) ),
25  enableJudgeZeroFilter( theConf.getUntrackedParameter<bool>( "EnableJudgeZeroFilter", true ) ),
26  judgeOverdriveThreshold( theConf.getUntrackedParameter<unsigned int>( "JudgeOverdriveThreshold", 220 ) ),
27  updateFromInputGeometry( theConf.getUntrackedParameter<bool>( "UpdateFromInputGeometry", false ) ),
28  misalignedByRefGeometry( theConf.getUntrackedParameter<bool>( "MisalignedByRefGeometry", false ) ),
29  theStoreToDB ( theConf.getUntrackedParameter<bool>( "SaveToDbase", false ) ),
30  theDigiProducersList( theConf.getParameter<std::vector<edm::ParameterSet> >( "DigiProducersList" ) ),
31  theSaveHistograms( theConf.getUntrackedParameter<bool>( "SaveHistograms", false ) ),
32  theCompression( theConf.getUntrackedParameter<int>( "ROOTFileCompression", 1 ) ),
33  theFileName( theConf.getUntrackedParameter<std::string>( "ROOTFileName", "test.root" ) ),
34  theMaskTecModules( theConf.getUntrackedParameter<std::vector<unsigned int> >( "MaskTECModules" ) ),
35  theMaskAtModules( theConf.getUntrackedParameter<std::vector<unsigned int> >( "MaskATModules" ) ),
36  theSetNominalStrips( theConf.getUntrackedParameter<bool>( "ForceFitterToNominalStrips", false ) ),
37  theLasConstants( theConf.getUntrackedParameter<std::vector<edm::ParameterSet> >( "LaserAlignmentConstants" ) ),
38  theFile(),
40  theAlignRecordName( "TrackerAlignmentRcd" ),
41  theErrorRecordName( "TrackerAlignmentErrorExtendedRcd" ),
42  firstEvent_(true)
43 {
44 
45 
46  std::cout << std::endl;
47  std::cout << "=============================================================="
48  << "\n=== LaserAlignment module configuration ==="
49  << "\n"
50  << "\n Write histograms to file = " << (theSaveHistograms?"true":"false")
51  << "\n Histogram file name = " << theFileName
52  << "\n Histogram file compression = " << theCompression
53  << "\n Subtract pedestals = " << (theDoPedestalSubtraction?"true":"false")
54  << "\n Run Minuit AT algorithm = " << (theUseMinuitAlgorithm?"true":"false")
55  << "\n Apply beam kink corrections = " << (theApplyBeamKinkCorrections?"true":"false")
56  << "\n Peak Finder Threshold = " << peakFinderThreshold
57  << "\n EnableJudgeZeroFilter = " << (enableJudgeZeroFilter?"true":"false")
58  << "\n JudgeOverdriveThreshold = " << judgeOverdriveThreshold
59  << "\n Update from input geometry = " << (updateFromInputGeometry?"true":"false")
60  << "\n Misalignment from ref geometry = " << (misalignedByRefGeometry?"true":"false")
61  << "\n Number of TEC modules masked = " << theMaskTecModules.size() << " (s. below list if > 0)"
62  << "\n Number of AT modules masked = " << theMaskAtModules.size() << " (s. below list if > 0)"
63  << "\n Store to database = " << (theStoreToDB?"true":"false")
64  << "\n ----------------------------------------------- ----------"
65  << (theSetNominalStrips?"\n Set strips to nominal = true":"\n")
66  << "\n=============================================================" << std::endl;
67 
68  // tell about masked modules
69  if( !theMaskTecModules.empty() ) {
70  std::cout << " ===============================================================================================\n" << std::flush;
71  std::cout << " The following " << theMaskTecModules.size() << " TEC modules have been masked out and will not be considered by the TEC algorithm:\n " << std::flush;
72  for( std::vector<unsigned int>::iterator moduleIt = theMaskTecModules.begin(); moduleIt != theMaskTecModules.end(); ++moduleIt ) {
73  std::cout << *moduleIt << (moduleIt!=--theMaskTecModules.end()?", ":"") << std::flush;
74  }
75  std::cout << std::endl << std::flush;
76  std::cout << " ===============================================================================================\n\n" << std::flush;
77  }
78  if( !theMaskAtModules.empty() ) {
79  std::cout << " ===============================================================================================\n" << std::flush;
80  std::cout << " The following " << theMaskAtModules.size() << " AT modules have been masked out and will not be considered by the AT algorithm:\n " << std::flush;
81  for( std::vector<unsigned int>::iterator moduleIt = theMaskAtModules.begin(); moduleIt != theMaskAtModules.end(); ++moduleIt ) {
82  std::cout << *moduleIt << (moduleIt!=--theMaskAtModules.end()?", ":"") << std::flush;
83  }
84  std::cout << std::endl << std::flush;
85  std::cout << " ===============================================================================================\n\n" << std::flush;
86  }
87 
88 
89 
90  // alias for the Branches in the root files
91  std::string alias ( theConf.getParameter<std::string>("@module_label") );
92 
93  // declare the product to produce
94  produces<TkLasBeamCollection, edm::Transition::EndRun>( "tkLaserBeams" ).setBranchAlias( alias + "TkLasBeamCollection" );
95 
96  // switch judge's zero filter depending on cfg
98 
99  // set the upper threshold for zero suppressed data
101 
102 }
unsigned int judgeOverdriveThreshold
config parameters for the LASProfileJudge
bool theSaveHistograms
config switch
bool misalignedByRefGeometry
config switch
std::string theAlignRecordName
double peakFinderThreshold
config parameter
bool theDoPedestalSubtraction
config switch
std::vector< unsigned int > theMaskTecModules
config parameters
bool theUseMinuitAlgorithm
config switch
TFile * theFile
Tree stuff.
std::vector< edm::ParameterSet > theDigiProducersList
std::string theFileName
config parameter (histograms file output name)
bool theApplyBeamKinkCorrections
config switch
std::string theErrorRecordName
bool theStoreToDB
config switch
AlignableTracker * theAlignableTracker
int theEvents
counter for the total number of events processed
LASConstants theLasConstants
void SetOverdriveThreshold(unsigned int)
std::vector< unsigned int > theMaskAtModules
int theCompression
config parameter (histograms file compression level)
void EnableZeroFilter(bool)
bool enableJudgeZeroFilter
config switch
LASProfileJudge judge
bool updateFromInputGeometry
config switch
bool theSetNominalStrips
config switch
LaserAlignment::~LaserAlignment ( )
override

Definition at line 111 of file LaserAlignment.cc.

References theAlignableTracker, theFile, and theSaveHistograms.

111  {
112 
113  if ( theSaveHistograms ) theFile->Write();
114  if ( theFile ) { delete theFile; }
115  if ( theAlignableTracker ) { delete theAlignableTracker; }
116 
117 }
bool theSaveHistograms
config switch
TFile * theFile
Tree stuff.
AlignableTracker * theAlignableTracker

Member Function Documentation

void LaserAlignment::ApplyATMaskingCorrections ( LASGlobalData< LASCoordinateSet > &  measuredCoordinates,
LASGlobalData< LASCoordinateSet > &  nominalCoordinates,
LASBarrelAlignmentParameterSet atParameters 
)
private

same for alignment tube modules

loop the list of alignment tube modules to be masked and apply the corrections from the "barrelParameters" to them

Definition at line 1644 of file LaserAlignment.cc.

References detectorId, LASCoordinateSet::GetPhi(), LASAlignmentTubeAlgorithm::GetTEC2TECAlignmentParameterCorrection(), LASGlobalData< T >::GetTEC2TECEntry(), LASAlignmentTubeAlgorithm::GetTIBTOBAlignmentParameterCorrection(), LASGlobalData< T >::GetTIBTOBEntry(), moduleLoop, LASCoordinateSet::SetPhi(), LASGlobalLoop::TEC2TECLoop(), theMaskAtModules, and LASGlobalLoop::TIBTOBLoop().

Referenced by endRunProduce().

1644  {
1645 
1646  // loop the list of modules to be masked
1647  for( std::vector<unsigned int>::iterator moduleIt = theMaskAtModules.begin(); moduleIt != theMaskAtModules.end(); ++moduleIt ) {
1648 
1649  // loop variables
1651  int det, beam, disk, pos;
1652 
1653  // this will calculate the corrections from the alignment parameters
1654  LASAlignmentTubeAlgorithm atAlgorithm;
1655 
1656 
1657  // find the location of the respective module in the container with these loops:
1658 
1659  // first TIB+TOB
1660  det = 2; beam = 0; pos = 0;
1661  do {
1662 
1663  // here we got it
1664  if( detectorId.GetTIBTOBEntry( det, beam, pos ) == *moduleIt ) {
1665 
1666  // the nominal phi value for this module
1667  const double nominalPhi = nominalCoordinates.GetTIBTOBEntry( det, beam, pos ).GetPhi();
1668 
1669  // the offset from the alignment parameters
1670  const double phiCorrection = atAlgorithm.GetTIBTOBAlignmentParameterCorrection( det, beam, pos, nominalCoordinates, atParameters );
1671 
1672  // apply the corrections
1673  measuredCoordinates.GetTIBTOBEntry( det, beam, pos ).SetPhi( nominalPhi - phiCorrection );
1674 
1675  }
1676 
1677  } while ( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1678 
1679 
1680 
1681  // then TEC(AT)
1682  det = 0; beam = 0; disk = 0;
1683  do {
1684 
1685  // here we got it
1686  if( detectorId.GetTEC2TECEntry( det, beam, disk ) == *moduleIt ) {
1687 
1688  // the nominal phi value for this module
1689  const double nominalPhi = nominalCoordinates.GetTEC2TECEntry( det, beam, disk ).GetPhi();
1690 
1691  // the offset from the alignment parameters
1692  const double phiCorrection = atAlgorithm.GetTEC2TECAlignmentParameterCorrection( det, beam, disk, nominalCoordinates, atParameters );
1693 
1694  // apply the corrections
1695  measuredCoordinates.GetTEC2TECEntry( det, beam, disk ).SetPhi( nominalPhi - phiCorrection );
1696 
1697  }
1698 
1699  } while ( moduleLoop.TEC2TECLoop( det, beam, disk ) );
1700 
1701  }
1702 
1703 }
void SetPhi(double aPhi)
double GetPhi(void) const
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
double GetTEC2TECAlignmentParameterCorrection(int, int, int, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
std::vector< unsigned int > theMaskAtModules
LASGlobalData< unsigned int > detectorId
bool TIBTOBLoop(int &, int &, int &) const
double GetTIBTOBAlignmentParameterCorrection(int, int, int, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
LASGlobalLoop moduleLoop
void LaserAlignment::ApplyEndcapMaskingCorrections ( LASGlobalData< LASCoordinateSet > &  measuredCoordinates,
LASGlobalData< LASCoordinateSet > &  nominalCoordinates,
LASEndcapAlignmentParameterSet endcapParameters 
)
private

apply endcap correction to masked modules in TEC

loop the list of endcap modules to be masked and apply the corrections from the "endcapParameters" to them

Definition at line 1600 of file LaserAlignment.cc.

References detectorId, LASEndcapAlgorithm::GetAlignmentParameterCorrection(), LASCoordinateSet::GetPhi(), LASGlobalData< T >::GetTECEntry(), moduleLoop, relativeConstraints::ring, LASCoordinateSet::SetPhi(), LASGlobalLoop::TECLoop(), and theMaskTecModules.

Referenced by endRunProduce().

1600  {
1601 
1602  // loop the list of modules to be masked
1603  for( std::vector<unsigned int>::iterator moduleIt = theMaskTecModules.begin(); moduleIt != theMaskTecModules.end(); ++moduleIt ) {
1604 
1605  // loop variables
1607  int det, ring, beam, disk;
1608 
1609  // this will calculate the corrections from the alignment parameters
1610  LASEndcapAlgorithm endcapAlgorithm;
1611 
1612  // find the location of the respective module in the container with this loop
1613  det = 0; ring = 0; beam = 0; disk = 0;
1614  do {
1615 
1616  // here we got it
1617  if( detectorId.GetTECEntry( det, ring, beam, disk ) == *moduleIt ) {
1618 
1619  // the nominal phi value for this module
1620  const double nominalPhi = nominalCoordinates.GetTECEntry( det, ring, beam, disk ).GetPhi();
1621 
1622  // the offset from the alignment parameters
1623  const double phiCorrection = endcapAlgorithm.GetAlignmentParameterCorrection( det, ring, beam, disk, nominalCoordinates, endcapParameters );
1624 
1625  // apply the corrections
1626  measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhi( nominalPhi - phiCorrection );
1627 
1628  }
1629 
1630  } while ( moduleLoop.TECLoop( det, ring, beam, disk ) );
1631 
1632  }
1633 
1634 }
void SetPhi(double aPhi)
std::vector< unsigned int > theMaskTecModules
config parameters
double GetPhi(void) const
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
double GetAlignmentParameterCorrection(int, int, int, int, LASGlobalData< LASCoordinateSet > &, LASEndcapAlignmentParameterSet &)
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
LASGlobalLoop moduleLoop
void LaserAlignment::beginJob ( void  )
overridevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 126 of file LaserAlignment.cc.

References collectedDataProfiles, currentDataProfiles, Exception, fillDetectorId(), firstEvent_, LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), isAcceptedProfile, moduleLoop, numberOfAcceptedProfiles, pedestalProfiles, relativeConstraints::ring, LASModuleProfile::SetAllValuesTo(), LASGlobalData< T >::SetTEC2TECEntry(), LASGlobalData< T >::SetTECEntry(), LASGlobalData< T >::SetTIBTOBEntry(), singleModulesDir, summedHistograms, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), theCompression, theFile, theFileName, theProfileNames, theSaveHistograms, and LASGlobalLoop::TIBTOBLoop().

126  {
127 
128 
129  // write sumed histograms to file (if selected in cfg)
130  if( theSaveHistograms ) {
131 
132  // creating a new file
133  theFile = new TFile( theFileName.c_str(), "RECREATE", "CMS ROOT file" );
134 
135  // initialize the histograms
136  if ( theFile ) {
137  theFile->SetCompressionLevel(theCompression);
138  singleModulesDir = theFile->mkdir( "single modules" );
139  } else
140  throw cms::Exception( " [LaserAlignment::beginJob]") << " ** ERROR: could not open file:"
141  << theFileName.c_str() << " for writing." << std::endl;
142 
143  }
144 
145  // detector id maps (hard coded)
146  fillDetectorId();
147 
148  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149  // PROFILE, HISTOGRAM & FITFUNCTION INITIALIZATION
150  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
151 
152  // object used to build various strings for names and labels
153  std::stringstream nameBuilder;
154 
155  // loop variables for use with LASGlobalLoop object
156  int det, ring, beam, disk, pos;
157 
158  // loop TEC modules
159  det = 0; ring = 0; beam = 0; disk = 0;
160  do { // loop using LASGlobalLoop functionality
161  // init the profiles
162  pedestalProfiles.GetTECEntry( det, ring, beam, disk ).SetAllValuesTo( 0. );
163  currentDataProfiles.GetTECEntry( det, ring, beam, disk ).SetAllValuesTo( 0. );
164  collectedDataProfiles.GetTECEntry( det, ring, beam, disk ).SetAllValuesTo( 0. );
165 
166  // init the hit maps
167  isAcceptedProfile.SetTECEntry( det, ring, beam, disk, 0 );
168  numberOfAcceptedProfiles.SetTECEntry( det, ring, beam, disk, 0 );
169 
170  // create strings for histo names
171  nameBuilder.clear();
172  nameBuilder.str( "" );
173  nameBuilder << "TEC";
174  if( det == 0 ) nameBuilder << "+"; else nameBuilder << "-";
175  nameBuilder << "_Ring";
176  if( ring == 0 ) nameBuilder << "4"; else nameBuilder << "6";
177  nameBuilder << "_Beam" << beam;
178  nameBuilder << "_Disk" << disk;
179  theProfileNames.SetTECEntry( det, ring, beam, disk, nameBuilder.str() );
180 
181  // init the histograms
182  if( theSaveHistograms ) {
183  nameBuilder << "_Histo";
184  summedHistograms.SetTECEntry( det, ring, beam, disk, new TH1D( nameBuilder.str().c_str(), nameBuilder.str().c_str(), 512, 0, 512 ) );
185  summedHistograms.GetTECEntry( det, ring, beam, disk )->SetDirectory( singleModulesDir );
186  }
187 
188  } while ( moduleLoop.TECLoop( det, ring, beam, disk ) );
189 
190 
191  // TIB & TOB section
192  det = 2; beam = 0; pos = 0;
193  do { // loop using LASGlobalLoop functionality
194  // init the profiles
195  pedestalProfiles.GetTIBTOBEntry( det, beam, pos ).SetAllValuesTo( 0. );
196  currentDataProfiles.GetTIBTOBEntry( det, beam, pos ).SetAllValuesTo( 0. );
197  collectedDataProfiles.GetTIBTOBEntry( det, beam, pos ).SetAllValuesTo( 0. );
198 
199  // init the hit maps
200  isAcceptedProfile.SetTIBTOBEntry( det, beam, pos, 0 );
201  numberOfAcceptedProfiles.SetTIBTOBEntry( det, beam, pos, 0 );
202 
203  // create strings for histo names
204  nameBuilder.clear();
205  nameBuilder.str( "" );
206  if( det == 2 ) nameBuilder << "TIB"; else nameBuilder << "TOB";
207  nameBuilder << "_Beam" << beam;
208  nameBuilder << "_Zpos" << pos;
209 
210  theProfileNames.SetTIBTOBEntry( det, beam, pos, nameBuilder.str() );
211 
212  // init the histograms
213  if( theSaveHistograms ) {
214  nameBuilder << "_Histo";
215  summedHistograms.SetTIBTOBEntry( det, beam, pos, new TH1D( nameBuilder.str().c_str(), nameBuilder.str().c_str(), 512, 0, 512 ) );
216  summedHistograms.GetTIBTOBEntry( det, beam, pos )->SetDirectory( singleModulesDir );
217  }
218 
219  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
220 
221 
222  // TEC2TEC AT section
223  det = 0; beam = 0; disk = 0;
224  do { // loop using LASGlobalLoop functionality
225  // init the profiles
226  pedestalProfiles.GetTEC2TECEntry( det, beam, disk ).SetAllValuesTo( 0. );
227  currentDataProfiles.GetTEC2TECEntry( det, beam, disk ).SetAllValuesTo( 0. );
228  collectedDataProfiles.GetTEC2TECEntry( det, beam, disk ).SetAllValuesTo( 0. );
229 
230  // init the hit maps
231  isAcceptedProfile.SetTEC2TECEntry( det, beam, disk, 0 );
232  numberOfAcceptedProfiles.SetTEC2TECEntry( det, beam, disk, 0 );
233 
234  // create strings for histo names
235  nameBuilder.clear();
236  nameBuilder.str( "" );
237  nameBuilder << "TEC(AT)";
238  if( det == 0 ) nameBuilder << "+"; else nameBuilder << "-";
239  nameBuilder << "_Beam" << beam;
240  nameBuilder << "_Disk" << disk;
241  theProfileNames.SetTEC2TECEntry( det, beam, disk, nameBuilder.str() );
242 
243  // init the histograms
244  if( theSaveHistograms ) {
245  nameBuilder << "_Histo";
246  summedHistograms.SetTEC2TECEntry( det, beam, disk, new TH1D( nameBuilder.str().c_str(), nameBuilder.str().c_str(), 512, 0, 512 ) );
247  summedHistograms.GetTEC2TECEntry( det, beam, disk )->SetDirectory( singleModulesDir );
248  }
249 
250  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
251 
252  firstEvent_ = true;
253 }
void SetTEC2TECEntry(int subdetector, int beam, int tecDisk, T)
bool theSaveHistograms
config switch
LASGlobalData< int > numberOfAcceptedProfiles
void SetAllValuesTo(const double &)
LASGlobalData< LASModuleProfile > currentDataProfiles
data profiles for the current event
TFile * theFile
Tree stuff.
LASGlobalData< int > isAcceptedProfile
LASGlobalData< TH1D * > summedHistograms
TDirectory * singleModulesDir
bool TEC2TECLoop(int &, int &, int &) const
std::string theFileName
config parameter (histograms file output name)
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
void SetTIBTOBEntry(int subdetector, int beam, int tibTobPosition, T)
LASGlobalData< LASModuleProfile > pedestalProfiles
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
LASGlobalData< std::string > theProfileNames
LASGlobalData< LASModuleProfile > collectedDataProfiles
void fillDetectorId(void)
fill hard coded detIds
int theCompression
config parameter (histograms file compression level)
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
void SetTECEntry(int subdetector, int tecRing, int beam, int tecDisk, T)
LASGlobalLoop moduleLoop
void LaserAlignment::CalculateNominalCoordinates ( void  )
private

fills a LASGlobalData<LASCoordinateSet> with nominal module positions

Definition at line 1359 of file LaserAlignment.cc.

References moduleLoop, nominalCoordinates, relativeConstraints::ring, LASGlobalData< T >::SetTEC2TECEntry(), LASGlobalData< T >::SetTECEntry(), LASGlobalData< T >::SetTIBTOBEntry(), LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), and LASGlobalLoop::TIBTOBLoop().

Referenced by endRunProduce().

1359  {
1360 
1361  //
1362  // hard coded data yet...
1363  //
1364 
1365  // nominal phi values of tec beam / alignment tube hits (parameter is beam 0-7)
1366  const double tecPhiPositions[8] = { 0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486 }; // new values calculated by maple
1367  const double atPhiPositions[8] = { 0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784 }; // new values calculated by maple
1368 
1369  // nominal r values (mm) of hits
1370  const double tobRPosition = 600.;
1371  const double tibRPosition = 514.;
1372  const double tecRPosition[2] = { 564., 840. }; // ring 4,6
1373 
1374  // nominal z values (mm) of hits in barrel (parameter is pos 0-6)
1375  const double tobZPosition[6] = { 1040., 580., 220., -140., -500., -860. };
1376  const double tibZPosition[6] = { 620., 380., 180., -100., -340., -540. };
1377 
1378  // nominal z values (mm) of hits in tec (parameter is disk 0-8); FOR TEC-: (* -1.)
1379  const double tecZPosition[9] = { 1322.5, 1462.5, 1602.5, 1742.5, 1882.5, 2057.5, 2247.5, 2452.5, 2667.5 };
1380 
1381 
1382  //
1383  // now we fill these into the nominalCoordinates container;
1384  // errors are zero for nominal values..
1385  //
1386 
1387  // loop object and its variables
1389  int det, ring, beam, disk, pos;
1390 
1391 
1392  // TEC+- section
1393  det = 0; ring = 0, beam = 0; disk = 0;
1394  do {
1395 
1396  if( det == 0 ) { // this is TEC+
1397  nominalCoordinates.SetTECEntry( det, ring, beam, disk, LASCoordinateSet( tecPhiPositions[beam], 0., tecRPosition[ring], 0., tecZPosition[disk], 0. ) );
1398  }
1399  else { // now TEC-
1400  nominalCoordinates.SetTECEntry( det, ring, beam, disk, LASCoordinateSet( tecPhiPositions[beam], 0., tecRPosition[ring], 0., -1. * tecZPosition[disk], 0. ) ); // just * -1.
1401  }
1402 
1403  } while( moduleLoop.TECLoop( det, ring, beam, disk ) );
1404 
1405 
1406 
1407  // TIB & TOB section
1408  det = 2; beam = 0; pos = 0;
1409  do {
1410  if( det == 2 ) { // this is TIB
1411  nominalCoordinates.SetTIBTOBEntry( det, beam, pos, LASCoordinateSet( atPhiPositions[beam], 0., tibRPosition, 0., tibZPosition[pos], 0. ) );
1412  }
1413  else { // now TOB
1414  nominalCoordinates.SetTIBTOBEntry( det, beam, pos, LASCoordinateSet( atPhiPositions[beam], 0., tobRPosition, 0., tobZPosition[pos], 0. ) );
1415  }
1416 
1417  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1418 
1419 
1420 
1421 
1422  // TEC2TEC AT section
1423  det = 0; beam = 0; disk = 0;
1424  do {
1425 
1426  if( det == 0 ) { // this is TEC+, ring4 only
1427  nominalCoordinates.SetTEC2TECEntry( det, beam, disk, LASCoordinateSet( atPhiPositions[beam], 0., tecRPosition[0], 0., tecZPosition[disk], 0. ) );
1428  }
1429  else { // now TEC-
1430  nominalCoordinates.SetTEC2TECEntry( det, beam, disk, LASCoordinateSet( atPhiPositions[beam], 0., tecRPosition[0], 0., -1. * tecZPosition[disk], 0. ) ); // just * -1.
1431  }
1432 
1433  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
1434 
1435 
1436 }
void SetTEC2TECEntry(int subdetector, int beam, int tecDisk, T)
bool TEC2TECLoop(int &, int &, int &) const
void SetTIBTOBEntry(int subdetector, int beam, int tibTobPosition, T)
LASGlobalData< LASCoordinateSet > nominalCoordinates
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
void SetTECEntry(int subdetector, int tecRing, int beam, int tecDisk, T)
LASGlobalLoop moduleLoop
double LaserAlignment::ConvertAngle ( double  angle)
private

convert an angle in the [-pi,pi] range to the [0,2*pi] range

convert an angle in the [-pi,pi] range to the [0,2*pi] range

Definition at line 1446 of file LaserAlignment.cc.

References angle(), Exception, and M_PI.

Referenced by endRunProduce().

1446  {
1447 
1448  if( angle < -1. * M_PI || angle > M_PI ) {
1449  throw cms::Exception(" [LaserAlignment::ConvertAngle] ") << "** ERROR: Called with illegal input angle: " << angle << "." << std::endl;
1450  }
1451 
1452  if( angle >= 0. ) return angle;
1453  else return( angle + 2. * M_PI );
1454 
1455 }
#define M_PI
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
void LaserAlignment::DumpHitmaps ( LASGlobalData< int > &  numberOfAcceptedProfiles)
private

for debugging only, will disappear

Definition at line 1540 of file LaserAlignment.cc.

References gather_cfg::cout, and LASGlobalData< T >::GetTECEntry().

Referenced by endRunProduce().

1540  {
1541 
1542  std::cout << " [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC+:" << std::endl;
1543  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1544  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1545 
1546  for( int beam = 0; beam < 8; ++beam ) {
1547  std::cout << " beam" << beam << ":";
1548  for( int disk = 0; disk < 9; ++disk ) {
1549  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry( 0, 0, beam, disk );
1550  }
1551  std::cout << std::endl;
1552  }
1553 
1554  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1555  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1556 
1557  for( int beam = 0; beam < 8; ++beam ) {
1558  std::cout << " beam" << beam << ":";
1559  for( int disk = 0; disk < 9; ++disk ) {
1560  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry( 0, 1, beam, disk );
1561  }
1562  std::cout << std::endl;
1563  }
1564 
1565  std::cout << " [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC-:" << std::endl;
1566  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1567  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1568 
1569  for( int beam = 0; beam < 8; ++beam ) {
1570  std::cout << " beam" << beam << ":";
1571  for( int disk = 0; disk < 9; ++disk ) {
1572  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry( 1, 0, beam, disk );
1573  }
1574  std::cout << std::endl;
1575  }
1576 
1577  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1578  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1579 
1580  for( int beam = 0; beam < 8; ++beam ) {
1581  std::cout << " beam" << beam << ":";
1582  for( int disk = 0; disk < 9; ++disk ) {
1583  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry( 1, 1, beam, disk );
1584  }
1585  std::cout << std::endl;
1586  }
1587 
1588  std::cout << " [LaserAlignment::DumpHitmaps] -- End of dump." << std::endl << std::endl;
1589 
1590 }
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
void LaserAlignment::DumpPosFileSet ( LASGlobalData< LASCoordinateSet > &  coordinates)
private

for debugging only, will disappear

debug only, will disappear

Definition at line 1464 of file LaserAlignment.cc.

References gather_cfg::cout, LASCoordinateSet::GetPhi(), LASCoordinateSet::GetPhiError(), LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), heppy_loop::loop, relativeConstraints::ring, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), and LASGlobalLoop::TIBTOBLoop().

1464  {
1465 
1467  int det, ring, beam, disk, pos;
1468 
1469  std:: cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- Dump: " << std::endl;
1470 
1471  // TEC INTERNAL
1472  det = 0; ring = 0; beam = 0; disk = 0;
1473  do {
1474  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t" << coordinates.GetTECEntry( det, ring, beam, disk ).GetPhi() << "\t" << coordinates.GetTECEntry( det, ring, beam, disk ).GetPhiError() << std::endl;
1475  } while ( loop.TECLoop( det, ring, beam, disk ) );
1476 
1477  // TIBTOB
1478  det = 2; beam = 0; pos = 0;
1479  do {
1480  std::cout << "POS " << det << "\t" << beam << "\t" << pos << "\t" << "-1" << "\t" << coordinates.GetTIBTOBEntry( det, beam, pos ).GetPhi() << "\t" << coordinates.GetTIBTOBEntry( det, beam, pos ).GetPhiError() << std::endl;
1481  } while( loop.TIBTOBLoop( det, beam, pos ) );
1482 
1483  // TEC2TEC
1484  det = 0; beam = 0; disk = 0;
1485  do {
1486  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t" << "-1" << "\t" << coordinates.GetTEC2TECEntry( det, beam, disk ).GetPhi() << "\t" << coordinates.GetTEC2TECEntry( det, beam, disk ).GetPhiError() << std::endl;
1487  } while( loop.TEC2TECLoop( det, beam, disk ) );
1488 
1489  std:: cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- End dump: " << std::endl;
1490 
1491 }
double GetPhi(void) const
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
double GetPhiError(void) const
void LaserAlignment::DumpStripFileSet ( LASGlobalData< std::pair< float, float > > &  measuredStripPositions)
private

for debugging only, will disappear

Definition at line 1500 of file LaserAlignment.cc.

References gather_cfg::cout, heppy_loop::loop, relativeConstraints::ring, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), and LASGlobalLoop::TIBTOBLoop().

1500  {
1501 
1503  int det, ring, beam, disk, pos;
1504 
1505  std:: cout << std::endl << " [LaserAlignment::DumpStripFileSet] -- Dump: " << std::endl;
1506 
1507  // TEC INTERNAL
1508  det = 0; ring = 0; beam = 0; disk = 0;
1509  do {
1510  std::cout << "STRIP " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).first
1511  << "\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).second << std::endl;
1512  } while ( loop.TECLoop( det, ring, beam, disk ) );
1513 
1514  // TIBTOB
1515  det = 2; beam = 0; pos = 0;
1516  do {
1517  std::cout << "STRIP " << det << "\t" << beam << "\t" << pos << "\t" << "-1" << "\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).first
1518  << "\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).second << std::endl;
1519  } while( loop.TIBTOBLoop( det, beam, pos ) );
1520 
1521  // TEC2TEC
1522  det = 0; beam = 0; disk = 0;
1523  do {
1524  std::cout << "STRIP " << det << "\t" << beam << "\t" << disk << "\t" << "-1" << "\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first
1525  << "\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).second << std::endl;
1526  } while( loop.TEC2TECLoop( det, beam, disk ) );
1527 
1528  std:: cout << std::endl << " [LaserAlignment::DumpStripFileSet] -- End dump: " << std::endl;
1529 
1530 
1531 }
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
void LaserAlignment::endJob ( void  )
overridevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 967 of file LaserAlignment.cc.

Referenced by o2olib.O2ORunMgr::executeJob().

967  {
968 }
void LaserAlignment::endRunProduce ( edm::Run theRun,
const edm::EventSetup theSetup 
)
override

laser hit section for trackbased interface

due to the peculiar order of beams in TkLasBeamCollection, we cannot use the LASGlobalLoop object here

Definition at line 469 of file LaserAlignment.cc.

References AlignableTracker::alignmentErrors(), AlignableTracker::alignments(), ApplyATMaskingCorrections(), LASGeometryUpdater::ApplyBeamKinkCorrections(), ApplyEndcapMaskingCorrections(), PV3DBase< T, PVType, FrameType >::barePhi(), cond::service::PoolDBOutputService::beginOfTime(), CalculateNominalCoordinates(), LASAlignmentTubeAlgorithm::CalculateParameters(), LASBarrelAlgorithm::CalculateParameters(), LASEndcapAlgorithm::CalculateParameters(), collectedDataProfiles, ConvertAngle(), gather_cfg::cout, detectorId, DumpHitmaps(), LASGeometryUpdater::EndcapUpdate(), LASPeakFinder::FindPeakIn(), LASGlobalData< T >::GetTEC2TECEntry(), getTEC2TECNominalBeamOffset(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), getTIBTOBNominalBeamOffset(), TrackerGeometry::idToDet(), edm::Service< T >::isAvailable(), align_cfg::iteration, laserBeams, misalignedByRefGeometry, moduleLoop, eostools::move(), nominalCoordinates, numberOfAcceptedProfiles, peakFinderThreshold, LASBarrelAlignmentParameterSet::Print(), LASEndcapAlignmentParameterSet::Print(), TkLasBeam::push_back(), edm::Run::put(), relativeConstraints::ring, LASPeakFinder::SetAmplitudeThreshold(), LASGeometryUpdater::SetMisalignmentFromRefGeometry(), LASCoordinateSet::SetPhi(), LASCoordinateSet::SetPhiError(), LASGeometryUpdater::SetReverseDirection(), LASGlobalData< T >::SetTEC2TECEntry(), LASGlobalData< T >::SetTECEntry(), LASGlobalData< T >::SetTIBTOBEntry(), summedHistograms, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), theAlignableTracker, theAlignRecordName, theApplyBeamKinkCorrections, theErrorRecordName, theEvents, theLasConstants, theMaskAtModules, theMaskTecModules, theSetNominalStrips, theStoreToDB, theTrackerGeometry, theUseMinuitAlgorithm, LASGlobalLoop::TIBTOBLoop(), LASGeometryUpdater::TrackerUpdate(), updateFromInputGeometry, and cond::service::PoolDBOutputService::writeOne().

469  {
470 
471 
472  std::cout << " [LaserAlignment::endRun] -- Total number of events processed: " << theEvents << std::endl;
473 
474  // for debugging only..
476 
477  // index variables for the LASGlobalLoop objects
478  int det, ring, beam, disk, pos;
479 
480  // measured positions container for the algorithms
481  LASGlobalData<LASCoordinateSet> measuredCoordinates;
482 
483  // fitted peak positions in units of strips (pair for value,error)
484  LASGlobalData<std::pair<float,float> > measuredStripPositions;
485 
486  // the peak finder, a pair (pos/posErr in units of strips) for its results, and the success confirmation
487  LASPeakFinder peakFinder;
489  std::pair<double,double> peakFinderResults;
490  bool isGoodFit;
491 
492  // tracker geom. object for calculating the global beam positions
493  const TrackerGeometry& theTracker( *theTrackerGeometry );
494 
495  // fill LASGlobalData<LASCoordinateSet> nominalCoordinates
497 
498  // for determining the phi errors
499  // ErrorFrameTransformer errorTransformer; // later...
500 
501 
502 
503 
504 
505  // do the fits for TEC+- internal
506  det = 0; ring = 0; beam = 0; disk = 0;
507  do {
508 
509  // do the fit
510  isGoodFit = peakFinder.FindPeakIn( collectedDataProfiles.GetTECEntry( det, ring, beam, disk ), peakFinderResults,
511  summedHistograms.GetTECEntry( det, ring, beam, disk ), 0 ); // offset is 0 for TEC
512 
513  // now we have the measured positions in units of strips.
514  if( !isGoodFit ) std::cout << " [LaserAlignment::endRun] ** WARNING: Fit failed for TEC det: "
515  << det << ", ring: " << ring << ", beam: " << beam << ", disk: " << disk
516  << " (id: " << detectorId.GetTECEntry( det, ring, beam, disk ) << ")." << std::endl;
517 
518 
519 
520  // <- here we will later implement the kink corrections
521 
522  // access the tracker geometry for this module
523  const DetId theDetId( detectorId.GetTECEntry( det, ring, beam, disk ) );
524  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
525 
526  if (theStripDet) {
527  // first, set the measured coordinates to their nominal values
528  measuredCoordinates.SetTECEntry( det, ring, beam, disk, nominalCoordinates.GetTECEntry( det, ring, beam, disk ) );
529 
530  if( isGoodFit ) { // convert strip position to global phi and replace the nominal phi value/error
531 
532  measuredStripPositions.GetTECEntry( det, ring, beam, disk ) = peakFinderResults;
533  const float positionInStrips = theSetNominalStrips ? 256. : peakFinderResults.first; // implementation of "ForceFitterToNominalStrips" config parameter
534  const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
535  measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhi( ConvertAngle( globalPoint.barePhi() ) );
536 
537  // const GlobalError& globalError = errorTransformer.transform( theStripDet->specificTopology().localError( peakFinderResults.first, pow( peakFinderResults.second, 2 ) ), theStripDet->surface() );
538  // measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhiError( globalError.phierr( globalPoint ) );
539  measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhiError( 0.00046 ); // PRELIMINARY ESTIMATE
540 
541  }
542  else { // keep nominal position (middle-of-module) but set a giant phi error so that the module can be ignored by the alignment algorithm
543  measuredStripPositions.GetTECEntry( det, ring, beam, disk ) = std::pair<float,float>( 256., 1000. );
544  const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( 256. ) );
545  measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhi( ConvertAngle( globalPoint.barePhi() ) );
546  measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhiError( 1000. );
547  }
548  }
549 
550  } while( moduleLoop.TECLoop( det, ring, beam, disk ) );
551 
552 
553 
554 
555  // do the fits for TIB/TOB
556  det = 2; beam = 0; pos = 0;
557  do {
558 
559  // do the fit
560  isGoodFit = peakFinder.FindPeakIn( collectedDataProfiles.GetTIBTOBEntry( det, beam, pos ), peakFinderResults,
561  summedHistograms.GetTIBTOBEntry( det, beam, pos ), getTIBTOBNominalBeamOffset( det, beam, pos ) );
562 
563  // now we have the measured positions in units of strips.
564  if( !isGoodFit ) std::cout << " [LaserAlignment::endJob] ** WARNING: Fit failed for TIB/TOB det: "
565  << det << ", beam: " << beam << ", pos: " << pos
566  << " (id: " << detectorId.GetTIBTOBEntry( det, beam, pos ) << ")." << std::endl;
567 
568 
569  // <- here we will later implement the kink corrections
570 
571  // access the tracker geometry for this module
572  const DetId theDetId( detectorId.GetTIBTOBEntry( det, beam, pos ) );
573  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
574 
575  if (theStripDet) {
576  // first, set the measured coordinates to their nominal values
577  measuredCoordinates.SetTIBTOBEntry( det, beam, pos, nominalCoordinates.GetTIBTOBEntry( det, beam, pos ) );
578 
579  if( isGoodFit ) { // convert strip position to global phi and replace the nominal phi value/error
580  measuredStripPositions.GetTIBTOBEntry( det, beam, pos ) = peakFinderResults;
581  const float positionInStrips = theSetNominalStrips ? 256. + getTIBTOBNominalBeamOffset( det, beam, pos ) : peakFinderResults.first; // implementation of "ForceFitterToNominalStrips" config parameter
582  const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
583  measuredCoordinates.GetTIBTOBEntry( det, beam, pos ).SetPhi( ConvertAngle( globalPoint.barePhi() ) );
584  measuredCoordinates.GetTIBTOBEntry( det, beam, pos ).SetPhiError( 0.00028 ); // PRELIMINARY ESTIMATE
585  }
586  else { // keep nominal position but set a giant phi error so that the module can be ignored by the alignment algorithm
587  measuredStripPositions.GetTIBTOBEntry( det, beam, pos ) = std::pair<float,float>( 256. + getTIBTOBNominalBeamOffset( det, beam, pos ), 1000. );
588  const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( 256. + getTIBTOBNominalBeamOffset( det, beam, pos ) ) );
589  measuredCoordinates.GetTIBTOBEntry( det, beam, pos ).SetPhi( ConvertAngle( globalPoint.barePhi() ) );
590  measuredCoordinates.GetTIBTOBEntry( det, beam, pos ).SetPhiError( 1000. );
591  }
592  }
593 
594  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
595 
596 
597 
598 
599  // do the fits for TEC AT
600  det = 0; beam = 0; disk = 0;
601  do {
602 
603  // do the fit
604  isGoodFit = peakFinder.FindPeakIn( collectedDataProfiles.GetTEC2TECEntry( det, beam, disk ), peakFinderResults,
605  summedHistograms.GetTEC2TECEntry( det, beam, disk ), getTEC2TECNominalBeamOffset( det, beam, disk ) );
606  // now we have the positions in units of strips.
607  if( !isGoodFit ) std::cout << " [LaserAlignment::endRun] ** WARNING: Fit failed for TEC2TEC det: "
608  << det << ", beam: " << beam << ", disk: " << disk
609  << " (id: " << detectorId.GetTEC2TECEntry( det, beam, disk ) << ")." << std::endl;
610 
611 
612  // <- here we will later implement the kink corrections
613 
614  // access the tracker geometry for this module
615  const DetId theDetId( detectorId.GetTEC2TECEntry( det, beam, disk ) );
616  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
617 
618  if (theStripDet) {
619  // first, set the measured coordinates to their nominal values
620  measuredCoordinates.SetTEC2TECEntry( det, beam, disk, nominalCoordinates.GetTEC2TECEntry( det, beam, disk ) );
621 
622  if( isGoodFit ) { // convert strip position to global phi and replace the nominal phi value/error
623  measuredStripPositions.GetTEC2TECEntry( det, beam, disk ) = peakFinderResults;
624  const float positionInStrips = theSetNominalStrips ? 256. + getTEC2TECNominalBeamOffset( det, beam, disk ) : peakFinderResults.first; // implementation of "ForceFitterToNominalStrips" config parameter
625  const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
626  measuredCoordinates.GetTEC2TECEntry( det, beam, disk ).SetPhi( ConvertAngle( globalPoint.barePhi() ) );
627  measuredCoordinates.GetTEC2TECEntry( det, beam, disk ).SetPhiError( 0.00047 ); // PRELIMINARY ESTIMATE
628  }
629  else { // keep nominal position but set a giant phi error so that the module can be ignored by the alignment algorithm
630  measuredStripPositions.GetTEC2TECEntry( det, beam, disk ) = std::pair<float,float>( 256. + getTEC2TECNominalBeamOffset( det, beam, disk ), 1000. );
631  const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( 256. + getTEC2TECNominalBeamOffset( det, beam, disk ) ) );
632  measuredCoordinates.GetTEC2TECEntry( det, beam, disk ).SetPhi( ConvertAngle( globalPoint.barePhi() ) );
633  measuredCoordinates.GetTEC2TECEntry( det, beam, disk ).SetPhiError( 1000. );
634  }
635  }
636 
637  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
638 
639 
640 
641 
642 
643 
644 
645  // see what we got (for debugging)
646  // DumpStripFileSet( measuredStripPositions );
647  // DumpPosFileSet( measuredCoordinates );
648 
649 
650 
651 
652 
653 
654  // CALCULATE PARAMETERS AND UPDATE DB OBJECT
655  // for beam kink corrections, reconstructing the geometry and updating the db object
657 
658  // apply all beam corrections
659  if( theApplyBeamKinkCorrections ) geometryUpdater.ApplyBeamKinkCorrections( measuredCoordinates );
660 
661  // if we start with input geometry instead of IDEAL,
662  // reverse the adjustments in the AlignableTracker object
663  if( updateFromInputGeometry ) geometryUpdater.SetReverseDirection( true );
664 
665  // if we have "virtual" misalignment which is introduced via the reference geometry,
666  // tell the LASGeometryUpdater to reverse x & y adjustments
667  if( misalignedByRefGeometry ) geometryUpdater.SetMisalignmentFromRefGeometry( true );
668 
669  // run the endcap algorithm
670  LASEndcapAlgorithm endcapAlgorithm;
671  LASEndcapAlignmentParameterSet endcapParameters;
672 
673 
674  // this basically sets all the endcap modules to be masked
675  // to their nominal positions (since endcapParameters is overall zero)
676  if( !theMaskTecModules.empty() ) {
677  ApplyEndcapMaskingCorrections( measuredCoordinates, nominalCoordinates, endcapParameters );
678  }
679 
680  // run the algorithm
681  endcapParameters = endcapAlgorithm.CalculateParameters( measuredCoordinates, nominalCoordinates );
682 
683  //
684  // loop to mask out events
685  // DESCRIPTION:
686  //
687 
688  // do this only if there are modules to be masked..
689  if( !theMaskTecModules.empty() ) {
690 
691  const unsigned int nIterations = 30;
692  for( unsigned int iteration = 0; iteration < nIterations; ++iteration ) {
693 
694  // set the endcap modules to be masked to their positions
695  // according to the reconstructed parameters
696  ApplyEndcapMaskingCorrections( measuredCoordinates, nominalCoordinates, endcapParameters );
697 
698  // modifications applied, so re-run the algorithm
699  endcapParameters = endcapAlgorithm.CalculateParameters( measuredCoordinates, nominalCoordinates );
700 
701  }
702 
703  }
704 
705  // these are now final, so:
706  endcapParameters.Print();
707 
708 
709 
710 
711  // do a pre-alignment of the endcaps (TEC2TEC only)
712  // so that the alignment tube algorithms finds orderly disks
713  geometryUpdater.EndcapUpdate( endcapParameters, measuredCoordinates );
714 
715 
716  // the alignment tube algorithms, choose from config
717  LASBarrelAlignmentParameterSet alignmentTubeParameters;
718  // the MINUIT-BASED alignment tube algorithm
719  LASBarrelAlgorithm barrelAlgorithm;
720  // the ANALYTICAL alignment tube algorithm
721  LASAlignmentTubeAlgorithm alignmentTubeAlgorithm;
722 
723 
724  // this basically sets all the modules to be masked
725  // to their nominal positions (since alignmentTubeParameters is overall zero)
726  if( !theMaskAtModules.empty() ) {
727  ApplyATMaskingCorrections( measuredCoordinates, nominalCoordinates, alignmentTubeParameters );
728  }
729 
730  if( theUseMinuitAlgorithm ) {
731  // run the MINUIT-BASED alignment tube algorithm
732  alignmentTubeParameters = barrelAlgorithm.CalculateParameters( measuredCoordinates, nominalCoordinates );
733  }
734  else {
735  // the ANALYTICAL alignment tube algorithm
736  alignmentTubeParameters = alignmentTubeAlgorithm.CalculateParameters( measuredCoordinates, nominalCoordinates );
737  }
738 
739 
740 
741  //
742  // loop to mask out events
743  // DESCRIPTION:
744  //
745 
746  // do this only if there are modules to be masked..
747  if( !theMaskAtModules.empty() ) {
748 
749  const unsigned int nIterations = 30;
750  for( unsigned int iteration = 0; iteration < nIterations; ++iteration ) {
751 
752  // set the AT modules to be masked to their positions
753  // according to the reconstructed parameters
754  ApplyATMaskingCorrections( measuredCoordinates, nominalCoordinates, alignmentTubeParameters );
755 
756  // modifications applied, so re-run the algorithm
757  if( theUseMinuitAlgorithm ) {
758  alignmentTubeParameters = barrelAlgorithm.CalculateParameters( measuredCoordinates, nominalCoordinates );
759  }
760  else {
761  alignmentTubeParameters = alignmentTubeAlgorithm.CalculateParameters( measuredCoordinates, nominalCoordinates );
762  }
763 
764  }
765 
766  }
767 
768 
769  // these are now final, so:
770  alignmentTubeParameters.Print();
771 
772 
773  // combine the results and update the db object
774  geometryUpdater.TrackerUpdate( endcapParameters, alignmentTubeParameters, *theAlignableTracker );
775 
776 
777 
778 
779 
780 
781 
786 
787 
788  // the collection container
789  auto laserBeams = std::make_unique<TkLasBeamCollection>();
790 
791 
792  // first for the endcap internal beams
793  for( det = 0; det < 2; ++det ) {
794  for( ring = 0; ring < 2; ++ring ) {
795  for( beam = 0; beam < 8; ++beam ) {
796 
797  // the beam and its identifier (see TkLasTrackBasedInterface TWiki)
798  TkLasBeam currentBeam( 100 * det + 10 * beam + ring );
799 
800  // order the hits in the beam by increasing z
801  const int firstDisk = det==0 ? 0 : 8;
802  const int lastDisk = det==0 ? 8 : 0;
803 
804  // count upwards or downwards
805  for( disk = firstDisk; det==0 ? disk <= lastDisk : disk >= lastDisk; det==0 ? ++disk : --disk ) {
806 
807  // detId for the SiStripLaserRecHit2D
808  const SiStripDetId theDetId( detectorId.GetTECEntry( det, ring, beam, disk ) );
809 
810  // need this to calculate the localPosition and its error
811  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
812 
813  // the hit container
814  const SiStripLaserRecHit2D currentHit(
815  theStripDet->specificTopology().localPosition( measuredStripPositions.GetTECEntry( det, ring, beam, disk ).first ),
816  theStripDet->specificTopology().localError( measuredStripPositions.GetTECEntry( det, ring, beam, disk ).first, measuredStripPositions.GetTECEntry( det, ring, beam, disk ).second ),
817  theDetId
818  );
819 
820  currentBeam.push_back( currentHit );
821 
822  }
823 
824  laserBeams->push_back( currentBeam );
825 
826  }
827  }
828  }
829 
830 
831 
832  // then, following the convention in TkLasTrackBasedInterface TWiki, the alignment tube beams;
833  // they comprise hits in TIBTOB & TEC2TEC
834 
835  for( beam = 0; beam < 8; ++beam ) {
836 
837  // the beam and its identifier (see TkLasTrackBasedInterface TWiki)
838  TkLasBeam currentBeam( 100 * 2 /*beamGroup=AT=2*/ + 10 * beam + 0 /*ring=0*/);
839 
840 
841  // first: tec-
842  det = 1;
843  for( disk = 4; disk >= 0; --disk ) {
844 
845  // detId for the SiStripLaserRecHit2D
846  const SiStripDetId theDetId( detectorId.GetTEC2TECEntry( det, beam, disk ) );
847 
848  // need this to calculate the localPosition and its error
849  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
850 
851  // the hit container
852  const SiStripLaserRecHit2D currentHit(
853  theStripDet->specificTopology().localPosition( measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first ),
854  theStripDet->specificTopology().localError( measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first, measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).second ),
855  theDetId
856  );
857 
858  currentBeam.push_back( currentHit );
859 
860  }
861 
862 
863  // now TIB and TOB in one go
864  for( det = 2; det < 4; ++det ) {
865  for( pos = 5; pos >= 0; --pos ) { // stupidly, pos is defined from +z to -z in LASGlobalLoop
866 
867  // detId for the SiStripLaserRecHit2D
868  const SiStripDetId theDetId( detectorId.GetTIBTOBEntry( det, beam, pos ) );
869 
870  // need this to calculate the localPosition and its error
871  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
872 
873  // the hit container
874  const SiStripLaserRecHit2D currentHit(
875  theStripDet->specificTopology().localPosition( measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).first ),
876  theStripDet->specificTopology().localError( measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).first, measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).second ),
877  theDetId
878  );
879 
880  currentBeam.push_back( currentHit );
881 
882  }
883  }
884 
885 
886  // then: tec+
887  det = 0;
888  for( disk = 0; disk < 5; ++disk ) {
889 
890  // detId for the SiStripLaserRecHit2D
891  const SiStripDetId theDetId( detectorId.GetTEC2TECEntry( det, beam, disk ) );
892 
893  // need this to calculate the localPosition and its error
894  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
895 
896  // the hit container
897  const SiStripLaserRecHit2D currentHit(
898  theStripDet->specificTopology().localPosition( measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first ),
899  theStripDet->specificTopology().localError( measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first, measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).second ),
900  theDetId
901  );
902 
903  currentBeam.push_back( currentHit );
904 
905  }
906 
907 
908 
909  // save this beam to the beamCollection
910  laserBeams->push_back( currentBeam );
911 
912  } // (close beam loop)
913 
914 
915  // now attach the collection to the run
916  theRun.put(std::move(laserBeams), "tkLaserBeams" );
917 
918 
919 
920 
921 
922  // store the estimated alignment parameters into the DB
923  // first get them
924  Alignments* alignments = theAlignableTracker->alignments();
926 
927  if ( theStoreToDB ) {
928 
929  std::cout << " [LaserAlignment::endRun] -- Storing the calculated alignment parameters to the DataBase:" << std::endl;
930 
931  // Call service
933  if( !poolDbService.isAvailable() ) // Die if not available
934  throw cms::Exception( "NotAvailable" ) << "PoolDBOutputService not available";
935 
936  // Store
937 
938  // if ( poolDbService->isNewTagRequest(theAlignRecordName) ) {
939  // poolDbService->createNewIOV<Alignments>( alignments, poolDbService->currentTime(), poolDbService->endOfTime(), theAlignRecordName );
940  // }
941  // else {
942  // poolDbService->appendSinceTime<Alignments>( alignments, poolDbService->currentTime(), theAlignRecordName );
943  // }
944  poolDbService->writeOne<Alignments>( alignments, poolDbService->beginOfTime(), theAlignRecordName );
945 
946  // if ( poolDbService->isNewTagRequest(theErrorRecordName) ) {
947  // poolDbService->createNewIOV<AlignmentErrorsExtended>( alignmentErrors, poolDbService->currentTime(), poolDbService->endOfTime(), theErrorRecordName );
948  // }
949  // else {
950  // poolDbService->appendSinceTime<AlignmentErrorsExtended>( alignmentErrors, poolDbService->currentTime(), theErrorRecordName );
951  // }
952  poolDbService->writeOne<AlignmentErrorsExtended>( alignmentErrors, poolDbService->beginOfTime(), theErrorRecordName );
953 
954  std::cout << " [LaserAlignment::endRun] -- Storing done." << std::endl;
955 
956  }
957 
958 }
void SetTEC2TECEntry(int subdetector, int beam, int tecDisk, T)
void SetPhi(double aPhi)
void SetPhiError(double aPhiError)
void ApplyEndcapMaskingCorrections(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &, LASEndcapAlignmentParameterSet &)
apply endcap correction to masked modules in TEC
bool misalignedByRefGeometry
config switch
std::string theAlignRecordName
double getTIBTOBNominalBeamOffset(unsigned int, unsigned int, unsigned int)
returns the nominal beam position (strips) in TOB for the profileJudge
edm::ESHandle< TrackerGeometry > theTrackerGeometry
double peakFinderThreshold
config parameter
void DumpHitmaps(LASGlobalData< int > &)
for debugging only, will disappear
LASGlobalData< int > numberOfAcceptedProfiles
std::vector< unsigned int > theMaskTecModules
config parameters
bool theUseMinuitAlgorithm
config switch
Handle< TkLasBeamCollection > laserBeams
T barePhi() const
Definition: PV3DBase.h:68
LASGlobalData< TH1D * > summedHistograms
bool FindPeakIn(const LASModuleProfile &, std::pair< double, double > &, TH1D *, const double)
double ConvertAngle(double)
convert an angle in the [-pi,pi] range to the [0,2*pi] range
LASBarrelAlignmentParameterSet CalculateParameters(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &)
bool TEC2TECLoop(int &, int &, int &) const
bool isAvailable() const
Definition: Service.h:40
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
void SetAmplitudeThreshold(double)
bool theApplyBeamKinkCorrections
config switch
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
void SetTIBTOBEntry(int subdetector, int beam, int tibTobPosition, T)
void CalculateNominalCoordinates(void)
fills a LASGlobalData<LASCoordinateSet> with nominal module positions
LASEndcapAlignmentParameterSet CalculateParameters(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &)
std::string theErrorRecordName
bool theStoreToDB
config switch
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
Definition: DetId.h:18
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
LASGlobalData< LASCoordinateSet > nominalCoordinates
AlignableTracker * theAlignableTracker
int theEvents
counter for the total number of events processed
LASBarrelAlignmentParameterSet CalculateParameters(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &)
LASConstants theLasConstants
double getTEC2TECNominalBeamOffset(unsigned int, unsigned int, unsigned int)
returns the nominal beam position (strips) in TEC (AT) for the profileJudge
void put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Run.h:108
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
std::vector< unsigned int > theMaskAtModules
void ApplyATMaskingCorrections(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
same for alignment tube modules
LASGlobalData< LASModuleProfile > collectedDataProfiles
Alignments * alignments() const override
Return alignments, sorted by DetId.
AlignmentErrorsExtended * alignmentErrors() const override
Return alignment errors, sorted by DetId.
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
void SetTECEntry(int subdetector, int tecRing, int beam, int tecDisk, T)
def move(src, dest)
Definition: eostools.py:511
LASGlobalLoop moduleLoop
bool updateFromInputGeometry
config switch
bool theSetNominalStrips
config switch
void LaserAlignment::fillDataProfiles ( edm::Event const &  theEvent,
edm::EventSetup const &  theSetup 
)
private

fill profiles from SiStrip(Raw)Digi container

fills the module profiles (LASGlobalLoop<LASModuleProfile> currentDataProfiles) from the event digi containers, distinguishing between SiStripDigi or SiStripRawDigi.

Definition at line 978 of file LaserAlignment.cc.

References SiStripDigi::adc(), SiStripRawDigi::adc(), edm::DetSetVector< T >::begin(), currentDataProfiles, detectorId, CastorSimpleReconstructor_cfi::digiLabel, EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0::digiProducer, SoftLeptonByDistance_cfi::distance, edm::DetSetVector< T >::end(), Exception, edm::Event::getByLabel(), LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), moduleLoop, relativeConstraints::ring, LASModuleProfile::SetAllValuesTo(), LASModuleProfile::SetValue(), AlCaHLTBitMon_QueryRunRegistry::string, SiStripDigi::strip(), LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), theDigiProducersList, and LASGlobalLoop::TIBTOBLoop().

Referenced by produce().

978  {
979 
980  // two handles for the two different kinds of digis
983 
984  bool isRawDigi = false;
985 
986  // indices for the LASGlobalLoop object
987  int det = 0, ring = 0, beam = 0, disk = 0, pos = 0;
988 
989  // query config set and loop over all PSets in the VPSet
990  for ( std::vector<edm::ParameterSet>::iterator itDigiProducersList = theDigiProducersList.begin(); itDigiProducersList != theDigiProducersList.end(); ++itDigiProducersList ) {
991 
992  std::string digiProducer = itDigiProducersList->getParameter<std::string>( "DigiProducer" );
993  std::string digiLabel = itDigiProducersList->getParameter<std::string>( "DigiLabel" );
994  std::string digiType = itDigiProducersList->getParameter<std::string>( "DigiType" );
995 
996  // now branch according to digi type (raw or processed);
997  // first we go for raw digis => SiStripRawDigi
998  if( digiType == "Raw" ) {
999  theEvent.getByLabel( digiProducer, digiLabel, theStripRawDigis );
1000  isRawDigi = true;
1001  }
1002  else if( digiType == "Processed" ) {
1003  theEvent.getByLabel( digiProducer, digiLabel, theStripDigis );
1004  isRawDigi = false;
1005  }
1006  else {
1007  throw cms::Exception( " [LaserAlignment::fillDataProfiles]") << " ** ERROR: Invalid digi type: \"" << digiType << "\" specified in configuration." << std::endl;
1008  }
1009 
1010 
1011 
1012  // loop TEC internal modules
1013  det = 0; ring = 0; beam = 0; disk = 0;
1014  do {
1015 
1016  // first clear the profile
1017  currentDataProfiles.GetTECEntry( det, ring, beam, disk ).SetAllValuesTo( 0. );
1018 
1019  // retrieve the raw id of that module
1020  const int detRawId = detectorId.GetTECEntry( det, ring, beam, disk );
1021 
1022  if( isRawDigi ) { // we have raw SiStripRawDigis
1023 
1024  // search the digis for the raw id
1025  edm::DetSetVector<SiStripRawDigi>::const_iterator detSetIter = theStripRawDigis->find( detRawId );
1026  if( detSetIter == theStripRawDigis->end() ) {
1027  throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: No raw DetSet found for det: " << detRawId << "." << std::endl;
1028  }
1029 
1030  // fill the digis to the profiles
1031  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1032  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeStart = digiRangeIterator; // save starting positions
1033 
1034  // loop all digis
1035  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator ) {
1036  const SiStripRawDigi& digi = *digiRangeIterator;
1037  const int channel = distance( digiRangeStart, digiRangeIterator );
1038  if ( channel >= 0 && channel < 512 ) currentDataProfiles.GetTECEntry( det, ring, beam, disk ).SetValue( channel, digi.adc() );
1039  else throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: raw digi channel: " << channel << " out of range for det: " << detRawId << "." << std::endl;
1040  }
1041 
1042  }
1043 
1044  else { // we have zero suppressed SiStripDigis
1045 
1046  // search the digis for the raw id
1047  edm::DetSetVector<SiStripDigi>::const_iterator detSetIter = theStripDigis->find( detRawId );
1048 
1049  // processed DetSets may be missing, just skip
1050  if( detSetIter == theStripDigis->end() ) continue;
1051 
1052  // fill the digis to the profiles
1053  edm::DetSet<SiStripDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1054 
1055  for(; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator ) {
1056  const SiStripDigi& digi = *digiRangeIterator;
1057  if ( digi.strip() < 512 ) currentDataProfiles.GetTECEntry( det, ring, beam, disk ).SetValue( digi.strip(), digi.adc() );
1058  else throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: digi strip: " << digi.strip() << " out of range for det: " << detRawId << "." << std::endl;
1059  }
1060 
1061  }
1062 
1063 
1064  } while( moduleLoop.TECLoop( det, ring, beam, disk ) );
1065 
1066 
1067 
1068 
1069 
1070  // loop TIBTOB modules
1071  det = 2; beam = 0; pos = 0;
1072  do {
1073 
1074  // first clear the profile
1076 
1077  // retrieve the raw id of that module
1078  const int detRawId = detectorId.GetTIBTOBEntry( det, beam, pos );
1079 
1080  if( isRawDigi ) { // we have raw SiStripRawDigis
1081 
1082  // search the digis for the raw id
1083  edm::DetSetVector<SiStripRawDigi>::const_iterator detSetIter = theStripRawDigis->find( detRawId );
1084  if( detSetIter == theStripRawDigis->end() ) {
1085  throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: No raw DetSet found for det: " << detRawId << "." << std::endl;
1086  }
1087 
1088  // fill the digis to the profiles
1089  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1090  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeStart = digiRangeIterator; // save starting positions
1091 
1092  // loop all digis
1093  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator ) {
1094  const SiStripRawDigi& digi = *digiRangeIterator;
1095  const int channel = distance( digiRangeStart, digiRangeIterator );
1096  if ( channel >= 0 && channel < 512 ) currentDataProfiles.GetTIBTOBEntry( det, beam, pos ).SetValue( channel, digi.adc() );
1097  else throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: raw digi channel: " << channel << " out of range for det: " << detRawId << "." << std::endl;
1098  }
1099 
1100  }
1101 
1102  else { // we have zero suppressed SiStripDigis
1103 
1104  // search the digis for the raw id
1105  edm::DetSetVector<SiStripDigi>::const_iterator detSetIter = theStripDigis->find( detRawId );
1106 
1107  // processed DetSets may be missing, just skip
1108  if( detSetIter == theStripDigis->end() ) continue;
1109 
1110  // fill the digis to the profiles
1111  edm::DetSet<SiStripDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1112 
1113  for(; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator ) {
1114  const SiStripDigi& digi = *digiRangeIterator;
1115  if ( digi.strip() < 512 ) currentDataProfiles.GetTIBTOBEntry( det, beam, pos ).SetValue( digi.strip(), digi.adc() );
1116  else throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: digi strip: " << digi.strip() << " out of range for det: " << detRawId << "." << std::endl;
1117  }
1118 
1119  }
1120 
1121  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1122 
1123 
1124 
1125  // loop TEC AT modules
1126  det = 0; beam = 0; disk = 0;
1127  do {
1128 
1129  // first clear the profile
1130  currentDataProfiles.GetTEC2TECEntry( det, beam, disk ).SetAllValuesTo( 0. );
1131 
1132  // retrieve the raw id of that module
1133  const int detRawId = detectorId.GetTEC2TECEntry( det, beam, disk );
1134 
1135  if( isRawDigi ) { // we have raw SiStripRawDigis
1136 
1137  // search the digis for the raw id
1138  edm::DetSetVector<SiStripRawDigi>::const_iterator detSetIter = theStripRawDigis->find( detRawId );
1139  if( detSetIter == theStripRawDigis->end() ) {
1140  throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: No raw DetSet found for det: " << detRawId << "." << std::endl;
1141  }
1142 
1143  // fill the digis to the profiles
1144  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1145  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeStart = digiRangeIterator; // save starting positions
1146 
1147  // loop all digis
1148  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator ) {
1149  const SiStripRawDigi& digi = *digiRangeIterator;
1150  const int channel = distance( digiRangeStart, digiRangeIterator );
1151  if ( channel >= 0 && channel < 512 ) currentDataProfiles.GetTEC2TECEntry( det, beam, disk ).SetValue( channel, digi.adc() );
1152  else throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: raw digi channel: " << channel << " out of range for det: " << detRawId << "." << std::endl;
1153  }
1154 
1155  }
1156 
1157  else { // we have zero suppressed SiStripDigis
1158 
1159  // search the digis for the raw id
1160  edm::DetSetVector<SiStripDigi>::const_iterator detSetIter = theStripDigis->find( detRawId );
1161 
1162  // processed DetSets may be missing, just skip
1163  if( detSetIter == theStripDigis->end() ) continue;
1164 
1165  // fill the digis to the profiles
1166  edm::DetSet<SiStripDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1167 
1168  for(; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator ) {
1169  const SiStripDigi& digi = *digiRangeIterator;
1170  if ( digi.strip() < 512 ) currentDataProfiles.GetTEC2TECEntry( det, beam, disk ).SetValue( digi.strip(), digi.adc() );
1171  else throw cms::Exception( "[Laser Alignment::fillDataProfiles]" ) << " ** ERROR: digi strip: " << digi.strip() << " out of range for det: " << detRawId << "." << std::endl;
1172  }
1173 
1174  }
1175 
1176  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
1177 
1178  } // theDigiProducersList loop
1179 
1180 }
const uint16_t & adc() const
void SetAllValuesTo(const double &)
LASGlobalData< LASModuleProfile > currentDataProfiles
data profiles for the current event
std::vector< edm::ParameterSet > theDigiProducersList
const uint16_t & strip() const
Definition: SiStripDigi.h:33
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
A Digi for the silicon strip detector, containing both strip and adc information, and suitable for st...
Definition: SiStripDigi.h:12
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:361
void SetValue(unsigned int theStripNumber, const double &theValue)
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:346
collection_type::const_iterator const_iterator
Definition: DetSet.h:33
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:104
const uint16_t & adc() const
Definition: SiStripDigi.h:34
A Digi for the silicon strip detector, containing only adc information, and suitable for storing raw ...
LASGlobalLoop moduleLoop
void LaserAlignment::fillDetectorId ( void  )
private

fill hard coded detIds

all the detector ids for the LAS modules hard-coded

Definition at line 8 of file LaserAlignmentFillDetId.cc.

References detectorId, LASGlobalData< T >::SetTEC2TECEntry(), LASGlobalData< T >::SetTECEntry(), LASGlobalData< T >::SetTIBTOBEntry(), and tecDoubleHitDetId.

Referenced by beginJob().

8  {
9 
10  // these are the detids of the TEC modules hit
11  // by the AT as well as the TEC beams
12  tecDoubleHitDetId.push_back( 470307208 );
13  tecDoubleHitDetId.push_back( 470323592 );
14  tecDoubleHitDetId.push_back( 470339976 );
15  tecDoubleHitDetId.push_back( 470356360 );
16  tecDoubleHitDetId.push_back( 470372744 );
17  tecDoubleHitDetId.push_back( 470307976 );
18  tecDoubleHitDetId.push_back( 470324360 );
19  tecDoubleHitDetId.push_back( 470340744 );
20  tecDoubleHitDetId.push_back( 470357128 );
21  tecDoubleHitDetId.push_back( 470373512 );
22  tecDoubleHitDetId.push_back( 470308488 );
23  tecDoubleHitDetId.push_back( 470324872 );
24  tecDoubleHitDetId.push_back( 470341256 );
25  tecDoubleHitDetId.push_back( 470357640 );
26  tecDoubleHitDetId.push_back( 470374024 );
27  tecDoubleHitDetId.push_back( 470045064 );
28  tecDoubleHitDetId.push_back( 470061448 );
29  tecDoubleHitDetId.push_back( 470077832 );
30  tecDoubleHitDetId.push_back( 470094216 );
31  tecDoubleHitDetId.push_back( 470110600 );
32  tecDoubleHitDetId.push_back( 470045832 );
33  tecDoubleHitDetId.push_back( 470062216 );
34  tecDoubleHitDetId.push_back( 470078600 );
35  tecDoubleHitDetId.push_back( 470094984 );
36  tecDoubleHitDetId.push_back( 470111368 );
37  tecDoubleHitDetId.push_back( 470046344 );
38  tecDoubleHitDetId.push_back( 470062728 );
39  tecDoubleHitDetId.push_back( 470079112 );
40  tecDoubleHitDetId.push_back( 470095496 );
41  tecDoubleHitDetId.push_back( 470111880 );
42 
43  // now all the modules (above included)
44 
45  // TEC+
46  detectorId.SetTECEntry( 0, 0, 0, 0, 470307208 );
47  detectorId.SetTECEntry( 0, 0, 0, 1, 470323592 );
48  detectorId.SetTECEntry( 0, 0, 0, 2, 470339976 );
49  detectorId.SetTECEntry( 0, 0, 0, 3, 470356360 );
50  detectorId.SetTECEntry( 0, 0, 0, 4, 470372744 );
51  detectorId.SetTECEntry( 0, 0, 0, 5, 470389128 );
52  detectorId.SetTECEntry( 0, 0, 0, 6, 470405512 );
53  detectorId.SetTECEntry( 0, 0, 0, 7, 470421896 );
54  detectorId.SetTECEntry( 0, 0, 0, 8, 470438280 );
55  detectorId.SetTECEntry( 0, 0, 1, 0, 470307464 );
56  detectorId.SetTECEntry( 0, 0, 1, 1, 470323848 );
57  detectorId.SetTECEntry( 0, 0, 1, 2, 470340232 );
58  detectorId.SetTECEntry( 0, 0, 1, 3, 470356616 );
59  detectorId.SetTECEntry( 0, 0, 1, 4, 470373000 );
60  detectorId.SetTECEntry( 0, 0, 1, 5, 470389384 );
61  detectorId.SetTECEntry( 0, 0, 1, 6, 470405768 );
62  detectorId.SetTECEntry( 0, 0, 1, 7, 470422152 );
63  detectorId.SetTECEntry( 0, 0, 1, 8, 470438536 );
64  detectorId.SetTECEntry( 0, 0, 2, 0, 470307720 );
65  detectorId.SetTECEntry( 0, 0, 2, 1, 470324104 );
66  detectorId.SetTECEntry( 0, 0, 2, 2, 470340488 );
67  detectorId.SetTECEntry( 0, 0, 2, 3, 470356872 );
68  detectorId.SetTECEntry( 0, 0, 2, 4, 470373256 );
69  detectorId.SetTECEntry( 0, 0, 2, 5, 470389640 );
70  detectorId.SetTECEntry( 0, 0, 2, 6, 470406024 );
71  detectorId.SetTECEntry( 0, 0, 2, 7, 470422408 );
72  detectorId.SetTECEntry( 0, 0, 2, 8, 470438792 );
73  detectorId.SetTECEntry( 0, 0, 3, 0, 470307976 );
74  detectorId.SetTECEntry( 0, 0, 3, 1, 470324360 );
75  detectorId.SetTECEntry( 0, 0, 3, 2, 470340744 );
76  detectorId.SetTECEntry( 0, 0, 3, 3, 470357128 );
77  detectorId.SetTECEntry( 0, 0, 3, 4, 470373512 );
78  detectorId.SetTECEntry( 0, 0, 3, 5, 470389896 );
79  detectorId.SetTECEntry( 0, 0, 3, 6, 470406280 );
80  detectorId.SetTECEntry( 0, 0, 3, 7, 470422664 );
81  detectorId.SetTECEntry( 0, 0, 3, 8, 470439048 );
82  detectorId.SetTECEntry( 0, 0, 4, 0, 470308232 );
83  detectorId.SetTECEntry( 0, 0, 4, 1, 470324616 );
84  detectorId.SetTECEntry( 0, 0, 4, 2, 470341000 );
85  detectorId.SetTECEntry( 0, 0, 4, 3, 470357384 );
86  detectorId.SetTECEntry( 0, 0, 4, 4, 470373768 );
87  detectorId.SetTECEntry( 0, 0, 4, 5, 470390152 );
88  detectorId.SetTECEntry( 0, 0, 4, 6, 470406536 );
89  detectorId.SetTECEntry( 0, 0, 4, 7, 470422920 );
90  detectorId.SetTECEntry( 0, 0, 4, 8, 470439304 );
91  detectorId.SetTECEntry( 0, 0, 5, 0, 470308488 );
92  detectorId.SetTECEntry( 0, 0, 5, 1, 470324872 );
93  detectorId.SetTECEntry( 0, 0, 5, 2, 470341256 );
94  detectorId.SetTECEntry( 0, 0, 5, 3, 470357640 );
95  detectorId.SetTECEntry( 0, 0, 5, 4, 470374024 );
96  detectorId.SetTECEntry( 0, 0, 5, 5, 470390408 );
97  detectorId.SetTECEntry( 0, 0, 5, 6, 470406792 );
98  detectorId.SetTECEntry( 0, 0, 5, 7, 470423176 );
99  detectorId.SetTECEntry( 0, 0, 5, 8, 470439560 );
100  detectorId.SetTECEntry( 0, 0, 6, 0, 470308744 );
101  detectorId.SetTECEntry( 0, 0, 6, 1, 470325128 );
102  detectorId.SetTECEntry( 0, 0, 6, 2, 470341512 );
103  detectorId.SetTECEntry( 0, 0, 6, 3, 470357896 );
104  detectorId.SetTECEntry( 0, 0, 6, 4, 470374280 );
105  detectorId.SetTECEntry( 0, 0, 6, 5, 470390664 );
106  detectorId.SetTECEntry( 0, 0, 6, 6, 470407048 );
107  detectorId.SetTECEntry( 0, 0, 6, 7, 470423432 );
108  detectorId.SetTECEntry( 0, 0, 6, 8, 470439816 );
109  detectorId.SetTECEntry( 0, 0, 7, 0, 470309000 );
110  detectorId.SetTECEntry( 0, 0, 7, 1, 470325384 );
111  detectorId.SetTECEntry( 0, 0, 7, 2, 470341768 );
112  detectorId.SetTECEntry( 0, 0, 7, 3, 470358152 );
113  detectorId.SetTECEntry( 0, 0, 7, 4, 470374536 );
114  detectorId.SetTECEntry( 0, 0, 7, 5, 470390920 );
115  detectorId.SetTECEntry( 0, 0, 7, 6, 470407304 );
116  detectorId.SetTECEntry( 0, 0, 7, 7, 470423688 );
117  detectorId.SetTECEntry( 0, 0, 7, 8, 470440072 );
118  detectorId.SetTECEntry( 0, 1, 0, 0, 470307272 );
119  detectorId.SetTECEntry( 0, 1, 0, 1, 470323656 );
120  detectorId.SetTECEntry( 0, 1, 0, 2, 470340040 );
121  detectorId.SetTECEntry( 0, 1, 0, 3, 470356424 );
122  detectorId.SetTECEntry( 0, 1, 0, 4, 470372808 );
123  detectorId.SetTECEntry( 0, 1, 0, 5, 470389192 );
124  detectorId.SetTECEntry( 0, 1, 0, 6, 470405576 );
125  detectorId.SetTECEntry( 0, 1, 0, 7, 470421960 );
126  detectorId.SetTECEntry( 0, 1, 0, 8, 470438344 );
127  detectorId.SetTECEntry( 0, 1, 1, 0, 470307528 );
128  detectorId.SetTECEntry( 0, 1, 1, 1, 470323912 );
129  detectorId.SetTECEntry( 0, 1, 1, 2, 470340296 );
130  detectorId.SetTECEntry( 0, 1, 1, 3, 470356680 );
131  detectorId.SetTECEntry( 0, 1, 1, 4, 470373064 );
132  detectorId.SetTECEntry( 0, 1, 1, 5, 470389448 );
133  detectorId.SetTECEntry( 0, 1, 1, 6, 470405832 );
134  detectorId.SetTECEntry( 0, 1, 1, 7, 470422216 );
135  detectorId.SetTECEntry( 0, 1, 1, 8, 470438600 );
136  detectorId.SetTECEntry( 0, 1, 2, 0, 470307784 );
137  detectorId.SetTECEntry( 0, 1, 2, 1, 470324168 );
138  detectorId.SetTECEntry( 0, 1, 2, 2, 470340552 );
139  detectorId.SetTECEntry( 0, 1, 2, 3, 470356936 );
140  detectorId.SetTECEntry( 0, 1, 2, 4, 470373320 );
141  detectorId.SetTECEntry( 0, 1, 2, 5, 470389704 );
142  detectorId.SetTECEntry( 0, 1, 2, 6, 470406088 );
143  detectorId.SetTECEntry( 0, 1, 2, 7, 470422472 );
144  detectorId.SetTECEntry( 0, 1, 2, 8, 470438856 );
145  detectorId.SetTECEntry( 0, 1, 3, 0, 470308040 );
146  detectorId.SetTECEntry( 0, 1, 3, 1, 470324424 );
147  detectorId.SetTECEntry( 0, 1, 3, 2, 470340808 );
148  detectorId.SetTECEntry( 0, 1, 3, 3, 470357192 );
149  detectorId.SetTECEntry( 0, 1, 3, 4, 470373576 );
150  detectorId.SetTECEntry( 0, 1, 3, 5, 470389960 );
151  detectorId.SetTECEntry( 0, 1, 3, 6, 470406344 );
152  detectorId.SetTECEntry( 0, 1, 3, 7, 470422728 );
153  detectorId.SetTECEntry( 0, 1, 3, 8, 470439112 );
154  detectorId.SetTECEntry( 0, 1, 4, 0, 470308296 );
155  detectorId.SetTECEntry( 0, 1, 4, 1, 470324680 );
156  detectorId.SetTECEntry( 0, 1, 4, 2, 470341064 );
157  detectorId.SetTECEntry( 0, 1, 4, 3, 470357448 );
158  detectorId.SetTECEntry( 0, 1, 4, 4, 470373832 );
159  detectorId.SetTECEntry( 0, 1, 4, 5, 470390216 );
160  detectorId.SetTECEntry( 0, 1, 4, 6, 470406600 );
161  detectorId.SetTECEntry( 0, 1, 4, 7, 470422984 );
162  detectorId.SetTECEntry( 0, 1, 4, 8, 470439368 );
163  detectorId.SetTECEntry( 0, 1, 5, 0, 470308552 );
164  detectorId.SetTECEntry( 0, 1, 5, 1, 470324936 );
165  detectorId.SetTECEntry( 0, 1, 5, 2, 470341320 );
166  detectorId.SetTECEntry( 0, 1, 5, 3, 470357704 );
167  detectorId.SetTECEntry( 0, 1, 5, 4, 470374088 );
168  detectorId.SetTECEntry( 0, 1, 5, 5, 470390472 );
169  detectorId.SetTECEntry( 0, 1, 5, 6, 470406856 );
170  detectorId.SetTECEntry( 0, 1, 5, 7, 470423240 );
171  detectorId.SetTECEntry( 0, 1, 5, 8, 470439624 );
172  detectorId.SetTECEntry( 0, 1, 6, 0, 470308808 );
173  detectorId.SetTECEntry( 0, 1, 6, 1, 470325192 );
174  detectorId.SetTECEntry( 0, 1, 6, 2, 470341576 );
175  detectorId.SetTECEntry( 0, 1, 6, 3, 470357960 );
176  detectorId.SetTECEntry( 0, 1, 6, 4, 470374344 );
177  detectorId.SetTECEntry( 0, 1, 6, 5, 470390728 );
178  detectorId.SetTECEntry( 0, 1, 6, 6, 470407112 );
179  detectorId.SetTECEntry( 0, 1, 6, 7, 470423496 );
180  detectorId.SetTECEntry( 0, 1, 6, 8, 470439880 );
181  detectorId.SetTECEntry( 0, 1, 7, 0, 470309064 );
182  detectorId.SetTECEntry( 0, 1, 7, 1, 470325448 );
183  detectorId.SetTECEntry( 0, 1, 7, 2, 470341832 );
184  detectorId.SetTECEntry( 0, 1, 7, 3, 470358216 );
185  detectorId.SetTECEntry( 0, 1, 7, 4, 470374600 );
186  detectorId.SetTECEntry( 0, 1, 7, 5, 470390984 );
187  detectorId.SetTECEntry( 0, 1, 7, 6, 470407368 );
188  detectorId.SetTECEntry( 0, 1, 7, 7, 470423752 );
189  detectorId.SetTECEntry( 0, 1, 7, 8, 470440136 );
190 
191  // TEC-
192  detectorId.SetTECEntry( 1, 0, 0, 0, 470045064 );
193  detectorId.SetTECEntry( 1, 0, 0, 1, 470061448 );
194  detectorId.SetTECEntry( 1, 0, 0, 2, 470077832 );
195  detectorId.SetTECEntry( 1, 0, 0, 3, 470094216 );
196  detectorId.SetTECEntry( 1, 0, 0, 4, 470110600 );
197  detectorId.SetTECEntry( 1, 0, 0, 5, 470126984 );
198  detectorId.SetTECEntry( 1, 0, 0, 6, 470143368 );
199  detectorId.SetTECEntry( 1, 0, 0, 7, 470159752 );
200  detectorId.SetTECEntry( 1, 0, 0, 8, 470176136 );
201  detectorId.SetTECEntry( 1, 0, 1, 0, 470045320 );
202  detectorId.SetTECEntry( 1, 0, 1, 1, 470061704 );
203  detectorId.SetTECEntry( 1, 0, 1, 2, 470078088 );
204  detectorId.SetTECEntry( 1, 0, 1, 3, 470094472 );
205  detectorId.SetTECEntry( 1, 0, 1, 4, 470110856 );
206  detectorId.SetTECEntry( 1, 0, 1, 5, 470127240 );
207  detectorId.SetTECEntry( 1, 0, 1, 6, 470143624 );
208  detectorId.SetTECEntry( 1, 0, 1, 7, 470160008 );
209  detectorId.SetTECEntry( 1, 0, 1, 8, 470176392 );
210  detectorId.SetTECEntry( 1, 0, 2, 0, 470045576 );
211  detectorId.SetTECEntry( 1, 0, 2, 1, 470061960 );
212  detectorId.SetTECEntry( 1, 0, 2, 2, 470078344 );
213  detectorId.SetTECEntry( 1, 0, 2, 3, 470094728 );
214  detectorId.SetTECEntry( 1, 0, 2, 4, 470111112 );
215  detectorId.SetTECEntry( 1, 0, 2, 5, 470127496 );
216  detectorId.SetTECEntry( 1, 0, 2, 6, 470143880 );
217  detectorId.SetTECEntry( 1, 0, 2, 7, 470160264 );
218  detectorId.SetTECEntry( 1, 0, 2, 8, 470176648 );
219  detectorId.SetTECEntry( 1, 0, 3, 0, 470045832 );
220  detectorId.SetTECEntry( 1, 0, 3, 1, 470062216 );
221  detectorId.SetTECEntry( 1, 0, 3, 2, 470078600 );
222  detectorId.SetTECEntry( 1, 0, 3, 3, 470094984 );
223  detectorId.SetTECEntry( 1, 0, 3, 4, 470111368 );
224  detectorId.SetTECEntry( 1, 0, 3, 5, 470127752 );
225  detectorId.SetTECEntry( 1, 0, 3, 6, 470144136 );
226  detectorId.SetTECEntry( 1, 0, 3, 7, 470160520 );
227  detectorId.SetTECEntry( 1, 0, 3, 8, 470176904 );
228  detectorId.SetTECEntry( 1, 0, 4, 0, 470046088 );
229  detectorId.SetTECEntry( 1, 0, 4, 1, 470062472 );
230  detectorId.SetTECEntry( 1, 0, 4, 2, 470078856 );
231  detectorId.SetTECEntry( 1, 0, 4, 3, 470095240 );
232  detectorId.SetTECEntry( 1, 0, 4, 4, 470111624 );
233  detectorId.SetTECEntry( 1, 0, 4, 5, 470128008 );
234  detectorId.SetTECEntry( 1, 0, 4, 6, 470144392 );
235  detectorId.SetTECEntry( 1, 0, 4, 7, 470160776 );
236  detectorId.SetTECEntry( 1, 0, 4, 8, 470177160 );
237  detectorId.SetTECEntry( 1, 0, 5, 0, 470046344 );
238  detectorId.SetTECEntry( 1, 0, 5, 1, 470062728 );
239  detectorId.SetTECEntry( 1, 0, 5, 2, 470079112 );
240  detectorId.SetTECEntry( 1, 0, 5, 3, 470095496 );
241  detectorId.SetTECEntry( 1, 0, 5, 4, 470111880 );
242  detectorId.SetTECEntry( 1, 0, 5, 5, 470128264 );
243  detectorId.SetTECEntry( 1, 0, 5, 6, 470144648 );
244  detectorId.SetTECEntry( 1, 0, 5, 7, 470161032 );
245  detectorId.SetTECEntry( 1, 0, 5, 8, 470177416 );
246  detectorId.SetTECEntry( 1, 0, 6, 0, 470046600 );
247  detectorId.SetTECEntry( 1, 0, 6, 1, 470062984 );
248  detectorId.SetTECEntry( 1, 0, 6, 2, 470079368 );
249  detectorId.SetTECEntry( 1, 0, 6, 3, 470095752 );
250  detectorId.SetTECEntry( 1, 0, 6, 4, 470112136 );
251  detectorId.SetTECEntry( 1, 0, 6, 5, 470128520 );
252  detectorId.SetTECEntry( 1, 0, 6, 6, 470144904 );
253  detectorId.SetTECEntry( 1, 0, 6, 7, 470161288 );
254  detectorId.SetTECEntry( 1, 0, 6, 8, 470177672 );
255  detectorId.SetTECEntry( 1, 0, 7, 0, 470046856 );
256  detectorId.SetTECEntry( 1, 0, 7, 1, 470063240 );
257  detectorId.SetTECEntry( 1, 0, 7, 2, 470079624 );
258  detectorId.SetTECEntry( 1, 0, 7, 3, 470096008 );
259  detectorId.SetTECEntry( 1, 0, 7, 4, 470112392 );
260  detectorId.SetTECEntry( 1, 0, 7, 5, 470128776 );
261  detectorId.SetTECEntry( 1, 0, 7, 6, 470145160 );
262  detectorId.SetTECEntry( 1, 0, 7, 7, 470161544 );
263  detectorId.SetTECEntry( 1, 0, 7, 8, 470177928 );
264  detectorId.SetTECEntry( 1, 1, 0, 0, 470045128 );
265  detectorId.SetTECEntry( 1, 1, 0, 1, 470061512 );
266  detectorId.SetTECEntry( 1, 1, 0, 2, 470077896 );
267  detectorId.SetTECEntry( 1, 1, 0, 3, 470094280 );
268  detectorId.SetTECEntry( 1, 1, 0, 4, 470110664 );
269  detectorId.SetTECEntry( 1, 1, 0, 5, 470127048 );
270  detectorId.SetTECEntry( 1, 1, 0, 6, 470143432 );
271  detectorId.SetTECEntry( 1, 1, 0, 7, 470159816 );
272  detectorId.SetTECEntry( 1, 1, 0, 8, 470176200 );
273  detectorId.SetTECEntry( 1, 1, 1, 0, 470045384 );
274  detectorId.SetTECEntry( 1, 1, 1, 1, 470061768 );
275  detectorId.SetTECEntry( 1, 1, 1, 2, 470078152 );
276  detectorId.SetTECEntry( 1, 1, 1, 3, 470094536 );
277  detectorId.SetTECEntry( 1, 1, 1, 4, 470110920 );
278  detectorId.SetTECEntry( 1, 1, 1, 5, 470127304 );
279  detectorId.SetTECEntry( 1, 1, 1, 6, 470143688 );
280  detectorId.SetTECEntry( 1, 1, 1, 7, 470160072 );
281  detectorId.SetTECEntry( 1, 1, 1, 8, 470176456 );
282  detectorId.SetTECEntry( 1, 1, 2, 0, 470045640 );
283  detectorId.SetTECEntry( 1, 1, 2, 1, 470062024 );
284  detectorId.SetTECEntry( 1, 1, 2, 2, 470078408 );
285  detectorId.SetTECEntry( 1, 1, 2, 3, 470094792 );
286  detectorId.SetTECEntry( 1, 1, 2, 4, 470111176 );
287  detectorId.SetTECEntry( 1, 1, 2, 5, 470127560 );
288  detectorId.SetTECEntry( 1, 1, 2, 6, 470143944 );
289  detectorId.SetTECEntry( 1, 1, 2, 7, 470160328 );
290  detectorId.SetTECEntry( 1, 1, 2, 8, 470176712 );
291  detectorId.SetTECEntry( 1, 1, 3, 0, 470045896 );
292  detectorId.SetTECEntry( 1, 1, 3, 1, 470062280 );
293  detectorId.SetTECEntry( 1, 1, 3, 2, 470078664 );
294  detectorId.SetTECEntry( 1, 1, 3, 3, 470095048 );
295  detectorId.SetTECEntry( 1, 1, 3, 4, 470111432 );
296  detectorId.SetTECEntry( 1, 1, 3, 5, 470127816 );
297  detectorId.SetTECEntry( 1, 1, 3, 6, 470144200 );
298  detectorId.SetTECEntry( 1, 1, 3, 7, 470160584 );
299  detectorId.SetTECEntry( 1, 1, 3, 8, 470176968 );
300  detectorId.SetTECEntry( 1, 1, 4, 0, 470046152 );
301  detectorId.SetTECEntry( 1, 1, 4, 1, 470062536 );
302  detectorId.SetTECEntry( 1, 1, 4, 2, 470078920 );
303  detectorId.SetTECEntry( 1, 1, 4, 3, 470095304 );
304  detectorId.SetTECEntry( 1, 1, 4, 4, 470111688 );
305  detectorId.SetTECEntry( 1, 1, 4, 5, 470128072 );
306  detectorId.SetTECEntry( 1, 1, 4, 6, 470144456 );
307  detectorId.SetTECEntry( 1, 1, 4, 7, 470160840 );
308  detectorId.SetTECEntry( 1, 1, 4, 8, 470177224 );
309  detectorId.SetTECEntry( 1, 1, 5, 0, 470046408 );
310  detectorId.SetTECEntry( 1, 1, 5, 1, 470062792 );
311  detectorId.SetTECEntry( 1, 1, 5, 2, 470079176 );
312  detectorId.SetTECEntry( 1, 1, 5, 3, 470095560 );
313  detectorId.SetTECEntry( 1, 1, 5, 4, 470111944 );
314  detectorId.SetTECEntry( 1, 1, 5, 5, 470128328 );
315  detectorId.SetTECEntry( 1, 1, 5, 6, 470144712 );
316  detectorId.SetTECEntry( 1, 1, 5, 7, 470161096 );
317  detectorId.SetTECEntry( 1, 1, 5, 8, 470177480 );
318  detectorId.SetTECEntry( 1, 1, 6, 0, 470046664 );
319  detectorId.SetTECEntry( 1, 1, 6, 1, 470063048 );
320  detectorId.SetTECEntry( 1, 1, 6, 2, 470079432 );
321  detectorId.SetTECEntry( 1, 1, 6, 3, 470095816 );
322  detectorId.SetTECEntry( 1, 1, 6, 4, 470112200 );
323  detectorId.SetTECEntry( 1, 1, 6, 5, 470128584 );
324  detectorId.SetTECEntry( 1, 1, 6, 6, 470144968 );
325  detectorId.SetTECEntry( 1, 1, 6, 7, 470161352 );
326  detectorId.SetTECEntry( 1, 1, 6, 8, 470177736 );
327  detectorId.SetTECEntry( 1, 1, 7, 0, 470046920 );
328  detectorId.SetTECEntry( 1, 1, 7, 1, 470063304 );
329  detectorId.SetTECEntry( 1, 1, 7, 2, 470079688 );
330  detectorId.SetTECEntry( 1, 1, 7, 3, 470096072 );
331  detectorId.SetTECEntry( 1, 1, 7, 4, 470112456 );
332  detectorId.SetTECEntry( 1, 1, 7, 5, 470128840 );
333  detectorId.SetTECEntry( 1, 1, 7, 6, 470145224 );
334  detectorId.SetTECEntry( 1, 1, 7, 7, 470161608 );
335  detectorId.SetTECEntry( 1, 1, 7, 8, 470177992 );
336 
337  // TIB
338  detectorId.SetTIBTOBEntry( 2, 0, 0, 369174604 );
339  detectorId.SetTIBTOBEntry( 2, 0, 1, 369174600 );
340  detectorId.SetTIBTOBEntry( 2, 0, 2, 369174596 );
341  detectorId.SetTIBTOBEntry( 2, 0, 3, 369170500 );
342  detectorId.SetTIBTOBEntry( 2, 0, 4, 369170504 );
343  detectorId.SetTIBTOBEntry( 2, 0, 5, 369170508 );
344  detectorId.SetTIBTOBEntry( 2, 1, 0, 369174732 );
345  detectorId.SetTIBTOBEntry( 2, 1, 1, 369174728 );
346  detectorId.SetTIBTOBEntry( 2, 1, 2, 369174724 );
347  detectorId.SetTIBTOBEntry( 2, 1, 3, 369170628 );
348  detectorId.SetTIBTOBEntry( 2, 1, 4, 369170632 );
349  detectorId.SetTIBTOBEntry( 2, 1, 5, 369170636 );
350  detectorId.SetTIBTOBEntry( 2, 2, 0, 369174812 );
351  detectorId.SetTIBTOBEntry( 2, 2, 1, 369174808 );
352  detectorId.SetTIBTOBEntry( 2, 2, 2, 369174804 );
353  detectorId.SetTIBTOBEntry( 2, 2, 3, 369170708 );
354  detectorId.SetTIBTOBEntry( 2, 2, 4, 369170712 );
355  detectorId.SetTIBTOBEntry( 2, 2, 5, 369170716 );
356  detectorId.SetTIBTOBEntry( 2, 3, 0, 369174940 );
357  detectorId.SetTIBTOBEntry( 2, 3, 1, 369174936 );
358  detectorId.SetTIBTOBEntry( 2, 3, 2, 369174932 );
359  detectorId.SetTIBTOBEntry( 2, 3, 3, 369170836 );
360  detectorId.SetTIBTOBEntry( 2, 3, 4, 369170840 );
361  detectorId.SetTIBTOBEntry( 2, 3, 5, 369170844 );
362  detectorId.SetTIBTOBEntry( 2, 4, 0, 369175068 );
363  detectorId.SetTIBTOBEntry( 2, 4, 1, 369175064 );
364  detectorId.SetTIBTOBEntry( 2, 4, 2, 369175060 );
365  detectorId.SetTIBTOBEntry( 2, 4, 3, 369170964 );
366  detectorId.SetTIBTOBEntry( 2, 4, 4, 369170968 );
367  detectorId.SetTIBTOBEntry( 2, 4, 5, 369170972 );
368  detectorId.SetTIBTOBEntry( 2, 5, 0, 369175164 );
369  detectorId.SetTIBTOBEntry( 2, 5, 1, 369175160 );
370  detectorId.SetTIBTOBEntry( 2, 5, 2, 369175156 );
371  detectorId.SetTIBTOBEntry( 2, 5, 3, 369171060 );
372  detectorId.SetTIBTOBEntry( 2, 5, 4, 369171064 );
373  detectorId.SetTIBTOBEntry( 2, 5, 5, 369171068 );
374  detectorId.SetTIBTOBEntry( 2, 6, 0, 369175292 );
375  detectorId.SetTIBTOBEntry( 2, 6, 1, 369175288 );
376  detectorId.SetTIBTOBEntry( 2, 6, 2, 369175284 );
377  detectorId.SetTIBTOBEntry( 2, 6, 3, 369171188 );
378  detectorId.SetTIBTOBEntry( 2, 6, 4, 369171192 );
379  detectorId.SetTIBTOBEntry( 2, 6, 5, 369171196 );
380  detectorId.SetTIBTOBEntry( 2, 7, 0, 369175372 );
381  detectorId.SetTIBTOBEntry( 2, 7, 1, 369175368 );
382  detectorId.SetTIBTOBEntry( 2, 7, 2, 369175364 );
383  detectorId.SetTIBTOBEntry( 2, 7, 3, 369171268 );
384  detectorId.SetTIBTOBEntry( 2, 7, 4, 369171272 );
385  detectorId.SetTIBTOBEntry( 2, 7, 5, 369171276 );
386 
387  // TOB
388  detectorId.SetTIBTOBEntry( 3, 0, 0, 436232314 );
389  detectorId.SetTIBTOBEntry( 3, 0, 1, 436232306 );
390  detectorId.SetTIBTOBEntry( 3, 0, 2, 436232298 );
391  detectorId.SetTIBTOBEntry( 3, 0, 3, 436228198 );
392  detectorId.SetTIBTOBEntry( 3, 0, 4, 436228206 );
393  detectorId.SetTIBTOBEntry( 3, 0, 5, 436228214 );
394  detectorId.SetTIBTOBEntry( 3, 1, 0, 436232506 );
395  detectorId.SetTIBTOBEntry( 3, 1, 1, 436232498 );
396  detectorId.SetTIBTOBEntry( 3, 1, 2, 436232490 );
397  detectorId.SetTIBTOBEntry( 3, 1, 3, 436228390 );
398  detectorId.SetTIBTOBEntry( 3, 1, 4, 436228398 );
399  detectorId.SetTIBTOBEntry( 3, 1, 5, 436228406 );
400  detectorId.SetTIBTOBEntry( 3, 2, 0, 436232634 );
401  detectorId.SetTIBTOBEntry( 3, 2, 1, 436232626 );
402  detectorId.SetTIBTOBEntry( 3, 2, 2, 436232618 );
403  detectorId.SetTIBTOBEntry( 3, 2, 3, 436228518 );
404  detectorId.SetTIBTOBEntry( 3, 2, 4, 436228526 );
405  detectorId.SetTIBTOBEntry( 3, 2, 5, 436228534 );
406  detectorId.SetTIBTOBEntry( 3, 3, 0, 436232826 );
407  detectorId.SetTIBTOBEntry( 3, 3, 1, 436232818 );
408  detectorId.SetTIBTOBEntry( 3, 3, 2, 436232810 );
409  detectorId.SetTIBTOBEntry( 3, 3, 3, 436228710 );
410  detectorId.SetTIBTOBEntry( 3, 3, 4, 436228718 );
411  detectorId.SetTIBTOBEntry( 3, 3, 5, 436228726 );
412  detectorId.SetTIBTOBEntry( 3, 4, 0, 436233018 );
413  detectorId.SetTIBTOBEntry( 3, 4, 1, 436233010 );
414  detectorId.SetTIBTOBEntry( 3, 4, 2, 436233002 );
415  detectorId.SetTIBTOBEntry( 3, 4, 3, 436228902 );
416  detectorId.SetTIBTOBEntry( 3, 4, 4, 436228910 );
417  detectorId.SetTIBTOBEntry( 3, 4, 5, 436228918 );
418  detectorId.SetTIBTOBEntry( 3, 5, 0, 436233146 );
419  detectorId.SetTIBTOBEntry( 3, 5, 1, 436233138 );
420  detectorId.SetTIBTOBEntry( 3, 5, 2, 436233130 );
421  detectorId.SetTIBTOBEntry( 3, 5, 3, 436229030 );
422  detectorId.SetTIBTOBEntry( 3, 5, 4, 436229038 );
423  detectorId.SetTIBTOBEntry( 3, 5, 5, 436229046 );
424  detectorId.SetTIBTOBEntry( 3, 6, 0, 436233338 );
425  detectorId.SetTIBTOBEntry( 3, 6, 1, 436233330 );
426  detectorId.SetTIBTOBEntry( 3, 6, 2, 436233322 );
427  detectorId.SetTIBTOBEntry( 3, 6, 3, 436229222 );
428  detectorId.SetTIBTOBEntry( 3, 6, 4, 436229230 );
429  detectorId.SetTIBTOBEntry( 3, 6, 5, 436229238 );
430  detectorId.SetTIBTOBEntry( 3, 7, 0, 436233466 );
431  detectorId.SetTIBTOBEntry( 3, 7, 1, 436233458 );
432  detectorId.SetTIBTOBEntry( 3, 7, 2, 436233450 );
433  detectorId.SetTIBTOBEntry( 3, 7, 3, 436229350 );
434  detectorId.SetTIBTOBEntry( 3, 7, 4, 436229358 );
435  detectorId.SetTIBTOBEntry( 3, 7, 5, 436229366 );
436 
437  // TEC+ AT
438  detectorId.SetTEC2TECEntry( 0, 0, 0, 470307208 );
439  detectorId.SetTEC2TECEntry( 0, 0, 1, 470323592 );
440  detectorId.SetTEC2TECEntry( 0, 0, 2, 470339976 );
441  detectorId.SetTEC2TECEntry( 0, 0, 3, 470356360 );
442  detectorId.SetTEC2TECEntry( 0, 0, 4, 470372744 );
443  detectorId.SetTEC2TECEntry( 0, 1, 0, 470307468 );
444  detectorId.SetTEC2TECEntry( 0, 1, 1, 470323852 );
445  detectorId.SetTEC2TECEntry( 0, 1, 2, 470340236 );
446  detectorId.SetTEC2TECEntry( 0, 1, 3, 470356620 );
447  detectorId.SetTEC2TECEntry( 0, 1, 4, 470373004 );
448  detectorId.SetTEC2TECEntry( 0, 2, 0, 470307716 );
449  detectorId.SetTEC2TECEntry( 0, 2, 1, 470324100 );
450  detectorId.SetTEC2TECEntry( 0, 2, 2, 470340484 );
451  detectorId.SetTEC2TECEntry( 0, 2, 3, 470356868 );
452  detectorId.SetTEC2TECEntry( 0, 2, 4, 470373252 );
453  detectorId.SetTEC2TECEntry( 0, 3, 0, 470307976 );
454  detectorId.SetTEC2TECEntry( 0, 3, 1, 470324360 );
455  detectorId.SetTEC2TECEntry( 0, 3, 2, 470340744 );
456  detectorId.SetTEC2TECEntry( 0, 3, 3, 470357128 );
457  detectorId.SetTEC2TECEntry( 0, 3, 4, 470373512 );
458  detectorId.SetTEC2TECEntry( 0, 4, 0, 470308236 );
459  detectorId.SetTEC2TECEntry( 0, 4, 1, 470324620 );
460  detectorId.SetTEC2TECEntry( 0, 4, 2, 470341004 );
461  detectorId.SetTEC2TECEntry( 0, 4, 3, 470357388 );
462  detectorId.SetTEC2TECEntry( 0, 4, 4, 470373772 );
463  detectorId.SetTEC2TECEntry( 0, 5, 0, 470308488 );
464  detectorId.SetTEC2TECEntry( 0, 5, 1, 470324872 );
465  detectorId.SetTEC2TECEntry( 0, 5, 2, 470341256 );
466  detectorId.SetTEC2TECEntry( 0, 5, 3, 470357640 );
467  detectorId.SetTEC2TECEntry( 0, 5, 4, 470374024 );
468  detectorId.SetTEC2TECEntry( 0, 6, 0, 470308748 );
469  detectorId.SetTEC2TECEntry( 0, 6, 1, 470325132 );
470  detectorId.SetTEC2TECEntry( 0, 6, 2, 470341516 );
471  detectorId.SetTEC2TECEntry( 0, 6, 3, 470357900 );
472  detectorId.SetTEC2TECEntry( 0, 6, 4, 470374284 );
473  detectorId.SetTEC2TECEntry( 0, 7, 0, 470308996 );
474  detectorId.SetTEC2TECEntry( 0, 7, 1, 470325380 );
475  detectorId.SetTEC2TECEntry( 0, 7, 2, 470341764 );
476  detectorId.SetTEC2TECEntry( 0, 7, 3, 470358148 );
477  detectorId.SetTEC2TECEntry( 0, 7, 4, 470374532 );
478 
479  // TEC- AT
480  detectorId.SetTEC2TECEntry( 1, 0, 0, 470045064 );
481  detectorId.SetTEC2TECEntry( 1, 0, 1, 470061448 );
482  detectorId.SetTEC2TECEntry( 1, 0, 2, 470077832 );
483  detectorId.SetTEC2TECEntry( 1, 0, 3, 470094216 );
484  detectorId.SetTEC2TECEntry( 1, 0, 4, 470110600 );
485  detectorId.SetTEC2TECEntry( 1, 1, 0, 470045316 );
486  detectorId.SetTEC2TECEntry( 1, 1, 1, 470061700 );
487  detectorId.SetTEC2TECEntry( 1, 1, 2, 470078084 );
488  detectorId.SetTEC2TECEntry( 1, 1, 3, 470094468 );
489  detectorId.SetTEC2TECEntry( 1, 1, 4, 470110852 );
490  detectorId.SetTEC2TECEntry( 1, 2, 0, 470045580 );
491  detectorId.SetTEC2TECEntry( 1, 2, 1, 470061964 );
492  detectorId.SetTEC2TECEntry( 1, 2, 2, 470078348 );
493  detectorId.SetTEC2TECEntry( 1, 2, 3, 470094732 );
494  detectorId.SetTEC2TECEntry( 1, 2, 4, 470111116 );
495  detectorId.SetTEC2TECEntry( 1, 3, 0, 470045832 );
496  detectorId.SetTEC2TECEntry( 1, 3, 1, 470062216 );
497  detectorId.SetTEC2TECEntry( 1, 3, 2, 470078600 );
498  detectorId.SetTEC2TECEntry( 1, 3, 3, 470094984 );
499  detectorId.SetTEC2TECEntry( 1, 3, 4, 470111368 );
500  detectorId.SetTEC2TECEntry( 1, 4, 0, 470046084 );
501  detectorId.SetTEC2TECEntry( 1, 4, 1, 470062468 );
502  detectorId.SetTEC2TECEntry( 1, 4, 2, 470078852 );
503  detectorId.SetTEC2TECEntry( 1, 4, 3, 470095236 );
504  detectorId.SetTEC2TECEntry( 1, 4, 4, 470111620 );
505  detectorId.SetTEC2TECEntry( 1, 5, 0, 470046344 );
506  detectorId.SetTEC2TECEntry( 1, 5, 1, 470062728 );
507  detectorId.SetTEC2TECEntry( 1, 5, 2, 470079112 );
508  detectorId.SetTEC2TECEntry( 1, 5, 3, 470095496 );
509  detectorId.SetTEC2TECEntry( 1, 5, 4, 470111880 );
510  detectorId.SetTEC2TECEntry( 1, 6, 0, 470046596 );
511  detectorId.SetTEC2TECEntry( 1, 6, 1, 470062980 );
512  detectorId.SetTEC2TECEntry( 1, 6, 2, 470079364 );
513  detectorId.SetTEC2TECEntry( 1, 6, 3, 470095748 );
514  detectorId.SetTEC2TECEntry( 1, 6, 4, 470112132 );
515  detectorId.SetTEC2TECEntry( 1, 7, 0, 470046860 );
516  detectorId.SetTEC2TECEntry( 1, 7, 1, 470063244 );
517  detectorId.SetTEC2TECEntry( 1, 7, 2, 470079628 );
518  detectorId.SetTEC2TECEntry( 1, 7, 3, 470096012 );
519  detectorId.SetTEC2TECEntry( 1, 7, 4, 470112396 );
520 
521 }
void SetTEC2TECEntry(int subdetector, int beam, int tecDisk, T)
std::vector< unsigned int > tecDoubleHitDetId
void SetTIBTOBEntry(int subdetector, int beam, int tibTobPosition, T)
LASGlobalData< unsigned int > detectorId
void SetTECEntry(int subdetector, int tecRing, int beam, int tecDisk, T)
void LaserAlignment::fillPedestalProfiles ( edm::ESHandle< SiStripPedestals > &  pedestalsHandle)
private

fill pedestals from dbase

This function fills the pedestal profiles (LASGlobalData<LASModuleProfiles> pedestalProfiles) from the ESHandle (from file or DB)

Argument: readily connected SiStripPedestals object (get() alredy called) The functionality inside the loops is basically taken from: CommonTools/SiStripZeroSuppression/src/SiStripPedestalsSubtractor.cc

Definition at line 1194 of file LaserAlignment.cc.

References detectorId, SiStripPedestals::getPed(), SiStripPedestals::getRange(), LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), createfilelist::int, moduleLoop, pedestalProfiles, relativeConstraints::ring, LASModuleProfile::SetValue(), digitizers_cfi::strip, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), and LASGlobalLoop::TIBTOBLoop().

Referenced by produce().

1194  {
1195 
1196  int det, ring, beam, disk, pos;
1197 
1198  // loop TEC modules (yet without AT)
1199  det = 0; ring = 0; beam = 0; disk = 0;
1200  do { // loop using LASGlobalLoop functionality
1201  SiStripPedestals::Range pedRange = pedestalsHandle->getRange( detectorId.GetTECEntry( det, ring, beam, disk ) );
1202  for( int strip = 0; strip < 512; ++strip ) {
1203  int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1204  if( thePedestal > 895 ) thePedestal -= 1024;
1205  pedestalProfiles.GetTECEntry( det, ring, beam, disk ).SetValue( strip, thePedestal );
1206  }
1207  } while ( moduleLoop.TECLoop( det, ring, beam, disk ) );
1208 
1209 
1210  // TIB & TOB section
1211  det = 2; beam = 0; pos = 0;
1212  do { // loop using LASGlobalLoop functionality
1213  SiStripPedestals::Range pedRange = pedestalsHandle->getRange( detectorId.GetTIBTOBEntry( det, beam, pos ) );
1214  for( int strip = 0; strip < 512; ++strip ) {
1215  int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1216  if( thePedestal > 895 ) thePedestal -= 1024;
1217  pedestalProfiles.GetTIBTOBEntry( det, beam, pos ).SetValue( strip, thePedestal );
1218  }
1219  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1220 
1221 
1222  // TEC2TEC AT section
1223  det = 0; beam = 0; disk = 0;
1224  do { // loop using LASGlobalLoop functionality
1225  SiStripPedestals::Range pedRange = pedestalsHandle->getRange( detectorId.GetTEC2TECEntry( det, beam, disk ) );
1226  for( int strip = 0; strip < 512; ++strip ) {
1227  int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1228  if( thePedestal > 895 ) thePedestal -= 1024;
1229  pedestalProfiles.GetTEC2TECEntry( det, beam, disk ).SetValue( strip, thePedestal );
1230  }
1231  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
1232 
1233 }
std::pair< ContainerIterator, ContainerIterator > Range
float getPed(const uint16_t &strip, const Range &range) const
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
void SetValue(unsigned int theStripNumber, const double &theValue)
LASGlobalData< LASModuleProfile > pedestalProfiles
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
const Range getRange(const uint32_t &detID) const
LASGlobalLoop moduleLoop
double LaserAlignment::getTEC2TECNominalBeamOffset ( unsigned int  det,
unsigned int  beam,
unsigned int  disk 
)
private

returns the nominal beam position (strips) in TEC (AT) for the profileJudge

not all TEC-AT modules are hit in the center; this func returns the nominal beam offset locally on a module (in strips) for the ProfileJudge and the LASPeakFinder in strips. (offset = middle of module - nominal position)

the hard coded numbers will later be supplied by a special geometry class..

Definition at line 1339 of file LaserAlignment.cc.

References Exception.

Referenced by endRunProduce().

1339  {
1340 
1341  if( det > 1 || beam > 7 || disk > 5 ) {
1342  throw cms::Exception( "[LaserAlignment::getTEC2TECNominalBeamOffset]" ) << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " disk " << disk << "." << std::endl;
1343  }
1344 
1345  const double nominalOffsets[8] = { 0., 2.220, -2.221, 0., 2.214, 0., 2.214, -2.217 };
1346 
1347  if( det == 0 ) return -1. * nominalOffsets[beam];
1348  else return nominalOffsets[beam];
1349 
1350 }
double LaserAlignment::getTIBTOBNominalBeamOffset ( unsigned int  det,
unsigned int  beam,
unsigned int  pos 
)
private

returns the nominal beam position (strips) in TOB for the profileJudge

not all TIB & TOB modules are hit in the center; this func returns the nominal beam offset locally on a module (in strips) for the ProfileJudge and the LASPeakFinder in strips. (offset = middle of module - nominal position)

the hard coded numbers will later be supplied by a special geometry class..

Definition at line 1304 of file LaserAlignment.cc.

References Exception, and or.

Referenced by endRunProduce(), and produce().

1304  {
1305 
1306  if( det < 2 || det > 3 || beam > 7 || pos > 5 ) {
1307  throw cms::Exception( "[LaserAlignment::getTIBTOBNominalBeamOffset]" ) << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " pos " << pos << "." << std::endl;
1308  }
1309 
1310  const double nominalOffsetsTIB[8] = { 0.00035, 2.10687, -2.10827, -0.00173446, 2.10072, -0.00135114, 2.10105, -2.10401 };
1311 
1312  // in tob, modules have alternating orientations along the rods.
1313  // this is described by the following pattern.
1314  // (even more confusing, this pattern is inversed for beams 0, 5, 6, 7)
1315  const int orientationPattern[6] = { -1, 1, 1, -1, -1, 1 };
1316  const double nominalOffsetsTOB[8] = { 0.00217408, 1.58678, 117.733, 119.321, 120.906, 119.328, 117.743, 1.58947 };
1317 
1318 
1319  if( det == 2 ) return( -1. * nominalOffsetsTIB[beam] );
1320 
1321  else {
1322  if( beam == 0 or beam > 4 ) return( nominalOffsetsTOB[beam] * orientationPattern[pos] );
1323  else return( -1. * nominalOffsetsTOB[beam] * orientationPattern[pos] );
1324  }
1325 
1326 }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
bool LaserAlignment::isATBeam ( void  )
private

count useable profiles in TIBTOB, operates on LASGlobalData<bool> LaserAlignment::isAcceptedProfile to allow for more elaborate patterns in the future

Definition at line 1275 of file LaserAlignment.cc.

References gather_cfg::cout, LASGlobalData< T >::GetTIBTOBEntry(), isAcceptedProfile, LogDebug, moduleLoop, and LASGlobalLoop::TIBTOBLoop().

Referenced by produce().

1275  {
1276 
1277  int numberOfProfiles = 0;
1278 
1279  int det = 2; int beam = 0; int pos = 0; // search all TIB/TOB for signals
1280  do {
1281  if( isAcceptedProfile.GetTIBTOBEntry( det, beam, pos ) == 1 ) numberOfProfiles++;
1282  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1283 
1284  LogDebug( "[LaserAlignment::isATBeam]" ) << " Found: " << numberOfProfiles << "hits." << std::endl;
1285  std::cout << " [LaserAlignment::isATBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1286 
1287  if( numberOfProfiles > 10 ) return( true );
1288  return( false );
1289 
1290 }
#define LogDebug(id)
LASGlobalData< int > isAcceptedProfile
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
bool TIBTOBLoop(int &, int &, int &) const
LASGlobalLoop moduleLoop
bool LaserAlignment::isTECBeam ( void  )
private

decide whether TEC or AT beams have fired

count useable profiles in TEC, operates on LASGlobalData<int> LaserAlignment::isAcceptedProfile to allow for more elaborate patterns in the future

Definition at line 1244 of file LaserAlignment.cc.

References gather_cfg::cout, LASGlobalData< T >::GetTECEntry(), isAcceptedProfile, LogDebug, and relativeConstraints::ring.

Referenced by produce().

1244  {
1245 
1246  int numberOfProfiles = 0;
1247 
1248  int ring = 1; // search all ring6 modules for signals
1249  for( int det = 0; det < 2; ++det ) {
1250  for( int beam = 0; beam < 8; ++ beam ) {
1251  for( int disk = 0; disk < 9; ++disk ) {
1252  if( isAcceptedProfile.GetTECEntry( det, ring, beam, disk ) == 1 ) numberOfProfiles++;
1253  }
1254  }
1255  }
1256 
1257  LogDebug( "[LaserAlignment::isTECBeam]" ) << " Found: " << numberOfProfiles << "hits." << std::endl;
1258  std::cout << " [LaserAlignment::isTECBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1259 
1260  if( numberOfProfiles > 10 ) return( true );
1261  return( false );
1262 
1263 }
#define LogDebug(id)
LASGlobalData< int > isAcceptedProfile
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
void LaserAlignment::produce ( edm::Event theEvent,
edm::EventSetup const &  theSetup 
)
overridevirtual

Implements edm::one::EDProducerBase.

Definition at line 263 of file LaserAlignment.cc.

References TrackerGeomBuilderFromGeometricDet::build(), collectedDataProfiles, gather_cfg::cout, currentDataProfiles, detectorId, edm::EventID::event(), fillDataProfiles(), fillPedestalProfiles(), spr::find(), firstEvent_, gD, edm::EventSetup::get(), edm::eventsetup::DependentRecordImplementation< RecordT, ListT >::get(), LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), getTIBTOBNominalBeamOffset(), edm::EventBase::id(), isAcceptedProfile, isATBeam(), LASProfileJudge::IsSignalIn(), isTECBeam(), judge, LASProfileJudge::JudgeProfile(), LogDebug, moduleLoop, numberOfAcceptedProfiles, pedestalProfiles, edm::ESHandle< T >::product(), relativeConstraints::ring, edm::EventID::run(), LASGlobalData< T >::SetTECEntry(), LASGlobalData< T >::SetTIBTOBEntry(), LASGlobalLoop::TEC2TECLoop(), tecDoubleHitDetId, LASGlobalLoop::TECLoop(), theAlignableTracker, theDoPedestalSubtraction, theEvents, theGlobalPositionRcd, theProfileNames, theTrackerGeometry, LASGlobalLoop::TIBTOBLoop(), and updateFromInputGeometry.

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

263  {
264 
265  if (firstEvent_) {
266 
267  //Retrieve tracker topology from geometry
268  edm::ESHandle<TrackerTopology> tTopoHandle;
269  theSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
270  const TrackerTopology* const tTopo = tTopoHandle.product();
271 
272  // access the tracker
273  theSetup.get<TrackerDigiGeometryRecord>().get( theTrackerGeometry );
274  theSetup.get<IdealGeometryRecord>().get( gD );
275 
276  // access pedestals (from db..) if desired
277  edm::ESHandle<SiStripPedestals> pedestalsHandle;
279  theSetup.get<SiStripPedestalsRcd>().get( pedestalsHandle );
280  fillPedestalProfiles( pedestalsHandle );
281  }
282 
283  // global positions
284  // edm::ESHandle<Alignments> theGlobalPositionRcd;
285  theSetup.get<TrackerDigiGeometryRecord>().getRecord<GlobalPositionRcd>().get( theGlobalPositionRcd );
286 
287  // select the reference geometry
288  if( !updateFromInputGeometry ) {
289  // the AlignableTracker object is initialized with the ideal geometry
290  edm::ESHandle<GeometricDet> theGeometricDet;
291  theSetup.get<IdealGeometryRecord>().get(theGeometricDet);
293  theSetup.get<PTrackerParametersRcd>().get( ptp );
294  TrackerGeomBuilderFromGeometricDet trackerBuilder;
295  TrackerGeometry* theRefTracker = trackerBuilder.build(&*theGeometricDet, *ptp, tTopo );
296 
297  theAlignableTracker = new AlignableTracker(&(*theRefTracker), tTopo);
298  }
299  else {
300  // the AlignableTracker object is initialized with the input geometry from DB
302  }
303 
304  firstEvent_ = false;
305  }
306 
307  LogDebug("LaserAlignment") << "==========================================================="
308  << "\n Private analysis of event #"<< theEvent.id().event()
309  << " in run #" << theEvent.id().run();
310 
311 
312  // do the Tracker Statistics to retrieve the current profiles
313  fillDataProfiles( theEvent, theSetup );
314 
315  // index variables for the LASGlobalLoop object
316  int det, ring, beam, disk, pos;
317 
318  //
319  // first pre-loop on selected entries to find out
320  // whether the TEC or the AT beams have fired
321  // (pedestal profiles are left empty if false in cfg)
322  //
323 
324 
325  // TEC+- (only ring 6)
326  ring = 1;
327  for( det = 0; det < 2; ++det ) {
328  for( beam = 0; beam < 8; ++ beam ) {
329  for( disk = 0; disk < 9; ++disk ) {
330  if( judge.IsSignalIn( currentDataProfiles.GetTECEntry( det, ring, beam, disk ) - pedestalProfiles.GetTECEntry( det, ring, beam, disk ), 0 ) ) {
331  isAcceptedProfile.SetTECEntry( det, ring, beam, disk, 1 );
332  }
333  else { // assume no initialization
334  isAcceptedProfile.SetTECEntry( det, ring, beam, disk, 0 );
335  }
336  }
337  }
338  }
339 
340  // TIBTOB
341  det = 2; beam = 0; pos = 0;
342  do {
343  // add current event's data and subtract pedestals
344  if( judge.IsSignalIn( currentDataProfiles.GetTIBTOBEntry( det, beam, pos ) - pedestalProfiles.GetTIBTOBEntry( det, beam, pos ), getTIBTOBNominalBeamOffset( det, beam, pos ) ) ) {
345  isAcceptedProfile.SetTIBTOBEntry( det, beam, pos, 1 );
346  }
347  else { // dto.
348  isAcceptedProfile.SetTIBTOBEntry( det, beam, pos, 0 );
349  }
350 
351  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
352 
353 
354 
355 
356  // now come the beam finders
357  bool isTECMode = isTECBeam();
358  // LogDebug( " [LaserAlignment::produce]" ) << "LaserAlignment::isTECBeam declares this event " << ( isTECMode ? "" : "NOT " ) << "a TEC event." << std::endl;
359  std::cout << " [LaserAlignment::produce] -- LaserAlignment::isTECBeam declares this event " << ( isTECMode ? "" : "NOT " ) << "a TEC event." << std::endl;
360 
361  bool isATMode = isATBeam();
362  // LogDebug( " [LaserAlignment::produce]" ) << "LaserAlignment::isATBeam declares this event " << ( isATMode ? "" : "NOT " ) << "an AT event." << std::endl;
363  std::cout << " [LaserAlignment::produce] -- LaserAlignment::isATBeam declares this event " << ( isATMode ? "" : "NOT " ) << "an AT event." << std::endl;
364 
365 
366 
367 
368  //
369  // now pass the pedestal subtracted profiles to the judge
370  // if they're accepted, add them on the collectedDataProfiles
371  // (pedestal profiles are left empty if false in cfg)
372  //
373 
374 
375  // loop TEC+- modules
376  det = 0; ring = 0; beam = 0; disk = 0;
377  do {
378 
379  LogDebug( "[LaserAlignment::produce]" ) << "Profile is: " << theProfileNames.GetTECEntry( det, ring, beam, disk ) << "." << std::endl;
380 
381  // this now depends on the AT/TEC mode, is this a doubly hit module? -> look for it in vector<int> tecDoubleHitDetId
382  // (ring == 0 not necessary but makes it a little faster)
383  if( ring == 0 && find( tecDoubleHitDetId.begin(), tecDoubleHitDetId.end(), detectorId.GetTECEntry( det, ring, beam, disk ) ) != tecDoubleHitDetId.end() ) {
384 
385  if( isTECMode ) { // add profile to TEC collection
386  // add current event's data and subtract pedestals
387  if( judge.JudgeProfile( currentDataProfiles.GetTECEntry( det, ring, beam, disk ) - pedestalProfiles.GetTECEntry( det, ring, beam, disk ), 0 ) ) {
388  collectedDataProfiles.GetTECEntry( det, ring, beam, disk ) += currentDataProfiles.GetTECEntry( det, ring, beam, disk ) - pedestalProfiles.GetTECEntry( det, ring, beam, disk );
389  numberOfAcceptedProfiles.GetTECEntry( det, ring, beam, disk )++;
390  }
391  }
392  }
393 
394  else { // not a doubly hit module, don't care about the mode
395  // add current event's data and subtract pedestals
396  if( judge.JudgeProfile( currentDataProfiles.GetTECEntry( det, ring, beam, disk ) - pedestalProfiles.GetTECEntry( det, ring, beam, disk ), 0 ) ) {
397  collectedDataProfiles.GetTECEntry( det, ring, beam, disk ) += currentDataProfiles.GetTECEntry( det, ring, beam, disk ) - pedestalProfiles.GetTECEntry( det, ring, beam, disk );
398  numberOfAcceptedProfiles.GetTECEntry( det, ring, beam, disk )++;
399  }
400  }
401 
402  } while( moduleLoop.TECLoop( det, ring, beam, disk ) );
403 
404 
405 
406 
407 
408  // loop TIB/TOB modules
409  det = 2; beam = 0; pos = 0;
410  do {
411 
412  LogDebug( "[LaserAlignment::produce]" ) << "Profile is: " << theProfileNames.GetTIBTOBEntry( det, beam, pos ) << "." << std::endl;
413 
414  // add current event's data and subtract pedestals
415  if( judge.JudgeProfile( currentDataProfiles.GetTIBTOBEntry( det, beam, pos ) - pedestalProfiles.GetTIBTOBEntry( det, beam, pos ), getTIBTOBNominalBeamOffset( det, beam, pos ) ) ) {
416  collectedDataProfiles.GetTIBTOBEntry( det, beam, pos ) += currentDataProfiles.GetTIBTOBEntry( det, beam, pos ) - pedestalProfiles.GetTIBTOBEntry( det, beam, pos );
417  numberOfAcceptedProfiles.GetTIBTOBEntry( det, beam, pos )++;
418  }
419 
420  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
421 
422 
423 
424  // loop TEC2TEC modules
425  det = 0; beam = 0; disk = 0;
426  do {
427 
428  LogDebug( "[LaserAlignment::produce]" ) << "Profile is: " << theProfileNames.GetTEC2TECEntry( det, beam, disk ) << "." << std::endl;
429 
430  // this again depends on the AT/TEC mode, is this a doubly hit module?
431  // (ring == 0 not necessary but makes it a little faster)
432  if( ring == 0 && find( tecDoubleHitDetId.begin(), tecDoubleHitDetId.end(), detectorId.GetTECEntry( det, ring, beam, disk ) ) != tecDoubleHitDetId.end() ) {
433 
434  if( isATMode ) { // add profile to TEC2TEC collection
435  // add current event's data and subtract pedestals
436  if( judge.JudgeProfile( currentDataProfiles.GetTEC2TECEntry( det, beam, disk ) - pedestalProfiles.GetTEC2TECEntry( det, beam, disk ), 0 ) ) {
437  collectedDataProfiles.GetTEC2TECEntry( det, beam, disk ) += currentDataProfiles.GetTEC2TECEntry( det, beam, disk ) - pedestalProfiles.GetTEC2TECEntry( det, beam, disk );
438  numberOfAcceptedProfiles.GetTEC2TECEntry( det, beam, disk )++;
439  }
440  }
441 
442  }
443 
444  else { // not a doubly hit module, don't care about the mode
445  // add current event's data and subtract pedestals
446  if( judge.JudgeProfile( currentDataProfiles.GetTEC2TECEntry( det, beam, disk ) - pedestalProfiles.GetTEC2TECEntry( det, beam, disk ), 0 ) ) {
447  collectedDataProfiles.GetTEC2TECEntry( det, beam, disk ) += currentDataProfiles.GetTEC2TECEntry( det, beam, disk ) - pedestalProfiles.GetTEC2TECEntry( det, beam, disk );
448  numberOfAcceptedProfiles.GetTEC2TECEntry( det, beam, disk )++;
449  }
450  }
451 
452 
453  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
454 
455 
456 
457  // total event number counter
458  theEvents++;
459 
460 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
bool IsSignalIn(const LASModuleProfile &, double)
bool isATBeam(void)
EventNumber_t event() const
Definition: EventID.h:41
void fillDataProfiles(edm::Event const &, edm::EventSetup const &)
fill profiles from SiStrip(Raw)Digi container
bool isTECBeam(void)
decide whether TEC or AT beams have fired
double getTIBTOBNominalBeamOffset(unsigned int, unsigned int, unsigned int)
returns the nominal beam position (strips) in TOB for the profileJudge
edm::ESHandle< TrackerGeometry > theTrackerGeometry
LASGlobalData< int > numberOfAcceptedProfiles
TrackerGeometry * build(const GeometricDet *gd, const PTrackerParameters &ptp, const TrackerTopology *tTopo)
bool theDoPedestalSubtraction
config switch
LASGlobalData< LASModuleProfile > currentDataProfiles
data profiles for the current event
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
LASGlobalData< int > isAcceptedProfile
void fillPedestalProfiles(edm::ESHandle< SiStripPedestals > &)
fill pedestals from dbase
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const
edm::ESHandle< Alignments > theGlobalPositionRcd
bool TEC2TECLoop(int &, int &, int &) const
std::vector< unsigned int > tecDoubleHitDetId
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
bool JudgeProfile(const LASModuleProfile &, double)
void SetTIBTOBEntry(int subdetector, int beam, int tibTobPosition, T)
LASGlobalData< LASModuleProfile > pedestalProfiles
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
AlignableTracker * theAlignableTracker
int theEvents
counter for the total number of events processed
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
LASGlobalData< std::string > theProfileNames
LASGlobalData< LASModuleProfile > collectedDataProfiles
edm::EventID id() const
Definition: EventBase.h:59
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
T const * product() const
Definition: ESHandle.h:86
void SetTECEntry(int subdetector, int tecRing, int beam, int tecDisk, T)
edm::ESHandle< GeometricDet > gD
tracker geometry;
LASGlobalLoop moduleLoop
LASProfileJudge judge
bool updateFromInputGeometry
config switch
void LaserAlignment::testRoutine ( void  )

for debugging & testing only, will disappear..

this function is for debugging and testing only and will disappear..

Definition at line 1713 of file LaserAlignment.cc.

References gather_cfg::cout, DEFINE_FWK_MODULE, detectorId, LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), runTauDisplay::gp, TrackerGeometry::idToDet(), moduleLoop, TCMET_cfi::radius, relativeConstraints::ring, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), theTrackerGeometry, theZ, and LASGlobalLoop::TIBTOBLoop().

1713  {
1714 
1715 
1716  // tracker geom. object for calculating the global beam positions
1717  const TrackerGeometry& theTracker( *theTrackerGeometry );
1718 
1719  const double atPhiPositions[8] = { 0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784 };
1720  const double tecPhiPositions[8] = { 0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486 };
1721  const double zPositions[9] = { 125.0, 139.0, 153.0, 167.0, 181.0, 198.5, 217.5, 238.0, 259.5 };
1722  const double zPositionsTIB[6] = { 62.0, 38.0, 18.0, -10.0, -34.0, -54.0 };
1723  const double zPositionsTOB[6] = { 104.0, 58.0, 22.0, -14.0, -50.0, -86.0 };
1724 
1725  int det, beam, disk, pos, ring;
1726 
1727  // loop TEC+- internal
1728  det = 0; ring = 0; beam = 0; disk = 0;
1729  do {
1730 
1731  const double radius = ring?84.0:56.4;
1732 
1733  // access the tracker geometry for this module
1734  const DetId theDetId( detectorId.GetTECEntry( det, ring, beam, disk ) );
1735  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
1736 
1737  if (theStripDet) {
1738  const GlobalPoint gp( GlobalPoint::Cylindrical( radius, tecPhiPositions[beam], zPositions[disk] ) );
1739 
1740  const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1741  std::cout << "__TEC: " << 256. - theStripDet->specificTopology().strip( lp ) << std::endl;
1742  }
1743 
1744  } while( moduleLoop.TECLoop( det, ring, beam, disk ) );
1745 
1746 
1747  // loop TIBTOB
1748  det = 2; beam = 0; pos = 0;
1749  do {
1750 
1751  const double radius = (det==2?51.4:58.4);
1752  const double theZ = (det==2?zPositionsTIB[pos]:zPositionsTOB[pos]);
1753 
1754  // access the tracker geometry for this module
1755  const DetId theDetId( detectorId.GetTIBTOBEntry( det, beam, pos ) );
1756  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
1757 
1758  if (theStripDet) {
1759  const GlobalPoint gp( GlobalPoint::Cylindrical( radius, atPhiPositions[beam], theZ ) );
1760 
1761  const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1762  std::cout << "__TIBTOB det " << det << " beam " << beam << " pos " << pos << " " << 256. - theStripDet->specificTopology().strip( lp );
1763  std::cout << " " << theStripDet->position().perp()<< std::endl;
1764  }
1765 
1766  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1767 
1768 
1769  // loop TEC2TEC
1770  det = 0; beam = 0; disk = 0;
1771  do {
1772 
1773  const double radius = 56.4;
1774 
1775  // access the tracker geometry for this module
1776  const DetId theDetId( detectorId.GetTEC2TECEntry( det, beam, disk ) );
1777  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTracker.idToDet( theDetId ) );
1778 
1779  if (theStripDet) {
1780  const GlobalPoint gp( GlobalPoint::Cylindrical( radius, atPhiPositions[beam], zPositions[disk] ) );
1781 
1782  const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1783  std::cout << "__TEC2TEC det " << det << " beam " << beam << " disk " << disk << " " << 256. - theStripDet->specificTopology().strip( lp ) << std::endl;
1784  }
1785 
1786  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
1787 
1788 
1789 }
T theZ
edm::ESHandle< TrackerGeometry > theTrackerGeometry
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
Definition: DetId.h:18
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
LASGlobalLoop moduleLoop

Member Data Documentation

LASGlobalData<LASModuleProfile> LaserAlignment::collectedDataProfiles
private

Definition at line 209 of file LaserAlignment.h.

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

LASGlobalData<LASModuleProfile> LaserAlignment::currentDataProfiles
private

data profiles for the current event

Definition at line 206 of file LaserAlignment.h.

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

LASGlobalData<unsigned int> LaserAlignment::detectorId
private
bool LaserAlignment::enableJudgeZeroFilter
private

config switch

Definition at line 156 of file LaserAlignment.h.

Referenced by LaserAlignment().

bool LaserAlignment::firstEvent_
private

Definition at line 246 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

edm::ESHandle<GeometricDet> LaserAlignment::gD
private

tracker geometry;

Definition at line 237 of file LaserAlignment.h.

Referenced by produce().

LASGlobalData<int> LaserAlignment::isAcceptedProfile
private

Definition at line 219 of file LaserAlignment.h.

Referenced by beginJob(), isATBeam(), isTECBeam(), and produce().

LASProfileJudge LaserAlignment::judge
private

Definition at line 191 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

unsigned int LaserAlignment::judgeOverdriveThreshold
private

config parameters for the LASProfileJudge

Definition at line 159 of file LaserAlignment.h.

Referenced by LaserAlignment().

bool LaserAlignment::misalignedByRefGeometry
private

config switch

Definition at line 165 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

LASGlobalLoop LaserAlignment::moduleLoop
private
LASGlobalData<LASCoordinateSet> LaserAlignment::nominalCoordinates
private

Definition at line 226 of file LaserAlignment.h.

Referenced by CalculateNominalCoordinates(), and endRunProduce().

LASGlobalData<int> LaserAlignment::numberOfAcceptedProfiles
private

Definition at line 215 of file LaserAlignment.h.

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

double LaserAlignment::peakFinderThreshold
private

config parameter

Definition at line 153 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

LASGlobalData<LASModuleProfile> LaserAlignment::pedestalProfiles
private

Definition at line 203 of file LaserAlignment.h.

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

TDirectory* LaserAlignment::singleModulesDir
private

Definition at line 234 of file LaserAlignment.h.

Referenced by beginJob().

LASGlobalData<TH1D*> LaserAlignment::summedHistograms
private

Definition at line 223 of file LaserAlignment.h.

Referenced by beginJob(), and endRunProduce().

std::vector<unsigned int> LaserAlignment::tecDoubleHitDetId
private

Definition at line 200 of file LaserAlignment.h.

Referenced by fillDetectorId(), and produce().

AlignableTracker* LaserAlignment::theAlignableTracker
private

Definition at line 242 of file LaserAlignment.h.

Referenced by endRunProduce(), produce(), and ~LaserAlignment().

std::string LaserAlignment::theAlignRecordName
private

Definition at line 244 of file LaserAlignment.h.

Referenced by endRunProduce().

bool LaserAlignment::theApplyBeamKinkCorrections
private

config switch

Definition at line 150 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

int LaserAlignment::theCompression
private

config parameter (histograms file compression level)

Definition at line 177 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

std::vector<edm::ParameterSet> LaserAlignment::theDigiProducersList
private

Definition at line 171 of file LaserAlignment.h.

Referenced by fillDataProfiles().

bool LaserAlignment::theDoPedestalSubtraction
private

config switch

Definition at line 144 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

std::string LaserAlignment::theErrorRecordName
private

Definition at line 244 of file LaserAlignment.h.

Referenced by endRunProduce().

int LaserAlignment::theEvents
private

counter for the total number of events processed

Definition at line 141 of file LaserAlignment.h.

Referenced by endRunProduce(), and produce().

TFile* LaserAlignment::theFile
private

Tree stuff.

Definition at line 233 of file LaserAlignment.h.

Referenced by beginJob(), and ~LaserAlignment().

std::string LaserAlignment::theFileName
private

config parameter (histograms file output name)

Definition at line 180 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

edm::ESHandle<Alignments> LaserAlignment::theGlobalPositionRcd
private

Definition at line 239 of file LaserAlignment.h.

Referenced by produce().

LASConstants LaserAlignment::theLasConstants
private

Definition at line 194 of file LaserAlignment.h.

Referenced by endRunProduce().

std::vector<unsigned int> LaserAlignment::theMaskAtModules
private

Definition at line 184 of file LaserAlignment.h.

Referenced by ApplyATMaskingCorrections(), endRunProduce(), and LaserAlignment().

std::vector<unsigned int> LaserAlignment::theMaskTecModules
private

config parameters

Definition at line 183 of file LaserAlignment.h.

Referenced by ApplyEndcapMaskingCorrections(), endRunProduce(), and LaserAlignment().

LASGlobalData<std::string> LaserAlignment::theProfileNames
private

Definition at line 212 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

bool LaserAlignment::theSaveHistograms
private

config switch

Definition at line 174 of file LaserAlignment.h.

Referenced by beginJob(), LaserAlignment(), and ~LaserAlignment().

bool LaserAlignment::theSetNominalStrips
private

config switch

Definition at line 187 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

bool LaserAlignment::theStoreToDB
private

config switch

Definition at line 168 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

edm::ESHandle<TrackerGeometry> LaserAlignment::theTrackerGeometry
private

Definition at line 238 of file LaserAlignment.h.

Referenced by endRunProduce(), produce(), and testRoutine().

bool LaserAlignment::theUseMinuitAlgorithm
private

config switch

Definition at line 147 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

bool LaserAlignment::updateFromInputGeometry
private

config switch

Definition at line 162 of file LaserAlignment.h.

Referenced by endRunProduce(), LaserAlignment(), and produce().