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
 
 EDProducer (const EDProducer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () 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
 
std::vector< bool > const & recordProvenanceList () 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)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~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
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (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::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, 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
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices 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...
 
const edm::ESGetToken< GeometricDet, IdealGeometryRecordgeomDetToken_
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordgeomToken_
 
const edm::ESGetToken< Alignments, GlobalPositionRcdgprToken_
 
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
 
const edm::ESGetToken< PTrackerParameters, PTrackerParametersRcdptpToken_
 
TDirectory * singleModulesDir
 
const edm::ESGetToken< SiStripPedestals, SiStripPedestalsRcdstripPedestalsToken_
 
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...
 
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtopoToken_
 Tokens for ESconsumes. 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
template<typename T >
using BranchAliasSetterT = ProductRegistryHelper::BranchAliasSetterT< T >
 
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
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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)
 
void resetItemsToGetFrom (BranchType iType)
 

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::LaserAlignment ( edm::ParameterSet const &  theConf)
explicit

Definition at line 21 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.

28  theEvents(0),
29  theDoPedestalSubtraction(theConf.getUntrackedParameter<bool>("SubtractPedestals", true)),
30  theUseMinuitAlgorithm(theConf.getUntrackedParameter<bool>("RunMinuitAlignmentTubeAlgorithm", false)),
31  theApplyBeamKinkCorrections(theConf.getUntrackedParameter<bool>("ApplyBeamKinkCorrections", true)),
32  peakFinderThreshold(theConf.getUntrackedParameter<double>("PeakFinderThreshold", 10.)),
33  enableJudgeZeroFilter(theConf.getUntrackedParameter<bool>("EnableJudgeZeroFilter", true)),
34  judgeOverdriveThreshold(theConf.getUntrackedParameter<unsigned int>("JudgeOverdriveThreshold", 220)),
35  updateFromInputGeometry(theConf.getUntrackedParameter<bool>("UpdateFromInputGeometry", false)),
36  misalignedByRefGeometry(theConf.getUntrackedParameter<bool>("MisalignedByRefGeometry", false)),
37  theStoreToDB(theConf.getUntrackedParameter<bool>("SaveToDbase", false)),
38  theDigiProducersList(theConf.getParameter<std::vector<edm::ParameterSet> >("DigiProducersList")),
39  theSaveHistograms(theConf.getUntrackedParameter<bool>("SaveHistograms", false)),
40  theCompression(theConf.getUntrackedParameter<int>("ROOTFileCompression", 1)),
41  theFileName(theConf.getUntrackedParameter<std::string>("ROOTFileName", "test.root")),
42  theMaskTecModules(theConf.getUntrackedParameter<std::vector<unsigned int> >("MaskTECModules")),
43  theMaskAtModules(theConf.getUntrackedParameter<std::vector<unsigned int> >("MaskATModules")),
44  theSetNominalStrips(theConf.getUntrackedParameter<bool>("ForceFitterToNominalStrips", false)),
45  theLasConstants(theConf.getUntrackedParameter<std::vector<edm::ParameterSet> >("LaserAlignmentConstants")),
46  theFile(),
48  theAlignRecordName("TrackerAlignmentRcd"),
49  theErrorRecordName("TrackerAlignmentErrorExtendedRcd"),
50  firstEvent_(true) {
51  std::cout << std::endl;
52  std::cout << "=============================================================="
53  << "\n=== LaserAlignment module configuration ==="
54  << "\n"
55  << "\n Write histograms to file = " << (theSaveHistograms ? "true" : "false")
56  << "\n Histogram file name = " << theFileName
57  << "\n Histogram file compression = " << theCompression
58  << "\n Subtract pedestals = " << (theDoPedestalSubtraction ? "true" : "false")
59  << "\n Run Minuit AT algorithm = " << (theUseMinuitAlgorithm ? "true" : "false")
60  << "\n Apply beam kink corrections = " << (theApplyBeamKinkCorrections ? "true" : "false")
61  << "\n Peak Finder Threshold = " << peakFinderThreshold
62  << "\n EnableJudgeZeroFilter = " << (enableJudgeZeroFilter ? "true" : "false")
63  << "\n JudgeOverdriveThreshold = " << judgeOverdriveThreshold
64  << "\n Update from input geometry = " << (updateFromInputGeometry ? "true" : "false")
65  << "\n Misalignment from ref geometry = " << (misalignedByRefGeometry ? "true" : "false")
66  << "\n Number of TEC modules masked = " << theMaskTecModules.size() << " (s. below list if > 0)"
67  << "\n Number of AT modules masked = " << theMaskAtModules.size() << " (s. below list if > 0)"
68  << "\n Store to database = " << (theStoreToDB ? "true" : "false")
69  << "\n ----------------------------------------------- ----------"
70  << (theSetNominalStrips ? "\n Set strips to nominal = true" : "\n")
71  << "\n=============================================================" << std::endl;
72 
73  // tell about masked modules
74  if (!theMaskTecModules.empty()) {
75  std::cout << " ===============================================================================================\n"
76  << std::flush;
77  std::cout << " The following " << theMaskTecModules.size()
78  << " TEC modules have been masked out and will not be considered by the TEC algorithm:\n " << std::flush;
79  for (std::vector<unsigned int>::iterator moduleIt = theMaskTecModules.begin(); moduleIt != theMaskTecModules.end();
80  ++moduleIt) {
81  std::cout << *moduleIt << (moduleIt != --theMaskTecModules.end() ? ", " : "") << std::flush;
82  }
83  std::cout << std::endl << std::flush;
84  std::cout << " ===============================================================================================\n\n"
85  << std::flush;
86  }
87  if (!theMaskAtModules.empty()) {
88  std::cout << " ===============================================================================================\n"
89  << std::flush;
90  std::cout << " The following " << theMaskAtModules.size()
91  << " AT modules have been masked out and will not be considered by the AT algorithm:\n " << std::flush;
92  for (std::vector<unsigned int>::iterator moduleIt = theMaskAtModules.begin(); moduleIt != theMaskAtModules.end();
93  ++moduleIt) {
94  std::cout << *moduleIt << (moduleIt != --theMaskAtModules.end() ? ", " : "") << std::flush;
95  }
96  std::cout << std::endl << std::flush;
97  std::cout << " ===============================================================================================\n\n"
98  << std::flush;
99  }
100 
101  // alias for the Branches in the root files
102  std::string alias(theConf.getParameter<std::string>("@module_label"));
103 
104  // declare the product to produce
105  produces<TkLasBeamCollection, edm::Transition::EndRun>("tkLaserBeams").setBranchAlias(alias + "TkLasBeamCollection");
106 
107  // switch judge's zero filter depending on cfg
109 
110  // set the upper threshold for zero suppressed data
112 }
unsigned int judgeOverdriveThreshold
config parameters for the LASProfileJudge
const edm::ESGetToken< PTrackerParameters, PTrackerParametersRcd > ptpToken_
bool theSaveHistograms
config switch
const edm::ESGetToken< GeometricDet, IdealGeometryRecord > geomDetToken_
const edm::ESGetToken< SiStripPedestals, SiStripPedestalsRcd > stripPedestalsToken_
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
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
std::string theFileName
config parameter (histograms file output name)
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
Tokens for ESconsumes.
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)
const edm::ESGetToken< Alignments, GlobalPositionRcd > gprToken_
bool enableJudgeZeroFilter
config switch
LASProfileJudge judge
bool updateFromInputGeometry
config switch
bool theSetNominalStrips
config switch

