CMS 3D CMS Logo

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

#include <LaserAlignment.h>

Inheritance diagram for LaserAlignment:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginJob (void)
 
virtual void endJob (void)
 
virtual void endRun (edm::Run &, const edm::EventSetup &)
 
 LaserAlignment (edm::ParameterSet const &theConf)
 
virtual void produce (edm::Event &, edm::EventSetup const &)
 
void testRoutine (void)
 for debugging & testing only, will disappear.. More...
 
 ~LaserAlignment ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Member Functions

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

Private Attributes

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

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Main reconstruction module for the Laser Alignment System

Date:
2009/10/14 07:34:14
Revision:
1.27
Author
Maarten Thomas
Jan Olzem

Definition at line 84 of file LaserAlignment.h.

Constructor & Destructor Documentation

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

Definition at line 19 of file LaserAlignment.cc.

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

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

Definition at line 110 of file LaserAlignment.cc.

References theAlignableTracker, theFile, and theSaveHistograms.

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

Member Function Documentation

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

same for alignment tube modules

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

Definition at line 1630 of file LaserAlignment.cc.

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

Referenced by endRun().

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

apply endcap correction to masked modules in TEC

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

Definition at line 1586 of file LaserAlignment.cc.

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

Referenced by endRun().

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

Reimplemented from edm::EDProducer.

Definition at line 125 of file LaserAlignment.cc.

References collectedDataProfiles, currentDataProfiles, edm::hlt::Exception, fillDetectorId(), firstEvent_, LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), isAcceptedProfile, moduleLoop, numberOfAcceptedProfiles, pedestalProfiles, pos, 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().

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

fills a LASGlobalData<LASCoordinateSet> with nominal module positions

Definition at line 1345 of file LaserAlignment.cc.

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

Referenced by endRun().

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

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

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

Definition at line 1432 of file LaserAlignment.cc.

References angle(), edm::hlt::Exception, and M_PI.

Referenced by endRun().

1432  {
1433 
1434  if( angle < -1. * M_PI || angle > M_PI ) {
1435  throw cms::Exception(" [LaserAlignment::ConvertAngle] ") << "** ERROR: Called with illegal input angle: " << angle << "." << std::endl;
1436  }
1437 
1438  if( angle >= 0. ) return angle;
1439  else return( angle + 2. * M_PI );
1440 
1441 }
#define M_PI
Definition: BFit3D.cc:3
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
void LaserAlignment::DumpHitmaps ( LASGlobalData< int >  numberOfAcceptedProfiles)
private

for debugging only, will disappear

Definition at line 1526 of file LaserAlignment.cc.

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

Referenced by endRun().

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

for debugging only, will disappear

debug only, will disappear

Definition at line 1450 of file LaserAlignment.cc.

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

1450  {
1451 
1453  int det, ring, beam, disk, pos;
1454 
1455  std:: cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- Dump: " << std::endl;
1456 
1457  // TEC INTERNAL
1458  det = 0; ring = 0; beam = 0; disk = 0;
1459  do {
1460  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t" << coordinates.GetTECEntry( det, ring, beam, disk ).GetPhi() << "\t" << coordinates.GetTECEntry( det, ring, beam, disk ).GetPhiError() << std::endl;
1461  } while ( loop.TECLoop( det, ring, beam, disk ) );
1462 
1463  // TIBTOB
1464  det = 2; beam = 0; pos = 0;
1465  do {
1466  std::cout << "POS " << det << "\t" << beam << "\t" << pos << "\t" << "-1" << "\t" << coordinates.GetTIBTOBEntry( det, beam, pos ).GetPhi() << "\t" << coordinates.GetTIBTOBEntry( det, beam, pos ).GetPhiError() << std::endl;
1467  } while( loop.TIBTOBLoop( det, beam, pos ) );
1468 
1469  // TEC2TEC
1470  det = 0; beam = 0; disk = 0;
1471  do {
1472  std::cout << "POS " << det << "\t" << beam << "\t" << disk << "\t" << "-1" << "\t" << coordinates.GetTEC2TECEntry( det, beam, disk ).GetPhi() << "\t" << coordinates.GetTEC2TECEntry( det, beam, disk ).GetPhiError() << std::endl;
1473  } while( loop.TEC2TECLoop( det, beam, disk ) );
1474 
1475  std:: cout << std::endl << " [LaserAlignment::DumpPosFileSet] -- End dump: " << std::endl;
1476 
1477 }
double GetPhi(void) const
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
double GetPhiError(void) const
tuple cout
Definition: gather_cfg.py:41
void LaserAlignment::DumpStripFileSet ( LASGlobalData< std::pair< float, float > > &  measuredStripPositions)
private

