{"action":"created","comment":{"url":"https://api.github.com/repos/cms-sw/cmssw/pulls/comments/28824331","id":28824331,"diff_hunk":"@@ -108,131 +110,244 @@ HLTMuonL3PreFilter::fillDescriptions(edm::ConfigurationDescriptions& description\n //\n \n // ------------ method called to produce the data  ------------\n-bool\n-HLTMuonL3PreFilter::hltFilter(Event& iEvent, const EventSetup& iSetup, trigger::TriggerFilterObjectWithRefs & filterproduct) const\n-{\n+bool HLTMuonL3PreFilter::hltFilter(Event& iEvent, const EventSetup& iSetup, trigger::TriggerFilterObjectWithRefs & filterproduct) const{\n \n    // All HLT filters must create and fill an HLT filter object,\n    // recording any reconstructed physics objects satisfying (or not)\n    // this HLT filter, and place it in the Event.\n \n-   // get hold of trks\n-   Handle<RecoChargedCandidateCollection> mucands;\n    if (saveTags()) filterproduct.addCollectionTag(candTag_);\n+\n+   // Read RecoChargedCandidates from L3MuonCandidateProducer:\n+   Handle<RecoChargedCandidateCollection> mucands;\n    iEvent.getByToken(candToken_,mucands);\n-   // sort them by L2Track\n-   std::map<reco::TrackRef, std::vector<RecoChargedCandidateRef> > L2toL3s;\n-   unsigned int maxI = mucands->size();\n-   for (unsigned int i=0;i!=maxI;++i){\n-     TrackRef tk = (*mucands)[i].track();\n-     edm::Ref<L3MuonTrajectorySeedCollection> l3seedRef = tk->seedRef().castTo<edm::Ref<L3MuonTrajectorySeedCollection> >();\n-     TrackRef staTrack = l3seedRef->l2Track();\n-     LogDebug(\"HLTMuonL3PreFilter\") <<\"L2 from: \"<<iEvent.getProvenance(staTrack.id()).moduleLabel() <<\" index: \"<<staTrack.key();\n-     L2toL3s[staTrack].push_back(RecoChargedCandidateRef(mucands,i));\n-   }\n \n+   // Read L2 triggered objects:\n    Handle<TriggerFilterObjectWithRefs> previousLevelCands;\n    iEvent.getByToken(previousCandToken_,previousLevelCands);\n-   BeamSpot beamSpot;\n-   Handle<BeamSpot> recoBeamSpotHandle;\n-   iEvent.getByToken(beamspotToken_,recoBeamSpotHandle);\n-   beamSpot = *recoBeamSpotHandle;\n-\n-\n-   //needed to compare to L2\n    vector<RecoChargedCandidateRef> vl2cands;\n    previousLevelCands->getObjects(TriggerMuon,vl2cands);\n \n-   // look at all mucands,  check cuts and add to filter object\n-   int n = 0;\n-   std::map<reco::TrackRef, std::vector<RecoChargedCandidateRef> > ::iterator L2toL3s_it = L2toL3s.begin();\n-   std::map<reco::TrackRef, std::vector<RecoChargedCandidateRef> > ::iterator L2toL3s_end = L2toL3s.end();\n-   LogDebug(\"HLTMuonL3PreFilter\")<<\"looking at: \"<<L2toL3s.size()<<\" L2->L3s from: \"<<mucands->size();\n-   for (; L2toL3s_it!=L2toL3s_end; ++L2toL3s_it){\n-\n-     if (!triggeredByLevel2(L2toL3s_it->first,vl2cands)) continue;\n-\n-     //loop over the L3Tk reconstructed for this L2.\n-     unsigned int iTk=0;\n-     unsigned int maxItk=L2toL3s_it->second.size();\n-     for (; iTk!=maxItk; iTk++){\n-\n-       RecoChargedCandidateRef & cand=L2toL3s_it->second[iTk];\n-       TrackRef tk = cand->track();\n-\n-       LogDebug(\"HLTMuonL3PreFilter\") << \" Muon in loop, q*pt= \" << tk->charge()*tk->pt() <<\" (\" << cand->charge()*cand->pt() << \") \" << \", eta= \" << tk->eta() << \" (\" << cand->eta() << \") \" << \", hits= \" << tk->numberOfValidHits() << \", d0= \" << tk->d0() << \", dz= \" << tk->dz();\n-\n-       // eta cut\n-       if (fabs(cand->eta())>max_Eta_) continue;\n-\n-       // cut on number of hits\n-       if (tk->numberOfValidHits()<min_Nhits_) continue;\n-\n-       //max dr cut\n-       //if (fabs(tk->d0())>max_Dr_) continue;\n-       if (fabs( (- (cand->vx()-beamSpot.x0()) * cand->py() + (cand->vy()-beamSpot.y0()) * cand->px() ) / cand->pt() ) >max_Dr_) continue;\n-\n-       //min dr cut\n-       if (fabs( (- (cand->vx()-beamSpot.x0()) * cand->py() + (cand->vy()-beamSpot.y0()) * cand->px() ) / cand->pt() ) <min_Dr_) continue;\n-\n-       //dz cut\n-       if (fabs((cand->vz()-beamSpot.z0()) - ((cand->vx()-beamSpot.x0())*cand->px()+(cand->vy()-beamSpot.y0())*cand->py())/cand->pt() * cand->pz()/cand->pt())>max_Dz_) continue;\n-\n-       // dxy significance cut (safeguard against bizarre values)\n-       if (min_DxySig_ > 0 && (tk->dxyError() <= 0 || fabs(tk->dxy(beamSpot.position())/tk->dxyError()) < min_DxySig_)) continue;\n-\n-       //normalizedChi2 cut\n-       if (tk->normalizedChi2() > max_NormalizedChi2_ ) continue;\n-\n-       //dxy beamspot cut\n-       if (std::abs(tk->dxy(beamSpot.position())) > max_DXYBeamSpot_ || std::abs(tk->dxy(beamSpot.position())) < min_DXYBeamSpot_ ) continue;\n-\n-       //min muon hits cut\n-       reco::HitPattern trackHits = tk->hitPattern();\n-       if (trackHits.numberOfValidMuonHits() < min_NmuonHits_ ) continue;\n-\n-       //pt difference cut\n-       double candPt = cand->pt();\n-       double trackPt = tk->pt();\n-\n-       if (fabs(candPt - trackPt) > max_PtDifference_ ) continue;\n-\n-       //track pt cut\n-       if (trackPt < min_TrackPt_ ) continue;\n+   // Read BeamSpot information:\n+   Handle<BeamSpot> recoBeamSpotHandle;\n+   iEvent.getByToken(beamspotToken_,recoBeamSpotHandle);\n+   const BeamSpot& beamSpot = *recoBeamSpotHandle;\n \n-       // Pt threshold cut\n-       double pt = cand->pt();\n-       double err0 = tk->error(0);\n-       double abspar0 = fabs(tk->parameter(0));\n-       double ptLx = pt;\n-       // convert 50% efficiency threshold to 90% efficiency threshold\n-       if (abspar0>0) ptLx += nsigma_Pt_*err0/abspar0*pt;\n-       LogTrace(\"HLTMuonL3PreFilter\") << \" ...Muon in loop, trackkRef pt= \"\n-\t\t\t\t      << tk->pt() << \", ptLx= \" << ptLx\n-\t\t\t\t      << \" cand pT \" << cand->pt();\n-      if (ptLx<min_Pt_) continue;\n+   // Number of objects passing the L3 Trigger:\n+   int n = 0;\n \n-      filterproduct.addObject(TriggerMuon,cand);\n-      n++;\n-      break; // and go on with the next L2 association\n-     }\n-   }////loop over L2s from L3 grouping\n-\n-   vector<RecoChargedCandidateRef> vref;\n-   filterproduct.getObjects(TriggerMuon,vref);\n-   for (unsigned int i=0; i<vref.size(); i++ ) {\n-     RecoChargedCandidateRef candref =  RecoChargedCandidateRef(vref[i]);\n-     TrackRef tk = candref->get<TrackRef>();\n-     LogDebug(\"HLTMuonL3PreFilter\")\n-       << \" Track passing filter: trackRef pt= \" << tk->pt() << \" (\" << candref->pt() << \") \" << \", eta: \" << tk->eta() << \" (\" << candref->eta() << \") \";\n+   // sort them by L2Track\n+   std::map<reco::TrackRef, std::vector<RecoChargedCandidateRef> > L2toL3s;\n+   \n+   // Test to see if we can use L3MuonTrajectorySeeds:\n+   if (mucands->size()<1) return false;\n+   auto tk = (*mucands)[0].track();\n+   bool useL3MTS=false;\n+\n+   if (tk->seedRef().isNonnull()){\n+\t   auto a = dynamic_cast<const L3MuonTrajectorySeed*>(tk->seedRef().get());\n+\t   useL3MTS = a != nullptr;\n    }\n \n-   // filter decision\n-   const bool accept (n >= min_N_);\n-\n-   LogDebug(\"HLTMuonL3PreFilter\") << \" >>>>> Result of HLTMuonL3PreFilter is \" << accept << \", number of muons passing thresholds= \" << n;\n+   // If we can use L3MuonTrajectory seeds run the older code:\n+   if (useL3MTS){\n+     LogDebug(\"HLTMuonL3PreFilter\") << \"HLTMuonL3PreFilter::hltFilter is in mode: useL3MTS\";\n+\n+     unsigned int maxI = mucands->size();\n+     for (unsigned int i=0;i!=maxI;++i){\n+       TrackRef tk = (*mucands)[i].track();\n+       edm::Ref<L3MuonTrajectorySeedCollection> l3seedRef = tk->seedRef().castTo<edm::Ref<L3MuonTrajectorySeedCollection> >();\n+       TrackRef staTrack = l3seedRef->l2Track();\n+       LogDebug(\"HLTMuonL3PreFilter\") <<\"L2 from: \"<<iEvent.getProvenance(staTrack.id()).moduleLabel() <<\" index: \"<<staTrack.key();\n+       L2toL3s[staTrack].push_back(RecoChargedCandidateRef(mucands,i));\n+     }\n \n-   return accept;\n+     // look at all mucands,  check cuts and add to filter object\n+     int n = 0;\n+     std::map<reco::TrackRef, std::vector<RecoChargedCandidateRef> > ::iterator L2toL3s_it = L2toL3s.begin();\n+     std::map<reco::TrackRef, std::vector<RecoChargedCandidateRef> > ::iterator L2toL3s_end = L2toL3s.end();\n+     LogDebug(\"HLTMuonL3PreFilter\")<<\"looking at: \"<<L2toL3s.size()<<\" L2->L3s from: \"<<mucands->size();\n+     for (; L2toL3s_it!=L2toL3s_end; ++L2toL3s_it){\n+  \n+       if (!triggeredByLevel2(L2toL3s_it->first,vl2cands)) continue;\n+  \n+       //loop over the L3Tk reconstructed for this L2.\n+       unsigned int iTk=0;\n+       unsigned int maxItk=L2toL3s_it->second.size();\n+       for (; iTk!=maxItk; iTk++){\n+  \n+         RecoChargedCandidateRef & cand=L2toL3s_it->second[iTk];\n+         TrackRef tk = cand->track();\n+  \n+         LogDebug(\"HLTMuonL3PreFilter\") << \" Muon in loop, q*pt= \" << tk->charge()*tk->pt() <<\" (\" << cand->charge()*cand->pt() << \") \" << \", eta= \" << tk->eta() << \" (\" << cand->eta() << \") \" << \", hits= \" << tk->numberOfValidHits() << \", d0= \" << tk->d0() << \", dz= \" << tk->dz();\n+  \n+         // eta cut\n+         if (std::abs(cand->eta())>max_Eta_) continue;\n+  \n+         // cut on number of hits\n+         if (tk->numberOfValidHits()<min_Nhits_) continue;\n+  \n+         //max dr cut\n+         auto dr = std::abs( (- (cand->vx()-beamSpot.x0()) * cand->py() + (cand->vy()-beamSpot.y0()) * cand->px() ) / cand->pt() );\n+         if (dr >max_Dr_) continue;\n+  \n+         //min dr cut\n+         if (dr <min_Dr_) continue;\n+  \n+         //dz cut\n+         if (std::abs((cand->vz()-beamSpot.z0()) - ((cand->vx()-beamSpot.x0())*cand->px()+(cand->vy()-beamSpot.y0())*cand->py())/cand->pt() * cand->pz()/cand->pt())>max_Dz_) continue;\n+  \n+         // dxy significance cut (safeguard against bizarre values)\n+         if (min_DxySig_ > 0 && (tk->dxyError() <= 0 || std::abs(tk->dxy(beamSpot.position())/tk->dxyError()) < min_DxySig_)) continue;\n+  \n+         //normalizedChi2 cut\n+         if (tk->normalizedChi2() > max_NormalizedChi2_ ) continue;\n+  \n+         //dxy beamspot cut\n+         float absDxy = std::abs(tk->dxy(beamSpot.position()));\n+         if (absDxy > max_DXYBeamSpot_ || absDxy < min_DXYBeamSpot_ ) continue;\n+  \n+         //min muon hits cut\n+         const reco::HitPattern& trackHits = tk->hitPattern();\n+         if (trackHits.numberOfValidMuonHits() < min_NmuonHits_ ) continue;\n+  \n+         //pt difference cut\n+         double candPt = cand->pt();\n+         double trackPt = tk->pt();\n+  \n+         if (std::abs(candPt - trackPt) > max_PtDifference_ ) continue;\n+  \n+         //track pt cut\n+         if (trackPt < min_TrackPt_ ) continue;\n+  \n+         // Pt threshold cut\n+         double pt = cand->pt();\n+         double err0 = tk->error(0);\n+         double abspar0 = std::abs(tk->parameter(0));\n+         double ptLx = pt;\n+         // convert 50% efficiency threshold to 90% efficiency threshold\n+         if (abspar0>0) ptLx += nsigma_Pt_*err0/abspar0*pt;\n+         LogTrace(\"HLTMuonL3PreFilter\") << \" ...Muon in loop, trackkRef pt= \"\n+  \t\t\t\t      << tk->pt() << \", ptLx= \" << ptLx\n+  \t\t\t\t      << \" cand pT \" << cand->pt();\n+        if (ptLx<min_Pt_) continue;\n+  \n+        filterproduct.addObject(TriggerMuon,cand);\n+        n++;\n+        break; // and go on with the next L2 association\n+       }\n+     }////loop over L2s from L3 grouping\n+  \n+     vector<RecoChargedCandidateRef> vref;\n+     filterproduct.getObjects(TriggerMuon,vref);\n+     for (unsigned int i=0; i<vref.size(); i++ ) {\n+       RecoChargedCandidateRef candref =  RecoChargedCandidateRef(vref[i]);\n+       TrackRef tk = candref->get<TrackRef>();\n+       LogDebug(\"HLTMuonL3PreFilter\")\n+         << \" Track passing filter: trackRef pt= \" << tk->pt() << \" (\" << candref->pt() << \") \" << \", eta: \" << tk->eta() << \" (\" << candref->eta() << \") \";\n+     }\n+  \n+     // filter decision\n+     const bool accept (n >= min_N_);\n+  \n+     LogDebug(\"HLTMuonL3PreFilter\") << \" >>>>> Result of HLTMuonL3PreFilter is \" << accept << \", number of muons passing thresholds= \" << n;\n+  \n+     return accept;\n+  } //end of useL3MTS\n+\n+  // Using normal TrajectorySeeds:\n+  else{\n+    LogDebug(\"HLTMuonL3PreFilter\") << \"HLTMuonL3PreFilter::hltFilter is in mode: not useL3MTS\";\n+\n+    // Read Links collection:\n+    edm::Handle<reco::MuonTrackLinksCollection> links;\n+    iEvent.getByToken(linkToken_, links);\n+\n+    // Loop over RecoChargedCandidates:\n+    for(unsigned int i(0); i < mucands->size(); ++i){\n+      RecoChargedCandidateRef cand(mucands,i);\n+      for(unsigned int l(0); l <links->size(); ++l){\n+        const reco::MuonTrackLinks* link = &links->at(l);\n+\tbool useThisLink=false;\n+\tTrackRef tk = cand->track();\n+\treco::TrackRef trkTrack = link->trackerTrack();\n+\n+\t// Using the same method that was used to create the links\n+\t// ToDo: there should be a better way than dR,dPt matching\n+\tconst reco::Track& globalTrack = *link->globalTrack();\n+\tfloat dR2 = deltaR2(tk->eta(),tk->phi(),globalTrack.eta(),globalTrack.phi());\n+\tfloat dPt = std::abs(tk->pt() - globalTrack.pt())/tk->pt();\n+\tif (dR2 < 0.02*0.02 and dPt < 0.02) {","path":"HLTrigger/Muon/src/HLTMuonL3PreFilter.cc","position":null,"original_position":308,"commit_id":"8a8adb6eac92f0e5faf097b5f0cd6bea43f1547f","original_commit_id":"3de317c55add9550673a869327f3bce658e08c3b","user":{"login":"BenjaminRS","id":5666560,"avatar_url":"https://avatars.githubusercontent.com/u/5666560?v=3","gravatar_id":"","url":"https://api.github.com/users/BenjaminRS","html_url":"https://github.com/BenjaminRS","followers_url":"https://api.github.com/users/BenjaminRS/followers","following_url":"https://api.github.com/users/BenjaminRS/following{/other_user}","gists_url":"https://api.github.com/users/BenjaminRS/gists{/gist_id}","starred_url":"https://api.github.com/users/BenjaminRS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BenjaminRS/subscriptions","organizations_url":"https://api.github.com/users/BenjaminRS/orgs","repos_url":"https://api.github.com/users/BenjaminRS/repos","events_url":"https://api.github.com/users/BenjaminRS/events{/privacy}","received_events_url":"https://api.github.com/users/BenjaminRS/received_events","type":"User","site_admin":false},"body":"OK I have changed it back","created_at":"2015-04-21T21:29:32Z","updated_at":"2015-04-21T21:29:32Z","html_url":"https://github.com/cms-sw/cmssw/pull/8356#discussion_r28824331","pull_request_url":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356","_links":{"self":{"href":"https://api.github.com/repos/cms-sw/cmssw/pulls/comments/28824331"},"html":{"href":"https://github.com/cms-sw/cmssw/pull/8356#discussion_r28824331"},"pull_request":{"href":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356"}}},"pull_request":{"url":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356","id":31336272,"html_url":"https://github.com/cms-sw/cmssw/pull/8356","diff_url":"https://github.com/cms-sw/cmssw/pull/8356.diff","patch_url":"https://github.com/cms-sw/cmssw/pull/8356.patch","issue_url":"https://api.github.com/repos/cms-sw/cmssw/issues/8356","number":8356,"state":"open","locked":false,"title":"L3 code update march2015","user":{"login":"BenjaminRS","id":5666560,"avatar_url":"https://avatars.githubusercontent.com/u/5666560?v=3","gravatar_id":"","url":"https://api.github.com/users/BenjaminRS","html_url":"https://github.com/BenjaminRS","followers_url":"https://api.github.com/users/BenjaminRS/followers","following_url":"https://api.github.com/users/BenjaminRS/following{/other_user}","gists_url":"https://api.github.com/users/BenjaminRS/gists{/gist_id}","starred_url":"https://api.github.com/users/BenjaminRS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BenjaminRS/subscriptions","organizations_url":"https://api.github.com/users/BenjaminRS/orgs","repos_url":"https://api.github.com/users/BenjaminRS/repos","events_url":"https://api.github.com/users/BenjaminRS/events{/privacy}","received_events_url":"https://api.github.com/users/BenjaminRS/received_events","type":"User","site_admin":false},"body":"Hello all,\r\n\r\nHere is the updated code that we wish to have in place in order to allow for the new L3 reconstruction. It comes in the PR instead of #7810.  The modified code will need adjustments to be made in the configuration menu for the following modules:\r\nprocess.hltL3MuonsOIState\r\nprocess.hltL3MuonsOIHit\r\nprocess.hltL3TrajSeedIOHit\r\nprocess.hltL3MuonsIOHit\r\n\r\nAlso in the later menus the versions of these modules with no filters if present. Do I add the configurations as an attachment to this PR?\r\n\r\nThe configurations need to be updated as the compilation will complain during validation that \"Illegal parameters found in configuration\". I.e. we do not use the extra parameters anymore if I change the input variables in the code. If I don't change the input variables then exceptions of the type \"X should be defined as Y\" would appear. So in this case the configuration menus need to change along with the modified code.\r\n\r\nThanks,\r\nBenjamin","created_at":"2015-03-17T13:52:15Z","updated_at":"2015-04-21T21:29:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7b55d0cc1ba3b524797216f60017ae8c6ce43875","assignee":null,"milestone":{"url":"https://api.github.com/repos/cms-sw/cmssw/milestones/51","html_url":"https://github.com/cms-sw/cmssw/milestones/Next%20CMSSW_7_5_X","labels_url":"https://api.github.com/repos/cms-sw/cmssw/milestones/51/labels","id":982516,"number":51,"title":"Next CMSSW_7_5_X","description":"","creator":{"login":"nclopezo","id":1944922,"avatar_url":"https://avatars.githubusercontent.com/u/1944922?v=3","gravatar_id":"","url":"https://api.github.com/users/nclopezo","html_url":"https://github.com/nclopezo","followers_url":"https://api.github.com/users/nclopezo/followers","following_url":"https://api.github.com/users/nclopezo/following{/other_user}","gists_url":"https://api.github.com/users/nclopezo/gists{/gist_id}","starred_url":"https://api.github.com/users/nclopezo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nclopezo/subscriptions","organizations_url":"https://api.github.com/users/nclopezo/orgs","repos_url":"https://api.github.com/users/nclopezo/repos","events_url":"https://api.github.com/users/nclopezo/events{/privacy}","received_events_url":"https://api.github.com/users/nclopezo/received_events","type":"User","site_admin":false},"open_issues":55,"closed_issues":417,"state":"open","created_at":"2015-02-17T08:21:25Z","updated_at":"2015-04-21T20:21:33Z","due_on":"2015-03-02T23:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356/commits","review_comments_url":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356/comments","review_comment_url":"https://api.github.com/repos/cms-sw/cmssw/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cms-sw/cmssw/issues/8356/comments","statuses_url":"https://api.github.com/repos/cms-sw/cmssw/statuses/8a8adb6eac92f0e5faf097b5f0cd6bea43f1547f","head":{"label":"BenjaminRS:L3CodeUpdate-March2015","ref":"L3CodeUpdate-March2015","sha":"8a8adb6eac92f0e5faf097b5f0cd6bea43f1547f","user":{"login":"BenjaminRS","id":5666560,"avatar_url":"https://avatars.githubusercontent.com/u/5666560?v=3","gravatar_id":"","url":"https://api.github.com/users/BenjaminRS","html_url":"https://github.com/BenjaminRS","followers_url":"https://api.github.com/users/BenjaminRS/followers","following_url":"https://api.github.com/users/BenjaminRS/following{/other_user}","gists_url":"https://api.github.com/users/BenjaminRS/gists{/gist_id}","starred_url":"https://api.github.com/users/BenjaminRS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BenjaminRS/subscriptions","organizations_url":"https://api.github.com/users/BenjaminRS/orgs","repos_url":"https://api.github.com/users/BenjaminRS/repos","events_url":"https://api.github.com/users/BenjaminRS/events{/privacy}","received_events_url":"https://api.github.com/users/BenjaminRS/received_events","type":"User","site_admin":false},"repo":{"id":14223141,"name":"cmssw","full_name":"BenjaminRS/cmssw","owner":{"login":"BenjaminRS","id":5666560,"avatar_url":"https://avatars.githubusercontent.com/u/5666560?v=3","gravatar_id":"","url":"https://api.github.com/users/BenjaminRS","html_url":"https://github.com/BenjaminRS","followers_url":"https://api.github.com/users/BenjaminRS/followers","following_url":"https://api.github.com/users/BenjaminRS/following{/other_user}","gists_url":"https://api.github.com/users/BenjaminRS/gists{/gist_id}","starred_url":"https://api.github.com/users/BenjaminRS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BenjaminRS/subscriptions","organizations_url":"https://api.github.com/users/BenjaminRS/orgs","repos_url":"https://api.github.com/users/BenjaminRS/repos","events_url":"https://api.github.com/users/BenjaminRS/events{/privacy}","received_events_url":"https://api.github.com/users/BenjaminRS/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/BenjaminRS/cmssw","description":"CMS Offline Software","fork":true,"url":"https://api.github.com/repos/BenjaminRS/cmssw","forks_url":"https://api.github.com/repos/BenjaminRS/cmssw/forks","keys_url":"https://api.github.com/repos/BenjaminRS/cmssw/keys{/key_id}","collaborators_url":"https://api.github.com/repos/BenjaminRS/cmssw/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/BenjaminRS/cmssw/teams","hooks_url":"https://api.github.com/repos/BenjaminRS/cmssw/hooks","issue_events_url":"https://api.github.com/repos/BenjaminRS/cmssw/issues/events{/number}","events_url":"https://api.github.com/repos/BenjaminRS/cmssw/events","assignees_url":"https://api.github.com/repos/BenjaminRS/cmssw/assignees{/user}","branches_url":"https://api.github.com/repos/BenjaminRS/cmssw/branches{/branch}","tags_url":"https://api.github.com/repos/BenjaminRS/cmssw/tags","blobs_url":"https://api.github.com/repos/BenjaminRS/cmssw/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/BenjaminRS/cmssw/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/BenjaminRS/cmssw/git/refs{/sha}","trees_url":"https://api.github.com/repos/BenjaminRS/cmssw/git/trees{/sha}","statuses_url":"https://api.github.com/repos/BenjaminRS/cmssw/statuses/{sha}","languages_url":"https://api.github.com/repos/BenjaminRS/cmssw/languages","stargazers_url":"https://api.github.com/repos/BenjaminRS/cmssw/stargazers","contributors_url":"https://api.github.com/repos/BenjaminRS/cmssw/contributors","subscribers_url":"https://api.github.com/repos/BenjaminRS/cmssw/subscribers","subscription_url":"https://api.github.com/repos/BenjaminRS/cmssw/subscription","commits_url":"https://api.github.com/repos/BenjaminRS/cmssw/commits{/sha}","git_commits_url":"https://api.github.com/repos/BenjaminRS/cmssw/git/commits{/sha}","comments_url":"https://api.github.com/repos/BenjaminRS/cmssw/comments{/number}","issue_comment_url":"https://api.github.com/repos/BenjaminRS/cmssw/issues/comments{/number}","contents_url":"https://api.github.com/repos/BenjaminRS/cmssw/contents/{+path}","compare_url":"https://api.github.com/repos/BenjaminRS/cmssw/compare/{base}...{head}","merges_url":"https://api.github.com/repos/BenjaminRS/cmssw/merges","archive_url":"https://api.github.com/repos/BenjaminRS/cmssw/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/BenjaminRS/cmssw/downloads","issues_url":"https://api.github.com/repos/BenjaminRS/cmssw/issues{/number}","pulls_url":"https://api.github.com/repos/BenjaminRS/cmssw/pulls{/number}","milestones_url":"https://api.github.com/repos/BenjaminRS/cmssw/milestones{/number}","notifications_url":"https://api.github.com/repos/BenjaminRS/cmssw/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/BenjaminRS/cmssw/labels{/name}","releases_url":"https://api.github.com/repos/BenjaminRS/cmssw/releases{/id}","created_at":"2013-11-08T03:40:10Z","updated_at":"2013-11-19T07:19:40Z","pushed_at":"2015-04-21T21:29:28Z","git_url":"git://github.com/BenjaminRS/cmssw.git","ssh_url":"git@github.com:BenjaminRS/cmssw.git","clone_url":"https://github.com/BenjaminRS/cmssw.git","svn_url":"https://github.com/BenjaminRS/cmssw","homepage":"cms-sw.github.io/cmssw","size":674066,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"CMSSW_4_1_X"}},"base":{"label":"cms-sw:CMSSW_7_5_X","ref":"CMSSW_7_5_X","sha":"05b631deb4fcb19427b633eebf70bd709658e6d9","user":{"login":"cms-sw","id":3863500,"avatar_url":"https://avatars.githubusercontent.com/u/3863500?v=3","gravatar_id":"","url":"https://api.github.com/users/cms-sw","html_url":"https://github.com/cms-sw","followers_url":"https://api.github.com/users/cms-sw/followers","following_url":"https://api.github.com/users/cms-sw/following{/other_user}","gists_url":"https://api.github.com/users/cms-sw/gists{/gist_id}","starred_url":"https://api.github.com/users/cms-sw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cms-sw/subscriptions","organizations_url":"https://api.github.com/users/cms-sw/orgs","repos_url":"https://api.github.com/users/cms-sw/repos","events_url":"https://api.github.com/users/cms-sw/events{/privacy}","received_events_url":"https://api.github.com/users/cms-sw/received_events","type":"Organization","site_admin":false},"repo":{"id":10969551,"name":"cmssw","full_name":"cms-sw/cmssw","owner":{"login":"cms-sw","id":3863500,"avatar_url":"https://avatars.githubusercontent.com/u/3863500?v=3","gravatar_id":"","url":"https://api.github.com/users/cms-sw","html_url":"https://github.com/cms-sw","followers_url":"https://api.github.com/users/cms-sw/followers","following_url":"https://api.github.com/users/cms-sw/following{/other_user}","gists_url":"https://api.github.com/users/cms-sw/gists{/gist_id}","starred_url":"https://api.github.com/users/cms-sw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cms-sw/subscriptions","organizations_url":"https://api.github.com/users/cms-sw/orgs","repos_url":"https://api.github.com/users/cms-sw/repos","events_url":"https://api.github.com/users/cms-sw/events{/privacy}","received_events_url":"https://api.github.com/users/cms-sw/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cms-sw/cmssw","description":"CMS Offline Software","fork":false,"url":"https://api.github.com/repos/cms-sw/cmssw","forks_url":"https://api.github.com/repos/cms-sw/cmssw/forks","keys_url":"https://api.github.com/repos/cms-sw/cmssw/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cms-sw/cmssw/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cms-sw/cmssw/teams","hooks_url":"https://api.github.com/repos/cms-sw/cmssw/hooks","issue_events_url":"https://api.github.com/repos/cms-sw/cmssw/issues/events{/number}","events_url":"https://api.github.com/repos/cms-sw/cmssw/events","assignees_url":"https://api.github.com/repos/cms-sw/cmssw/assignees{/user}","branches_url":"https://api.github.com/repos/cms-sw/cmssw/branches{/branch}","tags_url":"https://api.github.com/repos/cms-sw/cmssw/tags","blobs_url":"https://api.github.com/repos/cms-sw/cmssw/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cms-sw/cmssw/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cms-sw/cmssw/git/refs{/sha}","trees_url":"https://api.github.com/repos/cms-sw/cmssw/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cms-sw/cmssw/statuses/{sha}","languages_url":"https://api.github.com/repos/cms-sw/cmssw/languages","stargazers_url":"https://api.github.com/repos/cms-sw/cmssw/stargazers","contributors_url":"https://api.github.com/repos/cms-sw/cmssw/contributors","subscribers_url":"https://api.github.com/repos/cms-sw/cmssw/subscribers","subscription_url":"https://api.github.com/repos/cms-sw/cmssw/subscription","commits_url":"https://api.github.com/repos/cms-sw/cmssw/commits{/sha}","git_commits_url":"https://api.github.com/repos/cms-sw/cmssw/git/commits{/sha}","comments_url":"https://api.github.com/repos/cms-sw/cmssw/comments{/number}","issue_comment_url":"https://api.github.com/repos/cms-sw/cmssw/issues/comments{/number}","contents_url":"https://api.github.com/repos/cms-sw/cmssw/contents/{+path}","compare_url":"https://api.github.com/repos/cms-sw/cmssw/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cms-sw/cmssw/merges","archive_url":"https://api.github.com/repos/cms-sw/cmssw/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cms-sw/cmssw/downloads","issues_url":"https://api.github.com/repos/cms-sw/cmssw/issues{/number}","pulls_url":"https://api.github.com/repos/cms-sw/cmssw/pulls{/number}","milestones_url":"https://api.github.com/repos/cms-sw/cmssw/milestones{/number}","notifications_url":"https://api.github.com/repos/cms-sw/cmssw/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cms-sw/cmssw/labels{/name}","releases_url":"https://api.github.com/repos/cms-sw/cmssw/releases{/id}","created_at":"2013-06-26T14:09:07Z","updated_at":"2015-04-21T19:03:09Z","pushed_at":"2015-04-21T21:16:58Z","git_url":"git://github.com/cms-sw/cmssw.git","ssh_url":"git@github.com:cms-sw/cmssw.git","clone_url":"https://github.com/cms-sw/cmssw.git","svn_url":"https://github.com/cms-sw/cmssw","homepage":"http://cms-sw.github.io/","size":963253,"stargazers_count":220,"watchers_count":220,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1362,"mirror_url":null,"open_issues_count":124,"forks":1362,"open_issues":124,"watchers":220,"default_branch":"CMSSW_7_5_X"}},"_links":{"self":{"href":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356"},"html":{"href":"https://github.com/cms-sw/cmssw/pull/8356"},"issue":{"href":"https://api.github.com/repos/cms-sw/cmssw/issues/8356"},"comments":{"href":"https://api.github.com/repos/cms-sw/cmssw/issues/8356/comments"},"review_comments":{"href":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356/comments"},"review_comment":{"href":"https://api.github.com/repos/cms-sw/cmssw/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cms-sw/cmssw/pulls/8356/commits"},"statuses":{"href":"https://api.github.com/repos/cms-sw/cmssw/statuses/8a8adb6eac92f0e5faf097b5f0cd6bea43f1547f"}}}}