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 hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () 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::ProducerBase
ProducesCollector producesCollector ()
 
- 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 73 of file LaserAlignment.h.

Constructor & Destructor Documentation

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

Definition at line 19 of file LaserAlignment.cc.

References SiStripOfflineCRack_cfg::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.

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  std::cout << std::endl;
44  std::cout << "=============================================================="
45  << "\n=== LaserAlignment module configuration ==="
46  << "\n"
47  << "\n Write histograms to file = " << (theSaveHistograms ? "true" : "false")
48  << "\n Histogram file name = " << theFileName
49  << "\n Histogram file compression = " << theCompression
50  << "\n Subtract pedestals = " << (theDoPedestalSubtraction ? "true" : "false")
51  << "\n Run Minuit AT algorithm = " << (theUseMinuitAlgorithm ? "true" : "false")
52  << "\n Apply beam kink corrections = " << (theApplyBeamKinkCorrections ? "true" : "false")
53  << "\n Peak Finder Threshold = " << peakFinderThreshold
54  << "\n EnableJudgeZeroFilter = " << (enableJudgeZeroFilter ? "true" : "false")
55  << "\n JudgeOverdriveThreshold = " << judgeOverdriveThreshold
56  << "\n Update from input geometry = " << (updateFromInputGeometry ? "true" : "false")
57  << "\n Misalignment from ref geometry = " << (misalignedByRefGeometry ? "true" : "false")
58  << "\n Number of TEC modules masked = " << theMaskTecModules.size() << " (s. below list if > 0)"
59  << "\n Number of AT modules masked = " << theMaskAtModules.size() << " (s. below list if > 0)"
60  << "\n Store to database = " << (theStoreToDB ? "true" : "false")
61  << "\n ----------------------------------------------- ----------"
62  << (theSetNominalStrips ? "\n Set strips to nominal = true" : "\n")
63  << "\n=============================================================" << std::endl;
64 
65  // tell about masked modules
66  if (!theMaskTecModules.empty()) {
67  std::cout << " ===============================================================================================\n"
68  << std::flush;
69  std::cout << " The following " << theMaskTecModules.size()
70  << " TEC modules have been masked out and will not be considered by the TEC algorithm:\n " << std::flush;
71  for (std::vector<unsigned int>::iterator moduleIt = theMaskTecModules.begin(); moduleIt != theMaskTecModules.end();
72  ++moduleIt) {
73  std::cout << *moduleIt << (moduleIt != --theMaskTecModules.end() ? ", " : "") << std::flush;
74  }
75  std::cout << std::endl << std::flush;
76  std::cout << " ===============================================================================================\n\n"
77  << std::flush;
78  }
79  if (!theMaskAtModules.empty()) {
80  std::cout << " ===============================================================================================\n"
81  << std::flush;
82  std::cout << " The following " << theMaskAtModules.size()
83  << " AT modules have been masked out and will not be considered by the AT algorithm:\n " << std::flush;
84  for (std::vector<unsigned int>::iterator moduleIt = theMaskAtModules.begin(); moduleIt != theMaskAtModules.end();
85  ++moduleIt) {
86  std::cout << *moduleIt << (moduleIt != --theMaskAtModules.end() ? ", " : "") << std::flush;
87  }
88  std::cout << std::endl << std::flush;
89  std::cout << " ===============================================================================================\n\n"
90  << std::flush;
91  }
92 
93  // alias for the Branches in the root files
94  std::string alias(theConf.getParameter<std::string>("@module_label"));
95 
96  // declare the product to produce
97  produces<TkLasBeamCollection, edm::Transition::EndRun>("tkLaserBeams").setBranchAlias(alias + "TkLasBeamCollection");
98 
99  // switch judge's zero filter depending on cfg
101 
102  // set the upper threshold for zero suppressed data
104 }
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 109 of file LaserAlignment.cc.

References theAlignableTracker, theFile, and theSaveHistograms.

109  {
110  if (theSaveHistograms)
111  theFile->Write();
112  if (theFile) {
113  delete theFile;
114  }
115  if (theAlignableTracker) {
116  delete theAlignableTracker;
117  }
118 }
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 1618 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, 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().