for debugging only, will disappear

Definition at line 1486 of file LaserAlignment.cc.

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

1486  {
1487 
1489  int det, ring, beam, disk, pos;
1490 
1491  std:: cout << std::endl << " [LaserAlignment::DumpStripFileSet] -- Dump: " << std::endl;
1492 
1493  // TEC INTERNAL
1494  det = 0; ring = 0; beam = 0; disk = 0;
1495  do {
1496  std::cout << "STRIP " << det << "\t" << beam << "\t" << disk << "\t" << ring << "\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).first
1497  << "\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).second << std::endl;
1498  } while ( loop.TECLoop( det, ring, beam, disk ) );
1499 
1500  // TIBTOB
1501  det = 2; beam = 0; pos = 0;
1502  do {
1503  std::cout << "STRIP " << det << "\t" << beam << "\t" << pos << "\t" << "-1" << "\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).first
1504  << "\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).second << std::endl;
1505  } while( loop.TIBTOBLoop( det, beam, pos ) );
1506 
1507  // TEC2TEC
1508  det = 0; beam = 0; disk = 0;
1509  do {
1510  std::cout << "STRIP " << det << "\t" << beam << "\t" << disk << "\t" << "-1" << "\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first
1511  << "\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).second << std::endl;
1512  } while( loop.TEC2TECLoop( det, beam, disk ) );
1513 
1514  std:: cout << std::endl << " [LaserAlignment::DumpStripFileSet] -- End dump: " << std::endl;
1515 
1516 
1517 }
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
tuple cout
Definition: gather_cfg.py:41
void LaserAlignment::endJob ( void  )
virtual

Reimplemented from edm::EDProducer.

Definition at line 950 of file LaserAlignment.cc.

950  {
951 }
void LaserAlignment::endRun ( edm::Run theRun,
const edm::EventSetup theSetup 
)
virtual

laser hit section for trackbased interface

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

Reimplemented from edm::EDProducer.

Definition at line 457 of file LaserAlignment.cc.

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

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

fill profiles from SiStrip(Raw)Digi container

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

Definition at line 961 of file LaserAlignment.cc.

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

Referenced by produce().

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

fill hard coded detIds

all the detector ids for the LAS modules hard-coded

Definition at line 8 of file LaserAlignmentFillDetId.cc.

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

Referenced by beginJob().

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

fill pedestals from dbase

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

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

Definition at line 1180 of file LaserAlignment.cc.

References detectorId, LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), moduleLoop, pedestalProfiles, pos, relativeConstraints::ring, LASModuleProfile::SetValue(), strip(), LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), and LASGlobalLoop::TIBTOBLoop().

Referenced by produce().