◆ ~LaserAlignment()

LaserAlignment::~LaserAlignment ( )
override

Definition at line 117 of file LaserAlignment.cc.

References theAlignableTracker, theFile, and theSaveHistograms.

117  {
118  if (theSaveHistograms)
119  theFile->Write();
120  if (theFile) {
121  delete theFile;
122  }
123  if (theAlignableTracker) {
124  delete theAlignableTracker;
125  }
126 }
bool theSaveHistograms
config switch
TFile * theFile
Tree stuff.
AlignableTracker * theAlignableTracker

Member Function Documentation

◆ ApplyATMaskingCorrections()

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 1623 of file LaserAlignment.cc.

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

Referenced by endRunProduce().

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

◆ ApplyEndcapMaskingCorrections()

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 1583 of file LaserAlignment.cc.

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

Referenced by endRunProduce().

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

◆ beginJob()

void LaserAlignment::beginJob ( )
overridevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 131 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().

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

◆ CalculateNominalCoordinates()

void LaserAlignment::CalculateNominalCoordinates ( void  )
private

fills a LASGlobalData<LASCoordinateSet> with nominal module positions

Definition at line 1330 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().

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

◆ ConvertAngle()

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 1424 of file LaserAlignment.cc.

References angle(), Exception, and M_PI.