1620  {
1621  // loop the list of modules to be masked
1622  for (std::vector<unsigned int>::iterator moduleIt = theMaskAtModules.begin(); moduleIt != theMaskAtModules.end();
1623  ++moduleIt) {
1624  // loop variables
1626  int det, beam, disk, pos;
1627 
1628  // this will calculate the corrections from the alignment parameters
1629  LASAlignmentTubeAlgorithm atAlgorithm;
1630 
1631  // find the location of the respective module in the container with these loops:
1632 
1633  // first TIB+TOB
1634  det = 2;
1635  beam = 0;
1636  pos = 0;
1637  do {
1638  // here we got it
1639  if (detectorId.GetTIBTOBEntry(det, beam, pos) == *moduleIt) {
1640  // the nominal phi value for this module
1641  const double nominalPhi = nominalCoordinates.GetTIBTOBEntry(det, beam, pos).GetPhi();
1642 
1643  // the offset from the alignment parameters
1644  const double phiCorrection =
1645  atAlgorithm.GetTIBTOBAlignmentParameterCorrection(det, beam, pos, nominalCoordinates, atParameters);
1646 
1647  // apply the corrections
1648  measuredCoordinates.GetTIBTOBEntry(det, beam, pos).SetPhi(nominalPhi - phiCorrection);
1649  }
1650 
1651  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1652 
1653  // then TEC(AT)
1654  det = 0;
1655  beam = 0;
1656  disk = 0;
1657  do {
1658  // here we got it
1659  if (detectorId.GetTEC2TECEntry(det, beam, disk) == *moduleIt) {
1660  // the nominal phi value for this module
1661  const double nominalPhi = nominalCoordinates.GetTEC2TECEntry(det, beam, disk).GetPhi();
1662 
1663  // the offset from the alignment parameters
1664  const double phiCorrection =
1665  atAlgorithm.GetTEC2TECAlignmentParameterCorrection(det, beam, disk, nominalCoordinates, atParameters);
1666 
1667  // apply the corrections
1668  measuredCoordinates.GetTEC2TECEntry(det, beam, disk).SetPhi(nominalPhi - phiCorrection);
1669  }
1670 
1671  } while (moduleLoop.TEC2TECLoop(det, beam, disk));
1672  }
1673 }
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 1578 of file LaserAlignment.cc.

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

Referenced by endRunProduce().

1580  {
1581  // loop the list of modules to be masked
1582  for (std::vector<unsigned int>::iterator moduleIt = theMaskTecModules.begin(); moduleIt != theMaskTecModules.end();
1583  ++moduleIt) {
1584  // loop variables
1586  int det, ring, beam, disk;
1587 
1588  // this will calculate the corrections from the alignment parameters
1589  LASEndcapAlgorithm endcapAlgorithm;
1590 
1591  // find the location of the respective module in the container with this loop
1592  det = 0;
1593  ring = 0;
1594  beam = 0;
1595  disk = 0;
1596  do {
1597  // here we got it
1598  if (detectorId.GetTECEntry(det, ring, beam, disk) == *moduleIt) {
1599  // the nominal phi value for this module
1600  const double nominalPhi = nominalCoordinates.GetTECEntry(det, ring, beam, disk).GetPhi();
1601 
1602  // the offset from the alignment parameters
1603  const double phiCorrection = endcapAlgorithm.GetAlignmentParameterCorrection(
1604  det, ring, beam, disk, nominalCoordinates, endcapParameters);
1605 
1606  // apply the corrections
1607  measuredCoordinates.GetTECEntry(det, ring, beam, disk).SetPhi(nominalPhi - phiCorrection);
1608  }
1609 
1610  } while (moduleLoop.TECLoop(det, ring, beam, disk));
1611  }
1612 }
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:84
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 123 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, 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().

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

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

Referenced by endRunProduce().

1325  {
1326  //
1327  // hard coded data yet...
1328  //
1329 
1330  // nominal phi values of tec beam / alignment tube hits (parameter is beam 0-7)
1331  const double tecPhiPositions[8] = {
1332  0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486}; // new values calculated by maple
1333  const double atPhiPositions[8] = {
1334  0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784}; // new values calculated by maple
1335 
1336  // nominal r values (mm) of hits
1337  const double tobRPosition = 600.;
1338  const double tibRPosition = 514.;
1339  const double tecRPosition[2] = {564., 840.}; // ring 4,6
1340 
1341  // nominal z values (mm) of hits in barrel (parameter is pos 0-6)
1342  const double tobZPosition[6] = {1040., 580., 220., -140., -500., -860.};
1343  const double tibZPosition[6] = {620., 380., 180., -100., -340., -540.};
1344 
1345  // nominal z values (mm) of hits in tec (parameter is disk 0-8); FOR TEC-: (* -1.)
1346  const double tecZPosition[9] = {1322.5, 1462.5, 1602.5, 1742.5, 1882.5, 2057.5, 2247.5, 2452.5, 2667.5};
1347 
1348  //
1349  // now we fill these into the nominalCoordinates container;
1350  // errors are zero for nominal values..
1351  //
1352 
1353  // loop object and its variables
1355  int det, ring, beam, disk, pos;
1356 
1357  // TEC+- section
1358  det = 0;
1359  ring = 0, beam = 0;
1360  disk = 0;
1361  do {
1362  if (det == 0) { // this is TEC+
1364  det,
1365  ring,
1366  beam,
1367  disk,
1368  LASCoordinateSet(tecPhiPositions[beam], 0., tecRPosition[ring], 0., tecZPosition[disk], 0.));
1369  } else { // now TEC-
1371  det,
1372  ring,
1373  beam,
1374  disk,
1376  tecPhiPositions[beam], 0., tecRPosition[ring], 0., -1. * tecZPosition[disk], 0.)); // just * -1.
1377  }
1378 
1379  } while (moduleLoop.TECLoop(det, ring, beam, disk));
1380 
1381  // TIB & TOB section
1382  det = 2;
1383  beam = 0;
1384  pos = 0;
1385  do {
1386  if (det == 2) { // this is TIB
1388  det, beam, pos, LASCoordinateSet(atPhiPositions[beam], 0., tibRPosition, 0., tibZPosition[pos], 0.));
1389  } else { // now TOB
1391  det, beam, pos, LASCoordinateSet(atPhiPositions[beam], 0., tobRPosition, 0., tobZPosition[pos], 0.));
1392  }
1393 
1394  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1395 
1396  // TEC2TEC AT section
1397  det = 0;
1398  beam = 0;
1399  disk = 0;
1400  do {
1401  if (det == 0) { // this is TEC+, ring4 only
1403  det, beam, disk, LASCoordinateSet(atPhiPositions[beam], 0., tecRPosition[0], 0., tecZPosition[disk], 0.));
1404  } else { // now TEC-
1406  det,
1407  beam,
1408  disk,
1409  LASCoordinateSet(atPhiPositions[beam], 0., tecRPosition[0], 0., -1. * tecZPosition[disk], 0.)); // just * -1.
1410  }
1411 
1412  } while (moduleLoop.TEC2TECLoop(det, beam, disk));
1413 }
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 1419 of file LaserAlignment.cc.

