48 edm::LogInfo (MessageCategory_) <<
"Setting up PileupInformation";
50 edm::LogInfo (MessageCategory_) <<
"Volume radius set to " << volumeRadius_ <<
" mm";
51 edm::LogInfo (MessageCategory_) <<
"Volume Z set to " << volumeZ_ <<
" mm";
52 edm::LogInfo (MessageCategory_) <<
"Lower pT Threshold set to " << pTcut_1_ <<
" GeV";
53 edm::LogInfo (MessageCategory_) <<
"Upper pT Threshold set to " << pTcut_2_ <<
" GeV";
60 produces< std::vector<PileupSummaryInfo> >();
61 produces<int>(
"bunchSpacing");
70 std::unique_ptr<std::vector<PileupSummaryInfo> > PSIVector(
new std::vector<PileupSummaryInfo>);
76 std::vector<PileupSummaryInfo>::const_iterator PSiter;
78 for(PSiter = psiInput.
product()->begin(); PSiter != psiInput.
product()->end(); PSiter++){
80 PSIVector->push_back(*PSiter);
86 int bunchSpacing=*(bsInput.
product());
91 std::unique_ptr<int> bunchSpacingP(
new int(bunchSpacing));
92 event.put(
std::move(bunchSpacingP),
"bunchSpacing");
100 std::vector<int> BunchCrossings;
101 std::vector<int> Interactions_Xing;
102 std::vector<float> TrueInteractions_Xing;
103 std::vector< std::vector<edm::EventID> > eventInfoList_Xing;
117 unsigned int totalIntPU=0;
119 for(
int ib=0;
ib<(int)bunchCrossing.size(); ++
ib){
121 BunchCrossings.push_back(bunchCrossing[
ib]);
122 Interactions_Xing.push_back(interactions[ib]);
123 TrueInteractions_Xing.push_back(TrueInteractions[ib]);
125 std::vector<edm::EventID> eventInfos;
126 eventInfos.reserve( interactions[ib] );
127 for (
int pu=0; pu< interactions[
ib]; pu++) {
128 eventInfos.push_back(eventInfoList[totalIntPU+pu]);
130 totalIntPU+=(interactions[
ib]);
131 eventInfoList_Xing.push_back(eventInfos);
137 throw cms::Exception(
"PileupInformation") <<
" PileupMixingContent is missing from the event.\n"
138 "There must be some breakdown in the Simulation Chain.\n"
139 "You must run the MixingModule before calling this routine.";
150 std::vector< std::vector<float> > ptHatList_Xing;
151 std::vector< std::vector<float> > zPosList_Xing;
152 std::vector< std::vector<float> > tPosList_Xing;
154 bool Have_pThats =
false;
164 const std::vector<float> PtHatInput = MixVtxInfo->
getMix_pT_hats();
165 const std::vector<float> ZposInput = MixVtxInfo->
getMix_z_Vtxs();
166 const std::vector<float> TposInput = MixVtxInfo->
getMix_t_Vtxs();
170 unsigned int totalIntPU=0;
172 for(
int ib=0;
ib<(int)bunchCrossing.size(); ++
ib){
175 std::vector<float> zposBX, tposBX;
176 std::vector<float> pthatBX;
177 zposBX.reserve( interactions[
ib] );
179 pthatBX.reserve( interactions[ib] );
180 for (
int pu=0; pu< interactions[
ib]; pu++) {
181 zposBX.push_back(ZposInput[totalIntPU+pu]);
182 if (
saveVtxTimes_) tposBX.push_back(TposInput[totalIntPU+pu]);
183 pthatBX.push_back(PtHatInput[totalIntPU+pu]);
185 totalIntPU+=(interactions[
ib]);
186 zPosList_Xing.push_back(zposBX);
187 tPosList_Xing.push_back(tposBX);
188 ptHatList_Xing.push_back(pthatBX);
208 bool HaveTrackingParticles =
false;
213 TrackingVertexCollection::const_iterator iVtx;
214 TrackingVertexCollection::const_iterator iVtxTest;
215 TrackingParticleCollection::const_iterator iTrackTest;
221 HaveTrackingParticles =
true;
223 iVtxTest = mergedVH->begin();
224 iTrackTest = mergedPH->begin();
233 std::vector<int>::iterator BXIter;
234 std::vector<int>::iterator InteractionsIter = Interactions_Xing.begin();
235 std::vector<float>::iterator TInteractionsIter = TrueInteractions_Xing.begin();
236 std::vector< std::vector<edm::EventID> >::iterator TEventInfoIter = eventInfoList_Xing.begin();
238 std::vector< std::vector<float> >::iterator zPosIter;
239 std::vector< std::vector<float> >::iterator tPosIter;
240 std::vector< std::vector<float> >::iterator pThatIter;
243 zPosIter = zPosList_Xing.begin();
244 tPosIter = tPosList_Xing.begin();
245 pThatIter = ptHatList_Xing.begin();
250 for( BXIter = BunchCrossings.begin(); BXIter != BunchCrossings.end(); ++BXIter, ++InteractionsIter, ++TInteractionsIter, ++TEventInfoIter) {
254 if(HaveTrackingParticles) {
256 for (iVtx = iVtxTest; iVtx != mergedVH->end(); ++iVtx) {
258 if(iVtx->eventId().bunchCrossing() == (*BXIter) ) {
260 if(iVtx->eventId().event() != lastEvent) {
265 zpos = iVtx->position().z();
272 lastEvent = iVtx->eventId().event();
288 for (TrackingParticleCollection::const_iterator iTrack = iTrackTest; iTrack != mergedPH->end(); ++iTrack)
290 bool FoundTrk =
false;
294 if(iTrack->eventId().bunchCrossing() == (*BXIter) && iTrack->eventId().event() > 0 )
297 int correct_index =
event_index_[iTrack->eventId().event()];
302 if(iTrack->matchedHit()>0) {
303 if(fabs(iTrack->parentVertex()->position().z()-zpos)<0.1) {
305 float Tpx = iTrack->p4().px();
306 float Tpy = iTrack->p4().py();
307 float TpT =
sqrt(Tpx*Tpx + Tpy*Tpy);
322 iTrackTest = --iTrack;
339 if(!HaveTrackingParticles) {
362 (*TInteractionsIter),
365 PSIVector->push_back(PSI_bunch);
373 std::vector<float> zposZeros( (*TEventInfoIter).size(), 0);
374 std::vector<float> tposZeros( (*TEventInfoIter).size(), 0);
375 std::vector<float> pThatZeros( (*TEventInfoIter).size(), 0);
388 (*TInteractionsIter),
392 PSIVector->push_back(PSI_bunch);
428 std::unique_ptr<int> bunchSpacingP(
new int(bunchSpacing));
429 event.put(
std::move(bunchSpacingP),
"bunchSpacing");
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const std::vector< float > & getMix_TrueInteractions() const
#define DEFINE_FWK_MODULE(type)
const std::vector< int > & getMix_bunchCrossing() const
const std::vector< float > & getMix_pT_hats() const
Container::value_type value_type
const std::vector< int > & getMix_Ninteractions() const
const std::vector< edm::EventID > getMix_eventInfo() const
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
T const * product() const
const std::vector< float > & getMix_z_Vtxs() const
const std::vector< float > & getMix_t_Vtxs() const
const int & getMix_bunchSpacing() const