29 printalot = (nEventsAnalyzed < int(printout_NEvents));
30 int iRun =
event.id().run();
31 int iEvent =
event.id().event();
32 if(0==fmod(
double (nEventsAnalyzed) ,
double(1000) )){
34 printf(
"\n==enter==CSCEfficiency===== run %i\tevent %i\tn Analyzed %i\n",iRun,iEvent,nEventsAnalyzed);
37 theService->update(eventSetup);
40 if (printalot) printf(
"\tget handles for digi collections\n");
45 if (printalot) printf(
"\tpass handles\n");
58 event.getByLabel(alctDigiTag_, alcts);
59 event.getByLabel(clctDigiTag_, clcts);
60 event.getByLabel(corrlctDigiTag_, correlatedlcts);
62 event.getByLabel( stripDigiTag_, strips);
63 event.getByLabel( wireDigiTag_, wires);
66 event.getByLabel(simHitTag, simhits);
68 event.getByLabel(rechitDigiTag_,rechits);
69 event.getByLabel(segmentDigiTag_, segments);
71 event.getByLabel(tracksTag,trackCollectionH);
75 if (printalot) printf(
"\tget the CSC geometry.\n");
83 bool triggerPassed =
true;
89 event.getByLabel(hlTriggerResults_,hltR);
91 triggerPassed = applyTrigger(hltR, triggerNames);
98 if(theService->magneticField()->inTesla(gpZero).mag2()<0.1){
106 fillDigiInfo(alcts, clcts, correlatedlcts, wires, strips, simhits, rechits, segments, cscGeom);
110 event.getByLabel(muonTag_,muons);
113 event.getByLabel(
"offlineBeamSpot", beamSpotHandle);
116 std::vector <reco::MuonCollection::const_iterator> goodMuons_it;
117 unsigned int nPositiveZ = 0;
118 unsigned int nNegativeZ = 0;
119 float muonOuterZPosition = -99999.;
121 if (printalot)
std::cout<<
" muons.size() = "<<muons->size() <<std::endl;
122 for ( reco::MuonCollection::const_iterator
muon = muons->begin();
muon != muons->end(); ++
muon ) {
126 " eta = "<<
muon->eta()<<
" phi = "<<
muon->phi()<<
129 muon->isGlobalMuon()<<
"/"<<
muon->isTrackerMuon()<<
"/"<<
muon->isStandAloneMuon()<<std::endl;
131 if(!(
muon->isTrackerMuon() &&
muon->isGlobalMuon())){
135 double relISO = (
muon->isolationR03().sumPt +
136 muon->isolationR03().emEt +
137 muon->isolationR03().hadEt)/
muon->track()->pt();
139 std::cout<<
" relISO = "<<relISO<<
" emVetoEt = "<<
muon->isolationR03().emVetoEt<<
" caloComp = "<<
148 if(
muon->track()->hitPattern().numberOfValidPixelHits()<1 ||
149 muon->track()->hitPattern().numberOfValidTrackerHits()<11 ||
150 muon->combinedMuon()->hitPattern().numberOfValidMuonHits()<1 ||
151 muon->combinedMuon()->normalizedChi2()>10. ||
152 muon->numberOfMatches()<2){
156 float zOuter =
muon->combinedMuon()->outerPosition().z();
157 float rhoOuter =
muon->combinedMuon()->outerPosition().rho();
158 bool passDepth =
true;
161 if ( fabs(zOuter) < 660. && rhoOuter > 400. && rhoOuter < 540.){
166 else if( fabs(zOuter) > 550. && fabs(zOuter) < 650. && rhoOuter < 300.){
171 else if ( fabs(zOuter) > 680. && fabs(zOuter) < 880. && rhoOuter < 540.){
178 goodMuons_it.push_back(
muon);
179 if(
muon->track()->momentum().z()>0.){
182 if(
muon->track()->momentum().z()<0.){
191 if (printalot)
std::cout<<
"Start track loop over "<<trackCollection.
size()<<
" tracks"<<std::endl;
198 std::cout<<
" nNegativeZ = "<<nNegativeZ<<
" nPositiveZ = "<<nPositiveZ<<std::endl;
200 if(nNegativeZ>1 || nPositiveZ>1){
203 bool trackOK =
false;
205 std::cout<<
" goodMuons_it.size() = "<<goodMuons_it.size()<<std::endl;
207 for(
size_t iM=0;iM<goodMuons_it.size();++iM){
211 float deltaR =
pow(track->
phi()-goodMuons_it[iM]->track()->phi(),2) +
212 pow(track->
eta()-goodMuons_it[iM]->track()->eta(),2);
213 deltaR =
sqrt(deltaR);
215 std::cout<<
" TR mu match to a tr: deltaR = "<<deltaR<<
" dPt = "<<
216 track->
pt()-goodMuons_it[iM]->track()->pt()<<std::endl;
218 if(deltaR>0.01 || fabs(track->
pt()-goodMuons_it[iM]->track()->pt())>0.1 ){
226 muonOuterZPosition = goodMuons_it[iM]->combinedMuon()->outerPosition().z();
233 std::cout<<
" failed: trackOK "<<std::endl;
240 if(trackCollection.
size()>2){
244 if(!
i && 2==trackCollection.
size()){
254 std::cout<<
"i track = "<<
i<<
" P = "<<track->
p()<<
" chi2/ndf = "<<track->
normalizedChi2()<<
" nSeg = "<<segments->size()<<std::endl;
255 std::cout<<
"quality undef/loose/tight/high/confirmed/goodIt/size "<<
291 float dpT_ov_pT = 0.;
292 if(fabs(track->
pt())>0.001){
293 dpT_ov_pT = track->
ptError()/ track->
pt();
300 if(track->
found()<minTrackHits){
304 if(!segments->size()){
308 if(magField && (track->
p()<
minP || track->
p()>maxP)){
312 if(magField && (dpT_ov_pT >0.5) ){
318 if (printalot)
std::cout<<
"good Track"<<std::endl;
321 chooseDirection(r3T_inner, r3T);
324 CLHEP::Hep3Vector p3_propagated, r3_propagated;
327 cov_propagated *= 1
e-20;
329 FreeTrajectoryState ftsStart = getFromCLHEP(p3T, r3T, charge, covT, &*(theService->magneticField()));
332 std::cout<<
" dump the very first FTS = "<<debug.
dumpFTS(ftsStart)<<std::endl;
345 std::vector< CSCDetId > refME;
346 for(
int iS=1;iS<5;++iS){
347 for(
int iR=1;iR<4;++iR){
351 else if(4==iS && iR>1){
354 refME.push_back(
CSCDetId(endcap, iS, iR, chamber));
358 for(
size_t iSt = 0; iSt<refME.size();++iSt){
360 std::cout<<
"loop iStatation = "<<iSt<<std::endl;
361 std::cout<<
"refME[iSt]: st = "<<refME[iSt].station()<<
" rg = "<<refME[iSt].ring()<<std::endl;
363 std::map <std::string, bool> chamberTypes;
364 chamberTypes[
"ME11"] =
false;
365 chamberTypes[
"ME12"] =
false;
366 chamberTypes[
"ME13"] =
false;
367 chamberTypes[
"ME21"] =
false;
368 chamberTypes[
"ME22"] =
false;
369 chamberTypes[
"ME31"] =
false;
370 chamberTypes[
"ME32"] =
false;
371 chamberTypes[
"ME41"] =
false;
372 const CSCChamber* cscChamber_base = cscGeom->chamber(refME[iSt].chamberId());
375 std::cout<<
" base iStation : eta = "<<cscGeom->idToDet(detId)->surface().position().eta()<<
" phi = "<<
376 cscGeom->idToDet(detId)->surface().position().phi() <<
" y = " <<cscGeom->idToDet(detId)->surface().position().y()<<std::endl;
381 tSOSDest = propagate(ftsStart, cscGeom->idToDet(detId)->surface());
384 if (printalot)
std::cout<<
" dump FTS end = "<<debug.
dumpFTS(ftsStart)<<std::endl;
385 getFromFTS(ftsStart, p3_propagated, r3_propagated, charge, cov_propagated);
386 float feta = fabs(r3_propagated.eta());
387 float phi = r3_propagated.phi();
389 ringCandidates(refME[iSt].
station(), feta, chamberTypes);
391 map<std::string,bool>::iterator iter;
394 for( iter = chamberTypes.begin(); iter != chamberTypes.end(); iter++ ) {
397 if(iter->second && (iterations-1)==int(iSt)){
399 std::cout<<
" Chamber type "<< iter->first<<
" is a candidate..."<<std::endl;
400 std::cout<<
" station() = "<< refME[iSt].station()<<
" ring() = "<<refME[iSt].ring()<<
" iSt = "<<iSt<<std::endl;
402 std::vector <int> coupleOfChambers;
404 chamberCandidates(refME[iSt].
station(), refME[iSt].
ring(), phi, coupleOfChambers);
406 for(
size_t iCh =0;iCh<coupleOfChambers.size();++iCh){
408 if (printalot)
std::cout<<
" Check chamber N = "<<coupleOfChambers.at(iCh)<<std::endl;;
409 if((!getAbsoluteEfficiency) && (
true == emptyChambers
412 [refME[iSt].
ring()-1]
413 [coupleOfChambers.at(iCh)-
FirstCh])){
417 const CSCChamber* cscChamber = cscGeom->chamber(theCSCId.chamberId());
418 const BoundPlane bpCh = cscGeom->idToDet(cscChamber->geographicalId())->surface();
420 float dz = fabs(bpCh.position().z() - zFTS);
421 float zDistInner = track->
innerPosition().z() - bpCh.position().z();
422 float zDistOuter = track->
outerPosition().z() - bpCh.position().z();
427 if(!isIPdata && (zDistInner*zDistOuter>0. || fabs(zDistInner)<15. || fabs(zDistOuter)<15.)){
429 std::cout<<
" Not an intermediate (as defined) point... Skip."<<std::endl;
433 if(isIPdata && fabs(track->
eta())<1.8){
434 if(fabs(muonOuterZPosition) - fabs(bpCh.position().z())<0 ||
435 fabs(muonOuterZPosition-bpCh.position().z())<15.){
443 tSOSDest = propagate(ftsStart, cscGeom->idToDet(cscChamber->geographicalId())->surface());
448 if(printalot)
std::cout<<
"TSOS not valid! Break."<<std::endl;
453 if(printalot)
std::cout<<
" info: dz<0.1"<<std::endl;
457 bool inDeadZone =
false;
459 for(
int iLayer = 0;iLayer<6;++iLayer){
460 bool extrapolationPassed =
true;
462 std::cout<<
" iLayer = "<<iLayer<<
" dump FTS init = "<<debug.
dumpFTS(ftsInit)<<std::endl;
464 std::cout<<
"Surface to propagate to: pos = "<<cscChamber->layer(iLayer+1)->surface().position()<<
" eta = "
465 <<cscChamber->layer(iLayer+1)->surface().position().eta()<<
" phi = "
466 <<cscChamber->layer(iLayer+1)->surface().position().phi()<<std::endl;
469 tSOSDest = propagate(ftsInit, cscChamber->layer(iLayer+1)->surface());
472 if (printalot)
std::cout<<
" Propagation between layers successful: dump FTS end = "<<debug.
dumpFTS(ftsInit)<<std::endl;
473 getFromFTS(ftsInit, p3_propagated, r3_propagated, charge, cov_propagated);
476 if (printalot)
std::cout<<
"Propagation between layers not successful - notValid TSOS"<<std::endl;
477 extrapolationPassed =
false;
482 if(extrapolationPassed){
483 GlobalPoint theExtrapolationPoint(r3_propagated.x(),r3_propagated.y(),r3_propagated.z());
484 LocalPoint theLocalPoint = cscChamber->layer(iLayer+1)->toLocal(theExtrapolationPoint);
486 inDeadZone = ( inDeadZone ||
487 !inSensitiveLocalRegion(theLocalPoint.x(), theLocalPoint.y(),
488 refME[iSt].station(), refME[iSt].ring()));
490 std::cout<<
" Candidate chamber: extrapolated LocalPoint = "<<theLocalPoint<<
"inDeadZone = "<<inDeadZone<<std::endl;
505 if (printalot)
std::cout<<
"Do efficiencies..."<<std::endl;
508 bool angle_flag =
true; angle_flag = efficienciesPerChamber(theCSCId, cscChamber, ftsStart);
509 if(useDigis && angle_flag){
510 stripWire_Efficiencies(theCSCId, ftsStart);
513 recHitSegment_Efficiencies(theCSCId, cscChamber, ftsStart);
515 recSimHitEfficiency(theCSCId, ftsStart);
520 if(printalot)
std::cout<<
" Not in active area for all layers"<<std::endl;
530 if (printalot)
std::cout<<
" TSOS not valid..."<<std::endl;
535 if (printalot) printf(
"==exit===CSCEfficiency===== run %i\tevent %i\n\n",iRun,iEvent);
543 std::vector <double> chamberBounds(3);
544 float y_center = 99999.;
546 if(station>1 && station<5){
548 chamberBounds[0] = 66.46/2;
549 chamberBounds[1] = 127.15/2;
550 chamberBounds[2] = 323.06/2;
555 chamberBounds[0] = 54.00/2;
556 chamberBounds[1] = 125.71/2;
557 chamberBounds[2] = 189.66/2;
561 chamberBounds[0] = 61.40/2;
562 chamberBounds[1] = 125.71/2;
563 chamberBounds[2] = 169.70/2;
567 chamberBounds[0] = 69.01/2;
568 chamberBounds[1] = 125.65/2;
569 chamberBounds[2] = 149.42/2;
576 chamberBounds[0] = 63.40/2;
577 chamberBounds[1] = 92.10/2;
578 chamberBounds[2] = 164.16/2;
582 chamberBounds[0] = 51.00/2;
583 chamberBounds[1] = 83.74/2;
584 chamberBounds[2] = 174.49/2;
588 chamberBounds[0] = 30./2;
589 chamberBounds[1] = 60./2;
590 chamberBounds[2] = 160./2;
594 double yUp = chamberBounds[2] + y_center;
595 double yDown = - chamberBounds[2] + y_center;
596 double xBound1Shifted = chamberBounds[0]-distanceFromDeadZone;
597 double xBound2Shifted = chamberBounds[1]-distanceFromDeadZone;
598 double lineSlope = (yUp - yDown)/(xBound2Shifted-xBound1Shifted);
599 double lineConst = yUp - lineSlope*xBound2Shifted;
600 double yBoundary = lineSlope*
abs(xLocal) + lineConst;
601 pass = checkLocal(yLocal, yBoundary, station, ring);
608 std::vector <float> deadZoneCenter(6);
609 const float deadZoneHalf = 0.32*7/2;
610 float cutZone = deadZoneHalf + distanceFromDeadZone;
612 if(station>1 && station<5){
614 deadZoneCenter[0]= -162.48 ;
615 deadZoneCenter[1] = -81.8744;
616 deadZoneCenter[2] = -21.18165;
617 deadZoneCenter[3] = 39.51105;
618 deadZoneCenter[4] = 100.2939;
619 deadZoneCenter[5] = 160.58;
621 if(yLocal >yBoundary &&
622 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
623 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
624 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone) ||
625 (yLocal> deadZoneCenter[3] + cutZone && yLocal< deadZoneCenter[4] - cutZone) ||
626 (yLocal> deadZoneCenter[4] + cutZone && yLocal< deadZoneCenter[5] - cutZone))){
632 deadZoneCenter[0]= -95.94 ;
633 deadZoneCenter[1] = -27.47;
634 deadZoneCenter[2] = 33.67;
635 deadZoneCenter[3] = 93.72;
638 deadZoneCenter[0]= -85.97 ;
639 deadZoneCenter[1] = -36.21;
640 deadZoneCenter[2] = 23.68;
641 deadZoneCenter[3] = 84.04;
644 deadZoneCenter[0]= -75.82;
645 deadZoneCenter[1] = -26.14;
646 deadZoneCenter[2] = 23.85;
647 deadZoneCenter[3] = 73.91;
649 if(yLocal >yBoundary &&
650 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
651 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
652 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone))){
659 deadZoneCenter[0]= -83.155 ;
660 deadZoneCenter[1] = -22.7401;
661 deadZoneCenter[2] = 27.86665;
662 deadZoneCenter[3] = 81.005;
663 if(yLocal > yBoundary &&
664 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
665 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
666 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone))){
671 deadZoneCenter[0]= -86.285 ;
672 deadZoneCenter[1] = -32.88305;
673 deadZoneCenter[2] = 32.867423;
674 deadZoneCenter[3] = 88.205;
675 if(yLocal > (yBoundary) &&
676 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) ||
677 (yLocal> deadZoneCenter[1] + cutZone && yLocal< deadZoneCenter[2] - cutZone) ||
678 (yLocal> deadZoneCenter[2] + cutZone && yLocal< deadZoneCenter[3] - cutZone))){
683 deadZoneCenter[0]= -81.0;
684 deadZoneCenter[1] = 81.0;
685 if(yLocal > (yBoundary) &&
686 ((yLocal> deadZoneCenter[0] + cutZone && yLocal< deadZoneCenter[1] - cutZone) )){
703 for(
int iE=0;iE<2;iE++){
704 for(
int iS=0;iS<4;iS++){
705 for(
int iR=0;iR<4;iR++){
706 for(
int iC=0;iC<
NumCh;iC++){
707 allSegments[iE][iS][iR][iC].clear();
708 allCLCT[iE][iS][iR][iC] = allALCT[iE][iS][iR][iC] = allCorrLCT[iE][iS][iR][iC] =
false;
709 for(
int iL=0;iL<6;iL++){
710 allStrips[iE][iS][iR][iC][iL].clear();
711 allWG[iE][iS][iR][iC][iL].clear();
712 allRechits[iE][iS][iR][iC][iL].clear();
713 allSimhits[iE][iS][iR][iC][iL].clear();
721 fillLCT_info(alcts, clcts, correlatedlcts);
722 fillWG_info(wires, cscGeom);
723 fillStrips_info(strips);
725 fillRechitsSegments_info(rechits, segments, cscGeom);
727 fillSimhit_info(simhits);
742 range.first; digiIt!=range.second;
745 if((*digiIt).isValid()){
746 allALCT[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh] =
true;
750 ALCTPerEvent->Fill(nSize);
756 std::vector<CSCCLCTDigi>::const_iterator digiIt = (*j).second.first;
757 std::vector<CSCCLCTDigi>::const_iterator
last = (*j).second.second;
758 for( ; digiIt !=
last; ++digiIt) {
760 if((*digiIt).isValid()){
761 allCLCT[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh] =
true;
765 CLCTPerEvent->Fill(nSize);
769 std::vector<CSCCorrelatedLCTDigi>::const_iterator digiIt = (*j).second.first;
770 std::vector<CSCCorrelatedLCTDigi>::const_iterator
last = (*j).second.second;
771 for( ; digiIt !=
last; ++digiIt) {
773 if((*digiIt).isValid()){
774 allCorrLCT[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh] =
true;
784 const CSCLayer *layer_p = cscGeom->layer (
id);
787 std::vector<CSCWireDigi>::const_iterator digiItr = (*j).second.first;
788 std::vector<CSCWireDigi>::const_iterator
last = (*j).second.second;
790 for( ; digiItr !=
last; ++digiItr) {
791 std::pair < int, float > WG_pos(digiItr->getWireGroup(), layerGeom->
yOfWireGroup(digiItr->getWireGroup()));
792 std::pair <std::pair < int, float >,
int > LayerSignal(WG_pos, digiItr->getTimeBin());
795 allWG[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh]
796 [
id.layer()-1].push_back(LayerSignal);
810 int largestADCValue = -1;
811 std::vector<CSCStripDigi>::const_iterator digiItr = (*j).second.first;
812 std::vector<CSCStripDigi>::const_iterator
last = (*j).second.second;
813 for( ; digiItr !=
last; ++digiItr) {
814 int maxADC=largestADCValue;
815 int myStrip = digiItr->getStrip();
816 std::vector<int> myADCVals = digiItr->getADCCounts();
817 float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
820 float peakADC = -1000.;
821 for (
unsigned int iCount = 0; iCount < myADCVals.size(); iCount++) {
822 diff = (float)myADCVals[iCount]-thisPedestal;
823 if (diff > threshold) {
824 if (myADCVals[iCount] > largestADCValue) {
825 largestADCValue = myADCVals[iCount];
828 if (diff > threshold && diff > peakADC) {
832 if(largestADCValue>maxADC){
833 maxADC = largestADCValue;
834 std::pair <int, float> LayerSignal (myStrip, peakADC);
838 allStrips[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-1][
id.layer()-1].clear();
839 allStrips[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-1][
id.layer()-1].push_back(LayerSignal);
846 edm::PSimHitContainer::const_iterator dSHsimIter;
847 for (dSHsimIter = simhits->begin(); dSHsimIter != simhits->end(); dSHsimIter++){
850 std::pair <LocalPoint, int> simHitPos((*dSHsimIter).localPosition(), (*dSHsimIter).particleType());
863 printf(
" The size of the rechit collection is %i\n",
int(rechits->size()));
866 recHitsPerEvent->Fill(rechits->size());
869 for (recIt = rechits->begin(); recIt != rechits->end(); recIt++) {
873 const CSCLayer* csclayer = cscGeom->layer(
id);
874 LocalPoint rhitlocal = (*recIt).localPosition();
875 LocalError rerrlocal = (*recIt).localPositionError();
877 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.chamber(),
id.layer());
878 printf(
"\t\tx,y,z: %f, %f, %f\texx,eey,exy: %f, %f, %f\tglobal x,y,z: %f, %f, %f \n",
879 rhitlocal.
x(), rhitlocal.
y(), rhitlocal.
z(), rerrlocal.
xx(), rerrlocal.
yy(), rerrlocal.
xy(),
880 rhitglobal.
x(), rhitglobal.
y(), rhitglobal.
z());
882 std::pair <LocalPoint, bool> recHitPos((*recIt).localPosition(),
false);
883 allRechits[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh][
id.layer()-1].push_back(recHitPos);
886 for(
int iE=0;iE<2;iE++){
887 for(
int iS=0;iS<4;iS++){
888 for(
int iR=0;iR<4;iR++){
889 for(
int iC=0;iC<
NumCh;iC++){
891 for(
int iL=0;iL<6;iL++){
892 if(allRechits[iE][iS][iR][iC][iL].
size()){
897 emptyChambers[iE][iS][iR][iC] =
false;
900 emptyChambers[iE][iS][iR][iC] =
true;
909 printf(
" The size of the segment collection is %i\n",
int(segments->size()));
912 segmentsPerEvent->Fill(segments->size());
915 StHist[
id.endcap()-1][
id.station()-1].segmentChi2_ndf->Fill((*it).chi2()/(*it).degreesOfFreedom());
916 StHist[
id.endcap()-1][
id.station()-1].hitsInSegment->Fill((*it).nRecHits());
918 printf(
"\tendcap/station/ring/chamber: %i %i %i %i\n",
920 std::cout<<
"\tposition(loc) = "<<(*it).localPosition()<<
" error(loc) = "<<(*it).localPositionError()<<std::endl;
921 std::cout<<
"\t chi2/ndf = "<<(*it).chi2()/(*it).degreesOfFreedom()<<
" nhits = "<<(*it).nRecHits() <<std::endl;
924 allSegments[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh].push_back
925 (make_pair((*it).localPosition(), (*it).localDirection()));
930 std::vector<CSCRecHit2D> theseRecHits = (*it).specificRecHits();
931 int nRH = (*it).nRecHits();
933 printf(
"\tGet the recHits for this segment.\t");
934 printf(
" nRH = %i\n",nRH);
938 for ( vector<CSCRecHit2D>::const_iterator iRH = theseRecHits.begin(); iRH != theseRecHits.end(); iRH++) {
942 printf(
"\t%i RH\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
949 float xDiff = iRH->localPosition().x() -
951 float yDiff = iRH->localPosition().y() -
953 if(fabs(xDiff)<0.0001 && fabs(yDiff)<0.0001){
954 std::pair <LocalPoint, bool>
958 std::cout<<
" number of the rechit (from zero) in the segment = "<< jRH<<std::endl;
971 if(feta>0.85 && feta<1.18){
972 chamberTypes[
"ME13"] =
true;
974 if(feta>1.18 && feta<1.7){
975 chamberTypes[
"ME12"] =
true;
977 if(feta>1.5 && feta<2.45){
978 chamberTypes[
"ME11"] =
true;
982 if(feta>0.95 && feta<1.6){
983 chamberTypes[
"ME22"] =
true;
986 if(feta>1.55 && feta<2.45){
987 chamberTypes[
"ME21"] =
true;
991 if(feta>1.08 && feta<1.72){
992 chamberTypes[
"ME32"] =
true;
995 if(feta>1.69 && feta<2.45){
996 chamberTypes[
"ME31"] =
true;
1000 if(feta>1.78 && feta<2.45){
1001 chamberTypes[
"ME41"] =
true;
1010 coupleOfChambers.clear();
1012 float phi_zero = 0.;
1013 float phi_const = 2.*
M_PI/36.;
1014 int last_chamber = 36;
1015 int first_chamber = 1;
1016 if(1 != station && 1==ring){
1021 if (printalot)
std::cout<<
" info: negative phi = "<<phi<<std::endl;
1024 float chamber_float = (phi - phi_zero)/phi_const;
1025 int chamber_int = int(chamber_float);
1026 if (chamber_float -
float(chamber_int) -0.5 <0.){
1027 if(0!=chamber_int ){
1028 coupleOfChambers.push_back(chamber_int);
1031 coupleOfChambers.push_back(last_chamber);
1033 coupleOfChambers.push_back(chamber_int+1);
1037 coupleOfChambers.push_back(chamber_int+1);
1038 if(last_chamber!=chamber_int+1){
1039 coupleOfChambers.push_back(chamber_int+2);
1042 coupleOfChambers.push_back(first_chamber);
1045 if (printalot)
std::cout<<
" phi = "<<phi<<
" phi_zero = "<<phi_zero<<
" phi_const = "<<phi_const<<
1046 " candidate chambers: first ch = "<<coupleOfChambers[0]<<
" second ch = "<<coupleOfChambers[1]<<std::endl;
1051 int ec, st, rg, ch, secondRing;
1052 returnTypes(
id, ec, st, rg, ch, secondRing);
1057 std::cout<<
" local dir = "<<localDir<<std::endl;
1060 float dxdz = localDir.
x()/localDir.
z();
1061 float dydz = localDir.
y()/localDir.
z();
1064 std::cout<<
"st 3 or 4 ... flip dy/dz"<<std::endl;
1073 if(applyIPangleCuts){
1074 if(dydz>local_DY_DZ_Max || dydz<local_DY_DZ_Min || fabs(dxdz)>local_DX_DZ_Max){
1080 bool firstCondition = allSegments[ec][st][rg][ch].size() ?
true :
false;
1081 bool secondCondition =
false;
1084 secondCondition = allSegments[ec][st][secondRing][ch].size() ?
true :
false;
1086 if(firstCondition || secondCondition){
1088 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(1);
1093 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(0);
1099 firstCondition = allALCT[ec][st][rg][ch];
1100 secondCondition =
false;
1102 secondCondition = allALCT[ec][st][secondRing][ch];
1104 if(firstCondition || secondCondition){
1106 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(3);
1109 if(fabs(dxdz)<local_DX_DZ_Max){
1110 StHist[ec][st].EfficientALCT_momTheta->Fill(ftsChamber.
momentum().
theta());
1111 ChHist[ec][st][rg][ch].EfficientALCT_dydz->Fill(dydz);
1116 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(2);
1118 if(fabs(dxdz)<local_DX_DZ_Max){
1119 StHist[ec][st].InefficientALCT_momTheta->Fill(ftsChamber.
momentum().
theta());
1120 ChHist[ec][st][rg][ch].InefficientALCT_dydz->Fill(dydz);
1123 std::cout<<
" missing ALCT (dy/dz = "<<dydz<<
")";
1124 printf(
"\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n",ec+1,st+1,rg+1,ch+1);
1129 firstCondition = allCLCT[ec][st][rg][ch];
1130 secondCondition =
false;
1132 secondCondition = allCLCT[ec][st][secondRing][ch];
1134 if(firstCondition || secondCondition){
1136 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(5);
1138 if(dydz<local_DY_DZ_Max && dydz>local_DY_DZ_Min){
1139 StHist[ec][st].EfficientCLCT_momPhi->Fill(ftsChamber.
momentum().
phi() );
1140 ChHist[ec][st][rg][ch].EfficientCLCT_dxdz->Fill(dxdz);
1145 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(4);
1147 if(dydz<local_DY_DZ_Max && dydz>local_DY_DZ_Min){
1148 StHist[ec][st].InefficientCLCT_momPhi->Fill(ftsChamber.
momentum().
phi());
1149 ChHist[ec][st][rg][ch].InefficientCLCT_dxdz->Fill(dxdz);
1152 std::cout<<
" missing CLCT (dx/dz = "<<dxdz<<
")";
1153 printf(
"\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n",ec+1,st+1,rg+1,ch+1);
1158 firstCondition = allCorrLCT[ec][st][rg][ch];
1159 secondCondition =
false;
1161 secondCondition = allCorrLCT[ec][st][secondRing][ch];
1163 if(firstCondition || secondCondition){
1164 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(7);
1167 ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(6);
1176 int ec, st, rg, ch, secondRing;
1177 returnTypes(
id, ec, st, rg, ch, secondRing);
1179 bool firstCondition, secondCondition;
1180 int missingLayers_s = 0;
1181 int missingLayers_wg = 0;
1182 for(
int iLayer=0;iLayer<6;iLayer++){
1185 printf(
"\t%i swEff: \tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
1187 std::cout<<
" size S = "<<allStrips[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh][iLayer].size()<<
1188 "size W = "<<allWG[
id.endcap()-1][
id.station()-1][
id.ring()-1][
id.chamber()-
FirstCh][iLayer].size()<<std::endl;
1191 firstCondition = allStrips[ec][st][rg][ch][iLayer].size() ?
true :
false;
1193 secondCondition =
false;
1195 secondCondition = allStrips[ec][st][secondRing][ch][iLayer].size() ?
true :
false;
1197 if(firstCondition || secondCondition){
1198 ChHist[ec][st][rg][ch].EfficientStrips->Fill(iLayer+1);
1203 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.chamber(),iLayer+1);
1207 firstCondition = allWG[ec][st][rg][ch][iLayer].size() ?
true :
false;
1208 secondCondition =
false;
1210 secondCondition = allWG[ec][st][secondRing][ch][iLayer].size() ?
true :
false;
1212 if(firstCondition || secondCondition){
1213 ChHist[ec][st][rg][ch].EfficientWireGroups->Fill(iLayer+1);
1218 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.chamber(),iLayer+1);
1223 if(6!=missingLayers_s){
1224 ChHist[ec][st][rg][ch].EfficientStrips->Fill(8);
1226 if(6!=missingLayers_wg){
1227 ChHist[ec][st][rg][ch].EfficientWireGroups->Fill(8);
1229 ChHist[ec][st][rg][ch].EfficientStrips->Fill(9);
1230 ChHist[ec][st][rg][ch].EfficientWireGroups->Fill(9);
1232 ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(1);
1233 if(missingLayers_s!=missingLayers_wg){
1234 ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(2);
1235 if(6==missingLayers_wg){
1236 ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(3);
1237 ChHist[ec][st][rg][ch].NoWires_momTheta->Fill(ftsChamber.
momentum().
theta());
1239 if(6==missingLayers_s){
1240 ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(4);
1241 ChHist[ec][st][rg][ch].NoStrips_momPhi->Fill(ftsChamber.
momentum().
theta());
1244 else if(6==missingLayers_s){
1245 ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(5);
1252 int ec, st, rg, ch, secondRing;
1253 returnTypes(
id, ec, st, rg, ch, secondRing);
1254 bool firstCondition, secondCondition;
1255 for(
int iLayer=0; iLayer<6;iLayer++){
1256 firstCondition = allSimhits[ec][st][rg][ch][iLayer].size() ?
true :
false;
1257 secondCondition =
false;
1260 secondCondition = allSimhits[ec][st][secondRing][ch][iLayer].size() ?
true :
false;
1261 if(secondCondition){
1262 thisRing = secondRing;
1265 if(firstCondition || secondCondition){
1267 iSH<allSimhits[ec][st][thisRing][ch][iLayer].size();
1270 fabs(allSimhits[ec][st][thisRing][ch][iLayer][iSH].
second)){
1271 ChHist[ec][st][rg][ch].SimSimhits->Fill(iLayer+1);
1272 if(allRechits[ec][st][thisRing][ch][iLayer].
size()){
1273 ChHist[ec][st][rg][ch].SimRechits->Fill(iLayer+1);
1299 int ec, st, rg, ch, secondRing;
1300 returnTypes(
id, ec, st, rg, ch, secondRing);
1301 bool firstCondition, secondCondition;
1303 std::vector <bool> missingLayers_rh(6);
1304 std::vector <int> usedInSegment(6);
1306 if(printalot)
std::cout<<
"RecHits eff"<<std::endl;
1307 for(
int iLayer=0;iLayer<6;++iLayer){
1308 firstCondition = allRechits[ec][st][rg][ch][iLayer].size() ?
true :
false;
1309 secondCondition =
false;
1312 secondCondition = allRechits[ec][st][secondRing][ch][iLayer].size() ?
true :
false;
1313 if(secondCondition){
1314 thisRing = secondRing;
1317 if(firstCondition || secondCondition){
1318 ChHist[ec][st][rg][ch].EfficientRechits_good->Fill(iLayer+1);
1320 iR<allRechits[ec][st][thisRing][ch][iLayer].size();
1322 if(allRechits[ec][st][thisRing][ch][iLayer][iR].
second){
1323 usedInSegment[iLayer] = 1;
1327 usedInSegment[iLayer] = -1;
1332 missingLayers_rh[iLayer] =
true;
1335 printf(
"\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.chamber(),iLayer+1);
1342 firstCondition = allSegments[ec][st][rg][ch].size() ?
true :
false;
1343 secondCondition =
false;
1347 secondCondition = allSegments[ec][st][secondRing][ch].size() ?
true :
false;
1348 secondSize = allSegments[ec][st][secondRing][ch].size();
1349 if(secondCondition){
1350 thisRing = secondRing;
1353 if(firstCondition || secondCondition){
1354 if (printalot)
std::cout<<
"segments - start ec = "<<ec<<
" st = "<<st<<
" rg = "<<rg<<
" ch = "<<ch<<std::endl;
1355 StHist[ec][st].EfficientSegments_XY->Fill(ftsChamber.
position().
x(),ftsChamber.
position().
y());
1356 if(1==allSegments[ec][st][rg][ch].
size() + secondSize){
1357 globalDir = cscChamber->
toGlobal(allSegments[ec][st][thisRing][ch][0].
second);
1358 globalPos = cscChamber->
toGlobal(allSegments[ec][st][thisRing][ch][0].
first);
1359 StHist[ec][st].EfficientSegments_eta->Fill(fabs(ftsChamber.
position().
eta()));
1363 if (printalot)
std::cout<<
" fts.position() = "<<ftsChamber.
position()<<
" segPos = "<<globalPos<<
" res = "<<residual<< std::endl;
1364 StHist[ec][st].ResidualSegments->Fill(residual);
1366 for(
int iLayer=0;iLayer<6;++iLayer){
1367 if(printalot)
std::cout<<
" iLayer = "<<iLayer<<
" usedInSegment = "<<usedInSegment[iLayer]<<std::endl;
1368 if(0!=usedInSegment[iLayer]){
1369 if(-1==usedInSegment[iLayer]){
1370 ChHist[ec][st][rg][ch].InefficientSingleHits->Fill(iLayer+1);
1372 ChHist[ec][st][rg][ch].AllSingleHits->Fill(iLayer+1);
1374 firstCondition = allRechits[ec][st][rg][ch][iLayer].size() ?
true :
false;
1375 secondCondition =
false;
1377 secondCondition = allRechits[ec][st][secondRing][ch][iLayer].size() ?
true :
false;
1379 float stripAngle = 99999.;
1380 std::vector<float> posXY(2);
1381 bool oneSegment =
false;
1382 if(1==allSegments[ec][st][rg][ch].
size() + secondSize){
1385 linearExtrapolation(globalPos,globalDir, bp.position().z(), posXY);
1386 GlobalPoint gp_extrapol( posXY.at(0), posXY.at(1),bp.position().z());
1388 posXY.at(0) = lp_extrapol.
x();
1389 posXY.at(1) = lp_extrapol.y();
1393 if(firstCondition || secondCondition){
1394 ChHist[ec][st][rg][ch].EfficientRechits_inSegment->Fill(iLayer+1);
1396 ChHist[ec][st][rg][ch].Y_EfficientRecHits_inSegment[iLayer]->Fill(posXY.at(1));
1397 ChHist[ec][st][rg][ch].Phi_EfficientRecHits_inSegment[iLayer]->Fill(stripAngle);
1402 ChHist[ec][st][rg][ch].Y_InefficientRecHits_inSegment[iLayer]->Fill(posXY.at(1));
1403 ChHist[ec][st][rg][ch].Phi_InefficientRecHits_inSegment[iLayer]->Fill(stripAngle);
1409 StHist[ec][st].InefficientSegments_XY->Fill(ftsChamber.
position().
x(),ftsChamber.
position().
y());
1411 std::cout<<
"missing segment "<<std::endl;
1412 printf(
"\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n",
id.
endcap(),
id.
station(),
id.
ring(),
id.chamber());
1417 ChHist[ec][st][rg][ch].EfficientRechits_good->Fill(8);
1418 if(allSegments[ec][st][rg][ch].
size()+secondSize<2){
1419 StHist[ec][st].AllSegments_eta->Fill(fabs(ftsChamber.
position().
eta()));
1421 ChHist[ec][st][rg][
id.chamber()-
FirstCh].EfficientRechits_inSegment->Fill(9);
1428 st =
id.station()-1;
1440 CLHEP::Hep3Vector&
p3, CLHEP::Hep3Vector& r3,
1446 p3.set(p3GV.
x(), p3GV.
y(), p3GV.
z());
1447 r3.set(r3GP.
x(), r3GP.
y(), r3GP.
z());
1468 float zSurface, std::vector <float> &posZY){
1469 double paramLine = lineParameter(initialPosition.
z(), zSurface, initialDirection.
z());
1470 double xPosition = extrapolate1D(initialPosition.
x(), initialDirection.
x(),paramLine);
1471 double yPosition = extrapolate1D(initialPosition.
y(), initialDirection.
y(),paramLine);
1473 posZY.push_back(xPosition);
1474 posZY.push_back(yPosition);
1478 double extrapolatedPosition = initPosition + initDirection*parameterOfTheLine;
1479 return extrapolatedPosition;
1483 double paramLine = (destZPosition-initZPosition)/initZDirection;
1491 float dy = outerPosition.y() - innerPosition.y();
1492 float dz = outerPosition.z() - innerPosition.z();
1513 return &*theService->propagator(propagatorName);
1540 propagatorName =
"SteppingHelixPropagatorAny";
1541 tSOSDest =
propagator(propagatorName)->propagate(ftsStart, bpDest);
1547 bool triggerPassed =
true;
1548 std::vector<std::string> hlNames=triggerNames.
triggerNames();
1549 pointToTriggers.clear();
1550 for(
size_t imyT = 0;imyT<myTriggers.size();++imyT){
1551 for (
size_t iT=0; iT<hlNames.size(); ++iT) {
1557 if(hltR->wasrun(iT) &&
1560 TriggersFired->Fill(iT);
1563 if(hlNames[iT]==myTriggers[imyT]){
1564 pointToTriggers.push_back(iT);
1571 if(pointToTriggers.size()!=myTriggers.size()){
1572 pointToTriggers.clear();
1574 std::cout<<
" Not all trigger names found - all trigger specifications will be ignored. Check your cfg file!"<<std::endl;
1578 if(pointToTriggers.size()){
1580 std::cout<<
"The following triggers will be required in the event: "<<std::endl;
1581 for(
size_t imyT =0; imyT <pointToTriggers.size();++imyT){
1582 std::cout<<
" "<<hlNames[pointToTriggers[imyT]];
1591 if(!pointToTriggers.size()){
1593 std::cout<<
" No triggers specified in the configuration or all ignored - no trigger information will be considered"<<std::endl;
1596 for(
size_t imyT =0; imyT <pointToTriggers.size();++imyT){
1597 if(hltR->wasrun(pointToTriggers[imyT]) &&
1598 hltR->accept(pointToTriggers[imyT]) &&
1599 !hltR->error(pointToTriggers[imyT]) ){
1600 triggerPassed =
true;
1606 triggerPassed =
false;
1608 triggerPassed =
false;
1616 std::cout<<
" TriggerResults handle returns invalid state?! No trigger information will be considered"<<std::endl;
1620 std::cout<<
" Trigger passed: "<<triggerPassed<<std::endl;
1622 return triggerPassed;
1632 const float Ymin = -165;
1633 const float Ymax = 165;
1634 const int nYbins = int((Ymax - Ymin)/2);
1635 const float Layer_min = -0.5;
1636 const float Layer_max = 9.5;
1637 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 sprintf(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 sprintf(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 sprintf(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 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)
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.
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
Geom::Phi< T > phi() const
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
virtual bool filter(edm::Event &event, const edm::EventSetup &eventSetup)
const math::XYZPoint & outerPosition() const
position of the outermost hit
const Plane & surface() const
The nominal surface of the GeomDet.
Strings const & triggerNames() const
virtual ~CSCEfficiency()
Destructor.
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)
C::const_iterator const_iterator
constant access iterator type
double eta() const
pseudorapidity of momentum vector
FreeTrajectoryState * freeState(bool withErrors=true) const
double pt() const
track transverse momentum
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.
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)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
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
const Propagator * propagator(std::string propagatorName) const
bool recHitSegment_Efficiencies(CSCDetId &cscDetId, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
std::vector< DigiType >::const_iterator const_iterator
T const * product() const
bool quality(const TrackQuality) const
Track quality.
bool inSensitiveLocalRegion(double xLocal, double yLocal, int station, int ring)
bool checkLocal(double yLocal, double yBoundary, int station, int ring)
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
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
tuple size
Write out results.
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)