References angle(), Exception, and M_PI.

Referenced by endRunProduce().

1419  {
1420  if (angle < -1. * M_PI || angle > M_PI) {
1421  throw cms::Exception(" [LaserAlignment::ConvertAngle] ")
1422  << "** ERROR: Called with illegal input angle: " << angle << "." << std::endl;
1423  }
1424 
1425  if (angle >= 0.)
1426  return angle;
1427  else
1428  return (angle + 2. * M_PI);
1429 }
#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 1524 of file LaserAlignment.cc.

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

Referenced by endRunProduce().

1524  {
1525  std::cout << " [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC+:" << std::endl;
1526  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1527  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1528 
1529  for (int beam = 0; beam < 8; ++beam) {
1530  std::cout << " beam" << beam << ":";
1531  for (int disk = 0; disk < 9; ++disk) {
1532  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry(0, 0, beam, disk);
1533  }
1534  std::cout << std::endl;
1535  }
1536 
1537  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1538  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1539 
1540  for (int beam = 0; beam < 8; ++beam) {
1541  std::cout << " beam" << beam << ":";
1542  for (int disk = 0; disk < 9; ++disk) {
1543  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry(0, 1, beam, disk);
1544  }
1545  std::cout << std::endl;
1546  }
1547 
1548  std::cout << " [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC-:" << std::endl;
1549  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1550  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1551 
1552  for (int beam = 0; beam < 8; ++beam) {
1553  std::cout << " beam" << beam << ":";
1554  for (int disk = 0; disk < 9; ++disk) {
1555  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry(1, 0, beam, disk);
1556  }
1557  std::cout << std::endl;
1558  }
1559 
1560  std::cout << " [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1561  std::cout << " disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1562 
1563  for (int beam = 0; beam < 8; ++beam) {
1564  std::cout << " beam" << beam << ":";
1565  for (int disk = 0; disk < 9; ++disk) {
1566  std::cout << "\t" << numberOfAcceptedProfiles.GetTECEntry(1, 1, beam, disk);
1567  }
1568  std::cout << std::endl;
1569  }
1570 
1571  std::cout << " [LaserAlignment::DumpHitmaps] -- End of dump." << std::endl << std::endl;
1572 }
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:84
void LaserAlignment::DumpPosFileSet ( LASGlobalData< LASCoordinateSet > &  coordinates)
private

for debugging only, will disappear

debug only, will disappear

Definition at line 1434 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, 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().

1434  {
1436  int det, ring, beam, disk, pos;
1437 
1438  std::cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- Dump: " << std::endl;
1439 
1440  // TEC INTERNAL
1441  det = 0;
1442  ring = 0;
1443  beam = 0;
1444  disk = 0;
1445  do {
1446  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t"
1447  << coordinates.GetTECEntry(det, ring, beam, disk).GetPhi() << "\t"
1448  << coordinates.GetTECEntry(det, ring, beam, disk).GetPhiError() << std::endl;
1449  } while (loop.TECLoop(det, ring, beam, disk));
1450 
1451  // TIBTOB
1452  det = 2;
1453  beam = 0;
1454  pos = 0;
1455  do {
1456  std::cout << "POS " << det << "\t" << beam << "\t" << pos << "\t"
1457  << "-1"
1458  << "\t" << coordinates.GetTIBTOBEntry(det, beam, pos).GetPhi() << "\t"
1459  << coordinates.GetTIBTOBEntry(det, beam, pos).GetPhiError() << std::endl;
1460  } while (loop.TIBTOBLoop(det, beam, pos));
1461 
1462  // TEC2TEC
1463  det = 0;
1464  beam = 0;
1465  disk = 0;
1466  do {
1467  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t"
1468  << "-1"
1469  << "\t" << coordinates.GetTEC2TECEntry(det, beam, disk).GetPhi() << "\t"
1470  << coordinates.GetTEC2TECEntry(det, beam, disk).GetPhiError() << std::endl;
1471  } while (loop.TEC2TECLoop(det, beam, disk));
1472 
1473  std::cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- End dump: " << std::endl;
1474 }
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:84
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 1479 of file LaserAlignment.cc.

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

