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(
"TrackerAlignmentErrorExtendedRcd" ),
47 std::cout <<
"=============================================================="
48 <<
"\n=== LaserAlignment module configuration ==="
61 <<
"\n Number of TEC modules masked = " <<
theMaskTecModules.size() <<
" (s. below list if > 0)"
62 <<
"\n Number of AT modules masked = " <<
theMaskAtModules.size() <<
" (s. below list if > 0)"
63 <<
"\n Store to database = " << (
theStoreToDB?
"true":
"false")
64 <<
"\n ----------------------------------------------- ----------"
66 <<
"\n=============================================================" << std::endl;
70 std::cout <<
" ===============================================================================================\n" << std::flush;
71 std::cout <<
" The following " <<
theMaskTecModules.size() <<
" TEC modules have been masked out and will not be considered by the TEC algorithm:\n " << std::flush;
76 std::cout <<
" ===============================================================================================\n\n" << std::flush;
79 std::cout <<
" ===============================================================================================\n" << std::flush;
80 std::cout <<
" The following " <<
theMaskAtModules.size() <<
" AT modules have been masked out and will not be considered by the AT algorithm:\n " << std::flush;
85 std::cout <<
" ===============================================================================================\n\n" << std::flush;
94 produces<TkLasBeamCollection, edm::InRun>(
"tkLaserBeams" ).setBranchAlias( alias +
"TkLasBeamCollection" );
140 throw cms::Exception(
" [LaserAlignment::beginJob]") <<
" ** ERROR: could not open file:"
141 <<
theFileName.c_str() <<
" for writing." << std::endl;
153 std::stringstream nameBuilder;
159 det = 0; ring = 0; beam = 0; disk = 0;
172 nameBuilder.str(
"" );
173 nameBuilder <<
"TEC";
174 if( det == 0 ) nameBuilder <<
"+";
else nameBuilder <<
"-";
175 nameBuilder <<
"_Ring";
176 if( ring == 0 ) nameBuilder <<
"4";
else nameBuilder <<
"6";
177 nameBuilder <<
"_Beam" <<
beam;
178 nameBuilder <<
"_Disk" << disk;
183 nameBuilder <<
"_Histo";
184 summedHistograms.
SetTECEntry( det, ring, beam, disk,
new TH1D( nameBuilder.str().c_str(), nameBuilder.str().c_str(), 512, 0, 512 ) );
192 det = 2; beam = 0; pos = 0;
205 nameBuilder.str(
"" );
206 if( det == 2 ) nameBuilder <<
"TIB";
else nameBuilder <<
"TOB";
207 nameBuilder <<
"_Beam" <<
beam;
208 nameBuilder <<
"_Zpos" << pos;
214 nameBuilder <<
"_Histo";
223 det = 0; beam = 0; disk = 0;
236 nameBuilder.str(
"" );
237 nameBuilder <<
"TEC(AT)";
238 if( det == 0 ) nameBuilder <<
"+";
else nameBuilder <<
"-";
239 nameBuilder <<
"_Beam" <<
beam;
240 nameBuilder <<
"_Disk" << disk;
245 nameBuilder <<
"_Histo";
307 LogDebug(
"LaserAlignment") <<
"==========================================================="
308 <<
"\n Private analysis of event #"<< theEvent.
id().
event()
309 <<
" in run #" << theEvent.
id().
run();
327 for( det = 0; det < 2; ++det ) {
328 for( beam = 0; beam < 8; ++
beam ) {
329 for( disk = 0; disk < 9; ++disk ) {
341 det = 2; beam = 0; pos = 0;
359 std::cout <<
" [LaserAlignment::produce] -- LaserAlignment::isTECBeam declares this event " << ( isTECMode ?
"" :
"NOT " ) <<
"a TEC event." << std::endl;
363 std::cout <<
" [LaserAlignment::produce] -- LaserAlignment::isATBeam declares this event " << ( isATMode ?
"" :
"NOT " ) <<
"an AT event." << std::endl;
376 det = 0; ring = 0; beam = 0; disk = 0;
409 det = 2; beam = 0; pos = 0;
425 det = 0; beam = 0; disk = 0;
472 std::cout <<
" [LaserAlignment::endRun] -- Total number of events processed: " <<
theEvents << std::endl;
489 std::pair<double,double> peakFinderResults;
506 det = 0; ring = 0; beam = 0; disk = 0;
514 if( !isGoodFit )
std::cout <<
" [LaserAlignment::endRun] ** WARNING: Fit failed for TEC det: "
515 << det <<
", ring: " << ring <<
", beam: " << beam <<
", disk: " << disk
532 measuredStripPositions.
GetTECEntry( det, ring, beam, disk ) = peakFinderResults;
534 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
543 measuredStripPositions.
GetTECEntry( det, ring, beam, disk ) = std::pair<float,float>( 256., 1000. );
544 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( 256. ) );
556 det = 2; beam = 0; pos = 0;
564 if( !isGoodFit )
std::cout <<
" [LaserAlignment::endJob] ** WARNING: Fit failed for TIB/TOB det: "
565 << det <<
", beam: " << beam <<
", pos: " << pos
580 measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ) = peakFinderResults;
582 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
600 det = 0; beam = 0; disk = 0;
607 if( !isGoodFit )
std::cout <<
" [LaserAlignment::endRun] ** WARNING: Fit failed for TEC2TEC det: "
608 << det <<
", beam: " << beam <<
", disk: " << disk
623 measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ) = peakFinderResults;
625 const GlobalPoint& globalPoint = theStripDet->surface().toGlobal( theStripDet->specificTopology().localPosition( positionInStrips ) );
691 const unsigned int nIterations = 30;
706 endcapParameters.
Print();
713 geometryUpdater.
EndcapUpdate( endcapParameters, measuredCoordinates );
749 const unsigned int nIterations = 30;
770 alignmentTubeParameters.
Print();
793 for( det = 0; det < 2; ++det ) {
794 for( ring = 0; ring < 2; ++
ring ) {
795 for( beam = 0; beam < 8; ++
beam ) {
798 TkLasBeam currentBeam( 100 * det + 10 * beam + ring );
801 const int firstDisk = det==0 ? 0 : 8;
802 const int lastDisk = det==0 ? 8 : 0;
805 for( disk = firstDisk; det==0 ? disk <= lastDisk : disk >= lastDisk; det==0 ? ++disk : --disk ) {
815 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTECEntry( det, ring, beam, disk ).first ),
816 theStripDet->specificTopology().localError( measuredStripPositions.
GetTECEntry( det, ring, beam, disk ).first, measuredStripPositions.
GetTECEntry( det, ring, beam, disk ).second ),
824 laserBeams->push_back( currentBeam );
835 for( beam = 0; beam < 8; ++
beam ) {
838 TkLasBeam currentBeam( 100 * 2 + 10 * beam + 0 );
843 for( disk = 4; disk >= 0; --disk ) {
853 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first ),
854 theStripDet->specificTopology().localError( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first, measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).second ),
864 for( det = 2; det < 4; ++det ) {
865 for( pos = 5; pos >= 0; --pos ) {
875 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ).first ),
876 theStripDet->specificTopology().localError( measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ).first, measuredStripPositions.
GetTIBTOBEntry( det, beam, pos ).second ),
888 for( disk = 0; disk < 5; ++disk ) {
898 theStripDet->specificTopology().localPosition( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first ),
899 theStripDet->specificTopology().localError( measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).first, measuredStripPositions.
GetTEC2TECEntry( det, beam, disk ).second ),
910 laserBeams->push_back( currentBeam );
916 theRun.
put( laserBeams,
"tkLaserBeams" );
929 std::cout <<
" [LaserAlignment::endRun] -- Storing the calculated alignment parameters to the DataBase:" << std::endl;
934 throw cms::Exception(
"NotAvailable" ) <<
"PoolDBOutputService not available";
954 std::cout <<
" [LaserAlignment::endRun] -- Storing done." << std::endl;
984 bool isRawDigi =
false;
987 int det = 0,
ring = 0,
beam = 0, disk = 0, pos = 0;
998 if( digiType ==
"Raw" ) {
999 theEvent.
getByLabel( digiProducer, digiLabel, theStripRawDigis );
1002 else if( digiType ==
"Processed" ) {
1003 theEvent.
getByLabel( digiProducer, digiLabel, theStripDigis );
1007 throw cms::Exception(
" [LaserAlignment::fillDataProfiles]") <<
" ** ERROR: Invalid digi type: \"" << digiType <<
"\" specified in configuration." << std::endl;
1013 det = 0;
ring = 0;
beam = 0; disk = 0;
1026 if( detSetIter == theStripRawDigis->end() ) {
1027 throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: No raw DetSet found for det: " << detRawId <<
"." << std::endl;
1035 for (; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1037 const int channel =
distance( digiRangeStart, digiRangeIterator );
1039 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: raw digi channel: " << channel <<
" out of range for det: " << detRawId <<
"." << std::endl;
1050 if( detSetIter == theStripDigis->end() )
continue;
1055 for(; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1058 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: digi strip: " << digi.
strip() <<
" out of range for det: " << detRawId <<
"." << std::endl;
1071 det = 2;
beam = 0; pos = 0;
1084 if( detSetIter == theStripRawDigis->end() ) {
1085 throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: No raw DetSet found for det: " << detRawId <<
"." << std::endl;
1093 for (; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1095 const int channel =
distance( digiRangeStart, digiRangeIterator );
1097 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: raw digi channel: " << channel <<
" out of range for det: " << detRawId <<
"." << std::endl;
1108 if( detSetIter == theStripDigis->end() )
continue;
1113 for(; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1116 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: digi strip: " << digi.
strip() <<
" out of range for det: " << detRawId <<
"." << std::endl;
1126 det = 0;
beam = 0; disk = 0;
1139 if( detSetIter == theStripRawDigis->end() ) {
1140 throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: No raw DetSet found for det: " << detRawId <<
"." << std::endl;
1148 for (; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1150 const int channel =
distance( digiRangeStart, digiRangeIterator );
1152 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: raw digi channel: " << channel <<
" out of range for det: " << detRawId <<
"." << std::endl;
1163 if( detSetIter == theStripDigis->end() )
continue;
1168 for(; digiRangeIterator != detSetIter->data.
end(); ++digiRangeIterator ) {
1171 else throw cms::Exception(
"[Laser Alignment::fillDataProfiles]" ) <<
" ** ERROR: digi strip: " << digi.
strip() <<
" out of range for det: " << detRawId <<
"." << std::endl;
1199 det = 0; ring = 0; beam = 0; disk = 0;
1202 for(
int strip = 0; strip < 512; ++strip ) {
1203 int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1204 if( thePedestal > 895 ) thePedestal -= 1024;
1211 det = 2; beam = 0; pos = 0;
1214 for(
int strip = 0; strip < 512; ++strip ) {
1215 int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1216 if( thePedestal > 895 ) thePedestal -= 1024;
1223 det = 0; beam = 0; disk = 0;
1226 for(
int strip = 0; strip < 512; ++strip ) {
1227 int thePedestal = int( pedestalsHandle->getPed( strip, pedRange ) );
1228 if( thePedestal > 895 ) thePedestal -= 1024;
1246 int numberOfProfiles = 0;
1249 for(
int det = 0; det < 2; ++det ) {
1251 for(
int disk = 0; disk < 9; ++disk ) {
1257 LogDebug(
"[LaserAlignment::isTECBeam]" ) <<
" Found: " << numberOfProfiles <<
"hits." << std::endl;
1258 std::cout <<
" [LaserAlignment::isTECBeam] -- Found: " << numberOfProfiles <<
" hits." << std::endl;
1260 if( numberOfProfiles > 10 )
return(
true );
1277 int numberOfProfiles = 0;
1279 int det = 2;
int beam = 0;
int pos = 0;
1284 LogDebug(
"[LaserAlignment::isATBeam]" ) <<
" Found: " << numberOfProfiles <<
"hits." << std::endl;
1285 std::cout <<
" [LaserAlignment::isATBeam] -- Found: " << numberOfProfiles <<
" hits." << std::endl;
1287 if( numberOfProfiles > 10 )
return(
true );
1306 if( det < 2 || det > 3 || beam > 7 || pos > 5 ) {
1307 throw cms::Exception(
"[LaserAlignment::getTIBTOBNominalBeamOffset]" ) <<
" ERROR ** Called with nonexisting parameter set: det " << det <<
" beam " << beam <<
" pos " << pos <<
"." << std::endl;
1310 const double nominalOffsetsTIB[8] = { 0.00035, 2.10687, -2.10827, -0.00173446, 2.10072, -0.00135114, 2.10105, -2.10401 };
1315 const int orientationPattern[6] = { -1, 1, 1, -1, -1, 1 };
1316 const double nominalOffsetsTOB[8] = { 0.00217408, 1.58678, 117.733, 119.321, 120.906, 119.328, 117.743, 1.58947 };
1319 if( det == 2 )
return( -1. * nominalOffsetsTIB[beam] );
1322 if( beam == 0
or beam > 4 )
return( nominalOffsetsTOB[beam] * orientationPattern[pos] );
1323 else return( -1. * nominalOffsetsTOB[beam] * orientationPattern[pos] );
1341 if( det > 1 || beam > 7 || disk > 5 ) {
1342 throw cms::Exception(
"[LaserAlignment::getTEC2TECNominalBeamOffset]" ) <<
" ERROR ** Called with nonexisting parameter set: det " << det <<
" beam " << beam <<
" disk " << disk <<
"." << std::endl;
1345 const double nominalOffsets[8] = { 0., 2.220, -2.221, 0., 2.214, 0., 2.214, -2.217 };
1347 if( det == 0 )
return -1. * nominalOffsets[
beam];
1348 else return nominalOffsets[
beam];
1366 const double tecPhiPositions[8] = { 0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486 };
1367 const double atPhiPositions[8] = { 0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784 };
1370 const double tobRPosition = 600.;
1371 const double tibRPosition = 514.;
1372 const double tecRPosition[2] = { 564., 840. };
1375 const double tobZPosition[6] = { 1040., 580., 220., -140., -500., -860. };
1376 const double tibZPosition[6] = { 620., 380., 180., -100., -340., -540. };
1379 const double tecZPosition[9] = { 1322.5, 1462.5, 1602.5, 1742.5, 1882.5, 2057.5, 2247.5, 2452.5, 2667.5 };
1393 det = 0; ring = 0, beam = 0; disk = 0;
1403 }
while( moduleLoop.
TECLoop( det, ring, beam, disk ) );
1408 det = 2; beam = 0; pos = 0;
1417 }
while( moduleLoop.
TIBTOBLoop( det, beam, pos ) );
1423 det = 0; beam = 0; disk = 0;
1433 }
while( moduleLoop.
TEC2TECLoop( det, beam, disk ) );
1448 if( angle < -1. * M_PI || angle >
M_PI ) {
1449 throw cms::Exception(
" [LaserAlignment::ConvertAngle] ") <<
"** ERROR: Called with illegal input angle: " << angle <<
"." << std::endl;
1452 if( angle >= 0. )
return angle;
1453 else return( angle + 2. * M_PI );
1469 std:: cout << std::endl <<
" [LaserAlignment::DumpPosFileSet] -- Dump: " << std::endl;
1472 det = 0; ring = 0; beam = 0; disk = 0;
1475 }
while ( loop.
TECLoop( det, ring, beam, disk ) );
1478 det = 2; beam = 0; pos = 0;
1481 }
while( loop.
TIBTOBLoop( det, beam, pos ) );
1484 det = 0; beam = 0; disk = 0;
1489 std:: cout << std::endl <<
" [LaserAlignment::DumpPosFileSet] -- End dump: " << std::endl;
1505 std:: cout << std::endl <<
" [LaserAlignment::DumpStripFileSet] -- Dump: " << std::endl;
1508 det = 0; ring = 0; beam = 0; disk = 0;
1510 std::cout <<
"STRIP " << det <<
"\t" << beam <<
"\t" << disk <<
"\t" << ring <<
"\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).first
1511 <<
"\t" << measuredStripPositions.GetTECEntry( det, ring, beam, disk ).second << std::endl;
1512 }
while ( loop.
TECLoop( det, ring, beam, disk ) );
1515 det = 2; beam = 0; pos = 0;
1517 std::cout <<
"STRIP " << det <<
"\t" << beam <<
"\t" << pos <<
"\t" <<
"-1" <<
"\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).first
1518 <<
"\t" << measuredStripPositions.GetTIBTOBEntry( det, beam, pos ).second << std::endl;
1519 }
while( loop.
TIBTOBLoop( det, beam, pos ) );
1522 det = 0; beam = 0; disk = 0;
1524 std::cout <<
"STRIP " << det <<
"\t" << beam <<
"\t" << disk <<
"\t" <<
"-1" <<
"\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).first
1525 <<
"\t" << measuredStripPositions.GetTEC2TECEntry( det, beam, disk ).second << std::endl;
1528 std:: cout << std::endl <<
" [LaserAlignment::DumpStripFileSet] -- End dump: " << std::endl;
1542 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC+:" << std::endl;
1543 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1544 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1548 for(
int disk = 0; disk < 9; ++disk ) {
1554 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1555 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1559 for(
int disk = 0; disk < 9; ++disk ) {
1565 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Dumping hitmap for TEC-:" << std::endl;
1566 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring4:" << std::endl;
1567 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1571 for(
int disk = 0; disk < 9; ++disk ) {
1577 std::cout <<
" [LaserAlignment::DumpHitmaps] -- Ring6:" << std::endl;
1578 std::cout <<
" disk0 disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8" << std::endl;
1582 for(
int disk = 0; disk < 9; ++disk ) {
1588 std::cout <<
" [LaserAlignment::DumpHitmaps] -- End of dump." << std::endl << std::endl;
1613 det = 0; ring = 0; beam = 0; disk = 0;
1620 const double nominalPhi = nominalCoordinates.
GetTECEntry( det, ring, beam, disk ).
GetPhi();
1626 measuredCoordinates.
GetTECEntry( det, ring, beam, disk ).
SetPhi( nominalPhi - phiCorrection );
1630 }
while ( moduleLoop.
TECLoop( det, ring, beam, disk ) );
1651 int det,
beam, disk, pos;
1660 det = 2; beam = 0; pos = 0;
1677 }
while ( moduleLoop.
TIBTOBLoop( det, beam, pos ) );
1682 det = 0; beam = 0; disk = 0;
1699 }
while ( moduleLoop.
TEC2TECLoop( det, beam, disk ) );
1719 const double atPhiPositions[8] = { 0.392699, 1.289799, 1.851794, 2.748894, 3.645995, 4.319690, 5.216791, 5.778784 };
1720 const double tecPhiPositions[8] = { 0.392699, 1.178097, 1.963495, 2.748894, 3.534292, 4.319690, 5.105088, 5.890486 };
1721 const double zPositions[9] = { 125.0, 139.0, 153.0, 167.0, 181.0, 198.5, 217.5, 238.0, 259.5 };
1722 const double zPositionsTIB[6] = { 62.0, 38.0, 18.0, -10.0, -34.0, -54.0 };
1723 const double zPositionsTOB[6] = { 104.0, 58.0, 22.0, -14.0, -50.0, -86.0 };
1728 det = 0; ring = 0; beam = 0; disk = 0;
1731 const double radius = ring?84.0:56.4;
1740 const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1741 std::cout <<
"__TEC: " << 256. - theStripDet->specificTopology().strip( lp ) << std::endl;
1748 det = 2; beam = 0; pos = 0;
1751 const double radius = (det==2?51.4:58.4);
1752 const double theZ = (det==2?zPositionsTIB[pos]:zPositionsTOB[pos]);
1761 const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1762 std::cout <<
"__TIBTOB det " << det <<
" beam " << beam <<
" pos " << pos <<
" " << 256. - theStripDet->specificTopology().strip( lp );
1763 std::cout <<
" " << theStripDet->position().perp()<< std::endl;
1770 det = 0; beam = 0; disk = 0;
1773 const double radius = 56.4;
1782 const LocalPoint lp( theStripDet->surface().toLocal( gp ) );
1783 std::cout <<
"__TEC2TEC det " << det <<
" beam " << beam <<
" disk " << disk <<
" " << 256. - theStripDet->specificTopology().strip( lp ) << std::endl;
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
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 &)
AlignmentErrorsExtended * alignmentErrors() const
Return alignment errors, sorted by DetId.
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
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
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)
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..
TrackerGeometry * build(const GeometricDet *gd, const PTrackerParameters &ptp)
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 > &)
virtual const TrackerGeomDet * idToDet(DetId) const
bool updateFromInputGeometry
config switch
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
bool theSetNominalStrips
config switch