30 printalot = (nEventsAnalyzed <
int(printout_NEvents));
33 if(0==fmod(
double (nEventsAnalyzed) ,
double(1000) )){
35 printf(
"\n==enter==CSCEfficiency===== run %u\tevent %llu\tn Analyzed %i\n",iRun,iEvent,nEventsAnalyzed);
38 theService->update(eventSetup);
41 if (printalot) printf(
"\tget handles for digi collections\n");
46 if (printalot) printf(
"\tpass handles\n");
58 event.getByToken( wd_token, wires );
59 event.getByToken( sd_token, strips );
60 event.getByToken( al_token, alcts );
61 event.getByToken( cl_token, clcts );
62 event.getByToken( co_token, correlatedlcts );
65 event.getByToken( sh_token, simhits );
67 event.getByToken( rh_token, rechits );
68 event.getByToken( se_token, segments );
69 event.getByToken( tk_token, trackCollectionH );
73 if (printalot) printf(
"\tget the CSC geometry.\n");
81 bool triggerPassed =
true;
87 event.getByToken( ht_token, hltR );
89 triggerPassed = applyTrigger(hltR, triggerNames);
96 if(theService->magneticField()->inTesla(gpZero).mag2()<0.1){
104 fillDigiInfo(alcts, clcts, correlatedlcts, wires, strips, simhits, rechits, segments, cscGeom);
108 event.getByLabel(muonTag_,muons);
111 event.getByLabel(
"offlineBeamSpot", beamSpotHandle);
114 std::vector <reco::MuonCollection::const_iterator> goodMuons_it;
115 unsigned int nPositiveZ = 0;
116 unsigned int nNegativeZ = 0;
117 float muonOuterZPosition = -99999.;
119 if (printalot)
std::cout<<
" muons.size() = "<<muons->size() <<std::endl;
120 for ( reco::MuonCollection::const_iterator
muon = muons->begin();
muon != muons->end(); ++
muon ) {
124 " eta = "<<
muon->eta()<<
" phi = "<<
muon->phi()<<
127 muon->isGlobalMuon()<<
"/"<<
muon->isTrackerMuon()<<
"/"<<
muon->isStandAloneMuon()<<std::endl;
129 if(!(
muon->isTrackerMuon() &&
muon->isGlobalMuon())){
133 double relISO = (
muon->isolationR03().sumPt +
134 muon->isolationR03().emEt +
135 muon->isolationR03().hadEt)/
muon->track()->pt();
137 std::cout<<
" relISO = "<<relISO<<
" emVetoEt = "<<
muon->isolationR03().emVetoEt<<
" caloComp = "<<
146 if(
muon->track()->hitPattern().numberOfValidPixelHits()<1 ||
147 muon->track()->hitPattern().numberOfValidTrackerHits()<11 ||
148 muon->combinedMuon()->hitPattern().numberOfValidMuonHits()<1 ||
149 muon->combinedMuon()->normalizedChi2()>10. ||
150 muon->numberOfMatches()<2){
154 float zOuter =
muon->combinedMuon()->outerPosition().z();
155 float rhoOuter =
muon->combinedMuon()->outerPosition().rho();
156 bool passDepth =
true;
159 if ( fabs(zOuter) < 660. && rhoOuter > 400. && rhoOuter < 540.){
164 else if( fabs(zOuter) > 550. && fabs(zOuter) < 650. && rhoOuter < 300.){
169 else if ( fabs(zOuter) > 680. && fabs(zOuter) < 880. && rhoOuter < 540.){
176 goodMuons_it.push_back(
muon);
177 if(
muon->track()->momentum().z()>0.){
180 if(
muon->track()->momentum().z()<0.){
189 if (printalot)
std::cout<<
"Start track loop over "<<trackCollection.
size()<<
" tracks"<<std::endl;
196 std::cout<<
" nNegativeZ = "<<nNegativeZ<<
" nPositiveZ = "<<nPositiveZ<<std::endl;
198 if(nNegativeZ>1 || nPositiveZ>1){
201 bool trackOK =
false;
203 std::cout<<
" goodMuons_it.size() = "<<goodMuons_it.size()<<std::endl;
205 for(
size_t iM=0;iM<goodMuons_it.size();++iM){
209 float deltaR =
pow(track->
phi()-goodMuons_it[iM]->track()->phi(),2) +
210 pow(track->
eta()-goodMuons_it[iM]->track()->eta(),2);
211 deltaR =
sqrt(deltaR);
213 std::cout<<
" TR mu match to a tr: deltaR = "<<deltaR<<
" dPt = "<<
214 track->
pt()-goodMuons_it[iM]->track()->pt()<<std::endl;
216 if(deltaR>0.01 || fabs(track->
pt()-goodMuons_it[iM]->track()->pt())>0.1 ){
224 muonOuterZPosition = goodMuons_it[iM]->combinedMuon()->outerPosition().z();
231 std::cout<<
" failed: trackOK "<<std::endl;
238 if(trackCollection.
size()>2){
242 if(!
i && 2==trackCollection.
size()){
252 std::cout<<
"i track = "<<
i<<
" P = "<<track->
p()<<
" chi2/ndf = "<<track->
normalizedChi2()<<
" nSeg = "<<segments->size()<<std::endl;
253 std::cout<<
"quality undef/loose/tight/high/confirmed/goodIt/size "<<
289 float dpT_ov_pT = 0.;
290 if(fabs(track->
pt())>0.001){
291 dpT_ov_pT = track->
ptError()/ track->
pt();
302 if(!segments->size()){
306 if(magField && (track->
p()<
minP || track->
p()>
maxP)){
310 if(magField && (dpT_ov_pT >0.5) ){
316 if (printalot)
std::cout<<
"good Track"<<std::endl;
319 chooseDirection(r3T_inner, r3T);
322 CLHEP::Hep3Vector p3_propagated, r3_propagated;
325 cov_propagated *= 1
e-20;
327 FreeTrajectoryState ftsStart = getFromCLHEP(p3T, r3T, charge, covT, &*(theService->magneticField()));
330 std::cout<<
" dump the very first FTS = "<<debug.
dumpFTS(ftsStart)<<std::endl;
343 std::vector< CSCDetId > refME;
344 for(
int iS=1;iS<5;++iS){
345 for(
int iR=1;iR<4;++iR){
349 else if(4==iS && iR>1){
352 refME.push_back(
CSCDetId(endcap, iS, iR, chamber));
356 for(
size_t iSt = 0; iSt<refME.size();++iSt){
358 std::cout<<
"loop iStatation = "<<iSt<<std::endl;
359 std::cout<<
"refME[iSt]: st = "<<refME[iSt].station()<<
" rg = "<<refME[iSt].ring()<<std::endl;
361 std::map <std::string, bool> chamberTypes;
362 chamberTypes[
"ME11"] =
false;
363 chamberTypes[
"ME12"] =
false;
364 chamberTypes[
"ME13"] =
false;
365 chamberTypes[
"ME21"] =
false;
366 chamberTypes[
"ME22"] =
false;
367 chamberTypes[
"ME31"] =
false;
368 chamberTypes[
"ME32"] =
false;
369 chamberTypes[
"ME41"] =
false;
379 tSOSDest = propagate(ftsStart, cscGeom->
idToDet(detId)->
surface());
382 if (printalot)
std::cout<<
" dump FTS end = "<<debug.
dumpFTS(ftsStart)<<std::endl;
383 getFromFTS(ftsStart, p3_propagated, r3_propagated, charge, cov_propagated);
384 float feta = fabs(r3_propagated.eta());
385 float phi = r3_propagated.phi();
387 ringCandidates(refME[iSt].
station(), feta, chamberTypes);
389 map<std::string,bool>::iterator iter;
392 for( iter = chamberTypes.begin(); iter != chamberTypes.end(); iter++ ) {
395 if(iter->second && (iterations-1)==
int(iSt)){
397 std::cout<<
" Chamber type "<< iter->first<<
" is a candidate..."<<std::endl;
398 std::cout<<
" station() = "<< refME[iSt].station()<<
" ring() = "<<refME[iSt].ring()<<
" iSt = "<<iSt<<std::endl;
400 std::vector <int> coupleOfChambers;
402 chamberCandidates(refME[iSt].
station(), refME[iSt].
ring(), phi, coupleOfChambers);
404 for(
size_t iCh =0;iCh<coupleOfChambers.size();++iCh){
406 if (printalot)
std::cout<<
" Check chamber N = "<<coupleOfChambers.at(iCh)<<std::endl;;
407 if((!getAbsoluteEfficiency) && (
true == emptyChambers
410 [refME[iSt].
ring()-1]
411 [coupleOfChambers.at(iCh)-
FirstCh])){
416 const BoundPlane bpCh = cscGeom->
idToDet(cscChamber->geographicalId())->surface();
418 float dz = fabs(bpCh.position().z() - zFTS);
419 float zDistInner = track->
innerPosition().z() - bpCh.position().z();
420 float zDistOuter = track->
outerPosition().z() - bpCh.position().z();
425 if(!isIPdata && (zDistInner*zDistOuter>0. || fabs(zDistInner)<15. || fabs(zDistOuter)<15.)){
427 std::cout<<
" Not an intermediate (as defined) point... Skip."<<std::endl;
431 if(isIPdata && fabs(track->
eta())<1.8){
432 if(fabs(muonOuterZPosition) - fabs(bpCh.position().z())<0 ||
433 fabs(muonOuterZPosition-bpCh.position().z())<15.){
441 tSOSDest = propagate(ftsStart, cscGeom->
idToDet(cscChamber->geographicalId())->surface());
446 if(printalot)
std::cout<<
"TSOS not valid! Break."<<std::endl;
451 if(printalot)
std::cout<<
" info: dz<0.1"<<std::endl;
455 bool inDeadZone =
false;
457 for(
int iLayer = 0;iLayer<6;++iLayer){
458 bool extrapolationPassed =
true;
460 std::cout<<
" iLayer = "<<iLayer<<
" dump FTS init = "<<debug.
dumpFTS(ftsInit)<<std::endl;
462 std::cout<<
"Surface to propagate to: pos = "<<cscChamber->layer(iLayer+1)->surface().position()<<
" eta = " 463 <<cscChamber->layer(iLayer+1)->surface().position().eta()<<
" phi = " 464 <<cscChamber->layer(iLayer+1)->surface().position().phi()<<std::endl;
467 tSOSDest = propagate(ftsInit, cscChamber->layer(iLayer+1)->surface());
470 if (printalot)
std::cout<<
" Propagation between layers successful: dump FTS end = "<<debug.
dumpFTS(ftsInit)<<std::endl;
471 getFromFTS(ftsInit, p3_propagated, r3_propagated, charge, cov_propagated);
474 if (printalot)
std::cout<<
"Propagation between layers not successful - notValid TSOS"<<std::endl;
475 extrapolationPassed =
false;
480 if(extrapolationPassed){
481 GlobalPoint theExtrapolationPoint(r3_propagated.x(),r3_propagated.y(),r3_propagated.z());
482 LocalPoint theLocalPoint = cscChamber->layer(iLayer+1)->toLocal(theExtrapolationPoint);
484 inDeadZone = ( inDeadZone ||
485 !inSensitiveLocalRegion(theLocalPoint.x(), theLocalPoint.y(),
486 refME[iSt].station(), refME[iSt].ring()));
488 std::cout<<
" Candidate chamber: extrapolated LocalPoint = "<<theLocalPoint<<
"inDeadZone = "<<inDeadZone<<std::endl;
503 if (printalot)
std::cout<<
"Do efficiencies..."<<std::endl;
506 bool angle_flag =
true; angle_flag = efficienciesPerChamber(theCSCId, cscChamber, ftsStart);
507 if(useDigis && angle_flag){
508 stripWire_Efficiencies(theCSCId, ftsStart);
511 recHitSegment_Efficiencies(theCSCId, cscChamber, ftsStart);
513 recSimHitEfficiency(theCSCId, ftsStart);
518 if(printalot)
std::cout<<
" Not in active area for all layers"<<std::endl;
528 if (printalot)
std::cout<<
" TSOS not valid..."<<std::endl;
533 if (printalot) printf(
"==exit===CSCEfficiency===== run %u\tevent %llu\n\n",iRun,iEvent);
541 std::vector <double> chamberBounds(3);
542 float y_center = 99999.;
544 if(station>1 && station<5){
546 chamberBounds[0] = 66.46/2;
547 chamberBounds[1] = 127.15/2;
548 chamberBounds[2] = 323.06/2;
553 chamberBounds[0] = 54.00/2;
554 chamberBounds[1] = 125.71/2;
555 chamberBounds[2] = 189.66/2;
559 chamberBounds[0] = 61.40/2;
560 chamberBounds[1] = 125.71/2;
561 chamberBounds[2] = 169.70/2;
565 chamberBounds[0] = 69.01/2;
566 chamberBounds[1] = 125.65/2;
567 chamberBounds[2] = 149.42/2;
574 chamberBounds[0] = 63.40/2;
575 chamberBounds[1] = 92.10/2;
576 chamberBounds[2] = 164.16/2;
580 chamberBounds[0] = 51.00/2;
581 chamberBounds[1] = 83.74/2;
582 chamberBounds[2] = 174.49/2;
586 chamberBounds[0] = 30./2;
587 chamberBounds[1] = 60./2;
588 chamberBounds[2] = 160./2;
592 double yUp = chamberBounds[2] + y_center;
593 double yDown = - chamberBounds[2] + y_center;
594 double xBound1Shifted = chamberBounds[0]-distanceFromDeadZone;
595 double xBound2Shifted = chamberBounds[1]-distanceFromDeadZone;
596 double lineSlope = (yUp - yDown)/(xBound2Shifted-xBound1Shifted);
597 double lineConst = yUp - lineSlope*xBound2Shifted;
598 double yBoundary = lineSlope*
abs(xLocal) + lineConst;
599 pass = checkLocal(yLocal, yBoundary, station, ring);
606 std::vector <float> deadZoneCenter(6);
607 const float deadZoneHalf = 0.32*7/2;
608 float cutZone = deadZoneHalf + distanceFromDeadZone;
610 if(station>1 && station<5){
612 deadZoneCenter[0]= -162.48 ;
613 deadZoneCenter[1] = -81.8744;
614 deadZoneCenter[2] = -21.18165;
615 deadZoneCenter[3] = 39.51105;
616 deadZoneCenter[4] = 100.2939;
617 deadZoneCenter[5] = 160.58;
619 if(yLocal >yBoundary &&
620 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
621 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
622 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone) ||
623 (yLocal> deadZoneCenter[3] + cutZone && yLocal< deadZoneCenter[4] - cutZone) ||
624 (yLocal> deadZoneCenter[4] + cutZone && yLocal< deadZoneCenter[5] - cutZone))){
630 deadZoneCenter[0]= -95.94 ;
631 deadZoneCenter[1] = -27.47;
632 deadZoneCenter[2] = 33.67;
633 deadZoneCenter[3] = 93.72;
636 deadZoneCenter[0]= -85.97 ;
637 deadZoneCenter[1] = -36.21;
638 deadZoneCenter[2] = 23.68;
639 deadZoneCenter[3] = 84.04;
642 deadZoneCenter[0]= -75.82;
643 deadZoneCenter[1] = -26.14;
644 deadZoneCenter[2] = 23.85;
645 deadZoneCenter[3] = 73.91;
647 if(yLocal >yBoundary &&
648 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
649 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
650 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone))){
657 deadZoneCenter[0]= -83.155 ;
658 deadZoneCenter[1] = -22.7401;
659 deadZoneCenter[2] = 27.86665;
660 deadZoneCenter[3] = 81.005;
661 if(yLocal > yBoundary &&
662 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
663 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
664 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone))){
669 deadZoneCenter[0]= -86.285 ;
670 deadZoneCenter[1] = -32.88305;
671 deadZoneCenter[2] = 32.867423;
672 deadZoneCenter[3] = 88.205;
673 if(yLocal > (yBoundary) &&
674 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
675 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
676 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone))){
681 deadZoneCenter[0]= -81.0;
682 deadZoneCenter[1] = 81.0;
683 if(yLocal > (yBoundary) &&
684 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) )){
701 for(
int iE=0;iE<2;iE++){
702 for(
int iS=0;iS<4;iS++){
703 for(
int iR=0;iR<4;iR++){
704 for(
int iC=0;iC<
NumCh;iC++){
705 allSegments[iE][iS][iR][iC].clear();
706 allCLCT[iE][iS][iR][iC] = allALCT[iE][iS][iR][iC] = allCorrLCT[iE][iS][iR][iC] =
false;
707 for(
int iL=0;iL<6;iL++){
708 allStrips[iE][iS][iR][iC][iL].clear();
709 allWG[iE][iS][iR][iC][iL].clear();
710 allRechits[iE][iS][iR][iC][iL].clear();
711 allSimhits[iE][iS][iR][iC][iL].clear();
719 fillLCT_info(alcts, clcts, correlatedlcts);
720 fillWG_info(wires, cscGeom);
721 fillStrips_info(strips);
723 fillRechitsSegments_info(rechits, segments, cscGeom);
725 fillSimhit_info(simhits);
740 range.first; digiIt!=range.second;
743 if((*digiIt).isValid()){
744 allALCT[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh] =
true;
748 ALCTPerEvent->Fill(nSize);
754 std::vector<CSCCLCTDigi>::const_iterator digiIt = (*j).second.first;
755 std::vector<CSCCLCTDigi>::const_iterator
last = (*j).second.second;
756 for( ; digiIt !=
last; ++digiIt) {
758 if((*digiIt).isValid()){
759 allCLCT[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh] =
true;
763 CLCTPerEvent->Fill(nSize);
767 std::vector<CSCCorrelatedLCTDigi>::const_iterator digiIt = (*j).second.first;
768 std::vector<CSCCorrelatedLCTDigi>::const_iterator
last = (*j).second.second;
769 for( ; digiIt !=
last; ++digiIt) {
771 if((*digiIt).isValid()){
772 allCorrLCT[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh] =
true;
785 std::vector<CSCWireDigi>::const_iterator digiItr = (*j).second.first;
786 std::vector<CSCWireDigi>::const_iterator
last = (*j).second.second;
788 for( ; digiItr !=
last; ++digiItr) {
789 std::pair < int, float > WG_pos(digiItr->getWireGroup(), layerGeom->
yOfWireGroup(digiItr->getWireGroup()));
790 std::pair <std::pair < int, float >,
int > LayerSignal(WG_pos, digiItr->getTimeBin());
793 allWG[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh]
794 [
id.layer()-1].push_back(LayerSignal);
808 int largestADCValue = -1;
809 std::vector<CSCStripDigi>::const_iterator digiItr = (*j).second.first;
810 std::vector<CSCStripDigi>::const_iterator
last = (*j).second.second;
811 for( ; digiItr !=
last; ++digiItr) {
812 int maxADC=largestADCValue;
813 int myStrip = digiItr->getStrip();
814 std::vector<int> myADCVals = digiItr->getADCCounts();
815 float thisPedestal = 0.5*(
float)(myADCVals[0]+myADCVals[1]);
818 float peakADC = -1000.;
819 for (
unsigned int iCount = 0; iCount < myADCVals.size(); iCount++) {
820 diff = (
float)myADCVals[iCount]-thisPedestal;
821 if (diff > threshold) {
822 if (myADCVals[iCount] > largestADCValue) {
823 largestADCValue = myADCVals[iCount];
826 if (diff > threshold && diff > peakADC) {
830 if(largestADCValue>maxADC){
831 maxADC = largestADCValue;
832 std::pair <int, float> LayerSignal (myStrip, peakADC);
836 allStrips[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-1][
id.layer()-1].clear();
837 allStrips[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-1][
id.layer()-1].push_back(LayerSignal);
844 edm::PSimHitContainer::const_iterator dSHsimIter;
845 for (dSHsimIter = simhits->begin(); dSHsimIter != simhits->end(); dSHsimIter++){
848 std::pair <LocalPoint, int> simHitPos((*dSHsimIter).localPosition(), (*dSHsimIter).particleType());
861 printf(
" The size of the rechit collection is %i\n",
int(rechits->size()));
864 recHitsPerEvent->Fill(rechits->size());
867 for (recIt = rechits->begin(); recIt != rechits->end(); recIt++) {
872 LocalPoint rhitlocal = (*recIt).localPosition();
873 LocalError rerrlocal = (*recIt).localPositionError();
875 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.
chamber(),
id.layer());
876 printf(
"\t\tx,y,z: %f, %f, %f\texx,eey,exy: %f, %f, %f\tglobal x,y,z: %f, %f, %f \n",
877 rhitlocal.
x(), rhitlocal.
y(), rhitlocal.
z(), rerrlocal.
xx(), rerrlocal.
yy(), rerrlocal.
xy(),
878 rhitglobal.
x(), rhitglobal.
y(), rhitglobal.
z());
880 std::pair <LocalPoint, bool> recHitPos((*recIt).localPosition(),
false);
881 allRechits[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh][
id.layer()-1].push_back(recHitPos);
884 for(
int iE=0;iE<2;iE++){
885 for(
int iS=0;iS<4;iS++){
886 for(
int iR=0;iR<4;iR++){
887 for(
int iC=0;iC<
NumCh;iC++){
889 for(
int iL=0;iL<6;iL++){
890 if(!allRechits[iE][iS][iR][iC][iL].
empty()){
895 emptyChambers[iE][iS][iR][iC] =
false;
898 emptyChambers[iE][iS][iR][iC] =
true;
907 printf(
" The size of the segment collection is %i\n",
int(segments->size()));
910 segmentsPerEvent->Fill(segments->size());
913 StHist[
id.endcap()-1][
id.station()-1].segmentChi2_ndf->Fill((*it).chi2()/(*it).degreesOfFreedom());
914 StHist[
id.endcap()-1][
id.station()-1].hitsInSegment->Fill((*it).nRecHits());
916 printf(
"\tendcap/station/ring/chamber: %i %i %i %i\n",
918 std::cout<<
"\tposition(loc) = "<<(*it).localPosition()<<
" error(loc) = "<<(*it).localPositionError()<<std::endl;
919 std::cout<<
"\t chi2/ndf = "<<(*it).chi2()/(*it).degreesOfFreedom()<<
" nhits = "<<(*it).nRecHits() <<std::endl;
922 allSegments[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh].push_back
923 (make_pair((*it).localPosition(), (*it).localDirection()));
928 std::vector<CSCRecHit2D> theseRecHits = (*it).specificRecHits();
929 int nRH = (*it).nRecHits();
931 printf(
"\tGet the recHits for this segment.\t");
932 printf(
" nRH = %i\n",nRH);
936 for ( vector<CSCRecHit2D>::const_iterator iRH = theseRecHits.begin(); iRH != theseRecHits.end(); iRH++) {
940 printf(
"\t%i RH\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
946 float xDiff = iRH->localPosition().x() -
948 float yDiff = iRH->localPosition().y() -
950 if(fabs(xDiff)<0.0001 && fabs(yDiff)<0.0001){
951 std::pair <LocalPoint, bool>
955 std::cout<<
" number of the rechit (from zero) in the segment = "<< jRH<<std::endl;
968 if(feta>0.85 && feta<1.18){
969 chamberTypes[
"ME13"] =
true;
971 if(feta>1.18 && feta<1.7){
972 chamberTypes[
"ME12"] =
true;
974 if(feta>1.5 && feta<2.45){
975 chamberTypes[
"ME11"] =
true;
979 if(feta>0.95 && feta<1.6){
980 chamberTypes[
"ME22"] =
true;
983 if(feta>1.55 && feta<2.45){
984 chamberTypes[
"ME21"] =
true;
988 if(feta>1.08 && feta<1.72){
989 chamberTypes[
"ME32"] =
true;
992 if(feta>1.69 && feta<2.45){
993 chamberTypes[
"ME31"] =
true;
997 if(feta>1.78 && feta<2.45){
998 chamberTypes[
"ME41"] =
true;
1007 coupleOfChambers.clear();
1009 float phi_zero = 0.;
1010 float phi_const = 2.*
M_PI/36.;
1011 int last_chamber = 36;
1012 int first_chamber = 1;
1013 if(1 != station && 1==ring){
1018 if (printalot)
std::cout<<
" info: negative phi = "<<phi<<std::endl;
1021 float chamber_float = (phi - phi_zero)/phi_const;
1022 int chamber_int =
int(chamber_float);
1023 if (chamber_float -
float(chamber_int) -0.5 <0.){
1024 if(0!=chamber_int ){
1025 coupleOfChambers.push_back(chamber_int);
1028 coupleOfChambers.push_back(last_chamber);
1030 coupleOfChambers.push_back(chamber_int+1);
1034 coupleOfChambers.push_back(chamber_int+1);
1035 if(last_chamber!=chamber_int+1){
1036 coupleOfChambers.push_back(chamber_int+2);
1039 coupleOfChambers.push_back(first_chamber);
1042 if (printalot)
std::cout<<
" phi = "<<phi<<
" phi_zero = "<<phi_zero<<
" phi_const = "<<phi_const<<
1043 " candidate chambers: first ch = "<<coupleOfChambers[0]<<
" second ch = "<<coupleOfChambers[1]<<std::endl;
1048 int ec, st, rg, ch, secondRing;
1049 returnTypes(
id, ec, st, rg, ch, secondRing);
1054 std::cout<<
" local dir = "<<localDir<<std::endl;
1057 float dxdz = localDir.
x()/localDir.
z();
1058 float dydz = localDir.
y()/localDir.
z();
1061 std::cout<<
"st 3 or 4 ... flip dy/dz"<<std::endl;
1070 if(applyIPangleCuts){
1071 if(dydz>local_DY_DZ_Max || dydz<local_DY_DZ_Min || fabs(dxdz)>local_DX_DZ_Max){
1077 bool firstCondition = !allSegments[
ec][st][rg][ch].empty() ?
true :
false;
1078 bool secondCondition =
false;
1081 secondCondition = !allSegments[
ec][st][secondRing][ch].empty() ?
true :
false;
1083 if(firstCondition || secondCondition){
1085 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(1);
1090 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(0);
1096 firstCondition = allALCT[
ec][st][rg][ch];
1097 secondCondition =
false;
1099 secondCondition = allALCT[
ec][st][secondRing][ch];
1101 if(firstCondition || secondCondition){
1103 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(3);
1106 if(fabs(dxdz)<local_DX_DZ_Max){
1107 StHist[
ec][st].EfficientALCT_momTheta->Fill(ftsChamber.
momentum().
theta());
1108 ChHist[
ec][st][rg][ch].EfficientALCT_dydz->Fill(dydz);
1113 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(2);
1115 if(fabs(dxdz)<local_DX_DZ_Max){
1116 StHist[
ec][st].InefficientALCT_momTheta->Fill(ftsChamber.
momentum().
theta());
1117 ChHist[
ec][st][rg][ch].InefficientALCT_dydz->Fill(dydz);
1120 std::cout<<
" missing ALCT (dy/dz = "<<dydz<<
")";
1121 printf(
"\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n",ec+1,st+1,rg+1,ch+1);
1126 firstCondition = allCLCT[
ec][st][rg][ch];
1127 secondCondition =
false;
1129 secondCondition = allCLCT[
ec][st][secondRing][ch];
1131 if(firstCondition || secondCondition){
1133 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(5);
1135 if(dydz<local_DY_DZ_Max && dydz>local_DY_DZ_Min){
1136 StHist[
ec][st].EfficientCLCT_momPhi->Fill(ftsChamber.
momentum().
phi() );
1137 ChHist[
ec][st][rg][ch].EfficientCLCT_dxdz->Fill(dxdz);
1142 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(4);
1144 if(dydz<local_DY_DZ_Max && dydz>local_DY_DZ_Min){
1145 StHist[
ec][st].InefficientCLCT_momPhi->Fill(ftsChamber.
momentum().
phi());
1146 ChHist[
ec][st][rg][ch].InefficientCLCT_dxdz->Fill(dxdz);
1149 std::cout<<
" missing CLCT (dx/dz = "<<dxdz<<
")";
1150 printf(
"\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n",ec+1,st+1,rg+1,ch+1);
1155 firstCondition = allCorrLCT[
ec][st][rg][ch];
1156 secondCondition =
false;
1158 secondCondition = allCorrLCT[
ec][st][secondRing][ch];
1160 if(firstCondition || secondCondition){
1161 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(7);
1164 ChHist[
ec][st][rg][ch].digiAppearanceCount->Fill(6);
1173 int ec, st, rg, ch, secondRing;
1174 returnTypes(
id, ec, st, rg, ch, secondRing);
1176 bool firstCondition, secondCondition;
1177 int missingLayers_s = 0;
1178 int missingLayers_wg = 0;
1179 for(
int iLayer=0;iLayer<6;iLayer++){
1182 printf(
"\t%i swEff: \tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
1184 std::cout<<
" size S = "<<allStrips[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh][iLayer].size()<<
1185 "size W = "<<allWG[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh][iLayer].size()<<std::endl;
1188 firstCondition = !allStrips[
ec][st][rg][ch][iLayer].empty() ?
true :
false;
1190 secondCondition =
false;
1192 secondCondition = !allStrips[
ec][st][secondRing][ch][iLayer].empty() ?
true :
false;
1194 if(firstCondition || secondCondition){
1195 ChHist[
ec][st][rg][ch].EfficientStrips->Fill(iLayer+1);
1200 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.
chamber(),iLayer+1);
1204 firstCondition = !allWG[
ec][st][rg][ch][iLayer].empty() ?
true :
false;
1205 secondCondition =
false;
1207 secondCondition = !allWG[
ec][st][secondRing][ch][iLayer].empty() ?
true :
false;
1209 if(firstCondition || secondCondition){
1210 ChHist[
ec][st][rg][ch].EfficientWireGroups->Fill(iLayer+1);
1215 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.
chamber(),iLayer+1);
1220 if(6!=missingLayers_s){
1221 ChHist[
ec][st][rg][ch].EfficientStrips->Fill(8);
1223 if(6!=missingLayers_wg){
1224 ChHist[
ec][st][rg][ch].EfficientWireGroups->Fill(8);
1226 ChHist[
ec][st][rg][ch].EfficientStrips->Fill(9);
1227 ChHist[
ec][st][rg][ch].EfficientWireGroups->Fill(9);
1229 ChHist[
ec][st][rg][ch].StripWiresCorrelations->Fill(1);
1230 if(missingLayers_s!=missingLayers_wg){
1231 ChHist[
ec][st][rg][ch].StripWiresCorrelations->Fill(2);
1232 if(6==missingLayers_wg){
1233 ChHist[
ec][st][rg][ch].StripWiresCorrelations->Fill(3);
1234 ChHist[
ec][st][rg][ch].NoWires_momTheta->Fill(ftsChamber.
momentum().
theta());
1236 if(6==missingLayers_s){
1237 ChHist[
ec][st][rg][ch].StripWiresCorrelations->Fill(4);
1238 ChHist[
ec][st][rg][ch].NoStrips_momPhi->Fill(ftsChamber.
momentum().
theta());
1241 else if(6==missingLayers_s){
1242 ChHist[
ec][st][rg][ch].StripWiresCorrelations->Fill(5);
1249 int ec, st, rg, ch, secondRing;
1250 returnTypes(
id, ec, st, rg, ch, secondRing);
1251 bool firstCondition, secondCondition;
1252 for(
int iLayer=0; iLayer<6;iLayer++){
1253 firstCondition = !allSimhits[
ec][st][rg][ch][iLayer].empty() ?
true :
false;
1254 secondCondition =
false;
1257 secondCondition = !allSimhits[
ec][st][secondRing][ch][iLayer].empty() ?
true :
false;
1258 if(secondCondition){
1259 thisRing = secondRing;
1262 if(firstCondition || secondCondition){
1264 iSH<allSimhits[
ec][st][thisRing][ch][iLayer].size();
1267 fabs(allSimhits[ec][st][thisRing][ch][iLayer][iSH].
second)){
1268 ChHist[
ec][st][rg][ch].SimSimhits->Fill(iLayer+1);
1269 if(!allRechits[ec][st][thisRing][ch][iLayer].
empty()){
1270 ChHist[
ec][st][rg][ch].SimRechits->Fill(iLayer+1);
1296 int ec, st, rg, ch, secondRing;
1297 returnTypes(
id, ec, st, rg, ch, secondRing);
1298 bool firstCondition, secondCondition;
1300 std::vector <bool> missingLayers_rh(6);
1301 std::vector <int> usedInSegment(6);
1303 if(printalot)
std::cout<<
"RecHits eff"<<std::endl;
1304 for(
int iLayer=0;iLayer<6;++iLayer){
1305 firstCondition = !allRechits[
ec][st][rg][ch][iLayer].empty() ?
true :
false;
1306 secondCondition =
false;
1309 secondCondition = !allRechits[
ec][st][secondRing][ch][iLayer].empty() ?
true :
false;
1310 if(secondCondition){
1311 thisRing = secondRing;
1314 if(firstCondition || secondCondition){
1315 ChHist[
ec][st][rg][ch].EfficientRechits_good->Fill(iLayer+1);
1317 iR<allRechits[
ec][st][thisRing][ch][iLayer].size();
1319 if(allRechits[ec][st][thisRing][ch][iLayer][iR].
second){
1320 usedInSegment[iLayer] = 1;
1324 usedInSegment[iLayer] = -1;
1329 missingLayers_rh[iLayer] =
true;
1332 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.
chamber(),iLayer+1);
1339 firstCondition = !allSegments[
ec][st][rg][ch].empty() ?
true :
false;
1340 secondCondition =
false;
1344 secondCondition = !allSegments[
ec][st][secondRing][ch].empty() ?
true :
false;
1345 secondSize = allSegments[
ec][st][secondRing][ch].size();
1346 if(secondCondition){
1347 thisRing = secondRing;
1350 if(firstCondition || secondCondition){
1351 if (printalot)
std::cout<<
"segments - start ec = "<<ec<<
" st = "<<st<<
" rg = "<<rg<<
" ch = "<<ch<<std::endl;
1352 StHist[
ec][st].EfficientSegments_XY->Fill(ftsChamber.
position().
x(),ftsChamber.
position().
y());
1353 if(1==allSegments[ec][st][rg][ch].
size() + secondSize){
1354 globalDir = cscChamber->
toGlobal(allSegments[ec][st][thisRing][ch][0].
second);
1355 globalPos = cscChamber->
toGlobal(allSegments[ec][st][thisRing][ch][0].
first);
1356 StHist[
ec][st].EfficientSegments_eta->Fill(fabs(ftsChamber.
position().
eta()));
1360 if (printalot)
std::cout<<
" fts.position() = "<<ftsChamber.
position()<<
" segPos = "<<globalPos<<
" res = "<<residual<< std::endl;
1361 StHist[
ec][st].ResidualSegments->Fill(residual);
1363 for(
int iLayer=0;iLayer<6;++iLayer){
1364 if(printalot)
std::cout<<
" iLayer = "<<iLayer<<
" usedInSegment = "<<usedInSegment[iLayer]<<std::endl;
1365 if(0!=usedInSegment[iLayer]){
1366 if(-1==usedInSegment[iLayer]){
1367 ChHist[
ec][st][rg][ch].InefficientSingleHits->Fill(iLayer+1);
1369 ChHist[
ec][st][rg][ch].AllSingleHits->Fill(iLayer+1);
1371 firstCondition = !allRechits[
ec][st][rg][ch][iLayer].empty() ?
true :
false;
1372 secondCondition =
false;
1374 secondCondition = !allRechits[
ec][st][secondRing][ch][iLayer].empty() ?
true :
false;
1376 float stripAngle = 99999.;
1377 std::vector<float> posXY(2);
1378 bool oneSegment =
false;
1379 if(1==allSegments[ec][st][rg][ch].
size() + secondSize){
1382 linearExtrapolation(globalPos,globalDir, bp.position().z(), posXY);
1383 GlobalPoint gp_extrapol( posXY.at(0), posXY.at(1),bp.position().z());
1385 posXY.at(0) = lp_extrapol.
x();
1386 posXY.at(1) = lp_extrapol.y();
1390 if(firstCondition || secondCondition){
1391 ChHist[
ec][st][rg][ch].EfficientRechits_inSegment->Fill(iLayer+1);
1393 ChHist[
ec][st][rg][ch].Y_EfficientRecHits_inSegment[iLayer]->Fill(posXY.at(1));
1394 ChHist[
ec][st][rg][ch].Phi_EfficientRecHits_inSegment[iLayer]->Fill(stripAngle);
1399 ChHist[
ec][st][rg][ch].Y_InefficientRecHits_inSegment[iLayer]->Fill(posXY.at(1));
1400 ChHist[
ec][st][rg][ch].Phi_InefficientRecHits_inSegment[iLayer]->Fill(stripAngle);
1406 StHist[
ec][st].InefficientSegments_XY->Fill(ftsChamber.
position().
x(),ftsChamber.
position().
y());
1408 std::cout<<
"missing segment "<<std::endl;
1414 ChHist[
ec][st][rg][ch].EfficientRechits_good->Fill(8);
1415 if(allSegments[ec][st][rg][ch].
size()+secondSize<2){
1416 StHist[
ec][st].AllSegments_eta->Fill(fabs(ftsChamber.
position().
eta()));
1418 ChHist[
ec][st][rg][
id.chamber()-
FirstCh].EfficientRechits_inSegment->Fill(9);
1425 st =
id.station()-1;
1437 CLHEP::Hep3Vector&
p3, CLHEP::Hep3Vector& r3,
1443 p3.set(p3GV.
x(), p3GV.
y(), p3GV.
z());
1444 r3.set(r3GP.
x(), r3GP.
y(), r3GP.
z());
1465 float zSurface, std::vector <float> &posZY){
1466 double paramLine = lineParameter(initialPosition.
z(), zSurface, initialDirection.
z());
1467 double xPosition = extrapolate1D(initialPosition.
x(), initialDirection.
x(),paramLine);
1468 double yPosition = extrapolate1D(initialPosition.
y(), initialDirection.
y(),paramLine);
1470 posZY.push_back(xPosition);
1471 posZY.push_back(yPosition);
1475 double extrapolatedPosition = initPosition + initDirection*parameterOfTheLine;
1476 return extrapolatedPosition;
1480 double paramLine = (destZPosition-initZPosition)/initZDirection;
1488 float dy = outerPosition.y() - innerPosition.y();
1489 float dz = outerPosition.z() - innerPosition.z();
1510 return &*theService->propagator(propagatorName);
1537 propagatorName =
"SteppingHelixPropagatorAny";
1538 tSOSDest =
propagator(propagatorName)->propagate(ftsStart, bpDest);
1544 bool triggerPassed =
true;
1545 std::vector<std::string> hlNames=triggerNames.
triggerNames();
1546 pointToTriggers.clear();
1547 for(
size_t imyT = 0;imyT<myTriggers.size();++imyT){
1548 for (
size_t iT=0; iT<hlNames.size(); ++iT) {
1557 TriggersFired->Fill(iT);
1560 if(hlNames[iT]==myTriggers[imyT]){
1561 pointToTriggers.push_back(iT);
1568 if(pointToTriggers.size()!=myTriggers.size()){
1569 pointToTriggers.clear();
1571 std::cout<<
" Not all trigger names found - all trigger specifications will be ignored. Check your cfg file!"<<std::endl;
1575 if(!pointToTriggers.empty()){
1577 std::cout<<
"The following triggers will be required in the event: "<<std::endl;
1578 for(
size_t imyT =0; imyT <pointToTriggers.size();++imyT){
1579 std::cout<<
" "<<hlNames[pointToTriggers[imyT]];
1588 if(pointToTriggers.empty()){
1590 std::cout<<
" No triggers specified in the configuration or all ignored - no trigger information will be considered"<<std::endl;
1593 for(
size_t imyT =0; imyT <pointToTriggers.size();++imyT){
1594 if(hltR->
wasrun(pointToTriggers[imyT]) &&
1595 hltR->
accept(pointToTriggers[imyT]) &&
1596 !hltR->
error(pointToTriggers[imyT]) ){
1597 triggerPassed =
true;
1603 triggerPassed =
false;
1605 triggerPassed =
false;
1613 std::cout<<
" TriggerResults handle returns invalid state?! No trigger information will be considered"<<std::endl;
1617 std::cout<<
" Trigger passed: "<<triggerPassed<<std::endl;
1619 return triggerPassed;
1629 const float Ymin = -165;
1630 const float Ymax = 165;
1631 const int nYbins =
int((Ymax - Ymin)/2);
1632 const float Layer_min = -0.5;
1633 const float Layer_max = 9.5;
1634 const int nLayer_bins =
int(Layer_max - Layer_min);
1677 myTriggers = pset.
getParameter<std::vector <std::string> >(
"myTriggers");
1679 pointToTriggers.clear();
1683 nEventsAnalyzed = 0;
1690 theFile =
new TFile(rootFileName.c_str(),
"RECREATE");
1695 sprintf(SpecName,
"DataFlow");
1697 new TH1F(SpecName,
"Data flow;condition number;entries",40,-0.5,39.5);
1699 sprintf(SpecName,
"TriggersFired");
1701 new TH1F(SpecName,
"Triggers fired;trigger number;entries",140,-0.5,139.5);
1704 float minChan = -0.5;
1705 float maxChan = 49.5;
1707 sprintf(SpecName,
"ALCTPerEvent");
1708 ALCTPerEvent =
new TH1F(SpecName,
"ALCTs per event;N digis;entries",Chan,minChan,maxChan);
1710 sprintf(SpecName,
"CLCTPerEvent");
1711 CLCTPerEvent =
new TH1F(SpecName,
"CLCTs per event;N digis;entries",Chan,minChan,maxChan);
1713 sprintf(SpecName,
"recHitsPerEvent");
1714 recHitsPerEvent =
new TH1F(SpecName,
"RecHits per event;N digis;entries",150,-0.5,149.5);
1716 sprintf(SpecName,
"segmentsPerEvent");
1717 segmentsPerEvent =
new TH1F(SpecName,
"segments per event;N digis;entries",Chan,minChan,maxChan);
1721 map<std::string,bool>::iterator iter;
1722 for(
int ec = 0;
ec<2;++
ec){
1723 for(
int st = 0;st<4;++st){
1725 sprintf(SpecName,
"Stations__E%d_S%d",
ec+1, st+1);
1730 sprintf(SpecName,
"segmentChi2_ndf_St%d",st+1);
1731 StHist[
ec][st].segmentChi2_ndf =
1732 new TH1F(SpecName,
"Chi2/ndf of a segment;chi2/ndf;entries",100,0.,20.);
1734 sprintf(SpecName,
"hitsInSegment_St%d",st+1);
1735 StHist[
ec][st].hitsInSegment =
1736 new TH1F(SpecName,
"Number of hits in a segment;nHits;entries",7,-0.5,6.5);
1742 sprintf(SpecName,
"AllSegments_eta_St%d",st+1);
1743 StHist[
ec][st].AllSegments_eta =
1744 new TH1F(SpecName,
"All segments in eta;eta;entries",Chan,minChan,maxChan);
1746 sprintf(SpecName,
"EfficientSegments_eta_St%d",st+1);
1747 StHist[
ec][st].EfficientSegments_eta =
1748 new TH1F(SpecName,
"Efficient segments in eta;eta;entries",Chan,minChan,maxChan);
1750 sprintf(SpecName,
"ResidualSegments_St%d",st+1);
1751 StHist[
ec][st].ResidualSegments =
1752 new TH1F(SpecName,
"Residual (segments);residual,cm;entries",75,0.,15.);
1758 float minChan2 = -800.;
1759 float maxChan2 = 800.;
1761 sprintf(SpecName,
"EfficientSegments_XY_St%d",st+1);
1762 StHist[
ec][st].EfficientSegments_XY =
new TH2F(SpecName,
"Efficient segments in XY;X;Y",
1763 Chan,minChan,maxChan,Chan2,minChan2,maxChan2);
1764 sprintf(SpecName,
"InefficientSegments_XY_St%d",st+1);
1765 StHist[
ec][st].InefficientSegments_XY =
new TH2F(SpecName,
"Inefficient segments in XY;X;Y",
1766 Chan,minChan,maxChan,Chan2,minChan2,maxChan2);
1771 sprintf(SpecName,
"EfficientALCT_momTheta_St%d",st+1);
1772 StHist[
ec][st].EfficientALCT_momTheta =
new TH1F(SpecName,
"Efficient ALCT in theta (momentum);theta, rad;entries",
1773 Chan,minChan,maxChan);
1775 sprintf(SpecName,
"InefficientALCT_momTheta_St%d",st+1);
1776 StHist[
ec][st].InefficientALCT_momTheta =
new TH1F(SpecName,
"Inefficient ALCT in theta (momentum);theta, rad;entries",
1777 Chan,minChan,maxChan);
1782 sprintf(SpecName,
"EfficientCLCT_momPhi_St%d",st+1);
1783 StHist[
ec][st].EfficientCLCT_momPhi =
new TH1F(SpecName,
"Efficient CLCT in phi (momentum);phi, rad;entries",
1784 Chan,minChan,maxChan);
1786 sprintf(SpecName,
"InefficientCLCT_momPhi_St%d",st+1);
1787 StHist[
ec][st].InefficientCLCT_momPhi =
new TH1F(SpecName,
"Inefficient CLCT in phi (momentum);phi, rad;entries",
1788 Chan,minChan,maxChan);
1791 for(
int rg = 0;rg<3;++rg){
1795 else if(1==rg && 3==st){
1799 if(0!=st && 0==rg && iChamber >18){
1803 sprintf(SpecName,
"Chambers__E%d_S%d_R%d_Chamber_%d",
ec+1, st+1, rg+1,iChamber);
1808 sprintf(SpecName,
"EfficientRechits_inSegment_Ch%d",iChamber);
1809 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientRechits_inSegment =
1810 new TH1F(SpecName,
"Existing RecHit given a segment;layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1812 sprintf(SpecName,
"InefficientSingleHits_Ch%d",iChamber);
1813 ChHist[
ec][st][rg][iChamber-
FirstCh].InefficientSingleHits =
1814 new TH1F(SpecName,
"Single RecHits not in the segment;layers (1-6);entries ",nLayer_bins,Layer_min,Layer_max);
1816 sprintf(SpecName,
"AllSingleHits_Ch%d",iChamber);
1817 ChHist[
ec][st][rg][iChamber-
FirstCh].AllSingleHits =
1818 new TH1F(SpecName,
"Single RecHits given a segment; layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1820 sprintf(SpecName,
"digiAppearanceCount_Ch%d",iChamber);
1821 ChHist[
ec][st][rg][iChamber-
FirstCh].digiAppearanceCount =
1822 new TH1F(SpecName,
"Digi appearance (no-yes): segment(0,1), ALCT(2,3), CLCT(4,5), CorrLCT(6,7); digi type;entries",
1828 sprintf(SpecName,
"EfficientALCT_dydz_Ch%d",iChamber);
1829 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientALCT_dydz =
1830 new TH1F(SpecName,
"Efficient ALCT; local dy/dz (ME 3 and 4 flipped);entries",
1831 Chan, minChan, maxChan);
1833 sprintf(SpecName,
"InefficientALCT_dydz_Ch%d",iChamber);
1834 ChHist[
ec][st][rg][iChamber-
FirstCh].InefficientALCT_dydz =
1835 new TH1F(SpecName,
"Inefficient ALCT; local dy/dz (ME 3 and 4 flipped);entries",
1836 Chan, minChan, maxChan);
1841 sprintf(SpecName,
"EfficientCLCT_dxdz_Ch%d",iChamber);
1842 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientCLCT_dxdz =
1843 new TH1F(SpecName,
"Efficient CLCT; local dxdz;entries",
1844 Chan, minChan, maxChan);
1846 sprintf(SpecName,
"InefficientCLCT_dxdz_Ch%d",iChamber);
1847 ChHist[
ec][st][rg][iChamber-
FirstCh].InefficientCLCT_dxdz =
1848 new TH1F(SpecName,
"Inefficient CLCT; local dxdz;entries",
1849 Chan, minChan, maxChan);
1851 sprintf(SpecName,
"EfficientRechits_good_Ch%d",iChamber);
1852 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientRechits_good =
1853 new TH1F(SpecName,
"Existing RecHit - sensitive area only;layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1855 sprintf(SpecName,
"EfficientStrips_Ch%d",iChamber);
1856 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientStrips =
1857 new TH1F(SpecName,
"Existing strip;layer (1-6); entries",nLayer_bins,Layer_min,Layer_max);
1859 sprintf(SpecName,
"EfficientWireGroups_Ch%d",iChamber);
1860 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientWireGroups =
1861 new TH1F(SpecName,
"Existing WireGroups;layer (1-6); entries ",nLayer_bins,Layer_min,Layer_max);
1863 sprintf(SpecName,
"StripWiresCorrelations_Ch%d",iChamber);
1864 ChHist[
ec][st][rg][iChamber-
FirstCh].StripWiresCorrelations =
1865 new TH1F(SpecName,
"StripWire correlations;; entries ",5,0.5,5.5);
1870 sprintf(SpecName,
"NoWires_momTheta_Ch%d",iChamber);
1871 ChHist[
ec][st][rg][iChamber-
FirstCh].NoWires_momTheta =
1872 new TH1F(SpecName,
"No wires (all strips present) - in theta (momentum);theta, rad;entries",
1873 Chan,minChan,maxChan);
1878 sprintf(SpecName,
"NoStrips_momPhi_Ch%d",iChamber);
1879 ChHist[
ec][st][rg][iChamber-
FirstCh].NoStrips_momPhi =
1880 new TH1F(SpecName,
"No strips (all wires present) - in phi (momentum);phi, rad;entries",
1881 Chan,minChan,maxChan);
1883 for(
int iLayer=0; iLayer<6;iLayer++){
1884 sprintf(SpecName,
"Y_InefficientRecHits_inSegment_Ch%d_L%d",iChamber,iLayer);
1885 ChHist[
ec][st][rg][iChamber-
FirstCh].Y_InefficientRecHits_inSegment.push_back
1886 (
new TH1F(SpecName,
"Missing RecHit/layer in a segment (local system, whole chamber);Y, cm; entries",
1887 nYbins,Ymin, Ymax));
1889 sprintf(SpecName,
"Y_EfficientRecHits_inSegment_Ch%d_L%d",iChamber,iLayer);
1890 ChHist[
ec][st][rg][iChamber-
FirstCh].Y_EfficientRecHits_inSegment.push_back
1891 (
new TH1F(SpecName,
"Efficient (extrapolated from the segment) RecHit/layer in a segment (local system, whole chamber);Y, cm; entries",
1892 nYbins,Ymin, Ymax));
1897 sprintf(SpecName,
"Phi_InefficientRecHits_inSegment_Ch%d_L%d",iChamber,iLayer);
1898 ChHist[
ec][st][rg][iChamber-
FirstCh].Phi_InefficientRecHits_inSegment.push_back
1899 (
new TH1F(SpecName,
"Missing RecHit/layer in a segment (local system, whole chamber);Phi, rad; entries",
1900 Chan, minChan, maxChan));
1902 sprintf(SpecName,
"Phi_EfficientRecHits_inSegment_Ch%d_L%d",iChamber,iLayer);
1903 ChHist[
ec][st][rg][iChamber-
FirstCh].Phi_EfficientRecHits_inSegment.push_back
1904 (
new TH1F(SpecName,
"Efficient (extrapolated from the segment) in a segment (local system, whole chamber);Phi, rad; entries",
1905 Chan, minChan, maxChan));
1909 sprintf(SpecName,
"Sim_Rechits_Ch%d",iChamber);
1910 ChHist[
ec][st][rg][iChamber-
FirstCh].SimRechits =
1911 new TH1F(SpecName,
"Existing RecHit (Sim);layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1913 sprintf(SpecName,
"Sim_Simhits_Ch%d",iChamber);
1914 ChHist[
ec][st][rg][iChamber-
FirstCh].SimSimhits =
1915 new TH1F(SpecName,
"Existing SimHit (Sim);layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1935 if (theService)
delete theService;
1940 std::vector<float>
bins, Efficiency, EffError;
1941 std::vector<float> eff(2);
1944 std::map <std::string, bool> chamberTypes;
1945 chamberTypes[
"ME11"] =
false;
1946 chamberTypes[
"ME12"] =
false;
1947 chamberTypes[
"ME13"] =
false;
1948 chamberTypes[
"ME21"] =
false;
1949 chamberTypes[
"ME22"] =
false;
1950 chamberTypes[
"ME31"] =
false;
1951 chamberTypes[
"ME32"] =
false;
1952 chamberTypes[
"ME41"] =
false;
1954 map<std::string,bool>::iterator iter;
1955 std::cout<<
" Writing proper histogram structure (patience)..."<<std::endl;
1956 for(
int ec = 0;
ec<2;++
ec){
1957 for(
int st = 0;st<4;++st){
1958 snprintf(SpecName,
sizeof(SpecName),
"Stations__E%d_S%d",
ec+1, st+1);
1960 StHist[
ec][st].segmentChi2_ndf->Write();
1961 StHist[
ec][st].hitsInSegment->Write();
1962 StHist[
ec][st].AllSegments_eta->Write();
1963 StHist[
ec][st].EfficientSegments_eta->Write();
1964 StHist[
ec][st].ResidualSegments->Write();
1965 StHist[
ec][st].EfficientSegments_XY->Write();
1966 StHist[
ec][st].InefficientSegments_XY->Write();
1967 StHist[
ec][st].EfficientALCT_momTheta->Write();
1968 StHist[
ec][st].InefficientALCT_momTheta->Write();
1969 StHist[
ec][st].EfficientCLCT_momPhi->Write();
1970 StHist[
ec][st].InefficientCLCT_momPhi->Write();
1971 for(
int rg = 0;rg<3;++rg){
1975 else if(1==rg && 3==st){
1979 if(0!=st && 0==rg && iChamber >18){
1982 snprintf(SpecName,
sizeof(SpecName),
"Chambers__E%d_S%d_R%d_Chamber_%d",
ec+1, st+1, rg+1,iChamber);
1985 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientRechits_inSegment->Write();
1986 ChHist[
ec][st][rg][iChamber-
FirstCh].AllSingleHits->Write();
1987 ChHist[
ec][st][rg][iChamber-
FirstCh].digiAppearanceCount->Write();
1988 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientALCT_dydz->Write();
1989 ChHist[
ec][st][rg][iChamber-
FirstCh].InefficientALCT_dydz->Write();
1990 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientCLCT_dxdz->Write();
1991 ChHist[
ec][st][rg][iChamber-
FirstCh].InefficientCLCT_dxdz->Write();
1992 ChHist[
ec][st][rg][iChamber-
FirstCh].InefficientSingleHits->Write();
1993 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientRechits_good->Write();
1994 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientStrips->Write();
1995 ChHist[
ec][st][rg][iChamber-
FirstCh].StripWiresCorrelations->Write();
1996 ChHist[
ec][st][rg][iChamber-
FirstCh].NoWires_momTheta->Write();
1997 ChHist[
ec][st][rg][iChamber-
FirstCh].NoStrips_momPhi->Write();
1998 ChHist[
ec][st][rg][iChamber-
FirstCh].EfficientWireGroups->Write();
1999 for(
unsigned int iLayer = 0; iLayer< 6; iLayer++){
2000 ChHist[
ec][st][rg][iChamber-
FirstCh].Y_InefficientRecHits_inSegment[iLayer]->Write();
2001 ChHist[
ec][st][rg][iChamber-
FirstCh].Y_EfficientRecHits_inSegment[iLayer]->Write();
2002 ChHist[
ec][st][rg][iChamber-
FirstCh].Phi_InefficientRecHits_inSegment[iLayer]->Write();
2003 ChHist[
ec][st][rg][iChamber-
FirstCh].Phi_EfficientRecHits_inSegment[iLayer]->Write();
2005 ChHist[
ec][st][rg][iChamber-
FirstCh].SimRechits->Write();
2006 ChHist[
ec][st][rg][iChamber-
FirstCh].SimSimhits->Write();
2019 snprintf(SpecName,
sizeof(SpecName),
"AllChambers");
2023 TriggersFired->Write();
2024 ALCTPerEvent->Write();
2025 CLCTPerEvent->Write();
2026 recHitsPerEvent->Write();
2027 segmentsPerEvent->Write();
double qoverp() const
q / p
double p() const
momentum vector magnitude
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool wasrun() const
Was at least one path run?
bool applyTrigger(edm::Handle< edm::TriggerResults > &hltR, const edm::TriggerNames &triggerNames)
CartesianTrajectoryError cartesianError() const
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
void fillWG_info(edm::Handle< CSCWireDigiCollection > &wires, edm::ESHandle< CSCGeometry > &cscGeom)
const GeomDet * idToDet(DetId) const override
void chooseDirection(CLHEP::Hep3Vector &innerPosition, CLHEP::Hep3Vector &outerPosition)
#define DEFINE_FWK_MODULE(type)
void ringCandidates(int station, float absEta, std::map< std::string, bool > &chamberTypes)
double lineParameter(double initZPosition, double destZPosition, double initZDirection)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
bool accept() const
Has at least one path accepted the event?
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
Geom::Phi< T > phi() const
unsigned long long EventNumber_t
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
bool recSimHitEfficiency(CSCDetId &id, FreeTrajectoryState &ftsChamber)
double phi() const
azimuthal angle of momentum vector
CSCEfficiency(const edm::ParameterSet &pset)
Constructor.
TrackCharge charge() const
const math::XYZPoint & outerPosition() const
position of the outermost hit
const Plane & surface() const
The nominal surface of the GeomDet.
Strings const & triggerNames() const
void returnTypes(CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing)
float yOfWireGroup(int wireGroup, float x=0.) const
float caloCompatibility(const reco::Muon &muon)
FreeTrajectoryState getFromCLHEP(const CLHEP::Hep3Vector &p3, const CLHEP::Hep3Vector &r3, int charge, const AlgebraicSymMatrix66 &cov, const MagneticField *field)
std::string dumpMuonId(const DetId &id) const
Geom::Theta< T > theta() const
std::string dumpFTS(const FreeTrajectoryState &fts) const
const math::XYZPoint & innerPosition() const
position of the innermost hit
U second(std::pair< T, U > const &p)
double eta() const
pseudorapidity of momentum vector
double pt() const
track transverse momentum
FreeTrajectoryState const * freeState(bool withErrors=true) const
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
bool error() const
Has any path encountered an error (exception)
Abs< T >::type abs(const T &t)
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
DetId geographicalId() const
The label of this GeomDet.
void linearExtrapolation(GlobalPoint initialPosition, GlobalVector initialDirection, float zSurface, std::vector< float > &posZY)
void getFromFTS(const FreeTrajectoryState &fts, CLHEP::Hep3Vector &p3, CLHEP::Hep3Vector &r3, int &charge, AlgebraicSymMatrix66 &cov)
bool efficienciesPerChamber(CSCDetId &id, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
GlobalVector momentum() const
void chamberCandidates(int station, int ring, float phi, std::vector< int > &coupleOfChambers)
const AlgebraicSymMatrix66 & matrix() const
void fillLCT_info(edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts)
void fillRechitsSegments_info(edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
double qoverpError() const
error on signed transverse curvature
bool stripWire_Efficiencies(CSCDetId &cscDetId, FreeTrajectoryState &ftsChamber)
double deltaR(double eta1, double eta2, double phi1, double phi2)
int nearestStrip(const LocalPoint &lp) const
double extrapolate1D(double initPosition, double initDirection, double parameterOfTheLine)
GlobalPoint position() const
void fillDigiInfo(edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts, edm::Handle< CSCWireDigiCollection > &wires, edm::Handle< CSCStripDigiCollection > &strips, edm::Handle< edm::PSimHitContainer > &simhits, edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
T const * product() const
bool filter(edm::Event &event, const edm::EventSetup &eventSetup) override
const Propagator * propagator(std::string propagatorName) const
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
bool recHitSegment_Efficiencies(CSCDetId &cscDetId, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
std::vector< CSCALCTDigi >::const_iterator const_iterator
bool quality(const TrackQuality) const
Track quality.
~CSCEfficiency() override
Destructor.
bool inSensitiveLocalRegion(double xLocal, double yLocal, int station, int ring)
bool checkLocal(double yLocal, double yBoundary, int station, int ring)
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
unsigned short found() const
Number of valid hits on track.
void fillSimhit_info(edm::Handle< edm::PSimHitContainer > &simHits)
std::pair< const_iterator, const_iterator > Range
int charge() const
track electric charge
const Point & position() const
position
const PositionType & position() const
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
float stripAngle(int strip) const
const CSCLayerGeometry * geometry() const
Power< A, B >::type pow(const A &a, const B &b)
TrajectoryStateOnSurface propagate(FreeTrajectoryState &ftsStart, const BoundPlane &bp)
void fillStrips_info(edm::Handle< CSCStripDigiCollection > &strips)