MAPTrigOnly MapTrigOnlyEntries(TChain *trigOnlyChain, int nEntriesTo, ofstream& outcheck, MAPJson *jsonMap, int iJson, bool debug, bool b_mapcheck) { // Get trigOnlyChain information // if(debug) cout << "--- define trigOnlyChain branches" << endl; int nEvent_To, nRun_To, nLumi_To; bool isGoodRun; // trigOnlyChain->SetBranchStatus("trig*",0); // trigOnlyChain->SetBranchAddress("nRun", &nRun_To); trigOnlyChain->SetBranchAddress("nLumi", &nLumi_To); trigOnlyChain->SetBranchAddress("nEvent", &nEvent_To); // Build the map // MAPTrigOnly mapTo; // map< pair<int,int> , int > MAPTrigOnly::iterator iterMapTo; // < <nRun,nEvt> , iEntry > pair<int,int> runevtTo; // Fill the map // if(debug) cout << "--- fill the map" << endl; int nEnt = trigOnlyChain->GetEntries(); if( nEntriesTo>0 && nEntriesTo<nEnt ) nEnt = nEntriesTo; for(int iEntry=0 ; iEntry<nEnt ; iEntry++) { trigOnlyChain->GetEntry(iEntry); // JSON // if( iJson>-1 && iJson<5) { isGoodRun = AcceptEventByRunAndLumiSection(nRun_To, nLumi_To, jsonMap[iJson]); if(!isGoodRun) { outcheck << "trig failed JSON" << endl; continue; } } if(nEvent_To<0) continue; runevtTo = make_pair(nRun_To,nEvent_To); iterMapTo = mapTo.find( runevtTo ); if( iterMapTo == mapTo.end() ) mapTo[ runevtTo ] = iEntry; if(b_mapcheck) outcheck << "nRun=" << nRun_To << " | nEvent=" << nEvent_To << " | nEntry=" << iEntry << endl; } if(debug) cout << "--- return the map" << endl; return mapTo; }
int process(TChain *trigOnlyChain, MAPJson *jsonMap, MAPTrigOnly mapTo, TString nameChain, TString file, int iFile, int nEntries, TString dirIn, TString dirOut, TString usr_hlt, int iJson, bool GetTrigOnly, bool debug) { // TrigOnly MAP // MAPTrigOnly::iterator iterMapTo; pair<int,int> runevtTo; int iEntryTo=-1; // OUTPUT FILE // if(debug) cout << "--- define output file : " ; ostringstream ossi(""); ossi << iFile ; // TFile *outfile = new TFile(dirIn+"spikes_"+ossi.str()+".root","RECREATE"); //ofstream outcheckdata(dirIn+"logcheckdata_"+ossi.str()+".txt",ios::out); ofstream outlog(dirOut+"/logs/log_"+ossi.str()+".txt",ios::out); ofstream outcheckL1(dirOut+"/checkL1/checkL1_"+ossi.str()+".txt",ios::out); //outlog << "TRY TRY TRY" << endl; //outcheckL1 << "TRY TRY TRY" << endl; //outcheckdata << "TRY TRY TRY" << endl; if(debug) cout << "spikes_"+ossi.str()+".root" << endl; ossi.str(""); // INPUT TREE // if(debug) cout << "--- add data trees to myChain" << endl; TChain * myChain = new TChain(nameChain); myChain->Add(file); // VARIABLES // int nEvent, nRun, nLumi ; // data int nEvent_To, nRun_To, nLumi_To; // trigOnly // Vertices // int vtx_N; double _vtx_x[200], _vtx_y[200], _vtx_z[200]; double _vtx_normalizedChi2[200], _vtx_ndof[200], _vtx_nTracks[200], _vtx_d0[200]; // Trigger Paths // int trig_hltInfo[250]; //int _trig_isEleHLTpath; int trig_HLT_path[4]; // unbias, EG5, EG8, EG12 char trig_fired_names[5000]; vector<string> m_HLT_pathsV; vector<string> m_HLT_triggered; vector<int> m_HLT_pathsV_check; // Spikes int spike_N,spike_TTieta[5000], spike_TTiphi[5000], spike_Rieta[5000], spike_Riphi[5000], spike_severityLevel[5000], spike_outOfTime[5000], spike_TT_sFGVB[5000], spike_TT_adc[5000], spike_TT_sFGVB_E[5000][5], spike_TT_adc_E[5000][5], spike_TT_t[5000], spike_TT_tE[5000]; double spike_Et[5000], spike_eta[5000], spike_phi[5000], spike_theta[5000]; int spike_RCTL1iso[5000], spike_RCTL1noniso[5000], spike_RCTL1iso_To[5000], spike_RCTL1noniso_To[5000], spike_RCTL1iso_M_To[5000], spike_RCTL1noniso_M_To[5000], spike_maxEGtrig[5000], spike_maxEGtrig_To[5000], spike_maxEGtrig_M_To[5000]; int spike_out_TTieta, spike_out_TTiphi, spike_out_Rieta, spike_out_Riphi, spike_out_severityLevel, spike_out_outOfTime, spike_out_TT_sFGVB, spike_out_TT_adc, spike_out_TT_sFGVB_E[5], spike_out_TT_adc_E[5], spike_out_TT_t, spike_out_TT_tE; double spike_out_Et, spike_out_eta, spike_out_phi, spike_out_theta; int spike_out_RCTL1iso, spike_out_RCTL1noniso, spike_out_RCTL1iso_To, spike_out_RCTL1noniso_To, spike_out_RCTL1iso_M_To, spike_out_RCTL1noniso_M_To, spike_out_maxEGtrig, spike_out_maxEGtrig_To, spike_out_maxEGtrig_M_To; // TP info const int nTow = 4032; int trig_tower_N,trig_tower_ieta[nTow],trig_tower_iphi[nTow],trig_tower_adc[nTow],trig_tower_sFGVB[nTow],trig_tower_FG[nTow]; int trig_tower_N_M,trig_tower_ieta_M[nTow],trig_tower_iphi_M[nTow],trig_tower_adc_M[nTow],trig_tower_sFGVB_M[nTow], trig_tower_FG_M[nTow]; int trig_tower_N_E,trig_tower_ieta_E[nTow],trig_tower_iphi_E[nTow],trig_tower_adc_E[nTow][5],trig_tower_sFGVB_E[nTow][5], trig_tower_FG_E[nTow][5]; // HCAL TP // int trig_tower_hcal_N, trig_tower_hcal_ieta[4032], trig_tower_hcal_iphi[4032], trig_tower_hcal_FG[4032],trig_tower_hcal_et[4032]; // L1 Candidates // int trig_L1emIso_N, trig_L1emNonIso_N; int trig_L1emIso_N_To, trig_L1emNonIso_N_To, trig_L1emIso_N_M_To, trig_L1emNonIso_N_M_To; // L1 candidates info // int trig_L1emIso_ieta[4], trig_L1emIso_iphi[4], trig_L1emIso_rank[4]; int trig_L1emNonIso_ieta[4], trig_L1emNonIso_iphi[4], trig_L1emNonIso_rank[4]; int trig_L1emIso_ieta_To[4], trig_L1emIso_iphi_To[4], trig_L1emIso_rank_To[4]; int trig_L1emNonIso_ieta_To[4], trig_L1emNonIso_iphi_To[4], trig_L1emNonIso_rank_To[4]; int trig_L1emIso_ieta_M_To[4], trig_L1emIso_iphi_M_To[4], trig_L1emIso_rank_M_To[4]; int trig_L1emNonIso_ieta_M_To[4], trig_L1emNonIso_iphi_M_To[4], trig_L1emNonIso_rank_M_To[4]; // INITIALIZATION // // // Global nEvent = 0; nRun = 0; nLumi = 0; // // Vertices vtx_N = 0; for(int iv=0;iv<200;iv++) { _vtx_normalizedChi2[iv] = 0.; _vtx_ndof[iv] = 0.; _vtx_nTracks[iv] = 0.; _vtx_d0[iv] = 0.; _vtx_x[iv] = 0.; _vtx_y[iv] = 0.; _vtx_z[iv] = 0.; } // // L1 candidates trig_L1emIso_N = 0; trig_L1emNonIso_N = 0; trig_L1emIso_N_M_To = 0; trig_L1emNonIso_N_M_To = 0; for(int il1=0 ; il1<4 ; il1++) { trig_L1emIso_ieta[il1] = 0; trig_L1emIso_iphi[il1] = 0; trig_L1emIso_rank[il1] = 0; trig_L1emNonIso_ieta[il1] = 0; trig_L1emNonIso_iphi[il1] = 0; trig_L1emNonIso_rank[il1] = 0; trig_L1emIso_ieta_To[il1] = 0; trig_L1emIso_iphi_To[il1] = 0; trig_L1emIso_rank_To[il1] = 0; trig_L1emNonIso_ieta_To[il1] = 0; trig_L1emNonIso_iphi_To[il1] = 0; trig_L1emNonIso_rank_To[il1] = 0; trig_L1emIso_ieta_M_To[il1] = 0; trig_L1emIso_iphi_M_To[il1] = 0; trig_L1emIso_rank_M_To[il1] = 0; trig_L1emNonIso_ieta_M_To[il1] = 0; trig_L1emNonIso_iphi_M_To[il1] = 0; trig_L1emNonIso_rank_M_To[il1] = 0; } // Trigger towers trig_tower_N = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta[iTow] = trig_tower_iphi[iTow] = -999; trig_tower_adc[iTow] = trig_tower_sFGVB[iTow] = trig_tower_FG[iTow] = -999; } trig_tower_N_M = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_M[iTow] = trig_tower_iphi_M[iTow] = -999; trig_tower_adc_M[iTow] = trig_tower_sFGVB_M[iTow] = trig_tower_FG_M[iTow] = -999; } trig_tower_N_E = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_E[iTow] = trig_tower_iphi_E[iTow] = -999; for(int i=0 ; i<5 ; i++) trig_tower_adc_E[iTow][i] = trig_tower_sFGVB_E[iTow][i] = trig_tower_FG_E[iTow][i] = -999; } trig_tower_hcal_N = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_hcal_ieta[iTow] = trig_tower_hcal_iphi[iTow] = -999; trig_tower_hcal_FG[iTow] = trig_tower_hcal_et[iTow] = -999; } // SPIKES // spike_N = 0; for(int isp=0 ; isp<5000 ; isp++) { spike_outOfTime[isp] = -999; spike_severityLevel[isp] = -999 ; //spike_SwissCross[isp] = -999 ; spike_Et[isp] = -999 ; spike_phi[isp] = -999 ; spike_eta[isp] = -999 ; spike_theta[isp] = -999 ; spike_TTiphi[isp] = -999 ; spike_TTieta[isp] = -999 ; spike_TT_t[isp] = -999 ; spike_TT_tE[isp] = -999 ; spike_TT_sFGVB[isp] = -999 ; spike_TT_adc[isp] = -999 ; spike_Riphi[isp] = -999 ; spike_Rieta[isp] = -999 ; for(int i=0;i<5;i++) { spike_TT_sFGVB_E[isp][i] = -999 ; spike_TT_adc_E[isp][i] = -999 ; } } spike_out_outOfTime = -999; spike_out_severityLevel = -999 ; //spike_out_SwissCross = -999 ; spike_out_Et = -999 ; spike_out_phi = -999 ; spike_out_eta = -999 ; spike_out_theta = -999 ; spike_out_TTiphi = -999 ; spike_out_TTieta = -999 ; spike_out_TT_t = -999 ; spike_out_TT_tE = -999 ; spike_out_TT_sFGVB = -999 ; spike_out_TT_adc = -999 ; spike_out_Riphi = -999 ; spike_out_Rieta = -999 ; for(int i=0;i<5;i++) { spike_out_TT_sFGVB_E[i] = -999 ; spike_out_TT_adc_E[i] = -999 ; } myChain->SetBranchAddress("nEvent",&nEvent); myChain->SetBranchAddress("nRun",&nRun); myChain->SetBranchAddress("nLumi",&nLumi); // Vertices myChain->SetBranchAddress("vtx_N",&vtx_N); //myChain->SetBranchAddress("trig_HLT_path",&trig_HLT_path); myChain->SetBranchAddress("trig_fired_names",&trig_fired_names); myChain->SetBranchAddress("trig_hltInfo",&trig_hltInfo); // L1 candidates myChain->SetBranchAddress("trig_L1emIso_N", &trig_L1emIso_N); myChain->SetBranchAddress("trig_L1emIso_ieta", &trig_L1emIso_ieta); myChain->SetBranchAddress("trig_L1emIso_iphi", &trig_L1emIso_iphi); myChain->SetBranchAddress("trig_L1emIso_rank", &trig_L1emIso_rank); myChain->SetBranchAddress("trig_L1emNonIso_N", &trig_L1emNonIso_N); myChain->SetBranchAddress("trig_L1emNonIso_ieta", &trig_L1emNonIso_ieta); myChain->SetBranchAddress("trig_L1emNonIso_iphi", &trig_L1emNonIso_iphi); myChain->SetBranchAddress("trig_L1emNonIso_rank", &trig_L1emNonIso_rank); // Spikes myChain->SetBranchAddress("spike_N",&spike_N); myChain->SetBranchAddress("spike_TTieta",&spike_TTieta); myChain->SetBranchAddress("spike_TTiphi",&spike_TTiphi); myChain->SetBranchAddress("spike_Rieta",&spike_Rieta); myChain->SetBranchAddress("spike_Riphi",&spike_Riphi); myChain->SetBranchAddress("spike_severityLevel",&spike_severityLevel); myChain->SetBranchAddress("spike_outOfTime",&spike_outOfTime); myChain->SetBranchAddress("spike_Et",&spike_Et); myChain->SetBranchAddress("spike_eta",&spike_eta); myChain->SetBranchAddress("spike_phi",&spike_phi); myChain->SetBranchAddress("spike_theta",&spike_theta); // TrigOnly Chain // trigOnlyChain->SetBranchAddress("nRun", &nRun_To); trigOnlyChain->SetBranchAddress("nLumi", &nLumi_To); trigOnlyChain->SetBranchAddress("nEvent", &nEvent_To); trigOnlyChain->SetBranchAddress("trig_HLT_path",&trig_HLT_path); trigOnlyChain->SetBranchAddress("trig_tower_N", &trig_tower_N); trigOnlyChain->SetBranchAddress("trig_tower_ieta", &trig_tower_ieta); trigOnlyChain->SetBranchAddress("trig_tower_iphi", &trig_tower_iphi); trigOnlyChain->SetBranchAddress("trig_tower_adc", &trig_tower_adc); trigOnlyChain->SetBranchAddress("trig_tower_sFGVB", &trig_tower_sFGVB); //trigOnlyChain->SetBranchAddress("trig_tower_FG", &trig_tower_FG); trigOnlyChain->SetBranchAddress("trig_tower_N_E", &trig_tower_N_E); trigOnlyChain->SetBranchAddress("trig_tower_ieta_E", &trig_tower_ieta_E); trigOnlyChain->SetBranchAddress("trig_tower_iphi_E", &trig_tower_iphi_E); trigOnlyChain->SetBranchAddress("trig_tower_adc_E", &trig_tower_adc_E); trigOnlyChain->SetBranchAddress("trig_tower_sFGVB_E", &trig_tower_sFGVB_E); //trigOnlyChain->SetBranchAddress("trig_tower_FG_E", &trig_tower_FG_E); // HCAL TP trigOnlyChain->SetBranchAddress("trig_tower_hcal_N", &trig_tower_hcal_N); trigOnlyChain->SetBranchAddress("trig_tower_hcal_ieta", &trig_tower_hcal_ieta); trigOnlyChain->SetBranchAddress("trig_tower_hcal_iphi", &trig_tower_hcal_iphi); trigOnlyChain->SetBranchAddress("trig_tower_hcal_et", &trig_tower_hcal_et); trigOnlyChain->SetBranchAddress("trig_tower_hcal_FG", &trig_tower_hcal_FG); // L1 candidates collections trigOnlyChain->SetBranchAddress("trig_L1emIso_N", &trig_L1emIso_N_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_ieta", &trig_L1emIso_ieta_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_iphi", &trig_L1emIso_iphi_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_rank", &trig_L1emIso_rank_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_N", &trig_L1emNonIso_N_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_ieta", &trig_L1emNonIso_ieta_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_iphi", &trig_L1emNonIso_iphi_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_rank", &trig_L1emNonIso_rank_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_N_M", &trig_L1emIso_N_M_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_ieta_M", &trig_L1emIso_ieta_M_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_iphi_M", &trig_L1emIso_iphi_M_To); trigOnlyChain->SetBranchAddress("trig_L1emIso_rank_M", &trig_L1emIso_rank_M_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_N_M", &trig_L1emNonIso_N_M_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_ieta_M", &trig_L1emNonIso_ieta_M_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_iphi_M", &trig_L1emNonIso_iphi_M_To); trigOnlyChain->SetBranchAddress("trig_L1emNonIso_rank_M", &trig_L1emNonIso_rank_M_To); // OUTPUT TREE // TTree * outtree = new TTree("Spikes","Spikes"); // General informations // outtree->Branch("nRun",&nRun,"nRun/I"); outtree->Branch("nLumi",&nLumi,"nLumi/I"); outtree->Branch("nEvent",&nEvent,"nEvent/I"); // Vertices // outtree->Branch("vtx_N",&vtx_N,"vtx_N/I"); outtree->Branch("trig_HLT_path",&trig_HLT_path,"trig_HLT_path[4]/I"); outtree->Branch("trig_fired_names",&trig_fired_names,"trig_fired_names[5000]/C"); outtree->Branch("trig_hltInfo",&trig_hltInfo,"trig_hltInfo[250]/I"); // Trigger towers // outtree->Branch("trig_tower_N",&trig_tower_N,"trig_tower_N/I"); outtree->Branch("trig_tower_ieta",&trig_tower_ieta,"trig_tower_ieta[4032]/I"); outtree->Branch("trig_tower_iphi",&trig_tower_iphi,"trig_tower_iphi[4032]/I"); outtree->Branch("trig_tower_adc",&trig_tower_adc,"trig_tower_adc[4032]/I"); outtree->Branch("trig_tower_sFGVB",&trig_tower_sFGVB,"trig_tower_sFGVB[4032]/I"); outtree->Branch("trig_tower_FG",&trig_tower_FG,"trig_tower_FG[4032]/I"); // outtree->Branch("trig_tower_N_E",&trig_tower_N_E,"trig_tower_N_E/I"); outtree->Branch("trig_tower_ieta_E",&trig_tower_ieta_E,"trig_tower_ieta_E[4032]/I"); outtree->Branch("trig_tower_iphi_E",&trig_tower_iphi_E,"trig_tower_iphi_E[4032]/I"); outtree->Branch("trig_tower_adc_E",&trig_tower_adc_E,"trig_tower_adc_E[4032][5]/I"); outtree->Branch("trig_tower_sFGVB_E",&trig_tower_sFGVB_E,"trig_tower_sFGVB_E[4032][5]/I"); outtree->Branch("trig_tower_FG_E",&trig_tower_FG_E,"trig_tower_FG_E[4032][5]/I"); // HCAL TP outtree->Branch("trig_tower_hcal_N", &trig_tower_hcal_N, "trig_tower_hcal_N/I"); outtree->Branch("trig_tower_hcal_ieta", &trig_tower_hcal_ieta, "trig_tower_hcal_ieta[trig_tower_N]/I"); outtree->Branch("trig_tower_hcal_iphi", &trig_tower_hcal_iphi, "trig_tower_hcal_iphi[trig_tower_N]/I"); outtree->Branch("trig_tower_hcal_et", &trig_tower_hcal_et, "trig_tower_hcal_et[trig_tower_N]/I"); outtree->Branch("trig_tower_hcal_FG", &trig_tower_hcal_FG, "trig_tower_hcal_FG[trig_tower_N]/I"); // L1 candidates from Data outtree->Branch("trig_L1emIso_N", &trig_L1emIso_N, "trig_L1emIso_N/I"); outtree->Branch("trig_L1emIso_ieta", &trig_L1emIso_ieta, "trig_L1emIso_ieta[4]/I"); outtree->Branch("trig_L1emIso_iphi", &trig_L1emIso_iphi, "trig_L1emIso_iphi[4]/I"); outtree->Branch("trig_L1emIso_rank", &trig_L1emIso_rank, "trig_L1emIso_rank[4]/I"); outtree->Branch("trig_L1emNonIso_N", &trig_L1emNonIso_N, "trig_L1emNonIso_N/I"); outtree->Branch("trig_L1emNonIso_ieta", &trig_L1emNonIso_ieta, "trig_L1emNonIso_ieta[4]/I"); outtree->Branch("trig_L1emNonIso_iphi", &trig_L1emNonIso_iphi, "trig_L1emNonIso_iphi[4]/I"); outtree->Branch("trig_L1emNonIso_rank", &trig_L1emNonIso_rank, "trig_L1emNonIso_rank[4]/I"); // L1 candidates from TrigOnly outtree->Branch("trig_L1emIso_N_To", &trig_L1emIso_N_To, "trig_L1emIso_N_To/I"); outtree->Branch("trig_L1emIso_ieta_To", &trig_L1emIso_ieta_To, "trig_L1emIso_ieta_To[4]/I"); outtree->Branch("trig_L1emIso_iphi_To", &trig_L1emIso_iphi_To, "trig_L1emIso_iphi_To[4]/I"); outtree->Branch("trig_L1emIso_rank_To", &trig_L1emIso_rank_To, "trig_L1emIso_rank_To[4]/I"); // outtree->Branch("trig_L1emNonIso_N_To", &trig_L1emNonIso_N_To, "trig_L1emNonIso_N_To/I"); outtree->Branch("trig_L1emNonIso_ieta_To", &trig_L1emNonIso_ieta_To, "trig_L1emNonIso_ieta_To[4]/I"); outtree->Branch("trig_L1emNonIso_iphi_To", &trig_L1emNonIso_iphi_To, "trig_L1emNonIso_iphi_To[4]/I"); outtree->Branch("trig_L1emNonIso_rank_To", &trig_L1emNonIso_rank_To, "trig_L1emNonIso_rank_To[4]/I"); outtree->Branch("trig_L1emIso_N_M_To", &trig_L1emIso_N_M_To, "trig_L1emIso_N_M_To/I"); outtree->Branch("trig_L1emIso_ieta_M_To", &trig_L1emIso_ieta_M_To, "trig_L1emIso_ieta_M_To[4]/I"); outtree->Branch("trig_L1emIso_iphi_M_To", &trig_L1emIso_iphi_M_To, "trig_L1emIso_iphi_M_To[4]/I"); outtree->Branch("trig_L1emIso_rank_M_To", &trig_L1emIso_rank_M_To, "trig_L1emIso_rank_M_To[4]/I"); // outtree->Branch("trig_L1emNonIso_N_M_To", &trig_L1emNonIso_N_M_To, "trig_L1emNonIso_N_M_To/I"); outtree->Branch("trig_L1emNonIso_ieta_M_To", &trig_L1emNonIso_ieta_M_To, "trig_L1emNonIso_ieta_M_To[4]/I"); outtree->Branch("trig_L1emNonIso_iphi_M_To", &trig_L1emNonIso_iphi_M_To, "trig_L1emNonIso_iphi_M_To[4]/I"); outtree->Branch("trig_L1emNonIso_rank_M_To", &trig_L1emNonIso_rank_M_To, "trig_L1emNonIso_rank_M_To[4]/I"); outtree->Branch("spike_TTieta",&spike_out_TTieta,"spike_TTieta/I"); outtree->Branch("spike_TTiphi",&spike_out_TTiphi,"spike_TTiphi/I"); // outtree->Branch("spike_TT_t",&spike_out_TT_t,"spike_TT_t/I"); outtree->Branch("spike_TT_sFGVB",&spike_out_TT_sFGVB,"spike_TT_sFGVB/I"); outtree->Branch("spike_TT_adc",&spike_out_TT_adc,"spike_TT_adc/I"); outtree->Branch("spike_TT_tE",&spike_out_TT_tE,"spike_TT_tE/I"); outtree->Branch("spike_TT_sFGVB_E",&spike_out_TT_sFGVB_E,"spike_TT_sFGVB[5]/I"); outtree->Branch("spike_TT_adc_E",&spike_out_TT_adc_E,"spike_TT_adc[5]/I"); // outtree->Branch("spike_Rieta",&spike_out_Rieta,"spike_Rieta/I"); outtree->Branch("spike_Riphi",&spike_out_Riphi,"spike_Riphi/I"); outtree->Branch("spike_severityLevel",&spike_out_severityLevel,"spike_severityLevel/I"); outtree->Branch("spike_outOfTime",&spike_out_outOfTime,"spike_outOfTime/I"); outtree->Branch("spike_Et",&spike_out_Et,"spike_Et/D"); outtree->Branch("spike_eta",&spike_out_eta,"spike_eta/D"); outtree->Branch("spike_phi",&spike_out_phi,"spike_phi/D"); outtree->Branch("spike_theta",&spike_out_theta,"spike_theta/D"); // outtree->Branch("spike_maxEGtrig",&spike_out_maxEGtrig,"spike_maxEGtrig/I"); outtree->Branch("spike_maxEGtrig_To",&spike_out_maxEGtrig_To,"spike_maxEGtrig_To/I"); outtree->Branch("spike_maxEGtrig_M_To",&spike_out_maxEGtrig_M_To,"spike_maxEGtrig_M_To/I"); // outtree->Branch("spike_RCTL1iso",&spike_out_RCTL1iso,"spike_RCTL1iso/I"); outtree->Branch("spike_RCTL1noniso",&spike_out_RCTL1noniso,"spike_RCTL1noniso/I"); outtree->Branch("spike_RCTL1iso_To",&spike_out_RCTL1iso_To,"spike_RCTL1iso_To/I"); outtree->Branch("spike_RCTL1noniso_To",&spike_out_RCTL1noniso_To,"spike_RCTL1noniso_To/I"); outtree->Branch("spike_RCTL1iso_M_To",&spike_out_RCTL1iso_M_To,"spike_RCTL1iso_M_To/I"); outtree->Branch("spike_RCTL1noniso_M_To",&spike_out_RCTL1noniso_M_To,"spike_RCTL1noniso_M_To/I"); // Variables bool isGoodRun, evt_trig_EG12; TString filename; // Map TT MAPTT adcTT; MAPTT::iterator iterTT; pair<int,int> coords; int TT_t, TT_tE; int numEntries = myChain->GetEntries () ; int nProcess = numEntries; if(nEntries>=0 && nEntries<numEntries) nProcess = nEntries; int nCurrentRun = -999; outlog << "will process " << nProcess << "/" << numEntries << "entries" << endl; // Loop over entries // for (int iEvent = 0 ; iEvent < nProcess ; iEvent++ ) { // TP Initialization trig_tower_N = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta[iTow] = trig_tower_iphi[iTow] = -999; trig_tower_adc[iTow] = trig_tower_sFGVB[iTow] = -999; } trig_tower_N_M = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_M[iTow] = trig_tower_iphi_M[iTow] = -999; trig_tower_adc_M[iTow] = trig_tower_sFGVB_M[iTow] = -999; } trig_tower_N_E = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_E[iTow] = trig_tower_iphi_E[iTow] = -999; for(int i=0 ; i<5 ; i++) trig_tower_adc_E[iTow][i] = trig_tower_sFGVB_E[iTow][i] = -999; } // L1 candidates trig_L1emIso_N = 0; trig_L1emNonIso_N = 0; trig_L1emIso_N_M_To = 0; trig_L1emNonIso_N_M_To = 0; trig_L1emIso_N_To = 0; trig_L1emNonIso_N_To = 0; for(int il1=0 ; il1<4 ; il1++) { trig_L1emIso_ieta[il1] = 0; trig_L1emIso_iphi[il1] = 0; trig_L1emIso_rank[il1] = 0; trig_L1emNonIso_ieta[il1] = 0; trig_L1emNonIso_iphi[il1] = 0; trig_L1emNonIso_rank[il1] = 0; trig_L1emIso_ieta_To[il1] = 0; trig_L1emIso_iphi_To[il1] = 0; trig_L1emIso_rank_To[il1] = 0; trig_L1emNonIso_ieta_To[il1] = 0; trig_L1emNonIso_iphi_To[il1] = 0; trig_L1emNonIso_rank_To[il1] = 0; trig_L1emNonIso_ieta_M_To[il1] = 0; trig_L1emNonIso_iphi_M_To[il1] = 0; trig_L1emNonIso_rank_M_To[il1] = 0; trig_L1emIso_ieta_M_To[il1] = 0; trig_L1emIso_iphi_M_To[il1] = 0; trig_L1emIso_rank_M_To[il1] = 0; } for(int isp=0 ; isp<5000 ; isp++) { spike_outOfTime[isp] = -999; spike_severityLevel[isp] = -999 ; //spike_SwissCross[isp] = -999 ; spike_Et[isp] = -999 ; spike_phi[isp] = -999 ; spike_eta[isp] = -999 ; spike_theta[isp] = -999 ; spike_TTiphi[isp] = -999 ; spike_TTieta[isp] = -999 ; spike_TT_t[isp] = -999 ; spike_TT_tE[isp] = -999 ; spike_TT_sFGVB[isp] = -999 ; spike_TT_adc[isp] = -999 ; spike_Riphi[isp] = -999 ; spike_Rieta[isp] = -999 ; for(int i=0;i<5;i++) { spike_TT_sFGVB_E[isp][i] = -999 ; spike_TT_adc_E[isp][i] = -999 ; } } myChain->GetEntry (iEvent) ; // show processed file if(iEvent==0) { filename = myChain->GetFile()->GetName() ; outlog << "File : " << filename << endl << endl; } else if( filename != myChain->GetFile()->GetName() ) { filename = myChain->GetFile()->GetName() ; outlog << "File : " << myChain->GetFile()->GetName() << endl << endl; } // show current run/iCat processed if(iEvent==0) { nCurrentRun = nRun ; outlog << "nRun=" << nRun << endl; } else if(nRun!=nCurrentRun) { nCurrentRun=nRun ; outlog << "nRun=" << nRun << endl; } if(debug) cout << "iJson = " << iJson << endl; if( iJson>-1 && iJson<5) { isGoodRun = AcceptEventByRunAndLumiSection(nRun, nLumi, jsonMap[iJson]); if(!isGoodRun) { outlog << "failed JSON" << endl; continue; } } // JSON selection //////////////////////////////////////////// if(debug) cout << "iJson = " << iJson << endl; if( iJson>-1 && iJson<5) { isGoodRun = false; isGoodRun = AcceptEventByRunAndLumiSection(nRun, nLumi, jsonMap[iJson]); if(!isGoodRun) { outlog << "failed JSON" << endl; continue; } } // HLT selection // if(usr_hlt=="unbias") if(trig_HLT_path[0]==0) continue; // Map the trigger tower ////////////////////////////////////////////////////////////////////// adcTT.clear(); for(int t=0 ; t<trig_tower_N ; t++) { coords = make_pair( trig_tower_ieta[t] , trig_tower_iphi[t] ); adcTT[coords].first = t; } for(int t=0 ; t<trig_tower_N_E ; t++) { coords = make_pair( trig_tower_ieta_E[t] , trig_tower_iphi_E[t] ); iterTT = adcTT.find( coords ); if( iterTT != adcTT.end() ) { adcTT[coords].second = t; } } // Load trigOnly information //////////////////////////////////////////////////////////////////// if( GetTrigOnly ) { runevtTo = make_pair(nRun,nEvent); iterMapTo = mapTo.find( runevtTo ); // if( iterMapTo != mapTo.end() ) iEntryTo = mapTo[ runevtTo ]; else iEntryTo = -1; // outlog << "trigOnly info : nRun=" << nRun << " | nEvent=" << nEvent << " | iEntryTo=" << iEntryTo << endl; // if(iEntryTo>=0) { trigOnlyChain->GetEntry( iEntryTo ); if(debug) cout << "----> got entry from trigOnlyChain" << endl; } else { if(debug) cout << "----> entry not mapped" << endl; continue; } } // MATCHING SPIKE / L1-CANDIDATE ////////////////////////////////////////////////////////////////// evt_trig_EG12=false; outcheckL1 << "ISO_N_data : " ; for(int i=0 ; i<4 ; i++) { outcheckL1 << "(" << trig_L1emIso_ieta[i] << ";" << trig_L1emIso_iphi[i] << ")=" << trig_L1emIso_rank[i] << " | "; if(trig_L1emIso_rank[i] >= 12) evt_trig_EG12=true; } outcheckL1 << endl << "NONISO_N_data : "; for(int i=0 ; i<4 ; i++) { outcheckL1 << "(" << trig_L1emNonIso_ieta[i] << ";" << trig_L1emNonIso_iphi[i] << ")=" << trig_L1emNonIso_rank[i] << " | "; if(trig_L1emNonIso_rank[i] >= 12) evt_trig_EG12=true; } if(!evt_trig_EG12) continue; outcheckL1 << endl << "ISO_N : " ; for(int i=0 ; i<4 ; i++) outcheckL1 << "(" << trig_L1emIso_ieta_To[i] << ";" << trig_L1emIso_iphi_To[i] << ")=" << trig_L1emIso_rank_To[i] << " | "; outcheckL1 << endl << "NONISO_N : "; for(int i=0 ; i<4 ; i++) outcheckL1 << "(" << trig_L1emNonIso_ieta_To[i] << ";" << trig_L1emNonIso_iphi_To[i] << ")=" << trig_L1emNonIso_rank_To[i] << " | "; outcheckL1 << endl << "ISO_M : "; for(int i=0 ; i<4 ; i++) outcheckL1 << "(" << trig_L1emIso_ieta_M_To[i] << ";" << trig_L1emIso_iphi_M_To[i] << ")=" << trig_L1emIso_rank_M_To[i] << " | "; outcheckL1 << endl << "NONISO_M : "; for(int i=0 ; i<4 ; i++) outcheckL1 << "(" << trig_L1emNonIso_ieta_M_To[i] << ";" << trig_L1emNonIso_iphi_M_To[i] << ")=" << trig_L1emNonIso_rank_M_To[i] << " | "; outcheckL1 << endl << endl; /////////////////////////////////////// // LOOP OVER SPIKES /////////////////// /////////////////////////////////////// for(int iS=0 ; iS<spike_N ; iS++) { if(iS>=5000) break; if(spike_Et[iS]<=0) continue; // Find spikes'TT informations coords = make_pair( spike_TTieta[iS] , spike_TTiphi[iS] ); iterTT = adcTT.find( coords ); if( iterTT != adcTT.end() ) { TT_t = (iterTT->second).first ; TT_tE = (iterTT->second).second ; if(TT_t<0 || TT_t >= 4032) continue; spike_TT_t[iS] = TT_t ; spike_TT_sFGVB[iS] = trig_tower_sFGVB[ TT_t ]; spike_TT_adc[iS] = trig_tower_adc[ TT_t ]; if(TT_tE<0 || TT_tE >= 4032) continue; spike_TT_tE[iS] = TT_tE ; for(int iSam=0 ; iSam<5 ; iSam++) { spike_TT_sFGVB_E[iS][iSam] = trig_tower_sFGVB_E[ TT_tE ][iSam]; spike_TT_adc_E[iS][iSam] = trig_tower_adc_E[ TT_tE ][iSam]; } } // Match spike to L1 candidate spike_maxEGtrig[iS] = spike_maxEGtrig_To[iS] = spike_maxEGtrig_M_To[iS] = 0; matchL1toSpike( trig_L1emIso_N, trig_L1emIso_ieta, trig_L1emIso_iphi, trig_L1emIso_rank, spike_Rieta[iS], spike_Riphi[iS], spike_RCTL1iso[iS], spike_maxEGtrig[iS], outcheckL1 ); matchL1toSpike( trig_L1emIso_N, trig_L1emIso_ieta, trig_L1emIso_iphi, trig_L1emIso_rank, spike_Rieta[iS], spike_Riphi[iS], spike_RCTL1noniso[iS], spike_maxEGtrig[iS], outcheckL1 ); matchL1toSpike( trig_L1emIso_N_To, trig_L1emIso_ieta_To, trig_L1emIso_iphi_To, trig_L1emIso_rank_To, spike_Rieta[iS], spike_Riphi[iS], spike_RCTL1iso_To[iS], spike_maxEGtrig_To[iS], outcheckL1 ); matchL1toSpike( trig_L1emIso_N_To, trig_L1emIso_ieta_To, trig_L1emIso_iphi_To, trig_L1emIso_rank_To, spike_Rieta[iS], spike_Riphi[iS], spike_RCTL1noniso_To[iS], spike_maxEGtrig_To[iS], outcheckL1 ); matchL1toSpike( trig_L1emIso_N_M_To, trig_L1emIso_ieta_M_To, trig_L1emIso_iphi_M_To, trig_L1emIso_rank_M_To, spike_Rieta[iS], spike_Riphi[iS], spike_RCTL1iso_M_To[iS], spike_maxEGtrig_M_To[iS], outcheckL1 ); matchL1toSpike( trig_L1emIso_N_M_To, trig_L1emIso_ieta_M_To, trig_L1emIso_iphi_M_To, trig_L1emIso_rank_M_To, spike_Rieta[iS], spike_Riphi[iS], spike_RCTL1noniso_M_To[iS], spike_maxEGtrig_M_To[iS], outcheckL1 ); // Fill the tree // spike_out_outOfTime = spike_outOfTime[iS] ; spike_out_severityLevel = spike_severityLevel[iS] ; spike_out_Et = spike_Et[iS] ; spike_out_phi = spike_phi[iS] ; spike_out_eta = spike_eta[iS] ; spike_out_theta = spike_theta[iS] ; spike_out_TTiphi = spike_TTiphi[iS] ; spike_out_TTieta = spike_TTieta[iS] ; spike_out_TT_t = spike_TT_t[iS] ; spike_out_TT_tE = spike_TT_tE[iS] ; spike_out_TT_sFGVB = spike_TT_sFGVB[iS] ; spike_out_TT_adc = spike_TT_adc[iS] ; spike_out_Riphi = spike_Riphi[iS] ; spike_out_Rieta = spike_Rieta[iS] ; spike_out_maxEGtrig = spike_maxEGtrig[iS]; spike_out_maxEGtrig_To = spike_maxEGtrig_To[iS]; spike_out_maxEGtrig_M_To = spike_maxEGtrig_M_To[iS]; spike_out_RCTL1iso = spike_RCTL1iso[iS]; spike_out_RCTL1noniso = spike_RCTL1noniso[iS]; spike_out_RCTL1iso_To = spike_RCTL1iso_To[iS]; spike_out_RCTL1noniso_To = spike_RCTL1noniso_To[iS]; spike_out_RCTL1iso_M_To = spike_RCTL1iso_M_To[iS]; spike_out_RCTL1noniso_M_To = spike_RCTL1noniso_M_To[iS]; for(int i=0;i<5;i++) { spike_out_TT_sFGVB_E[i] = spike_TT_sFGVB_E[iS][i] ; spike_out_TT_adc_E[i] = spike_TT_adc_E[iS][i] ; } outtree->Fill(); } } // Record tree outlog << "recording tree..." << endl; outtree->Write(); outlog << "recorded !" << endl; outfile->Close(); outlog << "file closed." << endl; return 1; }
int main(int argc, char** argv) { //Check if all nedeed arguments to parse are there if(argc != 2) { std::cerr << ">>>>> WZAnalysis::usage: " << argv[0] << " configFileName" << std::endl ; return 1; } std::string fileName(argv[1]); boost::shared_ptr<edm::ParameterSet> parameterSet = edm::readConfig(fileName); // "Input" edm::ParameterSet Input = parameterSet -> getParameter<edm::ParameterSet>("Input"); std::string inputFileList = Input.getParameter<std::string>("inputFileList"); std::string jsonFileName = Input.getParameter<std::string>("jsonFileName"); // "Output" edm::ParameterSet Output = parameterSet -> getParameter<edm::ParameterSet>("Output"); std::string outputRootFilePath = Output.getParameter<std::string>("outputRootFilePath"); std::string outputRootFileName = Output.getParameter<std::string>("outputRootFileName"); std::string outputRootFullFileName = outputRootFilePath + "/" + outputRootFileName + ".root"; // "Options" edm::ParameterSet Options = parameterSet -> getParameter<edm::ParameterSet>("Options"); int entryMIN = Options.getParameter<int>("entryMIN"); int entryMAX = Options.getParameter<int>("entryMAX"); int entryMODULO = Options.getParameter<int>("entryMODULO"); int jsonFlag = Options.getParameter<int>("jsonFlag"); int verbosity = Options.getParameter<int>("verbosity"); // Get total number of events std::cout << ">>> WZAnalysis::Get number of events" << std::endl; std::map<int, int> beginEvents = GetTotalEvents("AllPassFilterBegin/passedEvents", inputFileList.c_str()); std::map<int, int> goodVertexEvents = GetTotalEvents("AllPassFilterGoodVertexFilter/passedEvents", inputFileList.c_str()); std::map<int, int> noScrapingEvents = GetTotalEvents("AllPassFilterNoScrapingFilter/passedEvents", inputFileList.c_str()); std::map<int, int> HBHENoiseEvents = GetTotalEvents("AllPassFilterHBHENoiseFilter/passedEvents", inputFileList.c_str()); std::map<int, int> electronEvents = GetTotalEvents("AllPassFilterElectronFilter/passedEvents", inputFileList.c_str()); // Get run/LS map from JSON file std::cout << ">>> WZPreselection::Get run/LS map from JSON file" << std::endl; std::map<int, std::vector<std::pair<int, int> > > jsonMap; jsonMap = readJSONFile(jsonFileName); // define HLT paths std::vector<std::pair<std::string,std::pair<int,int> > > WHLTPathNames; std::pair<int,int> WRunRanges1(160404,161176); std::pair<std::string,std::pair<int,int> > WHLTPathName1("HLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v1",WRunRanges1); std::pair<int,int> WRunRanges2(161216,163261); std::pair<std::string,std::pair<int,int> > WHLTPathName2("HLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v2",WRunRanges2); std::pair<int,int> WRunRanges3(163269,163869); std::pair<std::string,std::pair<int,int> > WHLTPathName3("HLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v3",WRunRanges3); std::pair<int,int> WRunRanges4(165088,165633); std::pair<std::string,std::pair<int,int> > WHLTPathName4("HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v3",WRunRanges4); std::pair<int,int> WRunRanges5(165970,166967); std::pair<std::string,std::pair<int,int> > WHLTPathName5("HLT_Ele25_WP80_PFMT40_v1",WRunRanges5); std::pair<int,int> WRunRanges6(167039,167913); std::pair<std::string,std::pair<int,int> > WHLTPathName6("HLT_Ele27_WP80_PFMT50_v1",WRunRanges6); std::pair<int,int> WRunRanges7(170249,173198); std::pair<std::string,std::pair<int,int> > WHLTPathName7("HLT_Ele32_WP70_PFMT50_v3",WRunRanges7); std::pair<int,int> WRunRanges8(173236,999999); std::pair<std::string,std::pair<int,int> > WHLTPathName8("HLT_Ele32_WP70_PFMT50_v4",WRunRanges8); WHLTPathNames.push_back(WHLTPathName1); WHLTPathNames.push_back(WHLTPathName2); WHLTPathNames.push_back(WHLTPathName3); WHLTPathNames.push_back(WHLTPathName4); WHLTPathNames.push_back(WHLTPathName5); WHLTPathNames.push_back(WHLTPathName6); WHLTPathNames.push_back(WHLTPathName7); WHLTPathNames.push_back(WHLTPathName8); std::vector<std::pair<std::string,std::pair<int,int> > > ZHLTPathNames; std::pair<int,int> ZRunRanges1(160404,161176); std::pair<std::string,std::pair<int,int> > ZHLTPathName1("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v1",ZRunRanges1); std::pair<int,int> ZRunRanges2(161216,163261); std::pair<std::string,std::pair<int,int> > ZHLTPathName2("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v2",ZRunRanges2); std::pair<int,int> ZRunRanges3(163269,163869); std::pair<std::string,std::pair<int,int> > ZHLTPathName3("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v3",ZRunRanges3); std::pair<int,int> ZRunRanges4(165088,165633); std::pair<std::string,std::pair<int,int> > ZHLTPathName4("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v4",ZRunRanges4); std::pair<int,int> ZRunRanges5(165970,166967); std::pair<std::string,std::pair<int,int> > ZHLTPathName5("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v5",ZRunRanges5); std::pair<int,int> ZRunRanges6(167039,167913); std::pair<std::string,std::pair<int,int> > ZHLTPathName6("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v6",ZRunRanges6); std::pair<int,int> ZRunRanges7(170249,170759); std::pair<std::string,std::pair<int,int> > ZHLTPathName7("HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v6",ZRunRanges7); std::pair<int,int> ZRunRanges8(170826,173198); std::pair<std::string,std::pair<int,int> > ZHLTPathName8("HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v7",ZRunRanges8); std::pair<int,int> ZRunRanges9(173236,999999); std::pair<std::string,std::pair<int,int> > ZHLTPathName9("HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v8",ZRunRanges9); ZHLTPathNames.push_back(ZHLTPathName1); ZHLTPathNames.push_back(ZHLTPathName2); ZHLTPathNames.push_back(ZHLTPathName3); ZHLTPathNames.push_back(ZHLTPathName4); ZHLTPathNames.push_back(ZHLTPathName5); ZHLTPathNames.push_back(ZHLTPathName6); ZHLTPathNames.push_back(ZHLTPathName7); ZHLTPathNames.push_back(ZHLTPathName8); ZHLTPathNames.push_back(ZHLTPathName9); // Open tree std::cout << ">>> WZAnalysis::Open old tree" << std::endl; std::string treeName = "simpleNtuple/SimpleNtuple"; TChain* chain = new TChain(treeName.c_str()); if(!FillChain(*chain, inputFileList.c_str())) return 1; treeReader reader((TTree*)(chain), false); // Open output root file outputRootFileName += ".root"; // define histograms std::cout << ">>> WZAnalysis::Define histograms" << std::endl; int nStep = 10; TH1F* events = new TH1F("events", "events", nStep, 0., 1.*nStep); std::map<int, int> stepEvents; std::map<int, std::string> stepNames; // define the reduced ntuple WZAnalysisVariablesSingleXtal vars; InitializeWZAnalysisTree(vars,outputRootFullFileName); //********************** // STEP 1 - Begin events int step = 1; SetStepNames(stepNames, "All events", step, verbosity); stepEvents[step] = beginEvents[1]; //**************************** // STEP 2 - Good Vertex events step = 2; SetStepNames(stepNames, "Good vertex", step, verbosity); stepEvents[step] = goodVertexEvents[1]; //********************* // STEP 3 - No Scraping step = 3; SetStepNames(stepNames, "No scraping", step, verbosity); stepEvents[step] = noScrapingEvents[1]; //********************* // STEP 4 - HBHE Noise step = 4; SetStepNames(stepNames, "HBHE Noise", step, verbosity); stepEvents[step] = HBHENoiseEvents[1]; //****************** // STEP 5 - Electron step = 5; SetStepNames(stepNames, "Electron", step, verbosity); stepEvents[step] = electronEvents[1]; //********************* // LOOP OVER THE EVENTS std::cout << ">>>>> WZAnalysis::Read " << chain -> GetEntries() << " entries" << std::endl; for(int entry = entryMIN ; entry < chain -> GetEntries() ; ++entry) { reader.GetEntry(entry); if((entry%entryMODULO) == 0) std::cout << ">>>>> WZAnalysis::GetEntry " << entry << std::endl; if(entry == entryMAX) break; // clear variables ClearWZAnalysisVariables(vars); // event variables vars.runId = reader.GetInt("runId")->at(0); vars.lumiId = reader.GetInt("lumiId")->at(0); //************************** // STEP 6 - run/LS selection step = 6; SetStepNames(stepNames, "run/LS", step, verbosity); bool skipEvent = false; if(AcceptEventByRunAndLumiSection(vars.runId,vars.lumiId,jsonMap) == false) skipEvent = true; if( (jsonFlag == 1) && (skipEvent == true) ) continue; stepEvents[step] += 1; //*********************** // STEP 7 - HLT selection step += 1; SetStepNames(stepNames, "HLT", step, verbosity); skipEvent = true; bool isWHLT = false; bool isZHLT = false; if( verbosity == 1 ) { std::vector<std::string> HLT_names = *(reader.GetString("HLT_Names")); for(unsigned int HLTIt = 0; HLTIt < HLT_names.size(); ++HLTIt) std::cout << "HLT bit " << HLTIt << ": " << HLT_names.at(HLTIt) << std::endl; } // W triggers for(unsigned int HLTIt = 0; HLTIt < WHLTPathNames.size(); ++HLTIt) { if( AcceptHLTPath(reader, WHLTPathNames.at(HLTIt)) == true ) skipEvent = false; isWHLT = true; } // Z triggers for(unsigned int HLTIt = 0; HLTIt < ZHLTPathNames.size(); ++HLTIt) { if( AcceptHLTPath(reader, ZHLTPathNames.at(HLTIt)) == true ) skipEvent = false; isZHLT = true; } if( skipEvent == true ) continue; stepEvents[step] += 1; //************************** // STEP 8 - cut on electrons step += 1; SetStepNames(stepNames, "1/2 ele", step, verbosity); int nTightEle = 0; int nMediumEle = 0; int nLooseEle = 0; std::map<float,int> eleIts; // loop on electrons for(unsigned int eleIt = 0; eleIt < (reader.Get4V("electrons")->size()); ++eleIt) { ROOT::Math::XYZTVector ele = reader.Get4V("electrons")->at(eleIt); float pt = ele.pt(); float eta = ele.eta(); float tkIso = reader.GetFloat("electrons_tkIso03")->at(eleIt); float emIso = reader.GetFloat("electrons_emIso03")->at(eleIt); float hadIso = reader.GetFloat("electrons_hadIso03_1")->at(eleIt) + reader.GetFloat("electrons_hadIso03_2")->at(eleIt); float combIso = tkIso + emIso + hadIso; int isEB = reader.GetInt("electrons_isEB")->at(eleIt); float sigmaIetaIeta = reader.GetFloat("electrons_sigmaIetaIeta")->at(eleIt); float DetaIn = reader.GetFloat("electrons_deltaEtaIn")->at(eleIt); float DphiIn = reader.GetFloat("electrons_deltaPhiIn")->at(eleIt); float HOverE = reader.GetFloat("electrons_hOverE")->at(eleIt); int mishits = reader.GetInt("electrons_mishits")->at(eleIt); int nAmbiguousGsfTracks = reader.GetInt("electrons_nAmbiguousGsfTracks")->at(eleIt); float dist = reader.GetFloat("electrons_dist")->at(eleIt); float dcot = reader.GetFloat("electrons_dcot")->at(eleIt); // tight electrons bool isTightElectron = false; if( (pt > 20.) && (fabs(eta) < 2.5) && // EleID WP80 - 2010 ( ( (isEB == 1) && (combIso/pt < 0.070) ) || ( (isEB == 0) && (combIso/pt < 0.060) ) ) && ( ( (isEB == 1) && (sigmaIetaIeta < 0.010) ) || ( (isEB == 0) && (sigmaIetaIeta < 0.030) ) ) && ( ( (isEB == 1) && (fabs(DphiIn) < 0.060) ) || ( (isEB == 0) && (fabs(DphiIn) < 0.030) ) ) && ( ( (isEB == 1) && (fabs(DetaIn) < 0.004) ) || ( (isEB == 0) && (fabs(DetaIn) < 0.007) ) ) && //( ( (isEB == 1) && (HOverE < 0.040) ) || ( (isEB == 0) && (HOverE < 0.025) ) ) && ( mishits == 0 ) && ( nAmbiguousGsfTracks == 0 ) && ( ( fabs(dist) > 0.02 ) || ( fabs(dcot) > 0.02 ) ) ) { isTightElectron = true; ++nTightEle; eleIts[1./pt] = eleIt; } // semi-tight electrons if( isTightElectron == true ) continue; // bool isMediumElectron = false; if( (pt > 12.) && (fabs(eta) < 2.5) && // EleID WP80 - 2010 ( ( (isEB == 1) && (combIso/pt < 0.070) ) || ( (isEB == 0) && (combIso/pt < 0.060) ) ) && ( ( (isEB == 1) && (sigmaIetaIeta < 0.010) ) || ( (isEB == 0) && (sigmaIetaIeta < 0.030) ) ) && ( ( (isEB == 1) && (fabs(DphiIn) < 0.060) ) || ( (isEB == 0) && (fabs(DphiIn) < 0.030) ) ) && ( ( (isEB == 1) && (fabs(DetaIn) < 0.004) ) || ( (isEB == 0) && (fabs(DetaIn) < 0.007) ) ) && //( ( (isEB == 1) && (HOverE < 0.040) ) || ( (isEB == 0) && (HOverE < 0.025) ) ) && ( mishits == 0 ) && ( nAmbiguousGsfTracks == 0 ) && ( ( fabs(dist) > 0.02 ) || ( fabs(dcot) > 0.02 ) ) ) { // isMediumElectron = true; ++nMediumEle; eleIts[1./pt] = eleIt; } // loose electrons if( isTightElectron == true ) continue; if( (pt > 10.) && (fabs(eta) < 2.5) && // EleID WP95 - 2010 ( ( (isEB == 1) && (combIso/pt < 0.150) ) || ( (isEB == 0) && (combIso/pt < 0.100) ) ) && ( ( (isEB == 1) && (sigmaIetaIeta < 0.010) ) || ( (isEB == 0) && (sigmaIetaIeta < 0.030) ) ) && ( ( (isEB == 1) && (fabs(DphiIn) < 0.800) ) || ( (isEB == 0) && (fabs(DphiIn) < 0.700) ) ) && ( ( (isEB == 1) && (fabs(DetaIn) < 0.007) ) || ( (isEB == 0) && (fabs(DetaIn) < 0.010) ) ) && ( ( (isEB == 1) && (HOverE < 0.150) ) || ( (isEB == 0) && (HOverE < 0.070) ) ) ) { ++nLooseEle; } } // loop on electrons int nLooseMu = 0; // loop on muons for(unsigned int muIt = 0; muIt < (reader.Get4V("muons")->size()); ++muIt) { ROOT::Math::XYZTVector mu = reader.Get4V("muons")->at(muIt); float pt = mu.pt(); float eta = mu.eta(); float tkIso = reader.GetFloat("muons_tkIso03")->at(muIt); float emIso = reader.GetFloat("muons_emIso03")->at(muIt); float hadIso = reader.GetFloat("muons_hadIso03")->at(muIt); float combIso = tkIso + emIso + hadIso; int global = reader.GetInt("muons_global")->at(muIt); if( (pt > 10.) && (fabs(eta) < 2.5) && (combIso/pt < 0.20) && (global == 1) ) { ++nLooseMu; } } // cuts if( verbosity == 1 ) std::cout << " nTightEle = " << nTightEle << " nMediumEle = " << nMediumEle << " nLooseEle = " << nLooseEle << " nLooseMu = " << nLooseMu << std::endl; if( nTightEle < 1 ) continue; if( nTightEle > 2 ) continue; if( nMediumEle > 1 ) continue; if( nLooseEle > 0 ) continue; if( nLooseMu > 0 ) continue; stepEvents[step] += 1; // set electron variables std::map<float,int>::const_iterator mapIt = eleIts.begin(); //PhotonFix::initialise("4_2"); if( (nTightEle == 1) && (nMediumEle == 0) ) { SetElectron1Variables(vars,reader,mapIt->second); //PhotonFix Correction1 (vars.ele1_scE,vars.ele1_scEta,vars.ele1_scPhi,vars.ele1_e3x3/vars.ele1_scE); //vars.ele1_scLocalContCorr_DK = Correction1.fixedEnergy()/vars.ele1_scE; } mapIt = eleIts.begin(); if( (nTightEle == 2) || (nTightEle == 1 && nMediumEle == 1) ) { SetElectron1Variables(vars,reader,mapIt->second); //PhotonFix Correction1 (vars.ele1_scE,vars.ele1_scEta,vars.ele1_scPhi,vars.ele1_e3x3/vars.ele1_scE); //vars.ele1_scLocalContCorr_DK = Correction1.fixedEnergy()/vars.ele1_scE; ++mapIt; SetElectron2Variables(vars,reader,mapIt->second); //PhotonFix Correction2 (vars.ele2_scE,vars.ele2_scEta,vars.ele2_scPhi,vars.ele2_e3x3/vars.ele2_scE); //vars.ele2_scLocalContCorr_DK = Correction2.fixedEnergy()/vars.ele2_scE; } // set met variables SetMetVariables(vars,reader); // set di-electron variables if( (nTightEle == 2) || (nTightEle == 1 && nMediumEle == 1) ) { SetDiElectronVariables(vars,reader); } //*********************** // STEP 9 - W selection step += 1; SetStepNames(stepNames, "W selection", step, verbosity); if( (nTightEle == 1) && (nMediumEle == 0) ) { if( isWHLT == false ) continue; if( vars.ele1_pt < 30. ) continue; // EleID WP70 - 2010 if( ( vars.ele1_isEB == 1 ) && ( (vars.ele1_tkIso+vars.ele1_emIso+vars.ele1_hadIso)/vars.ele1_pt > 0.04 ) ) continue; if( ( vars.ele1_isEB == 1 ) && ( fabs(vars.ele1_DphiIn) > 0.030 ) ) continue; if( ( vars.ele1_isEB == 1 ) && ( fabs(vars.ele1_DetaIn) > 0.004 ) ) continue; if( ( vars.ele1_isEB == 1 ) && ( vars.ele1_HOverE > 0.025 ) ) continue; if( ( vars.ele1_isEB == 0 ) && ( (vars.ele1_tkIso+vars.ele1_emIso+vars.ele1_hadIso)/vars.ele1_pt > 0.03 ) ) continue; if( ( vars.ele1_isEB == 0 ) && ( fabs(vars.ele1_DphiIn) > 0.020 ) ) continue; if( ( vars.ele1_isEB == 0 ) && ( fabs(vars.ele1_DetaIn) > 0.005 ) ) continue; if( ( vars.ele1_isEB == 0 ) && ( vars.ele1_HOverE > 0.025 ) ) continue; if( vars.met_et < 25.00 ) continue; if( vars.ele1Met_mt < 50.00 ) continue; if( vars.ele1Met_Dphi < 1.57 ) continue; stepEvents[step] += 1; vars.isW = 1; vars.isZ = 0; // fill the reduced tree FillWZAnalysisTree(vars); } //*********************** // STEP 10 - Z selection step += 1; SetStepNames(stepNames, "Z selection", step, verbosity); if( (nTightEle == 2) || (nTightEle == 1 && nMediumEle == 1) ) { if( isZHLT == false ) continue; if( vars.met_et > 40. ) continue; if( vars.ele1ele2_m < 70. ) continue; if( vars.ele1ele2_m > 110. ) continue; if( (vars.ele1_charge * vars.ele2_charge) != -1. ) continue; stepEvents[step] += 1; vars.isW = 0; vars.isZ = 1; // fill the reduced tree FillWZAnalysisTree(vars); } } // loop over the events // save the reduced tree DeleteWZAnalysisVariables(vars); // save the histograms TFile* outputRootFile = new TFile((outputRootFullFileName).c_str(), "UPDATE"); outputRootFile -> cd(); for(step = 1; step <= nStep; ++step) { events -> SetBinContent(step, stepEvents[step]); events -> GetXaxis() -> SetBinLabel(step, stepNames[step].c_str()); } events -> Write(); outputRootFile -> Close(); return 0; }
int main(int argc, char** argv) { //Check if all nedeed arguments to parse are there if(argc != 2) { std::cerr << ">>>>> analysis.cpp::usage: " << argv[0] << " configFileName" << std::endl ; return 1; } // Parse the config file parseConfigFile (argv[1]) ; std::string treeName = gConfigParser -> readStringOption("Input::treeName"); std::string inputFile = gConfigParser -> readStringOption("Input::inputFile"); double inputXSection = gConfigParser -> readDoubleOption("Input::inputXSection"); int entryMAX = gConfigParser -> readIntOption("Input::entryMAX"); int entryMIN = gConfigParser -> readIntOption("Input::entryMIN"); int entryMOD = gConfigParser -> readIntOption("Input::entryMOD"); std::cout << ">>>>> input::entryMIN " << entryMIN << std::endl; std::cout << ">>>>> input::entryMAX " << entryMAX << std::endl; std::cout << ">>>>> input::entryMOD " << entryMOD << std::endl; int dataFlag = 0; if (inputXSection == -1) dataFlag = 1; //==== it's a data sample!!! std::cerr << ">>>>> input:: --- dataFlag " << dataFlag << std::endl; // define map with events std::map<std::pair<int,std::pair<int,int> >,int> eventsMap; int nStepToDo = 1000; try { nStepToDo = gConfigParser -> readIntOption("Input::nStepToDo"); } catch (char const* exceptionString){ std::cerr << " exception = " << exceptionString << std::endl; nStepToDo = 1000; } std::cout << ">>>>> input::nStepToDo " << nStepToDo << std::endl; // Open ntple TChain* chain = new TChain(treeName.c_str()); chain->Add(inputFile.c_str()); treeReader reader((TTree*)(chain)); bool debug = false; try { debug = gConfigParser -> readBoolOption("Input::debug"); } catch (char const* exceptionString){ std::cerr << " exception = " << exceptionString << std::endl; } std::cout << ">>>>> input::debug " << debug << std::endl; ///****************** ///**** Triggers **** std::vector<std::string> HLTVector; try { HLTVector = gConfigParser -> readStringListOption("Options::HLTVector"); } catch (char const* exceptionString){ std::cerr << " exception = " << exceptionString << std::endl; } std::cout << ">>>>> Options::HLTVector size = " << HLTVector.size() << std::endl; std::cout << ">>>>> >>>>> "; for (int iHLT = 0; iHLT < HLTVector.size(); iHLT++){ std::cout << " " << HLTVector.at(iHLT) << ", "; } std::cout << std::endl; ///**************************** ///**** DATA JSON file **** std::string inFileNameJSON; try { inFileNameJSON = gConfigParser -> readStringOption("Input::inFileNameJSON"); } catch (char const* exceptionString){ std::cerr << " exception = " << exceptionString << std::endl; } std::cout << ">>>>> Input::inFileNameJSON " << inFileNameJSON << std::endl; std::map<int, std::vector<std::pair<int, int> > > jsonMap; if( dataFlag == 1 ) { jsonMap = readJSONFile(inFileNameJSON); } ///---- Efficiency preselections ---- std::string histoNameEvents = gConfigParser -> readStringOption("Input::histoNameEvents"); std::cout << ">>>>> Input::inputFile " << inputFile << std::endl; std::cout << ">>>>> Input::inputXSection " << inputXSection << std::endl; std::cout << ">>>>> Input::histoNameEvents " << histoNameEvents << std::endl; // Open ntples TFile File(inputFile.c_str()) ; TH1F* histoEvents = (TH1F*) File.Get(TString(histoNameEvents.c_str())); ///---------------------- ///---- Preselection ---- ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ///==== only retrocompatibility ==== ///================================= double lepton_efficiency = 1; double jet_efficiency = 1; double eff_Channel_Filter = 1; double preselection_efficiency = 1.; ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ///------------------- ///---- selection ---- std::string outFileName = gConfigParser -> readStringOption("Output::outFileName"); std::cout << ">>>>> Output::outFileName " << outFileName << std::endl; int nStep = 10; ///==== number of steps in the analysis int numEntriesBefore; // define variable container Variables vars; InitializeTree(vars, outFileName); InitializeTreeTrigger(vars, HLTVector, reader); vars.XSection = inputXSection; vars.dataFlag = dataFlag; ///~~~~ 0 = MC 1 = DATA if (entryMAX == -1) entryMAX = reader.GetEntries(); else if (reader.GetEntries() < entryMAX) entryMAX = reader.GetEntries(); numEntriesBefore = entryMAX - entryMIN; if (histoEvents) preselection_efficiency = numEntriesBefore / (1. * histoEvents->GetBinContent(1)); else preselection_efficiency = 1; vars.numEntriesBefore = numEntriesBefore; vars.preselection_efficiency = preselection_efficiency; FillEfficiencyTree(vars); ///************************************* ///**** definition of electron ID **** ///**** https://twiki.cern.ch/twiki/bin/viewauth/CMS/SimpleCutBasedEleID ///**** https://twiki.cern.ch/twiki/bin/viewauth/CMS/SimpleCutBasedEleID2011 std::vector<double> BarrelSelections; std::vector<double> EndcapSelections; double eleCombinedIsoBarrel = gConfigParser -> readDoubleOption("Selection::eleCombinedIsoBarrel"); double elesigmaIetaIetaBarrel = gConfigParser -> readDoubleOption("Selection::elesigmaIetaIetaBarrel"); double eledPhiBarrel = gConfigParser -> readDoubleOption("Selection::eledPhiBarrel"); double eledEtaBarrel = gConfigParser -> readDoubleOption("Selection::eledEtaBarrel"); double eleCombinedIsoEndcap = gConfigParser -> readDoubleOption("Selection::eleCombinedIsoEndcap"); double elesigmaIetaIetaEndcap = gConfigParser -> readDoubleOption("Selection::elesigmaIetaIetaEndcap"); double eledPhiEndcap = gConfigParser -> readDoubleOption("Selection::eledPhiEndcap"); double eledEtaEndcap = gConfigParser -> readDoubleOption("Selection::eledEtaEndcap"); double elemishits = gConfigParser -> readDoubleOption("Selection::elemishits"); double eledist = gConfigParser -> readDoubleOption("Selection::eledist"); double eledcot = gConfigParser -> readDoubleOption("Selection::eledcot"); double eledzPV = gConfigParser -> readDoubleOption("Selection::eledzPV"); double eledxyPV = gConfigParser -> readDoubleOption("Selection::eledxyPV"); BarrelSelections.push_back(eleCombinedIsoBarrel); BarrelSelections.push_back(elesigmaIetaIetaBarrel); BarrelSelections.push_back(eledPhiBarrel); BarrelSelections.push_back(eledEtaBarrel); BarrelSelections.push_back(elemishits); BarrelSelections.push_back(eledist); BarrelSelections.push_back(eledcot); BarrelSelections.push_back(eledzPV); BarrelSelections.push_back(eledxyPV); EndcapSelections.push_back(eleCombinedIsoEndcap); EndcapSelections.push_back(elesigmaIetaIetaEndcap); EndcapSelections.push_back(eledPhiEndcap); EndcapSelections.push_back(eledEtaEndcap); EndcapSelections.push_back(elemishits); EndcapSelections.push_back(eledist); EndcapSelections.push_back(eledcot); EndcapSelections.push_back(eledzPV); EndcapSelections.push_back(eledxyPV); ///**** https://twiki.cern.ch/twiki/bin/viewauth/CMS/SimpleCutBasedEleID --> 2010 Data ///**** 95% **** /* BarrelSelections.push_back(0.15); ///==== iso Tk BarrelSelections.push_back(2.00); ///==== iso em BarrelSelections.push_back(0.12); ///==== iso had BarrelSelections.push_back(0.15); ///==== iso combined BarrelSelections.push_back(0.015); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.8); ///==== dPhi BarrelSelections.push_back(0.007); ///==== dEta EndCapSelections.push_back(0.08); ///==== iso Tk EndCapSelections.push_back(0.06); ///==== iso em EndCapSelections.push_back(0.05); ///==== iso had EndCapSelections.push_back(0.10); ///==== iso combined EndCapSelections.push_back(0.07); ///==== hOe EndCapSelections.push_back(0.03); ///==== sigmaIetaIeta EndCapSelections.push_back(0.7); ///==== dPhi EndCapSelections.push_back(0.01); ///==== dEta */ ///**** 90% **** /* BarrelSelections.push_back(0.12); ///==== iso Tk BarrelSelections.push_back(0.09); ///==== iso em BarrelSelections.push_back(0.10); ///==== iso had BarrelSelections.push_back(0.10); ///==== iso combined BarrelSelections.push_back(0.12); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.8); ///==== dPhi BarrelSelections.push_back(0.007); ///==== dEta EndCapSelections.push_back(0.05); ///==== iso Tk EndCapSelections.push_back(0.06); ///==== iso em EndCapSelections.push_back(0.03); ///==== iso had EndCapSelections.push_back(0.07); ///==== iso combined EndCapSelections.push_back(0.05); ///==== hOe EndCapSelections.push_back(0.03); ///==== sigmaIetaIeta EndCapSelections.push_back(0.7); ///==== dPhi EndCapSelections.push_back(0.007); ///==== dEta */ ///**** 80% **** /* BarrelSelections.push_back(0.09); ///==== iso Tk BarrelSelections.push_back(0.07); ///==== iso em BarrelSelections.push_back(0.10); ///==== iso had BarrelSelections.push_back(0.07); ///==== iso combined BarrelSelections.push_back(0.040); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.06); ///==== dPhi BarrelSelections.push_back(0.004); ///==== dEta EndCapSelections.push_back(0.04); ///==== iso Tk EndCapSelections.push_back(0.05); ///==== iso em EndCapSelections.push_back(0.025); ///==== iso had EndCapSelections.push_back(0.06); ///==== iso combined EndCapSelections.push_back(0.025); ///==== hOe EndCapSelections.push_back(0.03); ///==== sigmaIetaIeta EndCapSelections.push_back(0.03); ///==== dPhi EndCapSelections.push_back(0.007); ///==== dEta */ ///**** 70% **** /* BarrelSelections.push_back(0.05); ///==== iso Tk BarrelSelections.push_back(0.06); ///==== iso em BarrelSelections.push_back(0.03); ///==== iso had BarrelSelections.push_back(0.04); ///==== iso combined BarrelSelections.push_back(0.025); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.004); ///==== dPhi BarrelSelections.push_back(0.004); ///==== dEta EndCapSelections.push_back(0.025); ///==== iso Tk EndCapSelections.push_back(0.025); ///==== iso em EndCapSelections.push_back(0.02); ///==== iso had EndCapSelections.push_back(0.03); ///==== iso combined EndCapSelections.push_back(0.025); ///==== hOe EndCapSelections.push_back(0.03); ///==== sigmaIetaIeta EndCapSelections.push_back(0.02); ///==== dPhi EndCapSelections.push_back(0.005); ///==== dEta */ ///**** https://twiki.cern.ch/twiki/bin/viewauth/CMS/SimpleCutBasedEleID2011 --> 2011 Data ///**** 95% **** /* BarrelSelections.push_back(10000.); ///==== iso Tk BarrelSelections.push_back(10000.); ///==== iso em BarrelSelections.push_back(10000.); ///==== iso had BarrelSelections.push_back(0.150); ///==== iso combined BarrelSelections.push_back(10000.); ///==== hOe BarrelSelections.push_back(0.012); ///==== sigmaIetaIeta BarrelSelections.push_back(0.800); ///==== dPhi BarrelSelections.push_back(0.007); ///==== dEta EndCapSelections.push_back(10000.); ///==== iso Tk EndCapSelections.push_back(10000.); ///==== iso em EndCapSelections.push_back(10000.); ///==== iso had EndCapSelections.push_back(0.100); ///==== iso combined EndCapSelections.push_back(10000.); ///==== hOe EndCapSelections.push_back(0.031); ///==== sigmaIetaIeta EndCapSelections.push_back(0.7); ///==== dPhi EndCapSelections.push_back(0.011); ///==== dEta */ ///**** 90% **** /* BarrelSelections.push_back(10000.); ///==== iso Tk BarrelSelections.push_back(10000.); ///==== iso em BarrelSelections.push_back(10000.); ///==== iso had BarrelSelections.push_back(0.085); ///==== iso combined BarrelSelections.push_back(10000.); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.071); ///==== dPhi BarrelSelections.push_back(0.007); ///==== dEta EndCapSelections.push_back(10000.); ///==== iso Tk EndCapSelections.push_back(10000.); ///==== iso em EndCapSelections.push_back(10000.); ///==== iso had EndCapSelections.push_back(0.051); ///==== iso combined EndCapSelections.push_back(10000.); ///==== hOe EndCapSelections.push_back(0.031); ///==== sigmaIetaIeta EndCapSelections.push_back(0.047); ///==== dPhi EndCapSelections.push_back(0.011); ///==== dEta */ ///**** 85% **** /* BarrelSelections.push_back(10000.); ///==== iso Tk BarrelSelections.push_back(10000.); ///==== iso em BarrelSelections.push_back(10000.); ///==== iso had BarrelSelections.push_back(0.053); ///==== iso combined BarrelSelections.push_back(10000.); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.039); ///==== dPhi BarrelSelections.push_back(0.005); ///==== dEta EndCapSelections.push_back(10000.); ///==== iso Tk EndCapSelections.push_back(10000.); ///==== iso em EndCapSelections.push_back(10000.); ///==== iso had EndCapSelections.push_back(0.042); ///==== iso combined EndCapSelections.push_back(10000.); ///==== hOe EndCapSelections.push_back(0.031); ///==== sigmaIetaIeta EndCapSelections.push_back(0.028); ///==== dPhi EndCapSelections.push_back(0.007); ///==== dEta */ ///**** 80% **** /* BarrelSelections.push_back(10000.); ///==== iso Tk BarrelSelections.push_back(10000.); ///==== iso em BarrelSelections.push_back(10000.); ///==== iso had BarrelSelections.push_back(0.040); ///==== iso combined BarrelSelections.push_back(10000.); ///==== hOe BarrelSelections.push_back(0.01); ///==== sigmaIetaIeta BarrelSelections.push_back(0.027); ///==== dPhi BarrelSelections.push_back(0.005); ///==== dEta EndCapSelections.push_back(10000.); ///==== iso Tk EndCapSelections.push_back(10000.); ///==== iso em EndCapSelections.push_back(10000.); ///==== iso had EndCapSelections.push_back(0.033); ///==== iso combined EndCapSelections.push_back(10000.); ///==== hOe EndCapSelections.push_back(0.031); ///==== sigmaIetaIeta EndCapSelections.push_back(0.021); ///==== dPhi EndCapSelections.push_back(0.006); ///==== dEta */ ///*********************************** ///**** definition of muon ID **** std::vector<double> Selections; double muCombinedIso = gConfigParser -> readDoubleOption("Selection::muCombinedIso"); double muChi2Ndof = gConfigParser -> readDoubleOption("Selection::muChi2Ndof"); double muValidTrackerHits = gConfigParser -> readDoubleOption("Selection::muValidTrackerHits"); double muValidMuonHits = gConfigParser -> readDoubleOption("Selection::muValidMuonHits"); double mutracker = gConfigParser -> readDoubleOption("Selection::mutracker"); double mustandalone = gConfigParser -> readDoubleOption("Selection::mustandalone"); double muglobal = gConfigParser -> readDoubleOption("Selection::muglobal"); double mudzPV = gConfigParser -> readDoubleOption("Selection::mudzPV"); double mudxyPV = gConfigParser -> readDoubleOption("Selection::mudxyPV"); Selections.push_back(muCombinedIso); Selections.push_back(muChi2Ndof); Selections.push_back(muValidTrackerHits); Selections.push_back(muValidMuonHits); Selections.push_back(mutracker); Selections.push_back(mustandalone); Selections.push_back(muglobal); Selections.push_back(mudzPV); Selections.push_back(mudxyPV); /* Selections.push_back(0.15); ///==== iso Combined Selections.push_back(10); ///==== Chi2/ndof Selections.push_back(10); ///==== n ValidTrackerHits Selections.push_back(0); ///==== n ValidMuonHits Selections.push_back(1); ///==== tracker Selections.push_back(1); ///==== standalone Selections.push_back(1); ///==== global //Selections.push_back(1); ///==== goodMuon */ double start, end; std::cout << ">>>>> analysis::entryMIN " << entryMIN << " ==> entryMAX " << entryMAX << ":" << reader.GetEntries() << std::endl; int step = 0; start = clock(); for(int iEvent = entryMIN ; iEvent < entryMAX ; ++iEvent) { reader.GetEntry(iEvent); if((iEvent%entryMOD) == 0) std::cout << ">>>>> analysis::GetEntry " << iEvent << " : " << entryMAX - entryMIN << std::endl; ///==== define variables ==== std::vector<ROOT::Math::XYZTVector>* jets = reader.Get4V("jets"); // std::vector<ROOT::Math::XYZTVector>* muons = reader.Get4V("muons"); // std::vector<ROOT::Math::XYZTVector>* electrons = reader.Get4V("electrons"); ///********************************************************************************************* ///********************************************************************************************* ///============================= ///==== fill MC information ==== SetMCVariables(vars, reader); ///============================= ///==== fill Primary Vertex ==== SetPVVariables(vars, reader); ///================================ ///==== fill Event information ==== SetEventVariables(vars, reader); ///*************************************************** ///**** STEP -1 - Check no copies in DATA **** ///*************************************************** if (debug) std::cout << " STEP -1 " << std::endl; if( dataFlag == 1 ) { std::pair<int,int> eventLSandID(reader.GetInt("lumiId")->at(0), reader.GetInt("eventId")->at(0)); std::pair<int,std::pair<int,int> > eventRUNandLSandID(reader.GetInt("runId")->at(0), eventLSandID); if( eventsMap[eventRUNandLSandID] == 1 ) continue; else eventsMap[eventRUNandLSandID] = 1; } ///************************************************* ///**** Check comparison with JSON file *** ///************************************************* if( dataFlag == 1 ) { int runId = reader.GetInt("runId")->at(0); int lumiId = reader.GetInt("lumiId")->at(0); if(AcceptEventByRunAndLumiSection(runId, lumiId, jsonMap) == false) continue; } ///**************************** ///**** STEP 0 - Ntuplizer **** ///************* no additional selections applied step = 0; if (step > nStepToDo) { FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 0 <<<" << std::endl; ///********************************************* ///**** STEP 1 - Jet cleaning + min pT **** ///************* it's performed another time here to make sure that the cleaning worked well ///************* Jet - electrons (pT > 5) ///************* Jet - muons (pT > 5) ///************ In addition only jets with pT > 15 are considered from now on! ///************ No selections are applied here step = 1; if (step > nStepToDo) { // FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 1 <<<" << std::endl; std::vector<ROOT::Math::XYZTVector> leptons_jetCleaning; // build the collection of electros for jet cleaning ///==== CLEANING WITH ELECTRONS ==== for(unsigned int iEle = 0; iEle < (reader.Get4V("electrons")->size()); ++iEle) { if( reader.Get4V("electrons")->at(iEle).pt() < 5. ) continue; // bool flag = IsEleIsolatedID_VBF(reader,BarrelSelections,EndcapSelections,iEle); bool flag = IsEleIsolatedIDPUCorrected_VBF(reader,BarrelSelections,EndcapSelections,iEle); if (!flag) continue; leptons_jetCleaning.push_back( reader.Get4V("electrons")->at(iEle) ); } ///==== CLEANING WITH MUONS ==== for (int iMu = 0; iMu < reader.Get4V("muons")->size(); iMu++){ if (reader.Get4V("muons")->at(iMu).pt() < 5.0) continue; if (fabs(reader.Get4V("muons")->at(iMu).Eta()) > 2.5) continue; // bool flag = IsMuIsolatedID_VBF(reader,Selections,iMu); bool flag = IsMuIsolatedIDPUCorrected_VBF(reader,Selections,iMu); if (!flag) continue; leptons_jetCleaning.push_back( reader.Get4V("muons")->at(iMu) ); } ///==== now clean jet collection ==== int nJets = reader.Get4V("jets")->size(); std::vector<int> whitelistJet; ///~~~~ all jets, 0 if rejected, 1 if accepted std::vector<int> blacklistJet; ///~~~~ list of numbers of jets that are "rejected" std::vector<int> blacklistJet_forCJV; std::vector<int> blacklistJet_forBtag; for (int iJet = 0; iJet < nJets; iJet++){ bool skipJet = false; if (reader.Get4V("jets")->at(iJet).Et() < 15.0) skipJet = true; for(unsigned int iLep = 0; iLep < leptons_jetCleaning.size(); ++iLep) { ROOT::Math::XYZTVector lep = leptons_jetCleaning.at(iLep); if (ROOT::Math::VectorUtil::DeltaR(reader.Get4V("jets")->at(iJet),lep) < 0.3 ) skipJet = true; } if (skipJet) { whitelistJet.push_back(0); ///---- reject blacklistJet.push_back(iJet); ///---- reject ///== black list is in a different format blacklistJet_forCJV.push_back(iJet); ///---- reject ///== black list is in a different format blacklistJet_forBtag.push_back(iJet); ///---- reject ///== black list is in a different format } else { whitelistJet.push_back(1); ///---- select } } ///************************************** ///**** STEP 2 - Super-Preselections **** ///************* tighter preselections to start the analysis from the same point ///==== construct considered objets /// Objects considered and selections /// Muon /// Pt>10GeV, eta<2.5 /// MuonId & Iso /// /// Electron /// Pt>10GeV & |eta|<2.5 /// eleId & Iso /// /// At least two leptons /// Jet /// Antikt5, L2L3 correction jets /// At least two calo jets or two pf jets with pt>15 GeV //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ step = 2; if (step > nStepToDo) { // FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 2 <<<" << std::endl; /// Electron /// Pt>10GeV & |eta|<2.5 /// IsoTr / pTele <0.5 /// eleId & Iso std::vector<int> whitelistEle; std::vector<int> blacklistEle; int nEles = reader.Get4V("electrons")->size(); for (int iEle = 0; iEle < nEles; iEle++){ bool skipEle = false; if (reader.Get4V("electrons")->at(iEle).pt() < 10.0) skipEle = true; if (fabs(reader.Get4V("electrons")->at(iEle).Eta()) > 2.5) skipEle = true; // bool flag = IsEleIsolatedID_VBF(reader,BarrelSelections,EndcapSelections,iEle); bool flag = IsEleIsolatedIDPUCorrected_VBF(reader,BarrelSelections,EndcapSelections,iEle); if (!flag) skipEle = true; if (skipEle) { whitelistEle.push_back(0); ///---- reject blacklistEle.push_back(iEle); ///---- reject ///== black list is in a different format } else { whitelistEle.push_back(1); ///---- select } } /// Muon /// Pt>10GeV, eta<2.5 /// MuonId & Iso std::vector<int> whitelistMu; std::vector<int> blacklistMu; int nMus = reader.Get4V("muons")->size(); for (int iMu = 0; iMu < nMus; iMu++){ bool skipMu = false; if (reader.Get4V("muons")->at(iMu).pt() < 10.0) skipMu = true; if (fabs(reader.Get4V("muons")->at(iMu).Eta()) > 2.5) skipMu = true; // bool flag = IsMuIsolatedID_VBF(reader,Selections,iMu); bool flag = IsMuIsolatedIDPUCorrected_VBF(reader,Selections,iMu); if (!flag) skipMu = true; if (skipMu) { whitelistMu.push_back(0); ///---- reject blacklistMu.push_back(iMu); ///---- reject ///== black list is in a different format } else { whitelistMu.push_back(1); ///---- select } } /// At least 2 leptons int numMus_Accepted = GetNumList(whitelistMu); int numEles_Accepted = GetNumList(whitelistEle); int numLeptons_Accepted = numMus_Accepted + numEles_Accepted; if (numLeptons_Accepted < 2) continue; /// Jet /// At least two calo jets or two pf jets with pt>20 GeV int numJets_Accepted = GetNumList(whitelistJet); if (numJets_Accepted < 2) continue; ///==== at least 2 jets "isolated" ///************************* ///**** STEP 3 - Jet ID **** ///************* Identification of two tag jets step = 3; if (step > nStepToDo) { // FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 3 <<<" << std::endl; std::vector<int> itSelJet; double maxPt_jets_selected = SelectJets(itSelJet,*jets,"maxSumPt",-1.,&blacklistJet); int q1 = itSelJet.at(0); int q2 = itSelJet.at(1); ///---- check Pt order ---- if (jets->at(q1).Pt() < jets->at(q2).Pt()) { int tempq = q1; q1 = q2; q2 = tempq; } if (debug) std::cerr << " q1 = " << q1 << " : q2 = " << q2 << std::endl; ///---- update white/black list jets ---- for (int iJet = 0; iJet < nJets; iJet++){ if (q1 == iJet || q2 == iJet) { whitelistJet.at(iJet) = 1; blacklistJet.push_back(iJet); ///===> blacklistJet used for CJV => no 2 tag jets to be considered! blacklistJet_forCJV.push_back(iJet); ///===> blacklistJet used for CJV => no 2 tag jets to be considered! } else { whitelistJet.at(iJet) = 0; } } SetQJetVariables(vars, reader, q1, q2, blacklistJet_forCJV, blacklistJet_forBtag, blacklistJet_forBtag); ///******************************** ///**** STEP 4 - Lepton ID **** ///************* Identification of the two leptons step = 4; if (step > nStepToDo) { FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 4 <<<" << std::endl; std::vector<ROOT::Math::XYZTVector> leptons; std::vector<int> leptonFlavours; std::vector<int> leptonILep; for(unsigned int iEle = 0; iEle < nEles; iEle++){ if (whitelistEle.at(iEle) == 1){ leptons.push_back( reader.Get4V("electrons")->at(iEle) ); leptonFlavours.push_back(11); leptonILep.push_back(iEle); } } for(unsigned int iMu = 0; iMu < nMus; iMu++){ if (whitelistMu.at(iMu) == 1){ leptons.push_back( reader.Get4V("muons")->at(iMu) ); leptonFlavours.push_back(13); leptonILep.push_back(iMu); } } std::vector<int> itSelLep; double maxPt_lept_selected = SelectJets(itSelLep,leptons,"maxSumPt",-1.,0); int l1 = itSelLep.at(0); int l2 = itSelLep.at(1); ///---- check Pt order ---- if (leptons.at(l1).Pt() < leptons.at(l2).Pt()) { int templ = l1; l1 = l2; l2 = templ; } if (debug) std::cerr << " l1 = " << l1 << " : l2 = " << l2 << std::endl; SetLeptonsVariables(vars, reader, leptonILep.at(l1), leptonILep.at(l2),leptonFlavours.at(l1), leptonFlavours.at(l2)); if (debug) std::cerr << ">> Lepton variables set" << std::endl; SetMetVariables(vars, reader, "PFMet", leptonILep.at(l1), leptonILep.at(l2),leptonFlavours.at(l1), leptonFlavours.at(l2)); if (debug) std::cerr << ">> MET variables set" << std::endl; //---- lepton veto std::vector<int> blacklistLepton; blacklistLepton.push_back(l1); blacklistLepton.push_back(l2); vars.Nleptons_pT5 = getNumberPTThreshold(leptons, 5, &blacklistLepton); vars.Nleptons_pT10 = getNumberPTThreshold(leptons, 10, &blacklistLepton); vars.Nleptons_pT15 = getNumberPTThreshold(leptons, 15, &blacklistLepton); vars.Nleptons_pT20 = getNumberPTThreshold(leptons, 20, &blacklistLepton); vars.Nleptons_pT25 = getNumberPTThreshold(leptons, 25, &blacklistLepton); vars.Nleptons_pT30 = getNumberPTThreshold(leptons, 30, &blacklistLepton); if (debug) std::cerr << ">> Lepton multiplicity set" << std::endl; ///********************************* ///**** STEP 5 - Jet Selections **** ///************* Loose selections of tag jets step = 5; if (step > nStepToDo) { FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 5 <<<" << std::endl; ///---- hardcoded fixed preselections ---- VBF (begin) ---- if (vars.q1_pT < 20.) continue; if (vars.q2_pT < 15.) continue; if (vars.M_qq < 0.) continue; if (vars.DEta_qq < 0.) continue; ///---- hardcoded fixed preselections ---- VBF (end) ---- ///==== save trigger variables ==== SetTriggerVariables(vars, reader); ///************************************ ///**** STEP 6 - Final Production ***** ///************************************ ///**** No more selections applied **** step = 6; if (step > nStepToDo) { FillTree(vars); continue; } if (debug) std::cout << ">>> STEP 6 <<<" << std::endl; ///==== if not already filled ... ==== FillTree(vars); ///================================================= } end = clock(); std::cout <<"Time = " << ((double) (end - start)) << " (a.u.)" << std::endl; SaveTree(vars); std::cerr << " === end === " << std::endl; }
int main(int argc, char** argv) { //Check if all nedeed arguments to parse are there if(argc != 2) { std::cerr << ">>>>> SimpleNtplePreselection::usage: " << argv[0] << " configFileName" << std::endl ; return 1; } // Parse the config file parseConfigFile (argv[1]) ; std::string inputFileList = gConfigParser -> readStringOption("Input::inputFileList"); std::string jsonFileName = gConfigParser -> readStringOption("Input::jsonFileName"); std::string outputRootFilePath = gConfigParser -> readStringOption("Output::outputRootFilePath"); std::string outputRootFileName = gConfigParser -> readStringOption("Output::outputRootFileName"); int entryMAX = gConfigParser -> readIntOption("Options::entryMAX"); int entryMODULO = gConfigParser -> readIntOption("Options::entryMODULO"); int dataFlag = gConfigParser -> readIntOption("Options::dataFlag"); int nEleMIN = gConfigParser -> readIntOption ("Cuts::nEleMIN"); float scEtMIN = gConfigParser -> readFloatOption("Cuts::scEtMIN"); float eleCombIsoOverPtEBMAX = gConfigParser -> readFloatOption("Cuts::eleCombIsoOverPtEBMAX"); float eleTkIsoOverPtEBMAX = gConfigParser -> readFloatOption("Cuts::eleTkIsoOverPtEBMAX"); float eleEmIsoOverPtEBMAX = gConfigParser -> readFloatOption("Cuts::eleEmIsoOverPtEBMAX"); float eleHadIsoOverPtEBMAX = gConfigParser -> readFloatOption("Cuts::eleHadIsoOverPtEBMAX"); float eleSigmaIetaIetaEBMAX = gConfigParser -> readFloatOption("Cuts::eleSigmaIetaIetaEBMAX"); float eleDphiInEBMAX = gConfigParser -> readFloatOption("Cuts::eleDphiInEBMAX"); float eleDetaInEBMAX = gConfigParser -> readFloatOption("Cuts::eleDetaInEBMAX"); float eleHOverEEBMAX = gConfigParser -> readFloatOption("Cuts::eleHOverEEBMAX"); float eleCombIsoOverPtEEMAX = gConfigParser -> readFloatOption("Cuts::eleCombIsoOverPtEEMAX"); float eleTkIsoOverPtEEMAX = gConfigParser -> readFloatOption("Cuts::eleTkIsoOverPtEEMAX"); float eleEmIsoOverPtEEMAX = gConfigParser -> readFloatOption("Cuts::eleEmIsoOverPtEEMAX"); float eleHadIsoOverPtEEMAX = gConfigParser -> readFloatOption("Cuts::eleHadIsoOverPtEEMAX"); float eleSigmaIetaIetaEEMAX = gConfigParser -> readFloatOption("Cuts::eleSigmaIetaIetaEEMAX"); float eleDphiInEEMAX = gConfigParser -> readFloatOption("Cuts::eleDphiInEEMAX"); float eleDetaInEEMAX = gConfigParser -> readFloatOption("Cuts::eleDetaInEEMAX"); float eleHOverEEEMAX = gConfigParser -> readFloatOption("Cuts::eleHOverEEEMAX"); float metEtMIN = gConfigParser -> readFloatOption("Cuts::metEtMIN"); // Get number of events std::cout << ">>> SimpleNtplePreselection::Get number of events" << std::endl; std::map<int,int> totalEvents = GetTotalEvents("AllPassFilterBegin/totalEvents", inputFileList.c_str()); std::string L1FilterName = "AllPassFilterL1Filter/totalEvents"; std::map<int,int> L1FilterEvents = GetTotalEvents(L1FilterName.c_str(), inputFileList.c_str()); std::string GoodVertexFilterName = "AllPassFilterGoodVertexFilter/totalEvents"; std::map<int,int> GoodVertexFilterEvents = GetTotalEvents(GoodVertexFilterName.c_str(), inputFileList.c_str()); std::string NoScrapingFilterName = "AllPassFilterNoScrapingFilter/totalEvents"; std::map<int,int> NoScrapingFilterEvents = GetTotalEvents(NoScrapingFilterName.c_str(), inputFileList.c_str()); std::string ElectronFilterName = "AllPassFilterElectronFilter/totalEvents"; std::map<int,int> ElectronFilterEvents = GetTotalEvents(ElectronFilterName.c_str(), inputFileList.c_str()); // Get run/LS map from JSON file std::cout << ">>> SimpleNtplePreselection::Get run/LS map from JSON file " << jsonFileName << std::endl; std::map<int, std::vector<std::pair<int, int> > > jsonMap; if(dataFlag == 1) jsonMap = readJSONFile(jsonFileName); // Open old tree std::cout << ">>> SimpleNtplePreselection::Open old tree" << std::endl; std::string treeName = "simpleNtple/SimpleNtple"; TChain* chain = new TChain(treeName.c_str()); if(!FillChain(*chain, inputFileList.c_str())) return 1; treeReader reader((TTree*)(chain), false); // Open output root file for clone tree TFile outputRootFile((outputRootFilePath+outputRootFileName).c_str(), "RECREATE"); outputRootFile.cd(); TTree* cloneTree = chain -> CloneTree(0); // define histograms std::cout << ">>> SimpleNtplePreselection::Define histograms" << std::endl; int nStep = 9; TH1F* events = new TH1F("events", "events", nStep, 0., 1.*nStep); std::map<int, int> stepEvents; std::map<int, std::string> stepName; int step = 1; stepEvents[step] = totalEvents[1]; stepName[step] = "total events"; step = 2; stepEvents[step] = L1FilterEvents[1]; stepName[step] = "L1Filter"; step = 3; stepEvents[step] = GoodVertexFilterEvents[1]; stepName[step] = "GoodVertexFilter"; step = 4; stepEvents[step] = NoScrapingFilterEvents[1]; stepName[step] = "NoScrapingFilter"; step = 5; stepEvents[step] = ElectronFilterEvents[1]; stepName[step] = "ElectronFilter"; // Loop over events std::cout << ">>>>> SimpleNtplePreselection::Read " << chain -> GetEntries() << " entries" << std::endl; for(int entry = 0 ; entry < chain -> GetEntries() ; ++entry) { reader.GetEntry(entry); if((entry%entryMODULO) == 0) std::cout << ">>>>> SimpleNtplePreselection::GetEntry " << entry << std::endl; if(entry == entryMAX) break; //*********************** // STEP 6 - HLT selection step = 6; //std::cout << ">>> step: " << step << std::endl; stepName[step] = "HLT"; bool skipEvent = true; std::vector<std::string> HLT_names = *(reader.GetString("HLT_Names")); for(unsigned int HLTIt = 0; HLTIt < HLT_names.size(); ++HLTIt) { if( (reader.GetString("HLT_Names")->at(HLTIt) == "HLT_Photon15_L1R") && (reader.GetFloat("HLT_Accept")->at(HLTIt) == 1) ) skipEvent = false; if( (reader.GetString("HLT_Names")->at(HLTIt) == "HLT_Ele15_LW_L1R") && (reader.GetFloat("HLT_Accept")->at(HLTIt) == 1) ) skipEvent = false; if( (reader.GetString("HLT_Names")->at(HLTIt) == "HLT_Ele15_SW_L1R") && (reader.GetFloat("HLT_Accept")->at(HLTIt) == 1) ) skipEvent = false; if( (reader.GetString("HLT_Names")->at(HLTIt) == "HLT_Ele15_SW_CaloEleId_L1R") && (reader.GetFloat("HLT_Accept")->at(HLTIt) == 1) ) skipEvent = false; } if( skipEvent == true ) continue; stepEvents[step] += 1; //************************** // STEP 7 - run/LS selection step = step+1; //std::cout << ">>> step: " << step << std::endl; stepName[step] = "run/LS"; skipEvent = false; if(dataFlag == 1) { int runId = reader.GetInt("runId")->at(0); int lumiId = reader.GetInt("lumiId")->at(0); if(AcceptEventByRunAndLumiSection(runId, lumiId, jsonMap) == false) skipEvent = true; } if( skipEvent == true ) continue; stepEvents[step] += 1; //************************* // STEP 8 - cut on electron step = step+1; //std::cout << ">>> step: " << step << std::endl; stepName[step] = "electron selection"; int nEle = 0; for(unsigned int eleIt = 0; eleIt < (reader.Get4V("electrons")->size()); ++eleIt) { // SC Et if( reader.GetFloat("electrons_scEt")->at(eleIt) < scEtMIN ) continue; // isolation + eleId float pt = reader.Get4V("electrons")->at(eleIt).pt(); float tkIso = reader.GetFloat("electrons_tkIso03")->at(eleIt); float emIso = reader.GetFloat("electrons_emIso03")->at(eleIt); float hadIso = reader.GetFloat("electrons_hadIso03_1")->at(eleIt) + reader.GetFloat("electrons_hadIso03_2")->at(eleIt); float sigmaIetaIeta = reader.GetFloat("electrons_sigmaIetaIeta")->at(eleIt); float dPhiIn = reader.GetFloat("electrons_deltaPhiIn")->at(eleIt); float dEtaIn = reader.GetFloat("electrons_deltaEtaIn")->at(eleIt); float hOverE = reader.GetFloat("electrons_hOverE")->at(eleIt); if( (reader.GetInt("electrons_isEB")->at(eleIt)) == 1 ) { if( ((tkIso + std::max(0., emIso-1.) + hadIso) / pt) > eleCombIsoOverPtEBMAX ) continue; if( (tkIso / pt) > eleTkIsoOverPtEBMAX ) continue; if( (emIso / pt) > eleEmIsoOverPtEBMAX ) continue; if( (hadIso / pt) > eleHadIsoOverPtEBMAX ) continue; if( sigmaIetaIeta > eleSigmaIetaIetaEBMAX ) continue; if( fabs(dPhiIn) > eleDphiInEBMAX ) continue; if( fabs(dEtaIn) > eleDetaInEBMAX ) continue; if( hOverE > eleHOverEEBMAX ) continue; } else { if( ((tkIso + emIso + hadIso) / pt) > eleCombIsoOverPtEEMAX ) continue; if( (tkIso / pt) > eleTkIsoOverPtEEMAX ) continue; if( (emIso / pt) > eleEmIsoOverPtEEMAX ) continue; if( (hadIso / pt) > eleHadIsoOverPtEEMAX ) continue; if( sigmaIetaIeta > eleSigmaIetaIetaEEMAX ) continue; if( fabs(dPhiIn) > eleDphiInEEMAX ) continue; if( fabs(dEtaIn) > eleDetaInEEMAX ) continue; if( hOverE > eleHOverEEEMAX ) continue; } // conversion rejection if( reader.GetInt("electrons_mishits")->at(eleIt) > 0 ) continue; if( reader.GetInt("electrons_nAmbiguousGsfTracks")->at(eleIt) > 0 ) continue; if( ( fabs(reader.GetFloat("electrons_dist")->at(eleIt)) < 0.02 ) && ( fabs(reader.GetFloat("electrons_dcot")->at(eleIt)) < 0.02 ) ) continue; // spike removal if( reader.GetInt("electrons_seedSeverityLevel")->at(eleIt) != 0 ) continue; if( reader.GetInt("electrons_seedFlag")->at(eleIt) != 0 ) continue; ++nEle; } if( nEle < nEleMIN ) continue; stepEvents[step] += 1; //******************** // STEP 9 - cut on met step = step+1; //std::cout << ">>> step: " << step << std::endl; stepName[step] = "met selection"; if( (reader.Get4V("PFMet")->at(0)).Et() < metEtMIN ) continue; stepEvents[step] += 1; //*********** // CLONE TREE cloneTree -> Fill(); } // loop over the events // save histograms for(step = 1; step <= nStep; ++step) { events -> SetBinContent(step, stepEvents[step]); events -> GetXaxis() -> SetBinLabel(step, stepName[step].c_str()); } events -> Write(); cloneTree -> AutoSave(); outputRootFile.Close(); return 0; }
int process(TString nameChain, TString file, int iFile, int nEntries, TString dirOut, TString dirIn, ofstream& outlog, int iJson, TString RunPhase, bool debug) { // OUTPUT FILE // ostringstream ossi(""); ossi << iFile ; TString name = dirIn; name +="elepairs_"; name +=ossi.str(); name +=".root"; //TString name=(TString)(dirIn+"elepairs_"+ossi.str()+".root"); TFile *outfile = new TFile(name,"RECREATE"); ossi.str(""); // INPUT TREE // TChain * myChain = new TChain(nameChain); myChain->Add(file); cout<<"test1"<<endl; int nEvent, nRun, nLumi ; // Vertices // int _vtx_N; double _vtx_x[200], _vtx_y[200], _vtx_z[200]; double _vtx_normalizedChi2[200], _vtx_ndof[200], _vtx_nTracks[200], _vtx_d0[200]; // Trigger Paths // int trig_hltInfo[250]; int _trig_isEleHLTpath; int trig_HLT_path[4]; // unbias, EG5, EG8, EG12 char trig_fired_names[5000]; // vector<string> m_HLT_pathsV; vector<string> m_HLT_triggered; vector<int> m_HLT_pathsV_check; // m_HLT_pathsV.clear(); // m_HLT_pathsV_check.clear(); // for(int iP=0 ; iP<(int)HLT_paths_.size() ; iP++) { // m_HLT_pathsV.push_back( HLT_paths_[iP]); // m_HLT_pathsV_check.push_back(0); // } // Electrons TClonesArray * electrons = new TClonesArray ("TLorentzVector"); int ele_N, sc_hybrid_N; int ele_outOfTimeSeed[10],ele_severityLevelSeed[10]; double ele_he[10], ele_sigmaietaieta[10]; double ele_hcalDepth1TowerSumEt_dr03[10], ele_hcalDepth2TowerSumEt_dr03[10]; double ele_ecalRecHitSumEt_dr03[10], ele_tkSumPt_dr03[10]; double ele_sclEta[10], ele_sclEt[10]; //double ecalIsoRel03,hcalIsoRel03,trackIsoRel03; double ele_deltaphiin[10], ele_deltaetain[10]; double ele_conv_dist[10], ele_conv_dcot[10]; double ele_fbrem[10]; int ele_expected_inner_hits[10]; //int ele_ambiguousGsfTracks[10]; int ele_isConversion[10]; int ele_echarge[10]; // int ele_RCTeta[10], ele_RCTphi[10], ele_RCTL1iso[10], ele_RCTL1noniso[10], ele_RCTL1iso_M[10], ele_RCTL1noniso_M[10]; int ele_TTetaVect[10][50], ele_TTphiVect[10][50]; double ele_TTetVect[10][50]; int ele_RCTetaVect[10][10], ele_RCTphiVect[10][10], ele_RCTL1isoVect[10][10], ele_RCTL1nonisoVect[10][10],ele_RCTL1isoVect_M[10][10], ele_RCTL1nonisoVect_M[10][10]; double ele_RCTetVect[10][10]; // TP info const int nTow = 4032; int trig_tower_N,trig_tower_ieta[nTow],trig_tower_iphi[nTow],trig_tower_adc[nTow],trig_tower_sFGVB[nTow]; int trig_tower_N_M,trig_tower_ieta_M[nTow],trig_tower_iphi_M[nTow],trig_tower_adc_M[nTow],trig_tower_sFGVB_M[nTow]; int trig_tower_N_E,trig_tower_ieta_E[nTow],trig_tower_iphi_E[nTow],trig_tower_adc_E[nTow][5],trig_tower_sFGVB_E[nTow][5]; // HCAL TP int trig_tower_hcal_N, trig_tower_hcal_ieta[4032], trig_tower_hcal_iphi[4032], trig_tower_hcal_FG[4032],trig_tower_hcal_et[4032]; int trig_L1emIso_N, trig_L1emNonIso_N, trig_L1emIso_N_M, trig_L1emNonIso_N_M; // L1 candidates info int trig_L1emIso_ieta[4], trig_L1emIso_iphi[4], trig_L1emIso_rank[4]; int trig_L1emNonIso_ieta[4], trig_L1emNonIso_iphi[4], trig_L1emNonIso_rank[4]; int trig_L1emIso_ieta_M[4], trig_L1emIso_iphi_M[4], trig_L1emIso_rank_M[4]; int trig_L1emNonIso_ieta_M[4], trig_L1emNonIso_iphi_M[4], trig_L1emNonIso_rank_M[4]; // L1 prefiring int trig_preL1emIso_N; int trig_preL1emNonIso_N; int trig_preL1emIso_ieta[4], trig_preL1emIso_iphi[4], trig_preL1emIso_rank[4]; int trig_preL1emNonIso_ieta[4], trig_preL1emNonIso_iphi[4],trig_preL1emNonIso_rank[4]; // L1 postfiring int trig_postL1emIso_N; int trig_postL1emNonIso_N; int trig_postL1emIso_ieta[4], trig_postL1emIso_iphi[4], trig_postL1emIso_rank[4]; int trig_postL1emNonIso_ieta[4], trig_postL1emNonIso_iphi[4],trig_postL1emNonIso_rank[4]; // Masking int trig_nMaskedRCT, trig_nMaskedCh; int trig_iMaskedRCTeta[100], trig_iMaskedRCTphi[100], trig_iMaskedRCTcrate[100], trig_iMaskedTTeta[100], trig_iMaskedTTphi[100]; int trig_strip_mask_N; int trig_strip_mask_TTieta[1000], trig_strip_mask_TTiphi[1000], trig_strip_mask_status[1000], trig_strip_mask_StripID[1000], trig_strip_mask_PseudoStripID[1000], trig_strip_mask_TccID[1000], trig_strip_mask_CCU[1000], trig_strip_mask_xtal_ix[1000][5], trig_strip_mask_xtal_iy[1000][5], trig_strip_mask_xtal_iz[1000][5]; int trig_xtal_mask_N; // [EB+EE] int trig_xtal_mask_ieta[1000],trig_xtal_mask_iphi[1000], // for EE : xtal ieta->ix ; iphi -> iy trig_xtal_mask_TTieta[1000],trig_xtal_mask_TTiphi[1000], // but for EE towers, still ieta, iphi... trig_xtal_mask_Rieta[1000],trig_xtal_mask_Riphi[1000], trig_xtal_mask_status[1000], trig_xtal_mask_EBEE[1000]; // EBEE = {0,1} => 0=EB ; 1=EE //double trig_xtal_mask_eT[1000]; cout<<"test2"<<endl; // INITIALIZATION // // // Global nEvent = 0; nRun = 0; nLumi = 0; // // Vertices _vtx_N = 0; for(int iv=0;iv<200;iv++) { _vtx_normalizedChi2[iv] = 0.; _vtx_ndof[iv] = 0.; _vtx_nTracks[iv] = 0.; _vtx_d0[iv] = 0.; _vtx_x[iv] = 0.; _vtx_y[iv] = 0.; _vtx_z[iv] = 0.; } // // L1 candidates trig_L1emIso_N = 0; trig_L1emNonIso_N = 0; trig_preL1emIso_N = 0; trig_preL1emNonIso_N = 0; trig_postL1emIso_N = 0; trig_postL1emNonIso_N = 0; // for(int il1=0 ; il1<4 ; il1++) { trig_L1emIso_ieta[il1] = 0; trig_L1emIso_iphi[il1] = 0; trig_L1emIso_rank[il1] = 0; trig_L1emNonIso_ieta[il1] = 0; trig_L1emNonIso_iphi[il1] = 0; trig_L1emNonIso_rank[il1] = 0; trig_preL1emIso_ieta[il1] = 0; trig_preL1emIso_iphi[il1] = 0; trig_preL1emIso_rank[il1] = 0; trig_preL1emNonIso_ieta[il1] = 0; trig_preL1emNonIso_iphi[il1] = 0; trig_preL1emNonIso_rank[il1] = 0; trig_postL1emIso_ieta[il1] = 0; trig_postL1emIso_iphi[il1] = 0; trig_postL1emIso_rank[il1] = 0; trig_postL1emNonIso_ieta[il1] = 0; trig_postL1emNonIso_iphi[il1] = 0; trig_postL1emNonIso_rank[il1] = 0; } // // Trigger towers trig_tower_N = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta[iTow] = trig_tower_iphi[iTow] = -999; trig_tower_adc[iTow] = trig_tower_sFGVB[iTow] = -999; } trig_tower_N_M = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_M[iTow] = trig_tower_iphi_M[iTow] = -999; trig_tower_adc_M[iTow] = trig_tower_sFGVB_M[iTow] = -999; } trig_tower_N_E = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_E[iTow] = trig_tower_iphi_E[iTow] = -999; for(int i=0 ; i<5 ; i++) trig_tower_adc_E[iTow][i] = trig_tower_sFGVB_E[iTow][i] = -999; } trig_tower_hcal_N = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_hcal_ieta[iTow] = trig_tower_hcal_iphi[iTow] = -999; trig_tower_hcal_FG[iTow] = trig_tower_hcal_et[iTow] = -999; } // // Masked Towers trig_nMaskedRCT=0; trig_nMaskedCh=0; // for (int ii=0;ii<100;ii++) { trig_iMaskedRCTeta[ii] = -999; trig_iMaskedRCTphi[ii] = -999; trig_iMaskedRCTcrate[ii] = -999; trig_iMaskedTTeta[ii] = -999; trig_iMaskedTTphi[ii] = -999; } // // Masked strip/xtals trig_strip_mask_N = 0; trig_xtal_mask_N = 0; // for(int i=0 ; i<1000 ; i++) { trig_strip_mask_TTieta[i] = -999; trig_strip_mask_TTiphi[i] = -999; trig_strip_mask_status[i] = -999; trig_strip_mask_StripID[i] = -999; trig_strip_mask_PseudoStripID[i] = -999; trig_strip_mask_TccID[i] = -999; trig_strip_mask_CCU[i] = -999; // for(int j=0 ; j<5 ; j++) { trig_strip_mask_xtal_ix[i][j] = -999; trig_strip_mask_xtal_iy[i][j] = -999; trig_strip_mask_xtal_iz[i][j] = -999; } trig_xtal_mask_ieta[i] = -999; trig_xtal_mask_iphi[i] = -999; trig_xtal_mask_TTieta[i] = -999; trig_xtal_mask_TTiphi[i] = -999; trig_xtal_mask_Rieta[i] = -999; trig_xtal_mask_Riphi[i] = -999; trig_xtal_mask_status[i] = -999; trig_xtal_mask_EBEE[i] = -999; } cout<<"test3"<<endl; // Disable useless branches //myChain->SetBranchStatus("spike_*",0); //myChain->SetBranchStatus("vtx_*",0); //myChain->SetBranchStatus("skim_*",0); //myChain->SetBranchStatus("trig_pre*",0); //myChain->SetBranchStatus("trig_post*",0); //myChain->SetBranchStatus("trig_HLT*",0); //myChain->SetBranchStatus("BS*",0); //myChain->SetBranchStatus("MC_*",0); //myChain->SetBranchStatus("ele_MC*",0); ////myChain->SetBranchStatus("ele_eid*",0); ////myChain->SetBranchStatus("ele_Seed*",0); //myChain->SetBranchStatus("ele_charge*",0); //myChain->SetBranchStatus("met_*",0); //myChain->SetBranchStatus("muons*",0); //myChain->SetBranchStatus("jets*",0); myChain->SetBranchStatus("sc*",0); //myChain->SetBranchStatus("sc_hybrid_N",1); //myChain->SetBranchStatus("",0); // Global myChain->SetBranchAddress("nEvent",&nEvent); myChain->SetBranchAddress("nRun",&nRun); myChain->SetBranchAddress("nLumi",&nLumi); // Trigger // myChain->SetBranchAddress ("trig_HLT_triggered", &m_HLT_triggered); // myChain->SetBranchAddress ("trig_HLT_pathsV", &m_HLT_pathsV); // myChain->SetBranchAddress ("trig_HLT_pathsV_check", &m_HLT_pathsV_check); // myChain->SetBranchAddress("trig_HLT_path",&trig_HLT_path); // unbias, EG5, EG8, EG12 // myChain->SetBranchAddress("trig_fired_names",&trig_fired_names); myChain->SetBranchAddress("trig_hltInfo",&trig_hltInfo); // SC //myChain->SetBranchAddress("sc_hybrid_N", &sc_hybrid_N); // Electrons myChain->SetBranchAddress("ele_N", &ele_N); myChain->SetBranchAddress("electrons",&electrons); myChain->SetBranchAddress("ele_severityLevelSeed", &ele_severityLevelSeed); myChain->SetBranchAddress("ele_he",&ele_he); myChain->SetBranchAddress("ele_sigmaietaieta",&ele_sigmaietaieta); myChain->SetBranchAddress("ele_hcalDepth1TowerSumEt_dr03", &ele_hcalDepth1TowerSumEt_dr03); myChain->SetBranchAddress("ele_hcalDepth2TowerSumEt_dr03", &ele_hcalDepth2TowerSumEt_dr03); myChain->SetBranchAddress("ele_ecalRecHitSumEt_dr03", &ele_ecalRecHitSumEt_dr03); myChain->SetBranchAddress("ele_tkSumPt_dr03",&ele_tkSumPt_dr03); myChain->SetBranchAddress("ele_sclEta",&ele_sclEta); myChain->SetBranchAddress("ele_sclEt",&ele_sclEt); myChain->SetBranchAddress("ele_expected_inner_hits",&ele_expected_inner_hits); myChain->SetBranchAddress("ele_deltaphiin",&ele_deltaphiin); myChain->SetBranchAddress("ele_deltaetain",&ele_deltaetain); myChain->SetBranchAddress("ele_conv_dist",&ele_conv_dist); myChain->SetBranchAddress("ele_conv_dcot",&ele_conv_dcot); myChain->SetBranchAddress("ele_fbrem",&ele_fbrem); //myChain->SetBranchAddress("ele_ambiguousGsfTracks", &ele_ambiguousGsfTracks); myChain->SetBranchAddress("ele_isConversion",&ele_isConversion); myChain->SetBranchAddress("ele_echarge",&ele_echarge); // L1 electron informations myChain->SetBranchAddress("ele_TTetaVect", &ele_TTetaVect); myChain->SetBranchAddress("ele_TTphiVect", &ele_TTphiVect); myChain->SetBranchAddress("ele_TTetVect", &ele_TTetVect); // myChain->SetBranchAddress("ele_RCTeta", &ele_RCTeta); myChain->SetBranchAddress("ele_RCTphi", &ele_RCTphi); myChain->SetBranchAddress("ele_RCTL1iso", &ele_RCTL1iso); myChain->SetBranchAddress("ele_RCTL1noniso", &ele_RCTL1noniso); myChain->SetBranchAddress("ele_RCTL1iso_M", &ele_RCTL1iso_M); myChain->SetBranchAddress("ele_RCTL1noniso_M", &ele_RCTL1noniso_M); myChain->SetBranchAddress("ele_RCTetaVect", &ele_RCTetaVect); myChain->SetBranchAddress("ele_RCTphiVect", &ele_RCTphiVect); myChain->SetBranchAddress("ele_RCTetVect", &ele_RCTetVect); myChain->SetBranchAddress("ele_RCTL1isoVect", &ele_RCTL1isoVect); myChain->SetBranchAddress("ele_RCTL1nonisoVect", &ele_RCTL1nonisoVect); myChain->SetBranchAddress("ele_RCTL1isoVect_M", &ele_RCTL1isoVect_M); myChain->SetBranchAddress("ele_RCTL1nonisoVect_M", &ele_RCTL1nonisoVect_M); // L1 candidates myChain->SetBranchAddress("trig_L1emIso_N", &trig_L1emIso_N); myChain->SetBranchAddress("trig_L1emIso_ieta", &trig_L1emIso_ieta); myChain->SetBranchAddress("trig_L1emIso_iphi", &trig_L1emIso_iphi); myChain->SetBranchAddress("trig_L1emIso_rank", &trig_L1emIso_rank); myChain->SetBranchAddress("trig_L1emNonIso_N", &trig_L1emNonIso_N); myChain->SetBranchAddress("trig_L1emNonIso_ieta", &trig_L1emNonIso_ieta); myChain->SetBranchAddress("trig_L1emNonIso_iphi", &trig_L1emNonIso_iphi); myChain->SetBranchAddress("trig_L1emNonIso_rank", &trig_L1emNonIso_rank); myChain->SetBranchAddress("trig_L1emIso_N_M", &trig_L1emIso_N_M); myChain->SetBranchAddress("trig_L1emIso_ieta_M", &trig_L1emIso_ieta_M); myChain->SetBranchAddress("trig_L1emIso_iphi_M", &trig_L1emIso_iphi_M); myChain->SetBranchAddress("trig_L1emIso_rank_M", &trig_L1emIso_rank_M); myChain->SetBranchAddress("trig_L1emNonIso_N_M", &trig_L1emNonIso_N_M); myChain->SetBranchAddress("trig_L1emNonIso_ieta_M", &trig_L1emNonIso_ieta_M); myChain->SetBranchAddress("trig_L1emNonIso_iphi_M", &trig_L1emNonIso_iphi_M); myChain->SetBranchAddress("trig_L1emNonIso_rank_M", &trig_L1emNonIso_rank_M); // Pre/post - firing L1 candidates myChain->SetBranchAddress("trig_preL1emIso_N", &trig_preL1emIso_N); myChain->SetBranchAddress("trig_preL1emIso_ieta", &trig_preL1emIso_ieta); myChain->SetBranchAddress("trig_preL1emIso_iphi", &trig_preL1emIso_iphi); myChain->SetBranchAddress("trig_preL1emIso_rank", &trig_preL1emIso_rank); // myChain->SetBranchAddress("trig_preL1emNonIso_N", &trig_preL1emNonIso_N); myChain->SetBranchAddress("trig_preL1emNonIso_ieta", &trig_preL1emNonIso_ieta); myChain->SetBranchAddress("trig_preL1emNonIso_iphi", &trig_preL1emNonIso_iphi); myChain->SetBranchAddress("trig_preL1emNonIso_rank", &trig_preL1emNonIso_rank); // myChain->SetBranchAddress("trig_postL1emIso_N", &trig_postL1emIso_N); myChain->SetBranchAddress("trig_postL1emIso_ieta", &trig_postL1emIso_ieta); myChain->SetBranchAddress("trig_postL1emIso_iphi", &trig_postL1emIso_iphi); myChain->SetBranchAddress("trig_postL1emIso_rank", &trig_postL1emIso_rank); // myChain->SetBranchAddress("trig_postL1emNonIso_N", &trig_postL1emNonIso_N); myChain->SetBranchAddress("trig_postL1emNonIso_ieta", &trig_postL1emNonIso_ieta); myChain->SetBranchAddress("trig_postL1emNonIso_iphi", &trig_postL1emNonIso_iphi); myChain->SetBranchAddress("trig_postL1emNonIso_rank", &trig_postL1emNonIso_rank); // Trigger Towers // normal collection myChain->SetBranchAddress("trig_tower_N", &trig_tower_N); myChain->SetBranchAddress("trig_tower_ieta", &trig_tower_ieta); myChain->SetBranchAddress("trig_tower_iphi", &trig_tower_iphi); myChain->SetBranchAddress("trig_tower_adc", &trig_tower_adc); myChain->SetBranchAddress("trig_tower_sFGVB", &trig_tower_sFGVB); // modified collection myChain->SetBranchAddress("trig_tower_N_M", &trig_tower_N_M); myChain->SetBranchAddress("trig_tower_ieta_M", &trig_tower_ieta_M); myChain->SetBranchAddress("trig_tower_iphi_M", &trig_tower_iphi_M); myChain->SetBranchAddress("trig_tower_adc_M", &trig_tower_adc_M); myChain->SetBranchAddress("trig_tower_sFGVB_M", &trig_tower_sFGVB_M); myChain->SetBranchAddress("trig_tower_N_E", &trig_tower_N_E); myChain->SetBranchAddress("trig_tower_ieta_E", &trig_tower_ieta_E); myChain->SetBranchAddress("trig_tower_iphi_E", &trig_tower_iphi_E); myChain->SetBranchAddress("trig_tower_adc_E", &trig_tower_adc_E); myChain->SetBranchAddress("trig_tower_sFGVB_E", &trig_tower_sFGVB_E); // HCAL TP myChain->SetBranchAddress("trig_tower_hcal_N", &trig_tower_hcal_N); myChain->SetBranchAddress("trig_tower_hcal_ieta", &trig_tower_hcal_ieta); myChain->SetBranchAddress("trig_tower_hcal_iphi", &trig_tower_hcal_iphi); myChain->SetBranchAddress("trig_tower_hcal_et", &trig_tower_hcal_et); myChain->SetBranchAddress("trig_tower_hcal_FG", &trig_tower_hcal_FG); // Strip masking myChain->SetBranchAddress("trig_strip_mask_N", &trig_strip_mask_N); myChain->SetBranchAddress("trig_strip_mask_TTieta", &trig_strip_mask_TTieta); myChain->SetBranchAddress("trig_strip_mask_TTiphi", &trig_strip_mask_TTiphi); myChain->SetBranchAddress("trig_strip_mask_StripID", &trig_strip_mask_StripID); myChain->SetBranchAddress("trig_strip_mask_PseudoStripID", &trig_strip_mask_PseudoStripID); myChain->SetBranchAddress("trig_strip_mask_TccID", &trig_strip_mask_TccID); myChain->SetBranchAddress("trig_strip_mask_CCU", &trig_strip_mask_CCU); myChain->SetBranchAddress("trig_strip_mask_xtal_ix", &trig_strip_mask_xtal_ix); myChain->SetBranchAddress("trig_strip_mask_xtal_iy", &trig_strip_mask_xtal_iy); myChain->SetBranchAddress("trig_strip_mask_xtal_iz", &trig_strip_mask_xtal_iz); // // Crystal masking myChain->SetBranchAddress("trig_xtal_mask_N", &trig_xtal_mask_N); myChain->SetBranchAddress("trig_xtal_mask_ieta", &trig_xtal_mask_ieta); myChain->SetBranchAddress("trig_xtal_mask_iphi", &trig_xtal_mask_iphi); myChain->SetBranchAddress("trig_xtal_mask_TTieta", &trig_xtal_mask_TTieta); myChain->SetBranchAddress("trig_xtal_mask_TTiphi", &trig_xtal_mask_TTiphi); myChain->SetBranchAddress("trig_xtal_mask_Rieta", &trig_xtal_mask_Rieta); myChain->SetBranchAddress("trig_xtal_mask_Riphi", &trig_xtal_mask_Riphi); myChain->SetBranchAddress("trig_xtal_mask_status", &trig_xtal_mask_status); myChain->SetBranchAddress("trig_xtal_mask_EBEE", &trig_xtal_mask_EBEE); // Masking myChain->SetBranchAddress("trig_nMaskedRCT", &trig_nMaskedRCT); myChain->SetBranchAddress("trig_iMaskedRCTeta", &trig_iMaskedRCTeta); myChain->SetBranchAddress("trig_iMaskedRCTcrate", &trig_iMaskedRCTcrate); myChain->SetBranchAddress("trig_iMaskedRCTphi", &trig_iMaskedRCTphi); myChain->SetBranchAddress("trig_nMaskedCh", &trig_nMaskedCh); myChain->SetBranchAddress("trig_iMaskedTTeta", &trig_iMaskedTTeta); myChain->SetBranchAddress("trig_iMaskedTTphi", &trig_iMaskedTTphi); if(debug) cout << "got the input tree, start to define output tree" << endl; // OUTPUT TREE // TTree * outtree = new TTree("ElePairs","ElePairs"); // General informations outtree->Branch("nRun",&nRun,"nRun/I"); outtree->Branch("nLumi",&nLumi,"nLumi/I"); outtree->Branch("nEvent",&nEvent,"nEvent/I"); // Vertices outtree->Branch("vtx_N",&_vtx_N,"vtx_N/I"); outtree->Branch("vtx_normalizedChi2",&_vtx_normalizedChi2,"vtx_normalizedChi2[200]/D"); outtree->Branch("vtx_ndof",&_vtx_ndof,"vtx_ndof[200]/D"); outtree->Branch("vtx_nTracks",&_vtx_nTracks,"vtx_nTracks[200]/D"); outtree->Branch("vtx_d0",&_vtx_d0,"vtx_d0[200]/D"); outtree->Branch("vtx_x",&_vtx_x,"vtx_x[200]/D"); outtree->Branch("vtx_y",&_vtx_y,"vtx_y[200]/D"); outtree->Branch("vtx_z",&_vtx_z,"vtx_z[200]/D"); // HLT informations // outtree->Branch ("trig_HLT_triggered", &m_HLT_triggered, 256000,0); // outtree->Branch ("trig_HLT_pathsV", &m_HLT_pathsV, 256000,0); // outtree->Branch ("trig_HLT_pathsV_check", &m_HLT_pathsV_check, 256000,0); // outtree->Branch("trig_HLT_path",&trig_HLT_path,"trig_HLT_path[4]/I"); // unbias, EG5, EG8, EG12 // outtree->Branch("trig_fired_names",&trig_fired_names,"trig_fired_names[5000]/C"); outtree->Branch("trig_hltInfo",&trig_hltInfo,"trig_hltInfo[250]/I"); // Trigger towers outtree->Branch("trig_tower_N",&trig_tower_N,"trig_tower_N/I"); outtree->Branch("trig_tower_ieta",&trig_tower_ieta,"trig_tower_ieta[4032]/I"); outtree->Branch("trig_tower_iphi",&trig_tower_iphi,"trig_tower_iphi[4032]/I"); outtree->Branch("trig_tower_adc",&trig_tower_adc,"trig_tower_adc[4032]/I"); outtree->Branch("trig_tower_sFGVB",&trig_tower_sFGVB,"trig_tower_sFGVB[4032]/I"); // outtree->Branch("trig_tower_N_M",&trig_tower_N_M,"trig_tower_N_M/I"); outtree->Branch("trig_tower_ieta_M",&trig_tower_ieta_M,"trig_tower_ieta_M[4032]/I"); outtree->Branch("trig_tower_iphi_M",&trig_tower_iphi_M,"trig_tower_iphi_M[4032]/I"); outtree->Branch("trig_tower_adc_M",&trig_tower_adc_M,"trig_tower_adc_M[4032]/I"); outtree->Branch("trig_tower_sFGVB_M",&trig_tower_sFGVB_M,"trig_tower_sFGVB_M[4032]/I"); // outtree->Branch("trig_tower_N_E",&trig_tower_N_E,"trig_tower_N_E/I"); outtree->Branch("trig_tower_ieta_E",&trig_tower_ieta_E,"trig_tower_ieta_E[4032]/I"); outtree->Branch("trig_tower_iphi_E",&trig_tower_iphi_E,"trig_tower_iphi_E[4032]/I"); outtree->Branch("trig_tower_adc_E",&trig_tower_adc_E,"trig_tower_adc_E[4032][5]/I"); outtree->Branch("trig_tower_sFGVB_E",&trig_tower_sFGVB_E,"trig_tower_sFGVB_E[4032][5]/I"); // HCAL TP outtree->Branch("trig_tower_hcal_N", &trig_tower_hcal_N, "trig_tower_hcal_N/I"); outtree->Branch("trig_tower_hcal_ieta", &trig_tower_hcal_ieta, "trig_tower_hcal_ieta[trig_tower_N]/I"); outtree->Branch("trig_tower_hcal_iphi", &trig_tower_hcal_iphi, "trig_tower_hcal_iphi[trig_tower_N]/I"); outtree->Branch("trig_tower_hcal_et", &trig_tower_hcal_et, "trig_tower_hcal_et[trig_tower_N]/I"); outtree->Branch("trig_tower_hcal_FG", &trig_tower_hcal_FG, "trig_tower_hcal_FG[trig_tower_N]/I"); // Strip masking outtree->Branch("trig_strip_mask_N", &trig_strip_mask_N, "trig_strip_mask_N/I"); outtree->Branch("trig_strip_mask_TTieta", &trig_strip_mask_TTieta, "trig_strip_mask_TTieta[trig_strip_mask_N]/I"); outtree->Branch("trig_strip_mask_TTiphi", &trig_strip_mask_TTiphi, "trig_strip_mask_TTiphi[trig_strip_mask_N]/I"); outtree->Branch("trig_strip_mask_StripID", &trig_strip_mask_StripID, "trig_strip_mask_StripID[trig_strip_mask_N]/I"); outtree->Branch("trig_strip_mask_PseudoStripID", &trig_strip_mask_PseudoStripID, "trig_strip_mask_PseudoStripID[trig_strip_mask_N]/I"); outtree->Branch("trig_strip_mask_TccID", &trig_strip_mask_TccID, "trig_strip_mask_TccID[trig_strip_mask_N]/I"); outtree->Branch("trig_strip_mask_CCU", &trig_strip_mask_CCU, "trig_strip_mask_CCU[trig_strip_mask_N]/I"); outtree->Branch("trig_strip_mask_xtal_ix", &trig_strip_mask_xtal_ix, "trig_strip_mask_xtal_ix[trig_strip_mask_N][5]/I"); outtree->Branch("trig_strip_mask_xtal_iy", &trig_strip_mask_xtal_iy, "trig_strip_mask_xtal_iy[trig_strip_mask_N][5]/I"); outtree->Branch("trig_strip_mask_xtal_iz", &trig_strip_mask_xtal_iz, "trig_strip_mask_xtal_iz[trig_strip_mask_N][5]/I"); // // Crystal masking outtree->Branch("trig_xtal_mask_N", &trig_xtal_mask_N, "trig_xtal_mask_N/I"); outtree->Branch("trig_xtal_mask_ieta", &trig_xtal_mask_ieta, "trig_xtal_mask_ieta[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_iphi", &trig_xtal_mask_iphi, "trig_xtal_mask_iphi[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_TTieta", &trig_xtal_mask_TTieta, "trig_xtal_mask_TTieta[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_TTiphi", &trig_xtal_mask_TTiphi, "trig_xtal_mask_TTiphi[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_Rieta", &trig_xtal_mask_Rieta, "trig_xtal_mask_Rieta[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_Riphi", &trig_xtal_mask_Riphi, "trig_xtal_mask_Riphi[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_status", &trig_xtal_mask_status, "trig_xtal_mask_status[trig_xtal_mask_N]/I"); outtree->Branch("trig_xtal_mask_EBEE", &trig_xtal_mask_EBEE, "trig_xtal_mask_EBEE[trig_xtal_mask_N]/I"); // L1 candidates outtree->Branch("trig_L1emIso_N", &trig_L1emIso_N, "trig_L1emIso_N/I"); outtree->Branch("trig_L1emIso_ieta", &trig_L1emIso_ieta, "trig_L1emIso_ieta[4]/I"); outtree->Branch("trig_L1emIso_iphi", &trig_L1emIso_iphi, "trig_L1emIso_iphi[4]/I"); outtree->Branch("trig_L1emIso_rank", &trig_L1emIso_rank, "trig_L1emIso_rank[4]/I"); //outtree->Branch("trig_L1emIso_eta", &trig_L1emIso_eta, "trig_L1emIso_eta[4]/D"); //outtree->Branch("trig_L1emIso_phi", &trig_L1emIso_phi, "trig_L1emIso_phi[4]/D"); // outtree->Branch("trig_L1emIso_energy",&trig_L1emIso_energy,"trig_L1emIso_energy[4]/D"); // outtree->Branch("trig_L1emIso_et", &trig_L1emIso_et, "trig_L1emIso_et[4]/D"); // outtree->Branch("trig_L1emNonIso_N", &trig_L1emNonIso_N, "trig_L1emNonIso_N/I"); outtree->Branch("trig_L1emNonIso_ieta", &trig_L1emNonIso_ieta, "trig_L1emNonIso_ieta[4]/I"); outtree->Branch("trig_L1emNonIso_iphi", &trig_L1emNonIso_iphi, "trig_L1emNonIso_iphi[4]/I"); outtree->Branch("trig_L1emNonIso_rank", &trig_L1emNonIso_rank, "trig_L1emNonIso_rank[4]/I"); // outtree->Branch("trig_L1emNonIso_eta", &trig_L1emNonIso_eta, "trig_L1emNonIso_eta[4]/D"); // outtree->Branch("trig_L1emNonIso_phi", &trig_L1emNonIso_phi, "trig_L1emNonIso_phi[4]/D"); // outtree->Branch("trig_L1emNonIso_energy",&trig_L1emNonIso_energy,"trig_L1emNonIso_energy[4]/D"); // outtree->Branch("trig_L1emNonIso_et", &trig_L1emNonIso_et, "trig_L1emNonIso_et[4]/D"); // outtree->Branch("trig_L1emIso_N_M", &trig_L1emIso_N_M, "trig_L1emIso_N_M/I"); outtree->Branch("trig_L1emIso_ieta_M", &trig_L1emIso_ieta_M, "trig_L1emIso_ieta_M[4]/I"); outtree->Branch("trig_L1emIso_iphi_M", &trig_L1emIso_iphi_M, "trig_L1emIso_iphi_M[4]/I"); outtree->Branch("trig_L1emIso_rank_M", &trig_L1emIso_rank_M, "trig_L1emIso_rank_M[4]/I"); // outtree->Branch("trig_L1emIso_eta_M", &trig_L1emIso_eta_M, "trig_L1emIso_eta_M[4]/D"); // outtree->Branch("trig_L1emIso_phi_M", &trig_L1emIso_phi_M, "trig_L1emIso_phi_M[4]/D"); // outtree->Branch("trig_L1emIso_energy_M",&trig_L1emIso_energy_M,"trig_L1emIso_energy_M[4]/D"); // outtree->Branch("trig_L1emIso_et_M", &trig_L1emIso_et_M, "trig_L1emIso_et_M[4]/D"); // outtree->Branch("trig_L1emNonIso_N_M", &trig_L1emNonIso_N_M, "trig_L1emNonIso_N_M/I"); outtree->Branch("trig_L1emNonIso_ieta_M", &trig_L1emNonIso_ieta_M, "trig_L1emNonIso_ieta_M[4]/I"); outtree->Branch("trig_L1emNonIso_iphi_M", &trig_L1emNonIso_iphi_M, "trig_L1emNonIso_iphi_M[4]/I"); outtree->Branch("trig_L1emNonIso_rank_M", &trig_L1emNonIso_rank_M, "trig_L1emNonIso_rank_M[4]/I"); // outtree->Branch("trig_L1emNonIso_eta_M", &trig_L1emNonIso_eta_M, "trig_L1emNonIso_eta_M[4]/D"); // outtree->Branch("trig_L1emNonIso_phi_M", &trig_L1emNonIso_phi_M, "trig_L1emNonIso_phi_M[4]/D"); // outtree->Branch("trig_L1emNonIso_energy_M",&trig_L1emNonIso_energy_M,"trig_L1emNonIso_energy_M[4]/D"); // outtree->Branch("trig_L1emNonIso_et_M", &trig_L1emNonIso_et_M, "trig_L1emNonIso_et_M[4]/D"); // pre-post firing L1 candidates outtree->Branch("trig_preL1emIso_N", &trig_preL1emIso_N, "trig_preL1emIso_N/I"); outtree->Branch("trig_preL1emIso_ieta", &trig_preL1emIso_ieta, "trig_preL1emIso_ieta[4]/I"); outtree->Branch("trig_preL1emIso_iphi", &trig_preL1emIso_iphi, "trig_preL1emIso_iphi[4]/I"); outtree->Branch("trig_preL1emIso_rank", &trig_preL1emIso_rank, "trig_preL1emIso_rank[4]/I"); // outtree->Branch("trig_preL1emNonIso_N", &trig_preL1emNonIso_N, "trig_preL1emNonIso_N/I"); outtree->Branch("trig_preL1emNonIso_ieta", &trig_preL1emNonIso_ieta, "trig_preL1emNonIso_ieta[4]/I"); outtree->Branch("trig_preL1emNonIso_iphi", &trig_preL1emNonIso_iphi, "trig_preL1emNonIso_iphi[4]/I"); outtree->Branch("trig_preL1emNonIso_rank", &trig_preL1emNonIso_rank, "trig_preL1emNonIso_rank[4]/I"); // outtree->Branch("trig_postL1emIso_N", &trig_postL1emIso_N, "trig_postL1emIso_N/I"); outtree->Branch("trig_postL1emIso_ieta", &trig_postL1emIso_ieta, "trig_postL1emIso_ieta[4]/I"); outtree->Branch("trig_postL1emIso_iphi", &trig_postL1emIso_iphi, "trig_postL1emIso_iphi[4]/I"); outtree->Branch("trig_postL1emIso_rank", &trig_postL1emIso_rank, "trig_postL1emIso_rank[4]/I"); // outtree->Branch("trig_postL1emNonIso_N", &trig_postL1emNonIso_N, "trig_postL1emNonIso_N/I"); outtree->Branch("trig_postL1emNonIso_ieta", &trig_postL1emNonIso_ieta, "trig_postL1emNonIso_ieta[4]/I"); outtree->Branch("trig_postL1emNonIso_iphi", &trig_postL1emNonIso_iphi, "trig_postL1emNonIso_iphi[4]/I"); outtree->Branch("trig_postL1emNonIso_rank", &trig_postL1emNonIso_rank, "trig_postL1emNonIso_rank[4]/I"); // outtree->Branch("trig_nMaskedRCT", &trig_nMaskedRCT, "trig_nMaskedRCT/I"); outtree->Branch("trig_iMaskedRCTeta", &trig_iMaskedRCTeta, "trig_iMaskedRCTeta[trig_nMaskedRCT]/I"); outtree->Branch("trig_iMaskedRCTcrate", &trig_iMaskedRCTcrate,"trig_iMaskedRCTcrate[trig_nMaskedRCT]/I"); outtree->Branch("trig_iMaskedRCTphi", &trig_iMaskedRCTphi, "trig_iMaskedRCTphi[trig_nMaskedRCT]/I"); outtree->Branch("trig_nMaskedCh", &trig_nMaskedCh, "trig_nMaskedCh/I"); outtree->Branch("trig_iMaskedTTeta", &trig_iMaskedTTeta, "trig_iMaskedTTeta[trig_nMaskedCh]/I"); outtree->Branch("trig_iMaskedTTphi", &trig_iMaskedTTphi, "trig_iMaskedTTphi[trig_nMaskedCh]/I"); // Pairs informations double pair_M; double pair_eta[2], pair_sclEta[2], pair_sclEt[2], pair_phi[2], pair_pT[2], pair_eT[2], pair_E[2]; int pair_cuts[2], pair_HLT_Ele27_cut[2], pair_fidu[2], pair_charge[2], pair_RCTeta[2], pair_RCTphi[2], pair_L1iso[2], pair_L1noniso[2], pair_L1iso_M[2], pair_L1noniso_M[2]; int pair_RCTetaVect[2][10], pair_RCTphiVect[2][10], pair_L1isoVect[2][10], pair_L1nonisoVect[2][10],pair_L1isoVect_M[2][10], pair_L1nonisoVect_M[2][10]; double pair_RCTetVect[2][10]; int pair_TTetaVect[2][50], pair_TTphiVect[2][50]; double pair_TTetVect[2][50]; // outtree->Branch("pair_M",&pair_M,"pair_M/D"); // outtree->Branch("pair_cuts",&pair_cuts,"pair_cuts[2]/I"); // 0 : noCut | 1 : VBTF 95 | 2 : VBTF 80 | 3 : VBTF 60 outtree->Branch("pair_HLT_Ele27_cut",&pair_HLT_Ele27_cut,"pair_HLT_Ele27_cut[2]/I"); outtree->Branch("pair_fidu",&pair_fidu,"pair_fidu[2]/I"); // outtree->Branch("pair_eta",&pair_eta,"pair_eta[2]/D"); outtree->Branch("pair_sclEta",&pair_sclEta,"pair_sclEta[2]/D"); outtree->Branch("pair_phi",&pair_phi,"pair_phi[2]/D"); outtree->Branch("pair_RCTeta",&pair_RCTeta,"pair_RCTeta[2]/I"); outtree->Branch("pair_RCTphi",&pair_RCTphi,"pair_RCTphi[2]/I"); // outtree->Branch("pair_charge",&pair_charge,"pair_charge[2]/I"); outtree->Branch("pair_pT",&pair_pT,"pair_pT[2]/D"); outtree->Branch("pair_eT",&pair_eT,"pair_eT[2]/D"); outtree->Branch("pair_sclEt",&pair_sclEt,"pair_sclEt[2]/D"); outtree->Branch("pair_E",&pair_E,"pair_E[2]/D"); outtree->Branch("pair_TTetaVect", &pair_TTetaVect,"pair_TTetaVect[2][50]/I"); outtree->Branch("pair_TTphiVect", &pair_TTphiVect,"pair_TTphiVect[2][50]/I"); outtree->Branch("pair_TTetVect", &pair_TTetVect,"pair_TTetVect[2][50]/D"); outtree->Branch("pair_L1iso",&pair_L1iso,"pair_L1iso[2]/I"); outtree->Branch("pair_L1noniso",&pair_L1noniso,"pair_L1noniso[2]/I"); outtree->Branch("pair_L1iso_M",&pair_L1iso_M,"pair_L1iso_M[2]/I"); outtree->Branch("pair_L1noniso_M",&pair_L1noniso_M,"pair_L1noniso_M[2]/I"); // outtree->Branch("pair_RCTetVect",&pair_RCTetVect,"pair_RCTetVect[2][10]/D"); outtree->Branch("pair_RCTetaVect",&pair_RCTetaVect,"pair_RCTetaVect[2][10]/I"); outtree->Branch("pair_RCTphiVect",&pair_RCTphiVect,"pair_RCTphiVect[2][10]/I"); outtree->Branch("pair_L1isoVect",&pair_L1isoVect,"pair_L1isoVect[2][10]/I"); outtree->Branch("pair_L1nonisoVect",&pair_L1nonisoVect,"pair_L1nonisoVect[2][10]/I"); outtree->Branch("pair_L1isoVect_M",&pair_L1isoVect_M,"pair_L1isoVect_M[2][10]/I"); outtree->Branch("pair_L1nonisoVect_M",&pair_L1nonisoVect_M,"pair_L1nonisoVect_M[2][10]/I"); if(debug) cout << "output tree defined" << endl; cout<<"test4"<<endl; // USEFUL VARIABLES // vector<int> pairIdx; int cutEle[2], fidu[2]; bool cut_HLT_Ele27[2]; TLorentzVector* cand[2]; TLorentzVector total; bool isGoodRun; TString filename; // JSON FILE READER // string jsonDir = "/data_CMS/cms/ndaci/" ; const int nJson = 10; string jsonFile[nJson]; // 2010B, May10, Aug05, Prompt map<int, vector<pair<int, int> > > jsonMap[nJson] ; jsonFile[0] = jsonDir + "ndaci_2011A/JSON/goodrunlist_json.txt" ; jsonFile[1] = jsonDir + "ndaci_2011A/JSON/Cert_160404-163869_7TeV_May10ReReco_Collisions11_JSON_v3.txt" ; jsonFile[2] = jsonDir + "ndaci_2011A/JSON/Cert_170249-172619_7TeV_ReReco5Aug_Collisions11_JSON_v3.txt" ; jsonFile[3] = jsonDir + "ndaci_2011A/JSON/Cert_160404-180252_7TeV_PromptReco_Collisions11_JSON.txt" ; jsonFile[4] = jsonDir + "ndaci_2011A/JSON/Cert_160404-180252_7TeV_ReRecoNov08_Collisions11_JSON.txt" ; // 2012 jsonFile[5] = jsonDir + "ndaci_2012/JSON/Cert_190456-203002_8TeV_PromptReco_Collisions12_JSON.txt"; jsonFile[6] = jsonDir + "ndaci_2012/JSON/Cert_190456-196531_8TeV_13Jul2012ReReco_Collisions12_JSON_v2.txt"; jsonFile[7] = jsonDir + "ndaci_2012/JSON/Cert_190782-190949_8TeV_06Aug2012ReReco_Collisions12_JSON.txt"; jsonFile[8] = jsonDir + "ndaci_2012/JSON/Cert_198022-198523_8TeV_24Aug2012ReReco_Collisions12_JSON.txt"; jsonFile[9] = jsonDir + "ndaci_2012/JSON/Cert_190456-208357_8TeV_PromptReco_Collisions12_JSON.txt"; cout<<"test5"<<endl; /** for(int i=0 ; i<nJson ; i++) jsonMap[i] = readJSONFile(jsonFile[i]); if(debug) cout << "JSON defined" << endl;**/ // ------------------------------------------------------------------------------- // LOOP OVER EVENTS // ------------------------------------------------------------------------------- if(debug) cout << "gonna loop over events" << endl; cout<< "begining loop over events"<<endl; int numEntries = myChain->GetEntries () ; int nProcess = numEntries; if(nEntries>=0 && nEntries<numEntries) nProcess = nEntries; int nCurrentRun = -999; outlog << "will process " << nProcess << "/" << numEntries << "entries" << endl; for (int iEvent = 0 ; iEvent < nProcess ; iEvent++ ) { // HLT information for(int i=0 ; i<4 ; i++) trig_HLT_path[i]=0; for(int i=0 ; i<250 ; i++) trig_hltInfo[i]=0; // TP Initialization trig_tower_N = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta[iTow] = trig_tower_iphi[iTow] = -999; trig_tower_adc[iTow] = trig_tower_sFGVB[iTow] = -999; } trig_tower_N_M = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_M[iTow] = trig_tower_iphi_M[iTow] = -999; trig_tower_adc_M[iTow] = trig_tower_sFGVB_M[iTow] = -999; } trig_tower_N_E = 0; for(int iTow=0 ; iTow<nTow ; iTow++) { trig_tower_ieta_E[iTow] = trig_tower_iphi_E[iTow] = -999; for(int i=0 ; i<5 ; i++) trig_tower_adc_E[iTow][i] = trig_tower_sFGVB_E[iTow][i] = -999; } myChain->GetEntry (iEvent) ; // show processed file if(iEvent==0) { filename = myChain->GetFile()->GetName() ; outlog << "File : " << filename << endl << endl; } else if( filename != myChain->GetFile()->GetName() ) { filename = myChain->GetFile()->GetName() ; outlog << "File : " << myChain->GetFile()->GetName() << endl << endl; } // show current run/iCat processed if(iEvent==0) { nCurrentRun = nRun ; outlog << "nRun=" << nRun << endl; } else if(nRun!=nCurrentRun) { nCurrentRun=nRun ; outlog << "nRun=" << nRun << endl; } // run selection (using both json files) //int iJson = detJson(nRun); //int iJson = 4; if(debug) cout << "iJson = " << iJson << endl; outlog << "iJson = " << iJson << endl; if( iJson>-1 && iJson<9) { isGoodRun = AcceptEventByRunAndLumiSection(nRun, nLumi, jsonMap[iJson]); if(!isGoodRun) { outlog << "failed JSON" << endl; continue; } } else { outlog << "no proper JSON file" << endl; //continue; } // at least 2 electrons if(ele_N<2) continue; else outlog << "ele_N=" << ele_N << endl; // LOOP OVER ELECTRONS // if(debug) cout << "<-- ele_N=" << ele_N << endl << "--- electrons.size=" << electrons->GetSize() << endl; for( int iEle1=0 ; iEle1<ele_N ; iEle1++ ) { if(debug) cout << "--- get ele #" << iEle1 << endl; cand[0] = (TLorentzVector*) (electrons->At (iEle1)) ; if(debug) cout << "--- got it" << endl; // severity selection if( ele_severityLevelSeed[iEle1] >= 3 ) continue; // check whether electrons of the pair pass HLT_Ele27 Id/Iso cuts if(debug) cout << "--- checks VBTF cuts" << endl; cut_HLT_Ele27[0] = VBTFcuts( "HLT_Ele27", RunPhase, cand[0]->Pt(), cand[0]->Et(), ele_sclEta[iEle1], cand[0]->Eta(), ele_tkSumPt_dr03[iEle1], ele_ecalRecHitSumEt_dr03[iEle1], ele_hcalDepth1TowerSumEt_dr03[iEle1], ele_hcalDepth2TowerSumEt_dr03[iEle1], ele_expected_inner_hits[iEle1], ele_deltaphiin[iEle1], ele_deltaetain[iEle1], ele_he[iEle1], ele_sigmaietaieta[iEle1], ele_conv_dist[iEle1], ele_conv_dcot[iEle1], ele_fbrem[iEle1], ele_isConversion[iEle1] ) ; // check if ele is a good tag candidate : pass VBTF 95 and has pT>5 GeV cutEle[0] = 0; cutEle[0] = whichCuts( RunPhase, cand[0]->Pt(), cand[0]->Et(), ele_sclEta[iEle1], cand[0]->Eta(), ele_tkSumPt_dr03[iEle1], ele_ecalRecHitSumEt_dr03[iEle1], ele_hcalDepth1TowerSumEt_dr03[iEle1], ele_hcalDepth2TowerSumEt_dr03[iEle1], ele_expected_inner_hits[iEle1], ele_deltaphiin[iEle1], ele_deltaetain[iEle1], ele_he[iEle1], ele_sigmaietaieta[iEle1], ele_conv_dist[iEle1], ele_conv_dcot[iEle1], ele_fbrem[iEle1], ele_isConversion[iEle1] ) ; fidu[0] = 0; if ( fabs(ele_sclEta[iEle1]) < 2.5 && ( fabs(ele_sclEta[iEle1]) > 1.566 || fabs(ele_sclEta[iEle1])<1.4442 ) ) fidu[0] = 1 ; if( cutEle[0]>0 && cand[0]->Et()>=5. ) { if(debug) cout << "--- ele #" << iEle1 << " is a good tag candidate" << endl; // loop to find probe candidates for( int iEle2=0 ; iEle2<ele_N ; iEle2++ ) { if(debug) cout << "----- looks Ele #" << iEle2 << endl; cand[1] = (TLorentzVector*) (electrons->At (iEle2)) ; // severity if( ele_severityLevelSeed[iEle2] >= 3 ) continue; // check HLT_Ele27 cuts cut_HLT_Ele27[1] = VBTFcuts( "HLT_Ele27", RunPhase, cand[1]->Pt(), cand[1]->Et(), ele_sclEta[iEle1], cand[1]->Eta(), ele_tkSumPt_dr03[iEle1], ele_ecalRecHitSumEt_dr03[iEle1], ele_hcalDepth1TowerSumEt_dr03[iEle1], ele_hcalDepth2TowerSumEt_dr03[iEle1], ele_expected_inner_hits[iEle1], ele_deltaphiin[iEle1], ele_deltaetain[iEle1], ele_he[iEle1], ele_sigmaietaieta[iEle1], ele_conv_dist[iEle1], ele_conv_dcot[iEle1], ele_fbrem[iEle1], ele_isConversion[iEle1] ) ; // check cuts passed by probe candidate cutEle[1] = whichCuts( RunPhase, cand[1]->Pt(), cand[0]->Et(), ele_sclEta[iEle2], cand[1]->Eta(), ele_tkSumPt_dr03[iEle2], ele_ecalRecHitSumEt_dr03[iEle2], ele_hcalDepth1TowerSumEt_dr03[iEle2], ele_hcalDepth2TowerSumEt_dr03[iEle2], ele_expected_inner_hits[iEle2], ele_deltaphiin[iEle2], ele_deltaetain[iEle2], ele_he[iEle2], ele_sigmaietaieta[iEle2], ele_conv_dist[iEle2], ele_conv_dcot[iEle2], ele_fbrem[iEle2], ele_isConversion[iEle2] ) ; fidu[1] = 0; if ( fabs(ele_sclEta[iEle2]) < 2.5 && ( fabs(ele_sclEta[iEle2]) > 1.566 || fabs(ele_sclEta[iEle2])<1.4442 ) ) fidu[1] = 1 ; if( cutEle[1]>0 && iEle2<=iEle1 ) continue; // prevents to create several times the same pair if(debug) cout << "---> OK to form a pre-selected pair <--" << endl; // get the pair informations total = (*cand[0]) + (*cand[1]) ; // keep only pairs with Mee > 30 GeV if( total.M() < 30. ) continue; pair_M = total.M() ; pairIdx.clear(); pairIdx.push_back(iEle1); pairIdx.push_back(iEle2); for(int iP=0 ; iP<2 ; iP++) { pair_cuts[iP] = cutEle[iP]; pair_fidu[iP] = fidu[iP]; pair_HLT_Ele27_cut[iP] = cut_HLT_Ele27[iP]; // pair_eta[iP] = cand[iP]->Eta(); pair_sclEta[iP] = ele_sclEta[pairIdx[iP]]; pair_phi[iP] = cand[iP]->Phi(); pair_RCTeta[iP] = ele_RCTeta[pairIdx[iP]]; pair_RCTphi[iP] = ele_RCTphi[pairIdx[iP]]; // pair_charge[iP] = ele_echarge[pairIdx[iP]]; pair_pT[iP] = cand[iP]->Pt(); pair_eT[iP] = cand[iP]->Et(); pair_sclEt[iP] = ele_sclEt[pairIdx[iP]]; pair_E[iP] = cand[iP]->E(); // pair_L1iso[iP] = ele_RCTL1iso[pairIdx[iP]]; pair_L1noniso[iP] = ele_RCTL1noniso[pairIdx[iP]]; pair_L1iso_M[iP] = ele_RCTL1iso_M[pairIdx[iP]]; pair_L1noniso_M[iP] = ele_RCTL1noniso_M[pairIdx[iP]]; // for(int iV=0 ; iV<10 ; iV++) { pair_RCTetVect[iP][iV] = ele_RCTetVect[pairIdx[iP]][iV]; pair_RCTetaVect[iP][iV] = ele_RCTetaVect[pairIdx[iP]][iV]; pair_RCTphiVect[iP][iV] = ele_RCTphiVect[pairIdx[iP]][iV]; pair_L1isoVect[iP][iV] = ele_RCTL1isoVect[pairIdx[iP]][iV]; pair_L1nonisoVect[iP][iV] = ele_RCTL1nonisoVect[pairIdx[iP]][iV]; pair_L1isoVect_M[iP][iV] = ele_RCTL1isoVect_M[pairIdx[iP]][iV]; pair_L1nonisoVect_M[iP][iV] = ele_RCTL1nonisoVect_M[pairIdx[iP]][iV]; } // for(int iV=0 ; iV<50 ; iV++) { pair_TTetaVect[iP][iV] = ele_TTetaVect[pairIdx[iP]][iV]; pair_TTphiVect[iP][iV] = ele_TTphiVect[pairIdx[iP]][iV]; pair_TTetVect[iP][iV] = ele_TTetVect[pairIdx[iP]][iV]; } } if(debug) cout << "outtree->Fill();" << endl; outtree->Fill(); } // loop for probe } // endif ele1 is good tag candidate } // loop over electrons }//loop over events if(debug) cout << "End loop events" << endl; outlog << "End loop events" << endl; // Record tree if(debug) cout << "recording tree..." << endl; outlog << "recording tree..." << endl; outtree->Write(); if(debug) cout << "recorded !" << endl; outlog << "recorded !" << endl; outfile->Close(); if(debug) cout << "file closed." << endl; outlog << "file closed." << endl; return 1; }
void TreeToHistos(TChain* myChain, TString dirOut, ofstream& outlog, int nEntries, TString halftag, float spikeCut, TString hlt_sel, int sev_user, bool debug=false) { // get the tree int nEvent, nRun, nLumi, trig_isUnbiased, trig_isL1SingleEG2, trig_isL1SingleEG5, trig_isL1SingleEG8, vtx_N; int trig_HLT_path[4]; // Masked TT int trig_nMaskedCh; int trig_iMaskedTTeta[4032], trig_iMaskedTTphi[4032]; // TP info int trig_tower_N,trig_tower_ieta[4032],trig_tower_iphi[4032],trig_tower_adc[4032],trig_tower_sFGVB[4032]; int trig_tower_N_modif,trig_tower_ieta_modif[4032],trig_tower_iphi_modif[4032],trig_tower_adc_modif[4032],trig_tower_sFGVB_modif[4032]; int trig_L1emIso_N, trig_L1emNonIso_N, trig_L1emIso_N_modif, trig_L1emNonIso_N_modif; int trig_tower_N_emul,trig_tower_ieta_emul[4032],trig_tower_iphi_emul[4032],trig_tower_adc_emul[4032][5],trig_tower_sFGVB_emul[4032][5]; // L1 candidates info int trig_L1emIso_ieta[4], trig_L1emIso_iphi[4], trig_L1emIso_rank[4]; int trig_L1emNonIso_ieta[4], trig_L1emNonIso_iphi[4], trig_L1emNonIso_rank[4]; int trig_L1emIso_ieta_modif[4], trig_L1emIso_iphi_modif[4], trig_L1emIso_rank_modif[4]; int trig_L1emNonIso_ieta_modif[4], trig_L1emNonIso_iphi_modif[4], trig_L1emNonIso_rank_modif[4]; // Spikes int spike_N,spike_TTieta[5000], spike_TTiphi[5000], spike_Rieta[5000], spike_Riphi[5000], spike_severityLevel[5000], spike_outOfTime[5000]; double spike_Et[5000], spike_eta[5000], spike_phi[5000], spike_theta[5000]; // Global myChain->SetBranchAddress("nEvent",&nEvent); myChain->SetBranchAddress("nRun",&nRun); myChain->SetBranchAddress("nLumi",&nLumi); //myChain->SetBranchAddress("trig_HLT_path",&trig_HLT_path); myChain->SetBranchAddress("vtx_N",&vtx_N); myChain->SetBranchAddress("trig_isUnbiased",&trig_isUnbiased); myChain->SetBranchAddress("trig_isL1SingleEG2",&trig_isL1SingleEG2); myChain->SetBranchAddress("trig_isL1SingleEG5",&trig_isL1SingleEG5); myChain->SetBranchAddress("trig_isL1SingleEG8",&trig_isL1SingleEG8); // L1 candidates myChain->SetBranchAddress("trig_L1emIso_N", &trig_L1emIso_N_modif); myChain->SetBranchAddress("trig_L1emIso_ieta", &trig_L1emIso_ieta_modif); myChain->SetBranchAddress("trig_L1emIso_iphi", &trig_L1emIso_iphi_modif); myChain->SetBranchAddress("trig_L1emIso_rank", &trig_L1emIso_rank_modif); myChain->SetBranchAddress("trig_L1emNonIso_N", &trig_L1emNonIso_N_modif); myChain->SetBranchAddress("trig_L1emNonIso_ieta", &trig_L1emNonIso_ieta_modif); myChain->SetBranchAddress("trig_L1emNonIso_iphi", &trig_L1emNonIso_iphi_modif); myChain->SetBranchAddress("trig_L1emNonIso_rank", &trig_L1emNonIso_rank_modif); myChain->SetBranchAddress("trig_L1emIso_N_M", &trig_L1emIso_N); myChain->SetBranchAddress("trig_L1emIso_ieta_M", &trig_L1emIso_ieta); myChain->SetBranchAddress("trig_L1emIso_iphi_M", &trig_L1emIso_iphi); myChain->SetBranchAddress("trig_L1emIso_rank_M", &trig_L1emIso_rank); myChain->SetBranchAddress("trig_L1emNonIso_N_M", &trig_L1emNonIso_N); myChain->SetBranchAddress("trig_L1emNonIso_ieta_M", &trig_L1emNonIso_ieta); myChain->SetBranchAddress("trig_L1emNonIso_iphi_M", &trig_L1emNonIso_iphi); myChain->SetBranchAddress("trig_L1emNonIso_rank_M", &trig_L1emNonIso_rank); // Trigger Towers // masked // myChain->SetBranchAddress("trig_nMaskedRCT", &trig_nMaskedRCT); // myChain->SetBranchAddress("trig_iMaskedRCTeta", &trig_iMaskedRCTeta); // myChain->SetBranchAddress("trig_iMaskedRCTcrate", &trig_iMaskedRCTcrate); // myChain->SetBranchAddress("trig_iMaskedRCTphi", &trig_iMaskedRCTphi); myChain->SetBranchAddress("trig_nMaskedCh", &trig_nMaskedCh); myChain->SetBranchAddress("trig_iMaskedTTeta", &trig_iMaskedTTeta); myChain->SetBranchAddress("trig_iMaskedTTphi", &trig_iMaskedTTphi); // normal collection myChain->SetBranchAddress("trig_tower_N", &trig_tower_N); myChain->SetBranchAddress("trig_tower_ieta", &trig_tower_ieta); myChain->SetBranchAddress("trig_tower_iphi", &trig_tower_iphi); myChain->SetBranchAddress("trig_tower_adc", &trig_tower_adc); myChain->SetBranchAddress("trig_tower_sFGVB", &trig_tower_sFGVB); // modified collection myChain->SetBranchAddress("trig_tower_N_modif", &trig_tower_N_modif); myChain->SetBranchAddress("trig_tower_ieta_modif", &trig_tower_ieta_modif); myChain->SetBranchAddress("trig_tower_iphi_modif", &trig_tower_iphi_modif); myChain->SetBranchAddress("trig_tower_adc_modif", &trig_tower_adc_modif); myChain->SetBranchAddress("trig_tower_sFGVB_modif", &trig_tower_sFGVB_modif); myChain->SetBranchAddress("trig_tower_N_emul", &trig_tower_N_emul); myChain->SetBranchAddress("trig_tower_ieta_emul", &trig_tower_ieta_emul); myChain->SetBranchAddress("trig_tower_iphi_emul", &trig_tower_iphi_emul); myChain->SetBranchAddress("trig_tower_adc_emul", &trig_tower_adc_emul); myChain->SetBranchAddress("trig_tower_sFGVB_emul", &trig_tower_sFGVB_emul); // Spikes myChain->SetBranchAddress("spike_N",&spike_N); myChain->SetBranchAddress("spike_TTieta",&spike_TTieta); myChain->SetBranchAddress("spike_TTiphi",&spike_TTiphi); myChain->SetBranchAddress("spike_Rieta",&spike_Rieta); myChain->SetBranchAddress("spike_Riphi",&spike_Riphi); myChain->SetBranchAddress("spike_severityLevel",&spike_severityLevel); myChain->SetBranchAddress("spike_outOfTime",&spike_outOfTime); myChain->SetBranchAddress("spike_Et",&spike_Et); myChain->SetBranchAddress("spike_eta",&spike_eta); myChain->SetBranchAddress("spike_phi",&spike_phi); myChain->SetBranchAddress("spike_theta",&spike_theta); MAPTTS adcTT; MAPTTS::iterator iterTT; pair<int,int> coords; vector< pair<int,int> > maskedTT; const int nEG = 8; int trigthresh[nEG] = {2,5,8,10,12,15,20} ; bool triggEG[nEG], triggEGM[nEG]; for(int i=0 ; i<7 ; i++) { triggEG[i] = false ; triggEGM[i] = false ; } vector<int> firedEG_N; // EG 2/5/8/10/12/15/20/30 vector<int> firedEG_M; vector<int> matchIso, matchNonIso, matchIsoM, matchNonIsoM; const int nVtx=40; int iVtx=0; vector<int> IdxVtx; int nSpikyL1[nEG][nVtx], nLostSpikyL1[nEG][nVtx], nSpikes[nVtx], nSpikyL1sat[nVtx], nSpikesWellId[nVtx], nDiffSFGVB[nVtx], nMatchedTT[nVtx], nLostTT[nVtx]; for(iVtx=0 ; iVtx<nVtx ; iVtx++) { nSpikes[iVtx] = nSpikyL1sat[iVtx] = nSpikesWellId[iVtx] = nDiffSFGVB[iVtx] = nMatchedTT[iVtx] = nLostTT[iVtx] = 0; for(int itg=0 ; itg<nEG ; itg++) nSpikyL1[itg][iVtx] = nLostSpikyL1[itg][iVtx] = 0 ; } bool isGoodRun,output,saturates,wellId,missed,eliminated,zeroedTT,trigEG8,trigEG8M; string flag; // ------------------------------------------------------------------------------- // JSON FILE READER // ------------------------------------------------------------------------------- // define map of run/LS //string jsonFile = "/data_CMS/cms/ndaci/ndaci_2011A/JSON/Cert_160404-177515_7TeV_PromptReco_Collisions11_JSON.txt"; string jsonFile = "/data_CMS/cms/ndaci/ndaci_2011A/JSON/Cert_160404-178677_7TeV_PromptReco_Collisions11_JSON.txt"; map<int, vector<pair<int, int> > > jsonMap = readJSONFile(jsonFile); if(debug) cout << "gonna loop over events" << endl; TString filename; int nCurrentRun; int numEntries = myChain->GetEntries () ; outlog << "numEntries=" << numEntries << endl; int nProcess = numEntries; if(nEntries>=0 && nEntries<numEntries) nProcess = nEntries; // loop over events for (int iEvent = 0 ; iEvent < nProcess ; iEvent++ ) { IdxVtx.clear(); IdxVtx.push_back(0); if(vtx_N>0 && vtx_N<40) IdxVtx.push_back(vtx_N); //if(iEvent%500 != 0) continue; myChain->GetEntry (iEvent) ; // run selection isGoodRun = AcceptEventByRunAndLumiSection(nRun, nLumi, jsonMap); if(!isGoodRun) continue; // HLT selection if( hlt_sel=="unbias" ) { if( trig_isUnbiased==0 ) { continue; } } if(debug) cout << "passed json" << endl; // show which file is being processed if(iEvent==0) { filename = myChain->GetFile()->GetName() ; outlog << "File : " << filename << endl; } else if( filename != myChain->GetFile()->GetName() ) { filename = myChain->GetFile()->GetName() ; outlog << "File : " << myChain->GetFile()->GetName() << endl; } // show which run/category is being processed if(iEvent==0) { nCurrentRun = nRun ; outlog << "nRun=" << nRun << endl; } else if(nRun!=nCurrentRun) { nCurrentRun=nRun ; outlog << "nRun=" << nRun << endl; } //cout << nRun << " " << nEvent << endl; // map the towers adcTT.clear(); for(int t=0 ; t<trig_tower_N ; t++) { coords = make_pair( trig_tower_ieta[t] , trig_tower_iphi[t] ); adcTT[coords].first.first = trig_tower_adc[t]; adcTT[coords].second.first = trig_tower_sFGVB[t]; //if(trig_tower_ieta[t]>-17 && trig_tower_ieta[t]<18) //for(int i=0 ; i<IdxCat.size() ; i++) //h_adc[0][IdxCat[i]]->Fill(0.25*trig_tower_adc[t]); } for(int t=0 ; t<trig_tower_N_emul ; t++) { coords = make_pair( trig_tower_ieta_emul[t] , trig_tower_iphi_emul[t] ); iterTT = adcTT.find( coords ); if( iterTT != adcTT.end() ) { adcTT[coords].first.second = trig_tower_adc_emul[t][2]; adcTT[coords].second.second = trig_tower_sFGVB_emul[t][2]; //if(trig_tower_ieta_emul[t]>-17 && trig_tower_ieta_emul[t]<18) //for(int i=0 ; i<IdxCat.size() ; i++) //h_adc[3][iCat]->Fill(0.25*trig_tower_adc_emul[t][2]); } else { outlog << "mapping problem" << endl; adcTT[coords].first.first = -777; adcTT[coords].first.second = trig_tower_adc_emul[t][2]; adcTT[coords].second.first = -777; adcTT[coords].second.second = trig_tower_sFGVB_emul[t][2]; } } // get masked towers maskedTT.clear(); for(int iTT=0 ; iTT<trig_nMaskedCh ; iTT++) { maskedTT.push_back( make_pair( trig_iMaskedTTeta[iTT] , trig_iMaskedTTphi[iTT] ) ); } // loop over evil rechits if(debug) cout << "loop over evil rechits" << endl; saturates = false; for(int irh=0 ; irh<spike_N ; irh++) { if( spike_severityLevel[irh]>=sev_user && spike_severityLevel[irh]!=5 ) { // (kTime) + kWeird but not kProblematic // selection on the energy if( spike_Et[irh]<spikeCut ) continue; //if(vtx_N>0 && vtx_N<40) IdxVtx.push_back(vtx_N); for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nSpikes[IdxVtx[iVtx]]++ ; matchIso.clear(); matchNonIso.clear(); matchIsoM.clear(); matchNonIsoM.clear(); if(spike_Et[irh]>0) { output=false; saturates = false; for(int itg=0 ; itg<nEG ; itg++) triggEG[itg] = triggEGM[itg] = false; for(int ic=0 ; ic<4 ; ic++) { if(trig_L1emIso_ieta[ic]==spike_Rieta[irh] && trig_L1emIso_iphi[ic]==spike_Riphi[irh]) { output = true; matchIso.push_back(ic); if(trig_L1emIso_rank[ic]>=63) saturates = true; for(int itg=0 ; itg<nEG ; itg++) if(trig_L1emIso_rank[ic]>=trigthresh[itg]) triggEG[itg] = true; } if(trig_L1emNonIso_ieta[ic]==spike_Rieta[irh] && trig_L1emNonIso_iphi[ic]==spike_Riphi[irh]) { output = true; matchNonIso.push_back(ic); if(trig_L1emNonIso_rank[ic]>=63) saturates = true; for(int itg=0 ; itg<nEG ; itg++) if(trig_L1emNonIso_rank[ic]>=trigthresh[itg]) triggEG[itg] = true; } if(trig_L1emIso_ieta_modif[ic]==spike_Rieta[irh] && trig_L1emIso_iphi_modif[ic]==spike_Riphi[irh]) { output = true; matchIsoM.push_back(ic); if(trig_L1emIso_rank_modif[ic]>=63) saturates = true; for(int itg=0 ; itg<nEG ; itg++) if(trig_L1emIso_rank_modif[ic]>=trigthresh[itg]) triggEGM[itg] = true; } if(trig_L1emNonIso_ieta_modif[ic]==spike_Rieta[irh] && trig_L1emNonIso_iphi_modif[ic]==spike_Riphi[irh]) { output = true; matchNonIsoM.push_back(ic); if(trig_L1emNonIso_rank_modif[ic]>=63) saturates = true; for(int itg=0 ; itg<nEG ; itg++) if(trig_L1emNonIso_rank_modif[ic]>=trigthresh[itg]) triggEGM[itg] = true; } } coords = make_pair(spike_TTieta[irh] , spike_TTiphi[irh]); bool b_mask = false; for(int iTT=0 ; iTT<maskedTT.size() ; iTT++) { if( maskedTT[iTT] == coords ) b_mask = true; } //if(output) { if(true) { outlog << "Spike nRun=" << nRun << " nEvent=" << nEvent << "("<<iEvent<<")" << endl << "Rieta=" << spike_Rieta[irh] << " Riphi=" << spike_Riphi[irh] << " TTieta=" << spike_TTieta[irh] << " TTiphi=" << spike_TTiphi[irh] //<< " outOfTime=" << spike_outOfTime[irh] << " severity=" << spike_severityLevel[irh] << " Et=" << spike_Et[irh]; if(b_mask) outlog << " | masked" ; outlog << endl; if(matchIso.size()>0) for(int ic=0 ; ic<matchIso.size() ; ic++) outlog << "Iso rank=" << trig_L1emIso_rank[matchIso[ic]] << " "; if(matchNonIso.size()>0) for(int ic=0 ; ic<matchNonIso.size() ; ic++) outlog << "NonIso rank=" << trig_L1emNonIso_rank[matchNonIso[ic]] << " "; if(matchIsoM.size()>0) for(int ic=0 ; ic<matchIsoM.size() ; ic++) outlog << "IsoM rank=" << trig_L1emIso_rank_modif[matchIsoM[ic]] << " "; if(matchNonIsoM.size()>0) for(int ic=0 ; ic<matchNonIsoM.size() ; ic++) outlog << "NonIsoM rank=" << trig_L1emNonIso_rank_modif[matchNonIsoM[ic]] ; outlog<<endl; outlog << "Trigger Tower : adc=" << adcTT[coords].first.first << " adc_emul=" << adcTT[coords].first.second << " sFGVB=" << adcTT[coords].second.first << " sFGVB_emul=" << adcTT[coords].second.second ; if(adcTT[coords].second.first != adcTT[coords].second.second) { for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nDiffSFGVB[IdxVtx[iVtx]]++ ; outlog << " !! sFGVB diff !!" ; } outlog << endl; wellId = zeroedTT = eliminated = missed = false; // non L1-matching-dependant properties if(adcTT[coords].second.first==0) { wellId = true; for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nSpikesWellId[IdxVtx[iVtx]]++ ; } if(adcTT[coords].first.second>0) { for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nMatchedTT[IdxVtx[iVtx]]++; if(adcTT[coords].first.first==0) { for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nLostTT[IdxVtx[iVtx]]++; zeroedTT = true; } } // non L1-matching // L1-matching-dependant properties if( matchIso.size()>0 || matchNonIso.size()>0 ) { if(saturates) { //saturates = true; for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nSpikyL1sat[IdxVtx[iVtx]]++ ; } } // L1-matching // EGX for(int itg=0 ; itg<nEG ; itg++) { if( triggEG[itg] ) { for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nSpikyL1[itg][IdxVtx[iVtx]]++ ; if( !triggEGM[itg] ) { for(iVtx=0 ; iVtx<IdxVtx.size() ; iVtx++) nLostSpikyL1[itg][IdxVtx[iVtx]]++ ; eliminated = true; } } // EGX-L1-matching } // Modified L1-matching // EG8 if(triggEGM[2]) { missed = true; } if(wellId) outlog << " wellId"; if(zeroedTT) outlog << " zeroedTT" ; if(eliminated) outlog << " eliminatedEG8"; if(missed) outlog << " missedEG8"; if(saturates) outlog << " saturates"; outlog << endl ; // show all the trigger towers of the region if( b_mask ) { outlog << "Trigger towers of the region" << endl; vector<int> ietaTT = getEtaTT( spike_Rieta[irh] ); vector<int> iphiTT = getPhiTT( spike_Riphi[irh] ); pair<int,int> etaphi; for(int i=0 ; i<ietaTT.size() ; i++) { for(int j=0 ; j<iphiTT.size() ; j++) { etaphi = make_pair( ietaTT[i] , iphiTT[j] ); if( adcTT[etaphi].first.second != 0 ) { outlog << "ietaTT=" << ietaTT[i] << " iphiTT=" << iphiTT[j] << " adc=" << adcTT[etaphi].first.first << " adc_emul=" << adcTT[etaphi].first.second << " sFGVB=" << adcTT[etaphi].second.first << " sFGVB_emul=" << adcTT[etaphi].second.second << endl; } } } } outlog << endl; } // endif output } //endif rechit et > 8 GeV }//endif } // loop over rechits }//loop over events // show counters outlog << "COUNTING RESULTS" << endl; for(iVtx=0 ; iVtx<nVtx ; iVtx++) { outlog << "nSpikes=" << nSpikes[iVtx] << " | nSpikesWellId="<< nSpikesWellId[iVtx] //<< " | nSpikyL1EG8=" << nSpikyL1[2][iVtx] << " | nSpikyL1sat=" << nSpikyL1sat[iVtx] << endl //<< " | nLostSpikyL1EG8=" << nLostSpikyL1[2][iVtx] << " | nMatchedTT=" << nMatchedTT[iVtx] << " | nLostTT=" << nLostTT[iVtx] << " | nDiffSFGVB=" << nDiffSFGVB[iVtx] << endl << "nSpikyL1EG=["; for(int iEG=0 ; iEG<nEG ; iEG++) { outlog << nSpikyL1[iEG][iVtx] ; if(iEG<nEG-1) outlog << " ; " ; } outlog << endl << "nLostSpikyL1EG=["; for(int iEG=0 ; iEG<nEG ; iEG++) { outlog << nLostSpikyL1[iEG][iVtx] ; if(iEG<nEG-1) outlog << " ; " ; } outlog << endl; } ofstream outcount(dirOut+"counters"+halftag+".csv",ios::out); for(iVtx=0 ; iVtx<nVtx ; iVtx++) { outcount << nSpikes[iVtx] << " | " << nSpikesWellId[iVtx] << " | " << nMatchedTT[iVtx] << " | " << nLostTT[iVtx] << " | " << nDiffSFGVB[iVtx] << " | " << nSpikyL1sat[iVtx] << endl; for(int iEG=0 ; iEG<nEG ; iEG++) { outcount << nSpikyL1[iEG][iVtx] ; if(iEG<nEG-1) outcount << " | "; } outcount << endl; for(int iEG=0 ; iEG<nEG ; iEG++) { outcount << nLostSpikyL1[iEG][iVtx] ; if(iEG<nEG-1) outcount << " | "; } outcount << endl; } // plots if(debug) cout << "is gonna plot in file" << endl; // TFile *outplot = new TFile(dirOut+"spike_plots"+halftag+".root","RECREATE"); // for(iCat=0 ; iCat<nCat ; iCat++) { // for(int i=0 ; i<nHistos ; i++) { // h_adc[i][iCat]->Write(); // h_sp[i][iCat]->Write(); // h_sptp[i][iCat]->Write(); // } // } // outplot->Close(); if(debug) cout << "plotted in file" << endl; gStyle->SetPalette(1); if(debug) cout << "is gonna plot" << endl; }