Referenced by endRunProduce().

1424  {
1425  if (angle < -1. * M_PI || angle > M_PI) {
1426  throw cms::Exception(" [LaserAlignment::ConvertAngle] ")
1427  << "** ERROR: Called with illegal input angle: " << angle << "." << std::endl;
1428  }
1429 
1430  if (angle >= 0.)
1431  return angle;
1432  else
1433  return (angle + 2. * M_PI);
1434 }
#define M_PI
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11

◆ DumpHitmaps()

void LaserAlignment::DumpHitmaps ( LASGlobalData< int > &  numberOfAcceptedProfiles)
private

for debugging only, will disappear

Definition at line 1529 of file LaserAlignment.cc.

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

Referenced by endRunProduce().

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

◆ DumpPosFileSet()

void LaserAlignment::DumpPosFileSet ( LASGlobalData< LASCoordinateSet > &  coordinates)
private

for debugging only, will disappear

debug only, will disappear

Definition at line 1439 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, and relativeConstraints::ring.

1439  {
1441  int det, ring, beam, disk, pos;
1442 
1443  std::cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- Dump: " << std::endl;
1444 
1445  // TEC INTERNAL
1446  det = 0;
1447  ring = 0;
1448  beam = 0;
1449  disk = 0;
1450  do {
1451  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t"
1452  << coordinates.GetTECEntry(det, ring, beam, disk).GetPhi() << "\t"
1453  << coordinates.GetTECEntry(det, ring, beam, disk).GetPhiError() << std::endl;
1454  } while (loop.TECLoop(det, ring, beam, disk));
1455 
1456  // TIBTOB
1457  det = 2;
1458  beam = 0;
1459  pos = 0;
1460  do {
1461  std::cout << "POS " << det << "\t" << beam << "\t" << pos << "\t"
1462  << "-1"
1463  << "\t" << coordinates.GetTIBTOBEntry(det, beam, pos).GetPhi() << "\t"
1464  << coordinates.GetTIBTOBEntry(det, beam, pos).GetPhiError() << std::endl;
1465  } while (loop.TIBTOBLoop(det, beam, pos));
1466 
1467  // TEC2TEC
1468  det = 0;
1469  beam = 0;
1470  disk = 0;
1471  do {
1472  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t"
1473  << "-1"
1474  << "\t" << coordinates.GetTEC2TECEntry(det, beam, disk).GetPhi() << "\t"
1475  << coordinates.GetTEC2TECEntry(det, beam, disk).GetPhiError() << std::endl;
1476  } while (loop.TEC2TECLoop(det, beam, disk));
1477 
1478  std::cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- End dump: " << std::endl;
1479 }
double GetPhiError(void) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
double GetPhi(void) const
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:84

◆ DumpStripFileSet()

void LaserAlignment::DumpStripFileSet ( LASGlobalData< std::pair< float, float > > &  measuredStripPositions)
private

for debugging only, will disappear

Definition at line 1484 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, gather_cfg::cout, heppy_loop::loop, and relativeConstraints::ring.

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

◆ endJob()

void LaserAlignment::endJob ( )
overridevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 933 of file LaserAlignment.cc.

Referenced by o2olib.O2ORunMgr::executeJob().

933 {}

◆ endRunProduce()

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 487 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, 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::writeOneIOV().

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

◆ fillDataProfiles()

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 939 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_2024v11_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().

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

◆ fillDetectorId()

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)

◆ fillPedestalProfiles()

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 1171 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(), nano_mu_digi_cff::strip, LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), and LASGlobalLoop::TIBTOBLoop().

Referenced by produce().