1479  {
1481  int det, ring, beam, disk, pos;
1482 
1483  std::cout << std::endl << " [LaserAlignment::DumpStripFileSet] -- Dump: " << std::endl;
1484 
1485  // TEC INTERNAL
1486  det = 0;
1487  ring = 0;
1488  beam = 0;
1489  disk = 0;
1490  do {
1491  std::cout << "STRIP " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t"
1492  << measuredStripPositions.GetTECEntry(det, ring, beam, disk).first << "\t"
1493  << measuredStripPositions.GetTECEntry(det, ring, beam, disk).second << std::endl;
1494  } while (loop.TECLoop(det, ring, beam, disk));
1495 
1496  // TIBTOB
1497  det = 2;
1498  beam = 0;
1499  pos = 0;
1500  do {
1501  std::cout << "STRIP " << det << "\t" << beam << "\t" << pos << "\t"
1502  << "-1"
1503  << "\t" << measuredStripPositions.GetTIBTOBEntry(det, beam, pos).first << "\t"
1504  << measuredStripPositions.GetTIBTOBEntry(det, beam, pos).second << std::endl;
1505  } while (loop.TIBTOBLoop(det, beam, pos));
1506 
1507  // TEC2TEC
1508  det = 0;
1509  beam = 0;
1510  disk = 0;
1511  do {
1512  std::cout << "STRIP " << det << "\t" << beam << "\t" << disk << "\t"
1513  << "-1"
1514  << "\t" << measuredStripPositions.GetTEC2TECEntry(det, beam, disk).first << "\t"
1515  << measuredStripPositions.GetTEC2TECEntry(det, beam, disk).second << std::endl;
1516  } while (loop.TEC2TECLoop(det, beam, disk));
1517 
1518  std::cout << std::endl << " [LaserAlignment::DumpStripFileSet] -- End dump: " << std::endl;
1519 }
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:84
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 928 of file LaserAlignment.cc.

Referenced by o2olib.O2ORunMgr::executeJob().

928 {}
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 483 of file LaserAlignment.cc.

References AlignableTracker::alignmentErrors(), AlignableTracker::alignments(), ApplyATMaskingCorrections(), LASGeometryUpdater::ApplyBeamKinkCorrections(), ApplyEndcapMaskingCorrections(), PV3DBase< T, PVType, FrameType >::barePhi(), EcalCondDBWriter_cfi::beam, 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().

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

References SiStripDigi::adc(), SiStripRawDigi::adc(), EcalCondDBWriter_cfi::beam, edm::DetSetVector< T >::begin(), currentDataProfiles, detectorId, DataMixerDataOnData_cff::digiLabel, EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0::digiProducer, HLT_2018_cff::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().

