Example #1
0
const Event& NTupleEventReader::getNextEvent() {
    currentEvent = Event();
    selectNextNtupleEvent();

    boost::shared_ptr<std::vector<int> > triggers(new std::vector<int>());

    for(unsigned int i = 0; i < hltReader->size(); i++){
        triggers->push_back(hltReader->getIntVariableAt(i));
    }

    currentEvent.setDataType(getDataType(getCurrentFile()));
    currentEvent.setHLTs(triggers);
    currentEvent.setVertices(vertexReader->getVertices());

    if(NTupleEventReader::loadTracks)
        currentEvent.setTracks(trackReader->getTracks());
    currentEvent.setElectrons(electronReader->getElectrons());
    // currentEvent.setLoosePFElectrons(loosePFelectronReader->getElectrons());

    if(!currentEvent.isRealData()) {
			// GenParticles not currently available
    	currentEvent.setGenParticles(genParticleReader->getGenParticles());
    	currentEvent.setGenJets(genJetReader->getGenJets());
        currentEvent.setGenNumberOfPileUpVertices(PileupInfoReader->getVariable());
    }

    currentEvent.setJets(jetReader->getJets());
    currentEvent.setMuons(muonReader->getMuons());
    currentEvent.setMET(metReader->getMET());
    currentEvent.setRunNumber(runNumberReader->getVariable());
    currentEvent.setEventNumber(eventNumberReader->getVariable());
    currentEvent.setLocalEventNumber(currentEventEntry);
    currentEvent.setLumiBlock(lumiBlockReader->getVariable());
    currentEvent.setBeamScrapingVeto(false);

    return currentEvent;
}
Example #2
0
const EventPtr NTupleEventReader::getNextEvent() {
	currentEvent = EventPtr(new Event());
	selectNextNtupleEvent();

	// boost::shared_ptr<std::vector<int> > triggers(new std::vector<int>());
	// boost::shared_ptr<std::vector<int> > triggerPrescales(new std::vector<int>());

	// //    assert(hltReader->size() == HLTriggers::NUMBER_OF_TRIGGERS);
	// for (unsigned int i = 0; i < hltReader->size(); i++) {
	// 	triggers->push_back(hltReader->getIntVariableAt(i));
	// 	triggerPrescales->push_back(hltPrescaleReader->getIntVariableAt(i));
	// }

	// while (triggers->size() < HLTriggers::NUMBER_OF_TRIGGERS) {
	// 	triggers->push_back(0);
	// 	triggerPrescales->push_back(0);
	// }

	currentEvent->setDataType(DataType::getDataType(getCurrentFile()));
	currentEvent->setFile(getCurrentFile());
	// currentEvent->setHLTs(triggers);
	// currentEvent->setHLTPrescales(triggerPrescales);
	currentEvent->setVertices(vertexReader->getVertices());

	if (NTupleEventReader::loadTracks)
		currentEvent->setTracks(trackReader->getTracks());
	//fill leptons BEFORE jets for jet cleaning
	currentEvent->setElectrons(electronReader->getElectrons());
	currentEvent->setMuons(muonReader->getMuons());

	currentEvent->setJets(jetReader->getJets(currentEvent->isRealData()));

	if (currentEvent->isRealData()) {
		currentEvent->setPassesElectronChannelTrigger( passesElectronChannelTriggerReader->getVariable() );
		currentEvent->setPassesMuonChannelTrigger( passesMuonChannelTriggerReader->getVariable() );
		currentEvent->setPassesTkMuonChannelTrigger( passesTkMuonChannelTriggerReader->getVariable() );
		currentEvent->setPassesElectronChannelQCDTrigger( passesElectronChannelTriggerReader->getVariable() );
		currentEvent->setPassesMuonChannelQCDTrigger( passesMuonChannelTriggerReader->getVariable() );
	}
	else if ( currentEvent->isReHLTMC() ) {
		// currentEvent->setPassesElectronChannelTrigger( passesElectronChannelMCTriggerReader->getVariable() );
		// currentEvent->setPassesMuonChannelTrigger( passesMuonChannelMCTriggerReader->getVariable() );
		// currentEvent->setPassesTkMuonChannelTrigger( passesTkMuonChannelMCTriggerReader->getVariable() );		
		currentEvent->setPassesElectronChannelTrigger( true );
		currentEvent->setPassesMuonChannelTrigger( true );
		currentEvent->setPassesTkMuonChannelTrigger( true );
		currentEvent->setPassesElectronChannelQCDTrigger( true );
		currentEvent->setPassesMuonChannelQCDTrigger( passesMuonChannelMCTriggerReader->getVariable() );
	}
	else {
		currentEvent->setPassesElectronChannelTrigger( true );
		currentEvent->setPassesMuonChannelTrigger( true );
		currentEvent->setPassesTkMuonChannelTrigger( true );		
		currentEvent->setPassesElectronChannelQCDTrigger( true );
		currentEvent->setPassesMuonChannelQCDTrigger( true );
	}

	// Set info that depends on selection criteria e.g. cleaned jets
	// Must do this before setPassOfflineSelectionInfo, as this selects on the cleaned jets
	currentEvent->setElectronSelectionOutputInfo( selectionOutputReader_electron->getSelectionOutputInfo() );
	currentEvent->setMuonSelectionOutputInfo( selectionOutputReader_muon->getSelectionOutputInfo() );
	currentEvent->setElectronQCDNonisolatedSelectionOutputInfo( selectionOutputReader_electronQCDNonisolated->getSelectionOutputInfo() );
	currentEvent->setElectronConversionSelectionOutputInfo( selectionOutputReader_electronQCDConversion->getSelectionOutputInfo() );
	currentEvent->setMuonQCDNonisolatedSelection1p5to3OutputInfo( selectionOutputReader_muonQCDNonisolated1p5to3->getSelectionOutputInfo() );
	currentEvent->setMuonQCDNonisolatedSelection3toInfOutputInfo( selectionOutputReader_muonQCDNonisolated3toInf->getSelectionOutputInfo() );

	currentEvent->setPassOfflineSelectionInfo( *passesOfflineSelectionReader->getVariable() );
	currentEvent->setPassGenSelectionInfo( *passesGenSelectionReader->getVariable() );

	if (!currentEvent->isRealData()) {
		currentEvent->setTTGenInfo( ttGenInfoReader->getTTGenInfo());
		// Have to do this after setting jets and TTGenInfo
		currentEvent->setJetTTBarPartons();

		// 	std::cout << "Gen Particles etc." << std::endl;
		// 	currentEvent->setGenParticles(genParticleReader->getGenParticles());
		currentEvent->setGenJets(genJetReader->getGenJets());
		currentEvent->setPseudoTopParticles( pseudoTopReader->getPseudoTopParticles() );
		// 	currentEvent->setGenNumberOfPileUpVertices(*PileupInfoReader->getVariable());
		// 	currentEvent->setPDFWeights(*PDFWeightsReader->getVariable());
		currentEvent->setTrueNumberOfPileUpVertices(*TruePileupInfoReader->getVariable());
		// 	if (Globals::NTupleVersion >= 6) {
		// 		currentEvent->setPUWeightInTimeOnly(PUWeightInTimeOnly_->getVariable());
		// 		currentEvent->setPUWeight3BX(PUWeight3BX_->getVariable());
		// 		currentEvent->setPUWeightShiftUp(PUWeightShiftUp_->getVariable());
		// 		currentEvent->setPUWeightShiftDown(PUWeightShiftDown_->getVariable());
		// 	}

			currentEvent->setGeneratorWeight( generatorWeightReader_->getVariable() );

			currentEvent->setGeneratorSystematicWeights( *systematicWeightsReader_->getVariable() );

			currentEvent->setCentralLHEWeight( centralLHEWeightReader_->getVariable() );
	}

	// Get and set the cleaned jets for this event
	// After knowing which selection criteria are satisfied
	if( currentEvent->PassesElectronSelectionNoB() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::ElectronPlusJetsReference ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::ElectronPlusJetsReference ) );
	}
	else if ( currentEvent->PassesMuonSelectionNoB() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::MuonPlusJetsReference ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::MuonPlusJetsReference ) );
	}
	else if ( currentEvent->PassesElectronQCDSelectionNoB() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::ElectronPlusJetsQCDNonIsolated ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::ElectronPlusJetsQCDNonIsolated ) );
	}
	else if ( currentEvent->PassesElectronConversionSelectionNoB() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::ElectronPlusJetsQCDConversion ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::ElectronPlusJetsQCDConversion ) );		
	}
	else if ( currentEvent->PassesMuonQCDSelection1p5to3NoB() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::MuonPlusJetsQCDNonIsolated1p5to3 ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::MuonPlusJetsQCDNonIsolated1p5to3 ) );
	}
	else if ( currentEvent->PassesMuonQCDSelection3toInfNoB() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::MuonPlusJetsQCDNonIsolated3toInf ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::MuonPlusJetsQCDNonIsolated3toInf ) );
	}
	// Set bjet weight
	if ( !currentEvent->isRealData() ) {
		boost::scoped_ptr<BTagWeight> btagWeight(new BTagWeight());
		// Normal 2 medium BTags selection
		// Which combination of b tags do you want? 
		// L = Loose, Not implemented yet
		// M = Medium, 
		// T = Tight, 
		// Currently only same WP jets are supported
		double bweight = btagWeight->weight( currentEvent->CleanedJets(), 0, {"M", "M"} );
		currentEvent->setBJetWeight( bweight );
		bweight = btagWeight->weight( currentEvent->CleanedJets(), 1, {"M", "M"}  );
		currentEvent->setLightJetUpWeight( bweight );
		bweight = btagWeight->weight( currentEvent->CleanedJets(), -1, {"M", "M"}  );
		currentEvent->setLightJetDownWeight( bweight );		
		bweight = btagWeight->weight( currentEvent->CleanedJets(), 2, {"M", "M"}  );
		currentEvent->setBJetUpWeight( bweight );			
		bweight = btagWeight->weight( currentEvent->CleanedJets(), -2, {"M", "M"}  );
		currentEvent->setBJetDownWeight( bweight );	
		// 2 tight BTags selection
		bweight = btagWeight->weight( currentEvent->CleanedJets(), 0, {"T", "T"} );
		currentEvent->setTightBJetWeight( bweight );
		// bweight = btagWeight->weight( currentEvent->CleanedJets(), 1, {"T", "T"}  );
		// currentEvent->setTightLightJetUpWeight( bweight );
		// bweight = btagWeight->weight( currentEvent->CleanedJets(), -1, {"T", "T"}  );
		// currentEvent->setTightLightJetDownWeight( bweight );		
		// bweight = btagWeight->weight( currentEvent->CleanedJets(), 2, {"T", "T"}  );
		// currentEvent->setTightBJetUpWeight( bweight );			
		// bweight = btagWeight->weight( currentEvent->CleanedJets(), -2, {"T", "T"}  );
		// currentEvent->setTightBJetDownWeight( bweight );	
	}


	double sysShiftMetCorrectionX = 0;
	double sysShiftMetCorrectionY = 0;
	double type0MetCorrectionX = 0;
	double type0MetCorrectionY = 0;
	double type1MetCorrectionX = 0;
	double type1MetCorrectionY = 0;

	double totalMetCorrectionX = sysShiftMetCorrectionX + type0MetCorrectionX + type1MetCorrectionX;
	double totalMetCorrectionY = sysShiftMetCorrectionY + type0MetCorrectionY + type1MetCorrectionY;

	METCollection mets;
	mets.resize(METAlgorithm::NUMBER_OF_METALGORITHMS);
	for (unsigned int index = 0; index < METAlgorithm::NUMBER_OF_METALGORITHMS; ++index) {
		if (!MET::isAvailableInNTupleVersion(Globals::NTupleVersion, index))
			continue;
		bool isMCOnlyMET = MET::isMCOnlyMETType(index);
		// if (isMCOnlyMET && currentEvent->isRealData())
		if (isMCOnlyMET)
			continue;
		const METPointer met(metReaders.at(index)->getMET(totalMetCorrectionX, totalMetCorrectionY));
		if (Globals::NTupleVersion >= 7){
			met->setSumET(sumETReader_->getVariable());
			currentEvent->setHCALLaserFilter(HCALLaserFilter->getVariable());
			currentEvent->setECALDeadCellFilter(ECALDeadCellFilter->getVariable());
			currentEvent->setTrackingFailureFilter(TrackingFailureFilter->getVariable());
			currentEvent->setCSCTightBeamHaloFilter(!CSCTightHaloId->getVariable());
			currentEvent->setHBHENoiseFilter(true);//we filter on this for the skim
		}
		if (Globals::NTupleVersion >= 9){
			currentEvent->setECALDeadCellTPFilter(ECALDeadCellTPFilter->getVariable());
		}
		if (Globals::NTupleVersion >= 10){
			currentEvent->setEEBadSCFilter(EEBadSCFilter->getVariable());
			currentEvent->setECALLaserCorrFilter(ECALLaserCorrFilter->getVariable());
			currentEvent->setTrackingPOGFilters(TrackingPOGFilters->getVariable());
		}
		mets.at(index) = met;
	}

	currentEvent->setMETs(mets);
	currentEvent->setRunNumber(runNumberReader->getVariable());
	currentEvent->setEventNumber(eventNumberReader->getVariable());
	currentEvent->setLocalEventNumber(currentEventEntry);
	currentEvent->setLumiBlock(lumiBlockReader->getVariable());
	currentEvent->setBeamScrapingVeto(false);
	if (currentEvent->isRealData()) {
		currentEvent->setPassesMETFilters(passesMetFilterReader_->getVariable());
	}

	return currentEvent;
}
const Event& NTupleEventReader::getNextEvent() {
    currentEvent = Event();
    selectNextNtupleEvent();
///    cout << "End of evtchain? " << evtchain->atEnd() << endl;

///    cout << "Opening BNevent\n";
    fwlite::Handle<BNeventCollection> h_event;
    h_event.getByLabel(*evtchain,"BNproducer");
    const BNevent *const evtstruc = &h_event->at(0);

    boost::shared_ptr<std::vector<int> > triggers(new std::vector<int>());
    boost::shared_ptr<std::vector<std::string> > trignames(new std::vector<std::string>());
    boost::shared_ptr<std::vector<int> > prescales(new std::vector<int>());

    fwlite::Handle<BNtriggerCollection> h_trig;
    h_trig.getByLabel(*evtchain,"BNproducer","HLT");

    for(unsigned int i = 0; i < h_trig->size(); i++){
       const BNtrigger *const trigstruc = &h_trig->at(i);
       triggers->push_back(trigstruc->pass);
       if( evtstruc->run != currentRunNumber ){ // menu can only change between runs 
           trignames->push_back(trigstruc->name);
           prescales->push_back(trigstruc->prescale);
       }
    }
    if( evtstruc->run != currentRunNumber ){ // menu can only change between runs 
       currentTrigger->resynch(trignames, prescales);
       currentRunNumber = evtstruc->run;
    }
    currentTrigger->setHLTs(triggers);
    currentEvent.setHLT(currentTrigger);

    currentEvent.setDataType(getDataType(getCurrentFile()));
    currentEvent.setVertices(vertexReader->getVertices(evtchain));

    if(NTupleEventReader::loadTracks)
        currentEvent.setTracks(trackReader->getTracks(evtchain));
    currentEvent.setElectrons(electronReader->getElectrons(evtchain));
    // currentEvent.setLoosePFElectrons(loosePFelectronReader->getElectrons());

    if(!currentEvent.isRealData()) {
    	currentEvent.setGenParticles(genParticleReader->getGenParticles(evtchain));
    	currentEvent.setGenJets(genJetReader->getGenJets(evtchain));
	currentEvent.setGenNumberOfPileUpVertices(evtstruc->numGenPV);
	currentEvent.setTrueNumberOfPileUpVertices(evtstruc->numTruePV);
			boost::shared_ptr<std::vector<double> > pdfWts(new std::vector<double>());
//			for(unsigned int i = 0; i < pdfWtReader->size(); i++)
//					pdfWts->push_back(pdfWtReader->getVariableAt(i));
/*
if( useLHAPDF ){
                        double w0 = 1.0;
                        for(int i=0; i <=44; ++i){
                            LHAPDF::usePDFMember(1,i);
                            double xpdf1 = LHAPDF::xfx(1, evtstruc->x1, evtstruc->qScale, evtstruc->id1);
                            double xpdf2 = LHAPDF::xfx(1, evtstruc->x2, evtstruc->qScale, evtstruc->id2);
                            double weight = 1.0;
                            if (i > 0) {
                                   weight = xpdf1 * xpdf2 / w0;
                                   pdfWts->push_back(weight);
                            } else w0 = xpdf1 * xpdf2;
//std::cout<<"x1="<<evtstruc->x1<<" x2="<<evtstruc->x2<<" qScale="<<evtstruc->qScale<<" id1="<<evtstruc->id1<<" id2="<<evtstruc->id2<<" PDF weight = "<<weight<<std::endl;
                        }

} else */ pdfWts->resize(44);
			currentEvent.setPDFWts(pdfWts);

    }
    currentEvent.setJets(jetReader->getJets(evtchain));
    currentEvent.setMuons(muonReader->getMuons(evtchain));
    currentEvent.setMET(metReader->getMET(evtchain));
    currentEvent.setRunNumber(evtstruc->run);
    currentEvent.setEventNumber(evtstruc->evt);
    currentEvent.setQ2Scales(evtstruc->Q2ScaleUpWgt,evtstruc->Q2ScaleDownWgt);
    currentEvent.setLocalEventNumber(currentEventEntry);
    currentEvent.setLumiBlock(evtstruc->lumi);
    currentEvent.setBeamScrapingVeto(false);

    return currentEvent;
}
const EventPtr NTupleEventReader::getNextEvent() {
	currentEvent = EventPtr(new Event());
	selectNextNtupleEvent();

	// boost::shared_ptr<std::vector<int> > triggers(new std::vector<int>());
	// boost::shared_ptr<std::vector<int> > triggerPrescales(new std::vector<int>());

	// //    assert(hltReader->size() == HLTriggers::NUMBER_OF_TRIGGERS);
	// for (unsigned int i = 0; i < hltReader->size(); i++) {
	// 	triggers->push_back(hltReader->getIntVariableAt(i));
	// 	triggerPrescales->push_back(hltPrescaleReader->getIntVariableAt(i));
	// }

	// while (triggers->size() < HLTriggers::NUMBER_OF_TRIGGERS) {
	// 	triggers->push_back(0);
	// 	triggerPrescales->push_back(0);
	// }

	currentEvent->setDataType(DataType::getDataType(getCurrentFile()));
	currentEvent->setFile(getCurrentFile());
	// currentEvent->setHLTs(triggers);
	// currentEvent->setHLTPrescales(triggerPrescales);
	currentEvent->setVertices(vertexReader->getVertices());

	if (NTupleEventReader::loadTracks)
		currentEvent->setTracks(trackReader->getTracks());
	//fill leptons BEFORE jets for jet cleaning
	currentEvent->setElectrons(electronReader->getElectrons());
	currentEvent->setMuons(muonReader->getMuons());

	currentEvent->setJets(jetReader->getJets(currentEvent->isRealData()));

	currentEvent->setPassesElectronChannelTrigger( passesElectronChannelTriggerReader->getVariable() );
	currentEvent->setPassesMuonChannelTrigger( passesMuonChannelTriggerReader->getVariable() );

	// Set info that depends on selection criteria e.g. cleaned jets
	// Must do this before setPassOfflineSelectionInfo, as this selects on the cleaned jets
	currentEvent->setElectronSelectionOutputInfo( selectionOutputReader_electron->getSelectionOutputInfo() );
	currentEvent->setMuonSelectionOutputInfo( selectionOutputReader_muon->getSelectionOutputInfo() );
	currentEvent->setElectronQCDNonisolatedSelectionOutputInfo( selectionOutputReader_electronQCDNonisolated->getSelectionOutputInfo() );
	currentEvent->setElectronConversionSelectionOutputInfo( selectionOutputReader_electronQCDConversion->getSelectionOutputInfo() );
	currentEvent->setMuonQCDNonisolatedSelectionOutputInfo( selectionOutputReader_muonQCDNonisolated->getSelectionOutputInfo() );

	currentEvent->setPassOfflineSelectionInfo( *passesOfflineSelectionReader->getVariable() );

	currentEvent->setPassGenSelectionInfo( *passesGenSelectionReader->getVariable() );

	currentEvent->setTTGenInfo( ttGenInfoReader->getTTGenInfo());

	// Have to do this after setting jets and TTGenInfo
	currentEvent->setJetTTBarPartons();

	if (!currentEvent->isRealData()) {
	// 	std::cout << "Gen Particles etc." << std::endl;
	// 	currentEvent->setGenParticles(genParticleReader->getGenParticles());
		currentEvent->setGenJets(genJetReader->getGenJets());
		currentEvent->setPseudoTopParticles( pseudoTopReader->getPseudoTopParticles() );
	// 	currentEvent->setGenNumberOfPileUpVertices(*PileupInfoReader->getVariable());
	// 	currentEvent->setPDFWeights(*PDFWeightsReader->getVariable());

	// 	if (Globals::NTupleVersion >= 6) {
	// 		currentEvent->setTrueNumberOfPileUpVertices(*TruePileupInfoReader->getVariable());
	// 		currentEvent->setPUWeightInTimeOnly(PUWeightInTimeOnly_->getVariable());
	// 		currentEvent->setPUWeight3BX(PUWeight3BX_->getVariable());
	// 		currentEvent->setPUWeightShiftUp(PUWeightShiftUp_->getVariable());
	// 		currentEvent->setPUWeightShiftDown(PUWeightShiftDown_->getVariable());
	// 	}

	}

	// Get and set the cleaned jets for this event
	// After knowing which selection criteria are satisfied
	if( currentEvent->PassesElectronSelection() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::ElectronPlusJetsReference ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::ElectronPlusJetsReference ) );
	}
	else if ( currentEvent->PassesMuonSelection() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::MuonPlusJetsReference ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::MuonPlusJetsReference ) );
	}
	else if ( currentEvent->PassesElectronQCDSelection() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::ElectronPlusJetsQCDNonIsolated ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::ElectronPlusJetsQCDNonIsolated ) );
	}
	else if ( currentEvent->PassesElectronConversionSelection() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::ElectronPlusJetsQCDConversion ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::ElectronPlusJetsQCDConversion ) );		
	}
	else if ( currentEvent->PassesMuonQCDSelection() ) {
		currentEvent->setCleanedJets( currentEvent->getCleanedJets( SelectionCriteria::MuonPlusJetsQCDNonIsolated ) );
		currentEvent->setCleanedBJets( currentEvent->getCleanedBJets( SelectionCriteria::MuonPlusJetsQCDNonIsolated ) );
	}

	double sysShiftMetCorrectionX = 0;
	double sysShiftMetCorrectionY = 0;
	double type0MetCorrectionX = 0;
	double type0MetCorrectionY = 0;
	double type1MetCorrectionX = 0;
	double type1MetCorrectionY = 0;

	// if (Globals::NTupleVersion > 8) {
	// 	if (Globals::applySysShiftMetCorrection) {
	// 		metCorrReaders.at(METCorrections::pfMetSysShiftCorrections)->readMETCorrections();
	// 		sysShiftMetCorrectionX = metCorrReaders.at(METCorrections::pfMetSysShiftCorrections)->getXcorrection();
	// 		sysShiftMetCorrectionY = metCorrReaders.at(METCorrections::pfMetSysShiftCorrections)->getYcorrection();
	// 	}
	// 	if (Globals::applyType0MetCorrection) {
	// 		metCorrReaders.at(METCorrections::pfMetType0Corrections)->readMETCorrections();
	// 		type0MetCorrectionX = metCorrReaders.at(METCorrections::pfMetType0Corrections)->getXcorrection();
	// 		type0MetCorrectionY = metCorrReaders.at(METCorrections::pfMetType0Corrections)->getYcorrection();
	// 	}
	// 	if (Globals::applyType1MetCorrection) {
	// 		metCorrReaders.at(METCorrections::pfMetType1Corrections)->readMETCorrections();
	// 		type1MetCorrectionX = metCorrReaders.at(METCorrections::pfMetType1Corrections)->getXcorrection();
	// 		type1MetCorrectionY = metCorrReaders.at(METCorrections::pfMetType1Corrections)->getYcorrection();
	// 	}
	// }

	double totalMetCorrectionX = sysShiftMetCorrectionX + type0MetCorrectionX + type1MetCorrectionX;
	double totalMetCorrectionY = sysShiftMetCorrectionY + type0MetCorrectionY + type1MetCorrectionY;

	METCollection mets;
	mets.resize(METAlgorithm::NUMBER_OF_METALGORITHMS);
	for (unsigned int index = 0; index < METAlgorithm::NUMBER_OF_METALGORITHMS; ++index) {
		if (!MET::isAvailableInNTupleVersion(Globals::NTupleVersion, index))
			continue;
		bool isMCOnlyMET = MET::isMCOnlyMETType(index);
		// if (isMCOnlyMET && currentEvent->isRealData())
		if (isMCOnlyMET)
			continue;
		const METPointer met(metReaders.at(index)->getMET(totalMetCorrectionX, totalMetCorrectionY));
		if (Globals::NTupleVersion >= 7){
			met->setSumET(sumETReader_->getVariable());
			currentEvent->setHCALLaserFilter(HCALLaserFilter->getVariable());
			currentEvent->setECALDeadCellFilter(ECALDeadCellFilter->getVariable());
			currentEvent->setTrackingFailureFilter(TrackingFailureFilter->getVariable());
			currentEvent->setCSCTightBeamHaloFilter(!CSCTightHaloId->getVariable());
			currentEvent->setHBHENoiseFilter(true);//we filter on this for the skim
		}
		if (Globals::NTupleVersion >= 9){
			currentEvent->setECALDeadCellTPFilter(ECALDeadCellTPFilter->getVariable());
		}
		if (Globals::NTupleVersion >= 10){
			currentEvent->setEEBadSCFilter(EEBadSCFilter->getVariable());
			currentEvent->setECALLaserCorrFilter(ECALLaserCorrFilter->getVariable());
			currentEvent->setTrackingPOGFilters(TrackingPOGFilters->getVariable());
		}
		mets.at(index) = met;
	}

	currentEvent->setMETs(mets);
	currentEvent->setRunNumber(runNumberReader->getVariable());
	currentEvent->setEventNumber(eventNumberReader->getVariable());
	currentEvent->setLocalEventNumber(currentEventEntry);
	currentEvent->setLumiBlock(lumiBlockReader->getVariable());
	currentEvent->setBeamScrapingVeto(false);

	return currentEvent;
}