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" ) ),
39 theAlignableTracker(),
40 theAlignRecordName(
"TrackerAlignmentRcd" ),
41 theErrorRecordName(
"TrackerAlignmentErrorRcd" ),
43 theParameterSet( theConf )
48 std::cout <<
"=============================================================="
49 <<
"\n=== LaserAlignment module configuration ==="
62 <<
"\n Number of TEC modules masked = " <<
theMaskTecModules.size() <<
" (s. below list if > 0)"
63 <<
"\n Number of AT modules masked = " <<
theMaskAtModules.size() <<
" (s. below list if > 0)"
64 <<
"\n Store to database = " << (
theStoreToDB?
"true":
"false")
65 <<
"\n ----------------------------------------------- ----------"
67 <<
"\n=============================================================" << std::endl;
71 std::cout <<
" ===============================================================================================\n" << std::flush;
72 std::cout <<
" The following " <<
theMaskTecModules.size() <<
" TEC modules have been masked out and will not be considered by the TEC algorithm:\n " << std::flush;
77 std::cout <<
" ===============================================================================================\n\n" << std::flush;
80 std::cout <<
" ===============================================================================================\n" << std::flush;
81 std::cout <<
" The following " <<
theMaskAtModules.size() <<
" AT modules have been masked out and will not be considered by the AT algorithm:\n " << std::flush;
86 std::cout <<
" ===============================================================================================\n\n" << std::flush;
95 produces<TkLasBeamCollection, edm::InRun>(
"tkLaserBeams" ).setBranchAlias( alias +
"TkLasBeamCollection" );
141 throw cms::Exception(
" [LaserAlignment::beginJob]") <<
" ** ERROR: could not open file:"
142 <<
theFileName.c_str() <<
" for writing." << std::endl;
154 std::stringstream nameBuilder;
160 det = 0; ring = 0; beam = 0; disk = 0;
173 nameBuilder.str(
"" );
174 nameBuilder <<
"TEC";
175 if( det == 0 ) nameBuilder <<
"+";
else nameBuilder <<
"-";
176 nameBuilder <<
"_Ring";
177 if( ring == 0 ) nameBuilder <<
"4";
else nameBuilder <<
"6";
178 nameBuilder <<
"_Beam" <<
beam;
179 nameBuilder <<
"_Disk" << disk;
184 nameBuilder <<
"_Histo";
185 summedHistograms.
SetTECEntry( det, ring, beam, disk,
new TH1D( nameBuilder.str().c_str(), nameBuilder.str().c_str(), 512, 0, 512 ) );
193 det = 2; beam = 0; pos = 0;
206 nameBuilder.str(
"" );
207 if( det == 2 ) nameBuilder <<
"TIB";
else nameBuilder <<
"TOB";
208 nameBuilder <<
"_Beam" <<
beam;
209 nameBuilder <<
"_Zpos" << pos;
215 nameBuilder <<
"_Histo";
224 det = 0; beam = 0; disk = 0;
237 nameBuilder.str(
"" );
238 nameBuilder <<
"TEC(AT)";
239 if( det == 0 ) nameBuilder <<
"+";
else nameBuilder <<
"-";
240 nameBuilder <<
"_Beam" <<
beam;
241 nameBuilder <<
"_Disk" << disk;
246 nameBuilder <<
"_Histo";
306 LogDebug(
"LaserAlignment") <<
"==========================================================="
307 <<
"\n Private analysis of event #"<< theEvent.
id().
event()
308 <<
" in run #" << theEvent.
id().
run();
326 for( det = 0; det < 2; ++det ) {
327 for( beam = 0; beam < 8; ++
beam ) {
328 for( disk = 0; disk < 9; ++disk ) {
340 det = 2; beam = 0; pos = 0;
358 std::cout <<
" [LaserAlignment::produce] -- LaserAlignment::isTECBeam declares this event " << ( isTECMode ?
"" :
"NOT " ) <<
"a TEC event." << std::endl;
362 std::cout <<
" [LaserAlignment::produce] -- LaserAlignment::isATBeam declares this event " << ( isATMode ?
"" :
"NOT " ) <<
"an AT event." << std::endl;
375 det = 0; ring = 0; beam = 0; disk = 0;
408 det = 2; beam = 0; pos = 0;
424 det = 0; beam = 0; disk = 0;
471 std::cout <<
" [LaserAlignment::endRun] -- Total number of events processed: " <<
theEvents << std::endl;
488 std::pair<double,double> peakFinderResults;
505 det = 0; ring = 0; beam = 0; disk = 0;
513 if( !isGoodFit )
std::cout <<
" [LaserAlignment::endRun] ** WARNING: Fit failed for TEC det: "
514 << det <<
", ring: " << ring <<
", beam: " << beam <<
", disk: " << disk
531 measuredStripPositions.
GetTECEntry( det, ring, beam, disk ) = peakFinderResults;
533 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
542 measuredStripPositions.
GetTECEntry( det, ring, beam, disk ) = std::pair<float,float>( 256., 1000. );
543 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( 256. ) );
555 det = 2; beam = 0; pos = 0;
563 if( !isGoodFit )
std::cout <<
" [LaserAlignment::endJob] ** WARNING: Fit failed for TIB/TOB det: "
564 << det <<
", beam: " << beam <<
", pos: " << pos
579 measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ) = peakFinderResults;
581 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
599 det = 0; beam = 0; disk = 0;
606 if( !isGoodFit )
std::cout <<
" [LaserAlignment::endRun] ** WARNING: Fit failed for TEC2TEC det: "
607 << det <<
", beam: " << beam <<
", disk: " << disk
622 measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ) = peakFinderResults;
624 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
690 const unsigned int nIterations = 30;
705 endcapParameters.
Print();
712 geometryUpdater.
EndcapUpdate( endcapParameters, measuredCoordinates );
748 const unsigned int nIterations = 30;
769 alignmentTubeParameters.
Print();
792 for( det = 0; det < 2; ++det ) {
793 for( ring = 0; ring < 2; ++
ring ) {
794 for( beam = 0; beam < 8; ++
beam ) {
797 TkLasBeam currentBeam( 100 * det + 10 * beam + ring );
800 const int firstDisk = det==0 ? 0 : 8;
801 const int lastDisk = det==0 ? 8 : 0;
804 for( disk = firstDisk; det==0 ? disk <= lastDisk : disk >= lastDisk; det==0 ? ++disk : --disk ) {
814 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTECEntry( det, ring, beam, disk ).first ),
815 theStripDet->specificTopology().localError( measuredStripPositions.
GetTECEntry( det, ring, beam, disk ).first, measuredStripPositions.
GetTECEntry( det, ring, beam, disk ).second ),
823 laserBeams->push_back( currentBeam );
834 for( beam = 0; beam < 8; ++
beam ) {
837 TkLasBeam currentBeam( 100 * 2 + 10 * beam + 0 );
842 for( disk = 4; disk >= 0; --disk ) {
852 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first ),
853 theStripDet->specificTopology().localError( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first, measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).second ),
863 for( det = 2; det < 4; ++det ) {
864 for( pos = 5; pos >= 0; --pos ) {
874 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ).first ),
875 theStripDet->specificTopology().localError( measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ).first, measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ).second ),
887 for( disk = 0; disk < 5; ++disk ) {
897 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first ),
898 theStripDet->specificTopology().localError( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first, measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).second ),
909 laserBeams->push_back( currentBeam );
915 theRun.
put( laserBeams,
"tkLaserBeams" );
928 std::cout <<
" [LaserAlignment::endRun] -- Storing the calculated alignment parameters to the DataBase:" << std::endl;
933 throw cms::Exception(
"NotAvailable" ) <<
"PoolDBOutputService not available";
953 std::cout <<
" [LaserAlignment::endRun] -- Storing done." << std::endl;
983 bool isRawDigi =
false;
986 int det = 0,
ring = 0,
beam = 0, disk = 0, pos = 0;
997 if( digiType ==
"Raw" ) {
998 theEvent.
getByLabel( digiProducer, digiLabel, theStripRawDigis );
1001 else if( digiType ==
"Processed" ) {
1002 theEvent.
getByLabel( digiProducer, digiLabel, theStripDigis );
1006 throw cms::Exception(
" [LaserAlignment::fillDataProfiles]") <<
" ** ERROR: Invalid digi type: \"" << digiType <<
"\" specified in configuration." << std::endl;
1012 det = 0;
ring = 0;
beam = 0; disk = 0;
1025 if( detSetIter == theStripRawDigis->end() ) {
1026 throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: No raw DetSet found for det: " << detRawId <<
"." << std::endl;
1034 for (; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1036 const int channel = distance( digiRangeStart, digiRangeIterator );
1038 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: raw digi channel: " << channel <<
" out of range for det: " << detRawId <<
"." << std::endl;
1049 if( detSetIter == theStripDigis->end() )
continue;
1054 for(; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1057 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: digi strip: " << digi.
strip() <<
" out of range for det: " << detRawId <<
"." << std::endl;
1070 det = 2;
beam = 0; pos = 0;
1083 if( detSetIter == theStripRawDigis->end() ) {
1084 throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: No raw DetSet found for det: " << detRawId <<
"." << std::endl;
1092 for (; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1094 const int channel = distance( digiRangeStart, digiRangeIterator );
1096 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: raw digi channel: " << channel <<
" out of range for det: " << detRawId <<
"." << std::endl;
1107 if( detSetIter == theStripDigis->end() )
continue;
1112 for(; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1115 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: digi strip: " << digi.
strip() <<
" out of range for det: " << detRawId <<
"." << std::endl;
1125 det = 0;
beam = 0; disk = 0;
1138 if( detSetIter == theStripRawDigis->end() ) {
1139 throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: No raw DetSet found for det: " << detRawId <<
"." << std::endl;
1147 for (; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1149 const int channel = distance( digiRangeStart, digiRangeIterator );
1151 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: raw digi channel: " << channel <<
" out of range for det: " << detRawId <<
"." << std::endl;
1162 if( detSetIter == theStripDigis->end() )
continue;
1167 for(; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1170 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: digi strip: " << digi.
strip() <<
" out of range for det: " << detRawId <<
"." << std::endl;
1198 det = 0; ring = 0; beam = 0; disk = 0;
1201 for(
int strip = 0; strip < 512; ++strip ) {
1202 int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1203 if( thePedestal > 895 ) thePedestal -= 1024;
1210 det = 2; beam = 0; pos = 0;
1213 for(
int strip = 0; strip < 512; ++strip ) {
1214 int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1215 if( thePedestal > 895 ) thePedestal -= 1024;
1222 det = 0; beam = 0; disk = 0;
1225 for(
int strip = 0; strip < 512; ++strip ) {
1226 int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1227 if( thePedestal > 895 ) thePedestal -= 1024;
1245 int numberOfProfiles = 0;
1248 for(
int det = 0; det < 2; ++det ) {
1250 for(
int disk = 0; disk < 9; ++disk ) {
1256 LogDebug(
"[LaserAlignment::isTECBeam]" ) <<
" Found: " << numberOfProfiles <<
"hits." << std::endl;
1257 std::cout <<
" [LaserAlignment::isTECBeam] -- Found: " << numberOfProfiles <<
" hits." << std::endl;
1259 if( numberOfProfiles > 10 )
return(
true );
1276 int numberOfProfiles = 0;
1278 int det = 2;
int beam = 0;
int pos = 0;
1283 LogDebug(
"[LaserAlignment::isATBeam]" ) <<
" Found: " << numberOfProfiles <<
"hits." << std::endl;
1284 std::cout <<
" [LaserAlignment::isATBeam] -- Found: " << numberOfProfiles <<
" hits." << std::endl;
1286 if( numberOfProfiles > 10 )
return(
true );
1305 if( det < 2 || det > 3 || beam > 7 || pos > 5 ) {
1306 throw cms::Exception(
"[LaserAlignment::getTIBTOBNominalBeamOffset]" ) <<
" ERROR ** Called with nonexisting parameter set: det " << det <<
" beam " << beam <<
" pos " << pos <<
"." << std::endl;
1309 const double nominalOffsetsTIB[8] = { 0.00035, 2.10687, -2.10827, -0.00173446, 2.10072, -0.00135114, 2.10105, -2.10401 };
1314 const int orientationPattern[6] = { -1, 1, 1, -1, -1, 1 };
1315 const double nominalOffsetsTOB[8] = { 0.00217408, 1.58678, 117.733, 119.321, 120.906, 119.328, 117.743, 1.58947 };
1318 if( det == 2 )
return( -1. * nominalOffsetsTIB[beam] );
1321 if( beam == 0
or beam > 4 )
return( nominalOffsetsTOB[beam] * orientationPattern[pos] );
1322 else return( -1. * nominalOffsetsTOB[beam] * orientationPattern[pos] );
1340 if( det > 1 || beam > 7 || disk > 5 ) {
1341 throw cms::Exception(
"[LaserAlignment::getTEC2TECNominalBeamOffset]" ) <<
" ERROR ** Called with nonexisting parameter set: det " << det <<
" beam " << beam <<
" disk " << disk <<
"." << std::endl;
1344 const double nominalOffsets[8] = { 0., 2.220, -2.221, 0., 2.214, 0., 2.214, -2.217 };
1346 if( det == 0 )
return -1. * nominalOffsets[
beam];
1347 else return nominalOffsets[
beam];
1365 const double tecPhiPositions[8] = { 0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486 };
1366 const double atPhiPositions[8] = { 0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784 };
1369 const double tobRPosition = 600.;
1370 const double tibRPosition = 514.;
1371 const double tecRPosition[2] = { 564., 840. };
1374 const double tobZPosition[6] = { 1040., 580., 220., -140., -500., -860. };
1375 const double tibZPosition[6] = { 620., 380., 180., -100., -340., -540. };
1378 const double tecZPosition[9] = { 1322.5, 1462.5, 1602.5, 1742.5, 1882.5, 2057.5, 2247.5, 2452.5, 2667.5 };
1392 det = 0; ring = 0, beam = 0; disk = 0;
1402 }
while( moduleLoop.
TECLoop( det, ring, beam, disk ) );
1407 det = 2; beam = 0; pos = 0;
1416 }
while( moduleLoop.
TIBTOBLoop( det, beam, pos ) );
1422 det = 0; beam = 0; disk = 0;
1432 }
while( moduleLoop.
TEC2TECLoop( det, beam, disk ) );
1447 if( angle < -1. * M_PI || angle >
M_PI ) {
1448 throw cms::Exception(
" [LaserAlignment::ConvertAngle] ") <<
"** ERROR: Called with illegal input angle: " << angle <<
"." << std::endl;
1451 if( angle >= 0. )
return angle;
1452 else return( angle + 2. * M_PI );
1468 std:: cout << std::endl <<
" [LaserAlignment::DumpPosFileSet] -- Dump: " << std::endl;
1471 det = 0; ring = 0; beam = 0; disk = 0;
1474 }
while ( loop.
TECLoop( det, ring, beam, disk ) );
1477 det = 2; beam = 0; pos = 0;
1480 }
while( loop.
TIBTOBLoop( det, beam, pos ) );
1483 det = 0; beam = 0; disk = 0;
1488 std:: cout << std::endl <<
" [LaserAlignment::DumpPosFileSet] -- End dump: " << std::endl;
1504 std:: cout << std::endl <<
" [LaserAlignment::DumpStripFileSet] -- Dump: " << std::endl;
1507 det = 0; ring = 0; beam = 0; disk = 0;
1509 std::cout <<
"STRIP " << det <<
"\t" << beam <<
"\t" << disk <<
"\t" << ring <<
"\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).first
1510 <<
"\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).second << std::endl;
1511 }
while ( loop.
TECLoop( det, ring, beam, disk ) );
1514 det = 2; beam = 0; pos = 0;
1516 std::cout <<
"STRIP " << det <<
"\t" << beam <<
"\t" << pos <<
"\t" <<
"-1" <<
"\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).first
1517 <<
"\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).second << std::endl;
1518 }
while( loop.
TIBTOBLoop( det, beam, pos ) );
1521 det = 0; beam = 0; disk = 0;
1523 std::cout <<
"STRIP " << det <<
"\t" << beam <<
"\t" << disk <<
"\t" <<
"-1" <<
"\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first
1524 <<
"\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).second << std::endl;
1527 std:: cout << std::endl <<
" [LaserAlignment::DumpStripFileSet] -- End dump: " << std::endl;
1541 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC+:" << std::endl;
1542 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1543 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1547 for(
int disk = 0; disk < 9; ++disk ) {
1553 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1554 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1558 for(
int disk = 0; disk < 9; ++disk ) {
1564 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC-:" << std::endl;
1565 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1566 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1570 for(
int disk = 0; disk < 9; ++disk ) {
1576 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1577 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1581 for(
int disk = 0; disk < 9; ++disk ) {
1587 std::cout <<
" [LaserAlignment::DumpHitmaps] -- End of dump." << std::endl << std::endl;
1612 det = 0; ring = 0; beam = 0; disk = 0;
1619 const double nominalPhi = nominalCoordinates.
GetTECEntry( det, ring, beam, disk ).
GetPhi();
1625 measuredCoordinates.
GetTECEntry( det, ring, beam, disk ).
SetPhi( nominalPhi - phiCorrection );
1629 }
while ( moduleLoop.
TECLoop( det, ring, beam, disk ) );
1650 int det,
beam, disk, pos;
1659 det = 2; beam = 0; pos = 0;
1676 }
while ( moduleLoop.
TIBTOBLoop( det, beam, pos ) );
1681 det = 0; beam = 0; disk = 0;
1698 }
while ( moduleLoop.
TEC2TECLoop( det, beam, disk ) );
1718 const double atPhiPositions[8] = { 0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784 };
1719 const double tecPhiPositions[8] = { 0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486 };
1720 const double zPositions[9] = { 125.0, 139.0, 153.0, 167.0, 181.0, 198.5, 217.5, 238.0, 259.5 };
1721 const double zPositionsTIB[6] = { 62.0, 38.0, 18.0, -10.0, -34.0, -54.0 };
1722 const double zPositionsTOB[6] = { 104.0, 58.0, 22.0, -14.0, -50.0, -86.0 };
1727 det = 0; ring = 0; beam = 0; disk = 0;
1730 const double radius = ring?84.0:56.4;
1739 const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1740 std::cout <<
"__TEC: " << 256. - theStripDet->specificTopology().strip( lp ) << std::endl;
1747 det = 2; beam = 0; pos = 0;
1750 const double radius = (det==2?51.4:58.4);
1751 const double theZ = (det==2?zPositionsTIB[pos]:zPositionsTOB[pos]);
1760 const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1761 std::cout <<
"__TIBTOB det " << det <<
" beam " << beam <<
" pos " << pos <<
" " << 256. - theStripDet->specificTopology().strip( lp );
1762 std::cout <<
" " << theStripDet->position().perp()<< std::endl;
1769 det = 0; beam = 0; disk = 0;
1772 const double radius = 56.4;
1781 const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1782 std::cout <<
"__TEC2TEC det " << det <<
" beam " << beam <<
" disk " << disk <<
" " << 256. - theStripDet->specificTopology().strip( lp ) << std::endl;
bool IsSignalIn(const LASModuleProfile &, double)
void SetTEC2TECEntry(int subdetector, int beam, int tecDisk, T)
const uint16_t & adc() const
T getParameter(std::string const &) const
EventNumber_t event() const
unsigned int judgeOverdriveThreshold
config parameters for the LASProfileJudge
void fillDataProfiles(edm::Event const &, edm::EventSetup const &)
fill profiles from SiStrip(Raw)Digi container
virtual void beginJob() override
const edm::ParameterSet theParameterSet
bool theSaveHistograms
config switch
void SetPhiError(double aPhiError)
void ApplyEndcapMaskingCorrections(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &, LASEndcapAlignmentParameterSet &)
apply endcap correction to masked modules in TEC
virtual void produce(edm::Event &, edm::EventSetup const &) override
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
void TrackerUpdate(LASEndcapAlignmentParameterSet &, LASBarrelAlignmentParameterSet &, AlignableTracker &)
void SetMisalignmentFromRefGeometry(bool)
bool misalignedByRefGeometry
config switch
std::string theAlignRecordName
#define DEFINE_FWK_MODULE(type)
bool isTECBeam(void)
decide whether TEC or AT beams have fired
TrackerGeometry * build(const GeometricDet *gd, const edm::ParameterSet &pSet)
LaserAlignment(edm::ParameterSet const &theConf)
double getTIBTOBNominalBeamOffset(unsigned int, unsigned int, unsigned int)
returns the nominal beam position (strips) in TOB for the profileJudge
edm::ESHandle< TrackerGeometry > theTrackerGeometry
double peakFinderThreshold
config parameter
void DumpHitmaps(LASGlobalData< int > &)
for debugging only, will disappear
void DumpPosFileSet(LASGlobalData< LASCoordinateSet > &)
for debugging only, will disappear
LASGlobalData< int > numberOfAcceptedProfiles
void SetAllValuesTo(const double &)
std::pair< ContainerIterator, ContainerIterator > Range
bool theDoPedestalSubtraction
config switch
LASGlobalData< LASModuleProfile > currentDataProfiles
data profiles for the current event
std::vector< unsigned int > theMaskTecModules
config parameters
bool theUseMinuitAlgorithm
config switch
TFile * theFile
Tree stuff.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
LASGlobalData< int > isAcceptedProfile
std::vector< edm::ParameterSet > theDigiProducersList
void DumpStripFileSet(LASGlobalData< std::pair< float, float > > &)
for debugging only, will disappear
void fillPedestalProfiles(edm::ESHandle< SiStripPedestals > &)
fill pedestals from dbase
double GetPhi(void) const
Handle< TkLasBeamCollection > laserBeams
LASGlobalData< TH1D * > summedHistograms
bool FindPeakIn(const LASModuleProfile &, std::pair< double, double > &, TH1D *, const double)
TDirectory * singleModulesDir
void push_back(const SiStripLaserRecHit2D &aHit)
insert a hit in the data vector
double ConvertAngle(double)
convert an angle in the [-pi,pi] range to the [0,2*pi] range
LASBarrelAlignmentParameterSet CalculateParameters(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &)
edm::ESHandle< Alignments > theGlobalPositionRcd
const uint16_t & strip() const
bool TEC2TECLoop(int &, int &, int &) const
std::string theFileName
config parameter (histograms file output name)
cond::Time_t beginOfTime() const
void get(HolderT &iHolder) const
AlignmentErrors * alignmentErrors() const
Return alignment errors, sorted by DetId.
virtual void endJob() override
std::vector< unsigned int > tecDoubleHitDetId
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
void SetAmplitudeThreshold(double)
virtual void endRunProduce(edm::Run &, const edm::EventSetup &) override
bool theApplyBeamKinkCorrections
config switch
T & GetTIBTOBEntry(int subdetector, int beam, int tibTobPosition)
bool JudgeProfile(const LASModuleProfile &, double)
A Digi for the silicon strip detector, containing both strip and adc information, and suitable for st...
void SetReverseDirection(bool)
void SetTIBTOBEntry(int subdetector, int beam, int tibTobPosition, T)
virtual const GeomDet * idToDet(DetId) const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
void CalculateNominalCoordinates(void)
fills a LASGlobalData<LASCoordinateSet> with nominal module positions
iterator end()
Return the off-the-end iterator.
LASEndcapAlignmentParameterSet CalculateParameters(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &)
std::string theErrorRecordName
double GetTEC2TECAlignmentParameterCorrection(int, int, int, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
void SetValue(unsigned int theStripNumber, const double &theValue)
bool theStoreToDB
config switch
Detector identifier class for the strip tracker.
LASGlobalData< LASModuleProfile > pedestalProfiles
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 const * product() const
void SetOverdriveThreshold(unsigned int)
T & GetTECEntry(int subdetector, int tecRing, int beam, int tecDisk)
LASGlobalData< std::string > theProfileNames
double GetAlignmentParameterCorrection(int, int, int, int, LASGlobalData< LASCoordinateSet > &, LASEndcapAlignmentParameterSet &)
std::vector< unsigned int > theMaskAtModules
void ApplyATMaskingCorrections(LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
same for alignment tube modules
void testRoutine(void)
for debugging & testing only, will disappear..
LASGlobalData< LASModuleProfile > collectedDataProfiles
void fillDetectorId(void)
fill hard coded detIds
void ApplyBeamKinkCorrections(LASGlobalData< LASCoordinateSet > &) const
int theCompression
config parameter (histograms file compression level)
void EnableZeroFilter(bool)
LASGlobalData< unsigned int > detectorId
bool TECLoop(int &, int &, int &, int &) const
bool TIBTOBLoop(int &, int &, int &) const
double GetPhiError(void) const
void put(std::auto_ptr< PROD > product)
Put a new product.
std::vector< TkLasBeam > TkLasBeamCollection
iterator begin()
Return an iterator to the first DetSet.
bool enableJudgeZeroFilter
config switch
volatile std::atomic< bool > shutdown_flag false
Alignments * alignments() const
Return alignments, sorted by DetId.
collection_type::const_iterator const_iterator
collection_type::const_iterator const_iterator
const uint16_t & adc() const
A Digi for the silicon strip detector, containing only adc information, and suitable for storing raw ...
double GetTIBTOBAlignmentParameterCorrection(int, int, int, LASGlobalData< LASCoordinateSet > &, LASBarrelAlignmentParameterSet &)
void SetTECEntry(int subdetector, int tecRing, int beam, int tecDisk, T)
edm::ESHandle< GeometricDet > gD
tracker geometry;
void EndcapUpdate(LASEndcapAlignmentParameterSet &, LASGlobalData< LASCoordinateSet > &)
bool updateFromInputGeometry
config switch
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
bool theSetNominalStrips
config switch