934  {
935  // two handles for the two different kinds of digis
938 
939  bool isRawDigi = false;
940 
941  // indices for the LASGlobalLoop object
942  int det = 0, ring = 0, beam = 0, disk = 0, pos = 0;
943 
944  // query config set and loop over all PSets in the VPSet
945  for (std::vector<edm::ParameterSet>::iterator itDigiProducersList = theDigiProducersList.begin();
946  itDigiProducersList != theDigiProducersList.end();
947  ++itDigiProducersList) {
948  std::string digiProducer = itDigiProducersList->getParameter<std::string>("DigiProducer");
949  std::string digiLabel = itDigiProducersList->getParameter<std::string>("DigiLabel");
950  std::string digiType = itDigiProducersList->getParameter<std::string>("DigiType");
951 
952  // now branch according to digi type (raw or processed);
953  // first we go for raw digis => SiStripRawDigi
954  if (digiType == "Raw") {
955  theEvent.getByLabel(digiProducer, digiLabel, theStripRawDigis);
956  isRawDigi = true;
957  } else if (digiType == "Processed") {
958  theEvent.getByLabel(digiProducer, digiLabel, theStripDigis);
959  isRawDigi = false;
960  } else {
961  throw cms::Exception(" [LaserAlignment::fillDataProfiles]")
962  << " ** ERROR: Invalid digi type: \"" << digiType << "\" specified in configuration." << std::endl;
963  }
964 
965  // loop TEC internal modules
966  det = 0;
967  ring = 0;
968  beam = 0;
969  disk = 0;
970  do {
971  // first clear the profile
973 
974  // retrieve the raw id of that module
975  const int detRawId = detectorId.GetTECEntry(det, ring, beam, disk);
976 
977  if (isRawDigi) { // we have raw SiStripRawDigis
978 
979  // search the digis for the raw id
980  edm::DetSetVector<SiStripRawDigi>::const_iterator detSetIter = theStripRawDigis->find(detRawId);
981  if (detSetIter == theStripRawDigis->end()) {
982  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
983  << " ** ERROR: No raw DetSet found for det: " << detRawId << "." << std::endl;
984  }
985 
986  // fill the digis to the profiles
987  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
988  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeStart = digiRangeIterator; // save starting positions
989 
990  // loop all digis
991  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator) {
992  const SiStripRawDigi& digi = *digiRangeIterator;
993  const int channel = distance(digiRangeStart, digiRangeIterator);
994  if (channel >= 0 && channel < 512)
995  currentDataProfiles.GetTECEntry(det, ring, beam, disk).SetValue(channel, digi.adc());
996  else
997  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
998  << " ** ERROR: raw digi channel: " << channel << " out of range for det: " << detRawId << "."
999  << std::endl;
1000  }
1001 
1002  }
1003 
1004  else { // we have zero suppressed SiStripDigis
1005 
1006  // search the digis for the raw id
1007  edm::DetSetVector<SiStripDigi>::const_iterator detSetIter = theStripDigis->find(detRawId);
1008 
1009  // processed DetSets may be missing, just skip
1010  if (detSetIter == theStripDigis->end())
1011  continue;
1012 
1013  // fill the digis to the profiles
1014  edm::DetSet<SiStripDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1015 
1016  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator) {
1017  const SiStripDigi& digi = *digiRangeIterator;
1018  if (digi.strip() < 512)
1019  currentDataProfiles.GetTECEntry(det, ring, beam, disk).SetValue(digi.strip(), digi.adc());
1020  else
1021  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1022  << " ** ERROR: digi strip: " << digi.strip() << " out of range for det: " << detRawId << "."
1023  << std::endl;
1024  }
1025  }
1026 
1027  } while (moduleLoop.TECLoop(det, ring, beam, disk));
1028 
1029  // loop TIBTOB modules
1030  det = 2;
1031  beam = 0;
1032  pos = 0;
1033  do {
1034  // first clear the profile
1036 
1037  // retrieve the raw id of that module
1038  const int detRawId = detectorId.GetTIBTOBEntry(det, beam, pos);
1039 
1040  if (isRawDigi) { // we have raw SiStripRawDigis
1041 
1042  // search the digis for the raw id
1043  edm::DetSetVector<SiStripRawDigi>::const_iterator detSetIter = theStripRawDigis->find(detRawId);
1044  if (detSetIter == theStripRawDigis->end()) {
1045  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1046  << " ** ERROR: No raw DetSet found for det: " << detRawId << "." << std::endl;
1047  }
1048 
1049  // fill the digis to the profiles
1050  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1051  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeStart = digiRangeIterator; // save starting positions
1052 
1053  // loop all digis
1054  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator) {
1055  const SiStripRawDigi& digi = *digiRangeIterator;
1056  const int channel = distance(digiRangeStart, digiRangeIterator);
1057  if (channel >= 0 && channel < 512)
1058  currentDataProfiles.GetTIBTOBEntry(det, beam, pos).SetValue(channel, digi.adc());
1059  else
1060  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1061  << " ** ERROR: raw digi channel: " << channel << " out of range for det: " << detRawId << "."
1062  << std::endl;
1063  }
1064 
1065  }
1066 
1067  else { // we have zero suppressed SiStripDigis
1068 
1069  // search the digis for the raw id
1070  edm::DetSetVector<SiStripDigi>::const_iterator detSetIter = theStripDigis->find(detRawId);
1071 
1072  // processed DetSets may be missing, just skip
1073  if (detSetIter == theStripDigis->end())
1074  continue;
1075 
1076  // fill the digis to the profiles
1077  edm::DetSet<SiStripDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1078 
1079  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator) {
1080  const SiStripDigi& digi = *digiRangeIterator;
1081  if (digi.strip() < 512)
1082  currentDataProfiles.GetTIBTOBEntry(det, beam, pos).SetValue(digi.strip(), digi.adc());
1083  else
1084  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1085  << " ** ERROR: digi strip: " << digi.strip() << " out of range for det: " << detRawId << "."
1086  << std::endl;
1087  }
1088  }
1089 
1090  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1091 
1092  // loop TEC AT modules
1093  det = 0;
1094  beam = 0;
1095  disk = 0;
1096  do {
1097  // first clear the profile
1099 
1100  // retrieve the raw id of that module
1101  const int detRawId = detectorId.GetTEC2TECEntry(det, beam, disk);
1102 
1103  if (isRawDigi) { // we have raw SiStripRawDigis
1104 
1105  // search the digis for the raw id
1106  edm::DetSetVector<SiStripRawDigi>::const_iterator detSetIter = theStripRawDigis->find(detRawId);
1107  if (detSetIter == theStripRawDigis->end()) {
1108  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1109  << " ** ERROR: No raw DetSet found for det: " << detRawId << "." << std::endl;
1110  }
1111 
1112  // fill the digis to the profiles
1113  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1114  edm::DetSet<SiStripRawDigi>::const_iterator digiRangeStart = digiRangeIterator; // save starting positions
1115 
1116  // loop all digis
1117  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator) {
1118  const SiStripRawDigi& digi = *digiRangeIterator;
1119  const int channel = distance(digiRangeStart, digiRangeIterator);
1120  if (channel >= 0 && channel < 512)
1121  currentDataProfiles.GetTEC2TECEntry(det, beam, disk).SetValue(channel, digi.adc());
1122  else
1123  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1124  << " ** ERROR: raw digi channel: " << channel << " out of range for det: " << detRawId << "."
1125  << std::endl;
1126  }
1127 
1128  }
1129 
1130  else { // we have zero suppressed SiStripDigis
1131 
1132  // search the digis for the raw id
1133  edm::DetSetVector<SiStripDigi>::const_iterator detSetIter = theStripDigis->find(detRawId);
1134 
1135  // processed DetSets may be missing, just skip
1136  if (detSetIter == theStripDigis->end())
1137  continue;
1138 
1139  // fill the digis to the profiles
1140  edm::DetSet<SiStripDigi>::const_iterator digiRangeIterator = detSetIter->data.begin(); // for the loop
1141 
1142  for (; digiRangeIterator != detSetIter->data.end(); ++digiRangeIterator) {
1143  const SiStripDigi& digi = *digiRangeIterator;
1144  if (digi.strip() < 512)
1145  currentDataProfiles.GetTEC2TECEntry(det, beam, disk).SetValue(digi.strip(), digi.adc());
1146  else
1147  throw cms::Exception("[Laser Alignment::fillDataProfiles]")
1148  << " ** ERROR: digi strip: " << digi.strip() << " out of range for det: " << detRawId << "."
1149  << std::endl;
1150  }
1151  }
1152 
1153  } while (moduleLoop.TEC2TECLoop(det, beam, disk));
1154 
1155  } // theDigiProducersList loop
1156 }
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:325
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:84
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:314
collection_type::const_iterator const_iterator
Definition: DetSet.h:32
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
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 7 of file LaserAlignmentFillDetId.cc.

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