1171  {
1172  int det, ring, beam, disk, pos;
1173 
1174  // loop TEC modules (yet without AT)
1175  det = 0;
1176  ring = 0;
1177  beam = 0;
1178  disk = 0;
1179  do { // loop using LASGlobalLoop functionality
1180  SiStripPedestals::Range pedRange = pedestalsHandle->getRange(detectorId.GetTECEntry(det, ring, beam, disk));
1181  for (int strip = 0; strip < 512; ++strip) {
1182  int thePedestal = int(pedestalsHandle->getPed(strip, pedRange));
1183  if (thePedestal > 895)
1184  thePedestal -= 1024;
1185  pedestalProfiles.GetTECEntry(det, ring, beam, disk).SetValue(strip, thePedestal);
1186  }
1187  } while (moduleLoop.TECLoop(det, ring, beam, disk));
1188 
1189  // TIB & TOB section
1190  det = 2;
1191  beam = 0;
1192  pos = 0;
1193  do { // loop using LASGlobalLoop functionality
1194  SiStripPedestals::Range pedRange = pedestalsHandle->getRange(detectorId.GetTIBTOBEntry(det, beam, pos));
1195  for (int strip = 0; strip < 512; ++strip) {
1196  int thePedestal = int(pedestalsHandle->getPed(strip, pedRange));
1197  if (thePedestal > 895)
1198  thePedestal -= 1024;
1199  pedestalProfiles.GetTIBTOBEntry(det, beam, pos).SetValue(strip, thePedestal);
1200  }
1201  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1202 
1203  // TEC2TEC AT section
1204  det = 0;
1205  beam = 0;
1206  disk = 0;
1207  do { // loop using LASGlobalLoop functionality
1208  SiStripPedestals::Range pedRange = pedestalsHandle->getRange(detectorId.GetTEC2TECEntry(det, beam, disk));
1209  for (int strip = 0; strip < 512; ++strip) {
1210  int thePedestal = int(pedestalsHandle->getPed(strip, pedRange));
1211  if (thePedestal > 895)
1212  thePedestal -= 1024;
1213  pedestalProfiles.GetTEC2TECEntry(det, beam, disk).SetValue(strip, thePedestal);
1214  }
1215  } while (moduleLoop.TEC2TECLoop(det, beam, disk));
1216 }
const Range getRange(const uint32_t &detID) const
bool TEC2TECLoop(int &, int &, int &) const
std::pair< ContainerIterator, ContainerIterator > Range
float getPed(const uint16_t &strip, const Range &range) const
bool TECLoop(int &, int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
bool TIBTOBLoop(int &, int &, int &) const
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
LASGlobalLoop moduleLoop

◆ getTEC2TECNominalBeamOffset()

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 1312 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, and Exception.

Referenced by endRunProduce().

1312  {
1313  if (det > 1 || beam > 7 || disk > 5) {
1314  throw cms::Exception("[LaserAlignment::getTEC2TECNominalBeamOffset]")
1315  << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " disk " << disk << "."
1316  << std::endl;
1317  }
1318 
1319  const double nominalOffsets[8] = {0., 2.220, -2.221, 0., 2.214, 0., 2.214, -2.217};
1320 
1321  if (det == 0)
1322  return -1. * nominalOffsets[beam];
1323  else
1324  return nominalOffsets[beam];
1325 }

◆ getTIBTOBNominalBeamOffset()

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 1277 of file LaserAlignment.cc.

References EcalCondDBWriter_cfi::beam, Exception, and or.

Referenced by endRunProduce(), and produce().

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

◆ isATBeam()

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 1250 of file LaserAlignment.cc.

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

Referenced by produce().

1250  {
1251  int numberOfProfiles = 0;
1252 
1253  int det = 2;
1254  int beam = 0;
1255  int pos = 0; // search all TIB/TOB for signals
1256  do {
1257  if (isAcceptedProfile.GetTIBTOBEntry(det, beam, pos) == 1)
1258  numberOfProfiles++;
1259  } while (moduleLoop.TIBTOBLoop(det, beam, pos));
1260 
1261  LogDebug("[LaserAlignment::isATBeam]") << " Found: " << numberOfProfiles << "hits." << std::endl;
1262  std::cout << " [LaserAlignment::isATBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1263 
1264  if (numberOfProfiles > 10)
1265  return (true);
1266  return (false);
1267 }
LASGlobalData< int > isAcceptedProfile
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
bool TIBTOBLoop(int &, int &, int &) const
LASGlobalLoop moduleLoop
#define LogDebug(id)

◆ isTECBeam()

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 1223 of file LaserAlignment.cc.

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

Referenced by produce().

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

◆ produce()

void LaserAlignment::produce ( edm::Event theEvent,
edm::EventSetup const &  theSetup 
)
overridevirtual

Implements edm::one::EDProducerBase.

Definition at line 279 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, geomDetToken_, geomToken_, edm::EventSetup::getData(), edm::EventSetup::getHandle(), LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), getTIBTOBNominalBeamOffset(), gprToken_, edm::EventBase::id(), isAcceptedProfile, isATBeam(), LASProfileJudge::IsSignalIn(), isTECBeam(), judge, LASProfileJudge::JudgeProfile(), LogDebug, moduleLoop, numberOfAcceptedProfiles, pedestalProfiles, ptpToken_, relativeConstraints::ring, edm::EventID::run(), LASGlobalData< T >::SetTECEntry(), LASGlobalData< T >::SetTIBTOBEntry(), stripPedestalsToken_, LASGlobalLoop::TEC2TECLoop(), tecDoubleHitDetId, LASGlobalLoop::TECLoop(), theAlignableTracker, theDoPedestalSubtraction, theEvents, theGlobalPositionRcd, theProfileNames, theTrackerGeometry, LASGlobalLoop::TIBTOBLoop(), topoToken_, and updateFromInputGeometry.

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

◆ testRoutine()

void LaserAlignment::testRoutine ( void  )

for debugging & testing only, will disappear..

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

Definition at line 1684 of file LaserAlignment.cc.

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

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

Member Data Documentation

◆ collectedDataProfiles

LASGlobalData<LASModuleProfile> LaserAlignment::collectedDataProfiles
private

Definition at line 207 of file LaserAlignment.h.

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

◆ currentDataProfiles

LASGlobalData<LASModuleProfile> LaserAlignment::currentDataProfiles
private

data profiles for the current event

Definition at line 204 of file LaserAlignment.h.

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

◆ detectorId

LASGlobalData<unsigned int> LaserAlignment::detectorId
private

◆ enableJudgeZeroFilter

bool LaserAlignment::enableJudgeZeroFilter
private

config switch

Definition at line 154 of file LaserAlignment.h.

Referenced by LaserAlignment().

◆ firstEvent_

bool LaserAlignment::firstEvent_
private

Definition at line 243 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

◆ gD

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

tracker geometry;

Definition at line 235 of file LaserAlignment.h.

Referenced by produce().

◆ geomDetToken_

const edm::ESGetToken<GeometricDet, IdealGeometryRecord> LaserAlignment::geomDetToken_
private

Definition at line 133 of file LaserAlignment.h.

Referenced by produce().

◆ geomToken_

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> LaserAlignment::geomToken_
private

Definition at line 132 of file LaserAlignment.h.

Referenced by produce().

◆ gprToken_

const edm::ESGetToken<Alignments, GlobalPositionRcd> LaserAlignment::gprToken_
private

Definition at line 135 of file LaserAlignment.h.

Referenced by produce().

◆ isAcceptedProfile

LASGlobalData<int> LaserAlignment::isAcceptedProfile
private

Definition at line 217 of file LaserAlignment.h.

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

◆ judge

LASProfileJudge LaserAlignment::judge
private

Definition at line 189 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

◆ judgeOverdriveThreshold

unsigned int LaserAlignment::judgeOverdriveThreshold
private

config parameters for the LASProfileJudge

Definition at line 157 of file LaserAlignment.h.

Referenced by LaserAlignment().

◆ misalignedByRefGeometry

bool LaserAlignment::misalignedByRefGeometry
private

config switch

Definition at line 163 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

◆ moduleLoop

LASGlobalLoop LaserAlignment::moduleLoop
private

◆ nominalCoordinates

LASGlobalData<LASCoordinateSet> LaserAlignment::nominalCoordinates
private

◆ numberOfAcceptedProfiles

LASGlobalData<int> LaserAlignment::numberOfAcceptedProfiles
private

Definition at line 213 of file LaserAlignment.h.

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

◆ peakFinderThreshold

double LaserAlignment::peakFinderThreshold
private

config parameter

Definition at line 151 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

◆ pedestalProfiles

LASGlobalData<LASModuleProfile> LaserAlignment::pedestalProfiles
private

Definition at line 201 of file LaserAlignment.h.

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

◆ ptpToken_

const edm::ESGetToken<PTrackerParameters, PTrackerParametersRcd> LaserAlignment::ptpToken_
private

Definition at line 134 of file LaserAlignment.h.

Referenced by produce().

◆ singleModulesDir

TDirectory* LaserAlignment::singleModulesDir
private

Definition at line 232 of file LaserAlignment.h.

Referenced by beginJob().

◆ stripPedestalsToken_

const edm::ESGetToken<SiStripPedestals, SiStripPedestalsRcd> LaserAlignment::stripPedestalsToken_
private

Definition at line 136 of file LaserAlignment.h.

Referenced by produce().

◆ summedHistograms

LASGlobalData<TH1D*> LaserAlignment::summedHistograms
private

Definition at line 221 of file LaserAlignment.h.

Referenced by beginJob(), and endRunProduce().

◆ tecDoubleHitDetId

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

Definition at line 198 of file LaserAlignment.h.

Referenced by fillDetectorId(), and produce().

◆ theAlignableTracker

AlignableTracker* LaserAlignment::theAlignableTracker
private

Definition at line 239 of file LaserAlignment.h.

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

◆ theAlignRecordName

std::string LaserAlignment::theAlignRecordName
private

Definition at line 241 of file LaserAlignment.h.

Referenced by endRunProduce().

◆ theApplyBeamKinkCorrections

bool LaserAlignment::theApplyBeamKinkCorrections
private

config switch

Definition at line 148 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

◆ theCompression

int LaserAlignment::theCompression
private

config parameter (histograms file compression level)

Definition at line 175 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

◆ theDigiProducersList

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

Definition at line 169 of file LaserAlignment.h.

Referenced by fillDataProfiles().

◆ theDoPedestalSubtraction

bool LaserAlignment::theDoPedestalSubtraction
private

config switch

Definition at line 142 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

◆ theErrorRecordName

std::string LaserAlignment::theErrorRecordName
private

Definition at line 241 of file LaserAlignment.h.

Referenced by endRunProduce().

◆ theEvents

int LaserAlignment::theEvents
private

counter for the total number of events processed

Definition at line 139 of file LaserAlignment.h.

Referenced by endRunProduce(), and produce().

◆ theFile

TFile* LaserAlignment::theFile
private

Tree stuff.

Definition at line 231 of file LaserAlignment.h.

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

◆ theFileName

std::string LaserAlignment::theFileName
private

config parameter (histograms file output name)

Definition at line 178 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

◆ theGlobalPositionRcd

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

Definition at line 237 of file LaserAlignment.h.

Referenced by produce().

◆ theLasConstants

LASConstants LaserAlignment::theLasConstants
private

Definition at line 192 of file LaserAlignment.h.

Referenced by endRunProduce().

◆ theMaskAtModules

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

Definition at line 182 of file LaserAlignment.h.

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

◆ theMaskTecModules

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

config parameters

Definition at line 181 of file LaserAlignment.h.

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

◆ theProfileNames

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

Definition at line 210 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

◆ theSaveHistograms

bool LaserAlignment::theSaveHistograms
private

config switch

Definition at line 172 of file LaserAlignment.h.

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

◆ theSetNominalStrips

bool LaserAlignment::theSetNominalStrips
private

config switch

Definition at line 185 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

◆ theStoreToDB

bool LaserAlignment::theStoreToDB
private

config switch

Definition at line 166 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

◆ theTrackerGeometry

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

Definition at line 236 of file LaserAlignment.h.

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

◆ theUseMinuitAlgorithm

bool LaserAlignment::theUseMinuitAlgorithm
private

config switch

Definition at line 145 of file LaserAlignment.h.

Referenced by endRunProduce(), and LaserAlignment().

◆ topoToken_

const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> LaserAlignment::topoToken_
private

Tokens for ESconsumes.

Definition at line 131 of file LaserAlignment.h.

Referenced by produce().

◆ updateFromInputGeometry

bool LaserAlignment::updateFromInputGeometry
private

config switch

Definition at line 160 of file LaserAlignment.h.

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