1180  {
1181 
1182  int det, ring, beam, disk, pos;
1183 
1184  // loop TEC modules (yet without AT)
1185  det = 0; ring = 0; beam = 0; disk = 0;
1186  do { // loop using LASGlobalLoop functionality
1187  SiStripPedestals::Range pedRange = pedestalsHandle->getRange( detectorId.GetTECEntry( det, ring, beam, disk ) );
1188  for( int strip = 0; strip < 512; ++strip ) {
1189  int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1190  if( thePedestal > 895 ) thePedestal -= 1024;
1191  pedestalProfiles.GetTECEntry( det, ring, beam, disk ).SetValue( strip, thePedestal );
1192  }
1193  } while ( moduleLoop.TECLoop( det, ring, beam, disk ) );
1194 
1195 
1196  // TIB & TOB section
1197  det = 2; beam = 0; pos = 0;
1198  do { // loop using LASGlobalLoop functionality
1199  SiStripPedestals::Range pedRange = pedestalsHandle->getRange( detectorId.GetTIBTOBEntry( det, beam, pos ) );
1200  for( int strip = 0; strip < 512; ++strip ) {
1201  int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1202  if( thePedestal > 895 ) thePedestal -= 1024;
1203  pedestalProfiles.GetTIBTOBEntry( det, beam, pos ).SetValue( strip, thePedestal );
1204  }
1205  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1206 
1207 
1208  // TEC2TEC AT section
1209  det = 0; beam = 0; disk = 0;
1210  do { // loop using LASGlobalLoop functionality
1211  SiStripPedestals::Range pedRange = pedestalsHandle->getRange( detectorId.GetTEC2TECEntry( det, beam, disk ) );
1212  for( int strip = 0; strip < 512; ++strip ) {
1213  int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1214  if( thePedestal > 895 ) thePedestal -= 1024;
1215  pedestalProfiles.GetTEC2TECEntry( det, beam, disk ).SetValue( strip, thePedestal );
1216  }
1217  } while( moduleLoop.TEC2TECLoop( det, beam, disk ) );
1218 
1219 }
void strip(std::string &input, const std::string &blanks=" \n\t")
Definition: stringTools.cc:16
std::pair< ContainerIterator, ContainerIterator > Range
bool TEC2TECLoop(int &, int &, int &) const
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
void SetValue(unsigned int theStripNumber, const double &theValue)
LASGlobalData< LASModuleProfile > pedestalProfiles
T & GetTEC2TECEntry(int subdetector, int beam, int tecDisk)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
LASGlobalLoop moduleLoop
double LaserAlignment::getTEC2TECNominalBeamOffset ( unsigned int  det,
unsigned int  beam,
unsigned int  disk 
)
private

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

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

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

Definition at line 1325 of file LaserAlignment.cc.

References edm::hlt::Exception.

Referenced by endRun().

1325  {
1326 
1327  if( det > 1 || beam > 7 || disk > 5 ) {
1328  throw cms::Exception( "[LaserAlignment::getTEC2TECNominalBeamOffset]" ) << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " disk " << disk << "." << std::endl;
1329  }
1330 
1331  const double nominalOffsets[8] = { 0., 2.220, -2.221, 0., 2.214, 0., 2.214, -2.217 };
1332 
1333  if( det == 0 ) return -1. * nominalOffsets[beam];
1334  else return nominalOffsets[beam];
1335 
1336 }
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 1290 of file LaserAlignment.cc.

References edm::hlt::Exception, and or.

Referenced by endRun(), and produce().

1290  {
1291 
1292  if( det < 2 || det > 3 || beam > 7 || pos > 5 ) {
1293  throw cms::Exception( "[LaserAlignment::getTIBTOBNominalBeamOffset]" ) << " ERROR ** Called with nonexisting parameter set: det " << det << " beam " << beam << " pos " << pos << "." << std::endl;
1294  }
1295 
1296  const double nominalOffsetsTIB[8] = { 0.00035, 2.10687, -2.10827, -0.00173446, 2.10072, -0.00135114, 2.10105, -2.10401 };
1297 
1298  // in tob, modules have alternating orientations along the rods.
1299  // this is described by the following pattern.
1300  // (even more confusing, this pattern is inversed for beams 0, 5, 6, 7)
1301  const int orientationPattern[6] = { -1, 1, 1, -1, -1, 1 };
1302  const double nominalOffsetsTOB[8] = { 0.00217408, 1.58678, 117.733, 119.321, 120.906, 119.328, 117.743, 1.58947 };
1303 
1304 
1305  if( det == 2 ) return( -1. * nominalOffsetsTIB[beam] );
1306 
1307  else {
1308  if( beam == 0 or beam > 4 ) return( nominalOffsetsTOB[beam] * orientationPattern[pos] );
1309  else return( -1. * nominalOffsetsTOB[beam] * orientationPattern[pos] );
1310  }
1311 
1312 }
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
bool LaserAlignment::isATBeam ( void  )
private

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

Definition at line 1261 of file LaserAlignment.cc.

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

Referenced by produce().

1261  {
1262 
1263  int numberOfProfiles = 0;
1264 
1265  int det = 2; int beam = 0; int pos = 0; // search all TIB/TOB for signals
1266  do {
1267  if( isAcceptedProfile.GetTIBTOBEntry( det, beam, pos ) == 1 ) numberOfProfiles++;
1268  } while( moduleLoop.TIBTOBLoop( det, beam, pos ) );
1269 
1270  LogDebug( "[LaserAlignment::isATBeam]" ) << " Found: " << numberOfProfiles << "hits." << std::endl;
1271  std::cout << " [LaserAlignment::isATBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1272 
1273  if( numberOfProfiles > 10 ) return( true );
1274  return( false );
1275 
1276 }
#define LogDebug(id)
LASGlobalData< int > isAcceptedProfile
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
bool TIBTOBLoop(int &, int &, int &) const
tuple cout
Definition: gather_cfg.py:41
LASGlobalLoop moduleLoop
bool LaserAlignment::isTECBeam ( void  )
private

decide whether TEC or AT beams have fired

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

Definition at line 1230 of file LaserAlignment.cc.

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

Referenced by produce().

1230  {
1231 
1232  int numberOfProfiles = 0;
1233 
1234  int ring = 1; // search all ring6 modules for signals
1235  for( int det = 0; det < 2; ++det ) {
1236  for( int beam = 0; beam < 8; ++ beam ) {
1237  for( int disk = 0; disk < 9; ++disk ) {
1238  if( isAcceptedProfile.GetTECEntry( det, ring, beam, disk ) == 1 ) numberOfProfiles++;
1239  }
1240  }
1241  }
1242 
1243  LogDebug( "[LaserAlignment::isTECBeam]" ) << " Found: " << numberOfProfiles << "hits." << std::endl;
1244  std::cout << " [LaserAlignment::isTECBeam] -- Found: " << numberOfProfiles << " hits." << std::endl;
1245 
1246  if( numberOfProfiles > 10 ) return( true );
1247  return( false );
1248 
1249 }
#define LogDebug(id)
LASGlobalData< int > isAcceptedProfile
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
Definition: LASGlobalData.h:91
tuple cout
Definition: gather_cfg.py:41
void LaserAlignment::produce ( edm::Event theEvent,
edm::EventSetup const &  theSetup 
)
virtual

Implements edm::EDProducer.

Definition at line 259 of file LaserAlignment.cc.

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

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

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

for debugging & testing only, will disappear..

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

Definition at line 1699 of file LaserAlignment.cc.

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

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

Member Data Documentation

LASGlobalData<LASModuleProfile> LaserAlignment::collectedDataProfiles
private

Definition at line 210 of file LaserAlignment.h.

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

LASGlobalData<LASModuleProfile> LaserAlignment::currentDataProfiles
private

data profiles for the current event

Definition at line 207 of file LaserAlignment.h.

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

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

config switch

Definition at line 157 of file LaserAlignment.h.

Referenced by LaserAlignment().

bool LaserAlignment::firstEvent_
private

Definition at line 247 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

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

tracker geometry;

Definition at line 238 of file LaserAlignment.h.

Referenced by produce().

LASGlobalData<int> LaserAlignment::isAcceptedProfile
private

Definition at line 220 of file LaserAlignment.h.

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

LASProfileJudge LaserAlignment::judge
private

Definition at line 192 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

unsigned int LaserAlignment::judgeOverdriveThreshold
private

config parameters for the LASProfileJudge

Definition at line 160 of file LaserAlignment.h.

Referenced by LaserAlignment().

bool LaserAlignment::misalignedByRefGeometry
private

config switch

Definition at line 166 of file LaserAlignment.h.

Referenced by endRun(), and LaserAlignment().

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

Definition at line 227 of file LaserAlignment.h.

Referenced by CalculateNominalCoordinates(), and endRun().

LASGlobalData<int> LaserAlignment::numberOfAcceptedProfiles
private

Definition at line 216 of file LaserAlignment.h.

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

double LaserAlignment::peakFinderThreshold
private

config parameter

Definition at line 154 of file LaserAlignment.h.

Referenced by endRun(), and LaserAlignment().

LASGlobalData<LASModuleProfile> LaserAlignment::pedestalProfiles
private

Definition at line 204 of file LaserAlignment.h.

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

TDirectory* LaserAlignment::singleModulesDir
private

Definition at line 235 of file LaserAlignment.h.

Referenced by beginJob().

LASGlobalData<TH1D*> LaserAlignment::summedHistograms
private

Definition at line 224 of file LaserAlignment.h.

Referenced by beginJob(), and endRun().

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

Definition at line 201 of file LaserAlignment.h.

Referenced by fillDetectorId(), and produce().

AlignableTracker* LaserAlignment::theAlignableTracker
private

Definition at line 243 of file LaserAlignment.h.

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

std::string LaserAlignment::theAlignRecordName
private

Definition at line 245 of file LaserAlignment.h.

Referenced by endRun().

bool LaserAlignment::theApplyBeamKinkCorrections
private

config switch

Definition at line 151 of file LaserAlignment.h.

Referenced by endRun(), and LaserAlignment().

int LaserAlignment::theCompression
private

config parameter (histograms file compression level)

Definition at line 178 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

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

Definition at line 172 of file LaserAlignment.h.

Referenced by fillDataProfiles().

bool LaserAlignment::theDoPedestalSubtraction
private

config switch

Definition at line 145 of file LaserAlignment.h.

Referenced by LaserAlignment(), and produce().

std::string LaserAlignment::theErrorRecordName
private

Definition at line 245 of file LaserAlignment.h.

Referenced by endRun().

int LaserAlignment::theEvents
private

counter for the total number of events processed

Definition at line 142 of file LaserAlignment.h.

Referenced by endRun(), and produce().

TFile* LaserAlignment::theFile
private

Tree stuff.

Definition at line 234 of file LaserAlignment.h.

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

std::string LaserAlignment::theFileName
private

config parameter (histograms file output name)

Definition at line 181 of file LaserAlignment.h.

Referenced by beginJob(), and LaserAlignment().

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

Definition at line 240 of file LaserAlignment.h.

Referenced by produce().

LASConstants LaserAlignment::theLasConstants
private

Definition at line 195 of file LaserAlignment.h.

Referenced by endRun().

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

Definition at line 185 of file LaserAlignment.h.

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

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

config parameters

Definition at line 184 of file LaserAlignment.h.

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

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

Definition at line 213 of file LaserAlignment.h.

Referenced by beginJob(), and produce().

bool LaserAlignment::theSaveHistograms
private

config switch

Definition at line 175 of file LaserAlignment.h.

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

bool LaserAlignment::theSetNominalStrips
private

config switch

Definition at line 188 of file LaserAlignment.h.

Referenced by endRun(), and LaserAlignment().

bool LaserAlignment::theStoreToDB
private

config switch

Definition at line 169 of file LaserAlignment.h.

Referenced by endRun(), and LaserAlignment().

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

Definition at line 239 of file LaserAlignment.h.

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

bool LaserAlignment::theUseMinuitAlgorithm
private

config switch

Definition at line 148 of file LaserAlignment.h.

Referenced by endRun(), and LaserAlignment().

bool LaserAlignment::updateFromInputGeometry
private

config switch

Definition at line 163 of file LaserAlignment.h.

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