Referenced by beginJob().

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

References EcalCondDBWriter_cfi::beam, 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().

1166  {
1167  int det, ring, beam, disk, pos;
1168 
1169  // loop TEC modules (yet without AT)
1170  det = 0;
1171  ring = 0;
1172  beam = 0;
1173  disk = 0;
1174  do { // loop using LASGlobalLoop functionality
1175  SiStripPedestals::Range pedRange = pedestalsHandle->getRange(detectorId.GetTECEntry(det, ring, beam, disk));
1176  for (int strip = 0; strip < 512; ++strip) {
1177  int thePedestal = int(pedestalsHandle->getPed(strip, pedRange));
1178  if (thePedestal > 895)
1179  thePedestal -= 1024;
1180  pedestalProfiles.GetTECEntry(det, ring, beam, disk).SetValue(strip, thePedestal);
1181  }
1182  } while (moduleLoop.TECLoop(det, ring, beam, disk));
1183 
1184  // TIB & TOB section
1185  det = 2;
1186  beam = 0;
1187  pos = 0;
1188  do { // loop using LASGlobalLoop functionality
1189  SiStripPedestals::Range pedRange = pedestalsHandle->getRange(detectorId.GetTIBTOBEntry(det, beam, pos));
1190  for (int strip = 0; strip < 512; ++strip) {
1191  int thePedestal = int(pedestalsHandle->getPed(strip, pedRange));
1192  if (thePedestal > 895)
1193  thePedestal -= 1024;
1194  pedestalProfiles.GetTIBTOBEntry(det, beam, pos).SetValue(strip, thePedestal);
1195  }
1196  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1197 
1198  // TEC2TEC AT section
1199  det = 0;
1200  beam = 0;
1201  disk = 0;
1202  do { // loop using LASGlobalLoop functionality
1203  SiStripPedestals::Range pedRange = pedestalsHandle->getRange(detectorId.GetTEC2TECEntry(det, beam, disk));
1204  for (int strip = 0; strip < 512; ++strip) {
1205  int thePedestal = int(pedestalsHandle->getPed(strip, pedRange));
1206  if (thePedestal > 895)
1207  thePedestal -= 1024;
1208  pedestalProfiles.GetTEC2TECEntry(det, beam, disk).SetValue(strip, thePedestal);
1209  }
1210  } while (moduleLoop.TEC2TECLoop(det, beam, disk));
1211 }
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:84
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 1307 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, and Exception.

Referenced by endRunProduce().

1307  {
1308  if (det > 1 || beam > 7 || disk > 5) {
1309  throw cms::Exception("[LaserAlignment::getTEC2TECNominalBeamOffset]")
1310  << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " disk " << disk << "."
1311  << std::endl;
1312  }
1313 
1314  const double nominalOffsets[8] = {0., 2.220, -2.221, 0., 2.214, 0., 2.214, -2.217};
1315 
1316  if (det == 0)
1317  return -1. * nominalOffsets[beam];
1318  else
1319  return nominalOffsets[beam];
1320 }
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 1272 of file LaserAlignment.cc.

References Exception, and or.

Referenced by endRunProduce(), and produce().

1272  {
1273  if (det < 2 || det > 3 || beam > 7 || pos > 5) {
1274  throw cms::Exception("[LaserAlignment::getTIBTOBNominalBeamOffset]")
1275  << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " pos " << pos << "."
1276  << std::endl;
1277  }
1278 
1279  const double nominalOffsetsTIB[8] = {
1280  0.00035, 2.10687, -2.10827, -0.00173446, 2.10072, -0.00135114, 2.10105, -2.10401};
1281 
1282  // in tob, modules have alternating orientations along the rods.
1283  // this is described by the following pattern.
1284  // (even more confusing, this pattern is inversed for beams 0, 5, 6, 7)
1285  const int orientationPattern[6] = {-1, 1, 1, -1, -1, 1};
1286  const double nominalOffsetsTOB[8] = {0.00217408, 1.58678, 117.733, 119.321, 120.906, 119.328, 117.743, 1.58947};
1287 
1288  if (det == 2)
1289  return (-1. * nominalOffsetsTIB[beam]);
1290 
1291  else {
1292  if (beam == 0 or beam > 4)
1293  return (nominalOffsetsTOB[beam] * orientationPattern[pos]);
1294  else
1295  return (-1. * nominalOffsetsTOB[beam] * orientationPattern[pos]);
1296  }
1297 }
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 1245 of file LaserAlignment.cc.

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

Referenced by produce().

1245  {
1246  int numberOfProfiles = 0;
1247 
1248  int det = 2;
1249  int beam = 0;
1250  int pos = 0; // search all TIB/TOB for signals
1251  do {
1252  if (isAcceptedProfile.GetTIBTOBEntry(det, beam, pos) == 1)
1253  numberOfProfiles++;
1254  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1255 
1256  LogDebug("[LaserAlignment::isATBeam]") << " Found: " << numberOfProfiles << "hits." << std::endl;
1257  std::cout << " [LaserAlignment::isATBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1258 
1259  if (numberOfProfiles > 10)
1260  return (true);
1261  return (false);
1262 }
#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 1218 of file LaserAlignment.cc.

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

Referenced by produce().

1218  {
1219  int numberOfProfiles = 0;
1220 
1221  int ring = 1; // search all ring6 modules for signals
1222  for (int det = 0; det < 2; ++det) {
1223  for (int beam = 0; beam < 8; ++beam) {
1224  for (int disk = 0; disk < 9; ++disk) {
1225  if (isAcceptedProfile.GetTECEntry(det, ring, beam, disk) == 1)
1226  numberOfProfiles++;
1227  }
1228  }
1229  }
1230 
1231  LogDebug("[LaserAlignment::isTECBeam]") << " Found: " << numberOfProfiles << "hits." << std::endl;
1232  std::cout << " [LaserAlignment::isTECBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1233 
1234  if (numberOfProfiles > 10)
1235  return (true);
1236  return (false);
1237 }
#define LogDebug(id)
LASGlobalData< int > isAcceptedProfile
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:84
void LaserAlignment::produce ( edm::Event theEvent,
edm::EventSetup const &  theSetup 
)
overridevirtual

Implements edm::one::EDProducerBase.

Definition at line 271 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, 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().

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

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

1679  {
1680  // tracker geom. object for calculating the global beam positions
1681  const TrackerGeometry& theTracker(*theTrackerGeometry);
1682 
1683  const double atPhiPositions[8] = {0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784};
1684  const double tecPhiPositions[8] = {0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486};
1685  const double zPositions[9] = {125.0, 139.0, 153.0, 167.0, 181.0, 198.5, 217.5, 238.0, 259.5};
1686  const double zPositionsTIB[6] = {62.0, 38.0, 18.0, -10.0, -34.0, -54.0};
1687  const double zPositionsTOB[6] = {104.0, 58.0, 22.0, -14.0, -50.0, -86.0};
1688 
1689  int det, beam, disk, pos, ring;
1690 
1691  // loop TEC+- internal
1692  det = 0;
1693  ring = 0;
1694  beam = 0;
1695  disk = 0;
1696  do {
1697  const double radius = ring ? 84.0 : 56.4;
1698 
1699  // access the tracker geometry for this module
1700  const DetId theDetId(detectorId.GetTECEntry(det, ring, beam, disk));
1701  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>(theTracker.idToDet(theDetId));
1702 
1703  if (theStripDet) {
1704  const GlobalPoint gp(GlobalPoint::Cylindrical(radius, tecPhiPositions[beam], zPositions[disk]));
1705 
1706  const LocalPoint lp(theStripDet->surface().toLocal(gp));
1707  std::cout << "__TEC: " << 256. - theStripDet->specificTopology().strip(lp)
1708  << std::endl;
1709  }
1710 
1711  } while (moduleLoop.TECLoop(det, ring, beam, disk));
1712 
1713  // loop TIBTOB
1714  det = 2;
1715  beam = 0;
1716  pos = 0;
1717  do {
1718  const double radius =
1719  (det == 2 ? 51.4 : 58.4);
1720  const double theZ = (det == 2 ? zPositionsTIB[pos] : zPositionsTOB[pos]);
1721 
1722  // access the tracker geometry for this module
1723  const DetId theDetId(detectorId.GetTIBTOBEntry(det, beam, pos));
1724  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>(theTracker.idToDet(theDetId));
1725 
1726  if (theStripDet) {
1727  const GlobalPoint gp(GlobalPoint::Cylindrical(radius, atPhiPositions[beam], theZ));
1728 
1729  const LocalPoint lp(theStripDet->surface().toLocal(gp));
1730  std::cout << "__TIBTOB det " << det << " beam " << beam << " pos " << pos << " "
1731  << 256. - theStripDet->specificTopology().strip(lp);
1732  std::cout << " " << theStripDet->position().perp() << std::endl;
1733  }
1734 
1735  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1736 
1737  // loop TEC2TEC
1738  det = 0;
1739  beam = 0;
1740  disk = 0;
1741  do {
1742  const double radius = 56.4;
1743 
1744  // access the tracker geometry for this module
1745  const DetId theDetId(detectorId.GetTEC2TECEntry(det, beam, disk));
1746  const StripGeomDetUnit* const theStripDet = dynamic_cast<const StripGeomDetUnit*>(theTracker.idToDet(theDetId));
1747 
1748  if (theStripDet) {
1749  const GlobalPoint gp(GlobalPoint::Cylindrical(radius, atPhiPositions[beam], zPositions[disk]));
1750 
1751  const LocalPoint lp(theStripDet->surface().toLocal(gp));
1752  std::cout << "__TEC2TEC det " << det << " beam " << beam << " disk " << disk << " "
1753  << 256. - theStripDet->specificTopology().strip(lp) << std::endl;
1754  }
1755 
1756  } while (moduleLoop.TEC2TECLoop(det, beam, disk));
1757 }
T theZ
edm::ESHandle< TrackerGeometry > theTrackerGeometry
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
Definition: DetId.h:17
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:84
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 199 of file LaserAlignment.h.

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

LASGlobalData<LASModuleProfile> LaserAlignment::currentDataProfiles
private

data profiles for the current event

Definition at line 196 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 146 of file LaserAlignment.h.

Referenced by LaserAlignment().

bool LaserAlignment::firstEvent_
private

Definition at line 235 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

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

tracker geometry;

Definition at line 227 of file LaserAlignment.h.

Referenced by produce().

LASGlobalData<int> LaserAlignment::isAcceptedProfile
private

Definition at line 209 of file LaserAlignment.h.

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

LASProfileJudge LaserAlignment::judge
private

Definition at line 181 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

unsigned int LaserAlignment::judgeOverdriveThreshold
private

config parameters for the LASProfileJudge

Definition at line 149 of file LaserAlignment.h.

Referenced by LaserAlignment().

bool LaserAlignment::misalignedByRefGeometry
private

config switch

Definition at line 155 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

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

Definition at line 216 of file LaserAlignment.h.

Referenced by CalculateNominalCoordinates(), and endRunProduce().

LASGlobalData<int> LaserAlignment::numberOfAcceptedProfiles
private

Definition at line 205 of file LaserAlignment.h.

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

double LaserAlignment::peakFinderThreshold
private

config parameter

Definition at line 143 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

LASGlobalData<LASModuleProfile> LaserAlignment::pedestalProfiles
private

Definition at line 193 of file LaserAlignment.h.

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

TDirectory* LaserAlignment::singleModulesDir
private

Definition at line 224 of file LaserAlignment.h.

Referenced by beginJob().

LASGlobalData<TH1D*> LaserAlignment::summedHistograms
private

Definition at line 213 of file LaserAlignment.h.

Referenced by beginJob(), and endRunProduce().

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

Definition at line 190 of file LaserAlignment.h.

Referenced by fillDetectorId(), and produce().

AlignableTracker* LaserAlignment::theAlignableTracker
private

Definition at line 231 of file LaserAlignment.h.

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

std::string LaserAlignment::theAlignRecordName
private

Definition at line 233 of file LaserAlignment.h.

Referenced by endRunProduce().

bool LaserAlignment::theApplyBeamKinkCorrections
private

config switch

Definition at line 140 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

int LaserAlignment::theCompression
private

config parameter (histograms file compression level)

Definition at line 167 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

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

Definition at line 161 of file LaserAlignment.h.

Referenced by fillDataProfiles().

bool LaserAlignment::theDoPedestalSubtraction
private

config switch

Definition at line 134 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

std::string LaserAlignment::theErrorRecordName
private

Definition at line 233 of file LaserAlignment.h.

Referenced by endRunProduce().

int LaserAlignment::theEvents
private

counter for the total number of events processed

Definition at line 131 of file LaserAlignment.h.

Referenced by endRunProduce(), and produce().

TFile* LaserAlignment::theFile
private

Tree stuff.

Definition at line 223 of file LaserAlignment.h.

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

std::string LaserAlignment::theFileName
private

config parameter (histograms file output name)

Definition at line 170 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

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

Definition at line 229 of file LaserAlignment.h.

Referenced by produce().

LASConstants LaserAlignment::theLasConstants
private

Definition at line 184 of file LaserAlignment.h.

Referenced by endRunProduce().

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

Definition at line 174 of file LaserAlignment.h.

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

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

config parameters

Definition at line 173 of file LaserAlignment.h.

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

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

Definition at line 202 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

bool LaserAlignment::theSaveHistograms
private

config switch

Definition at line 164 of file LaserAlignment.h.

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

bool LaserAlignment::theSetNominalStrips
private

config switch

Definition at line 177 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

bool LaserAlignment::theStoreToDB
private

config switch

Definition at line 158 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

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

Definition at line 228 of file LaserAlignment.h.

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

bool LaserAlignment::theUseMinuitAlgorithm
private

config switch

Definition at line 137 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

bool LaserAlignment::updateFromInputGeometry
private

config switch

Definition at line 152 of file LaserAlignment.h.

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