/* * ---- Delphes ---- * A Fast Simulator for general purpose LHC detector * S. Ovyn ~~~~ severine.ovyn@uclouvain.be * * Center for Particle Physics and Phenomenology (CP3) * Universite Catholique de Louvain (UCL) * Louvain-la-Neuve, Belgium * */ // \brief Trigger class, and some generic definitions #include "interface/TriggerUtil.h" #include "TRandom.h" #include #include #include #include #include using namespace std; TriggerTable::TriggerTable() { has_been_evaluated=false; } void TriggerTable::TriggerCardReader(const string filename){ ifstream trigger_file(filename.c_str()); if( !trigger_file.good() ) { cout << "ERROR: Trigger input file "<< filename << " not found. Exiting.\n"; return; } TriggerBit mybit; string temp_string, temp_string_no_comment, trigger_name, trigger_algorithm; while ( getline(trigger_file,temp_string) ) { string temp_string_no_comment = temp_string.substr(0,temp_string.find("#")); //remove comments if(temp_string_no_comment.size()<2) continue; // avoid empty lines istringstream temp_stream(temp_string_no_comment); temp_stream >> trigger_name; trigger_algorithm = temp_string_no_comment.substr( temp_string_no_comment.find(">>")+2) ; mybit.TriggerBit::GetTrigCondition(trigger_algorithm); list_of_trigger_bits.push_back(mybit); } } void TriggerTable::PrintTriggerTable(string LogName) { ofstream f_out(LogName.c_str(),ios::app); f_out<<"* *"<<"\n"; f_out<<"#*********************************************** *"<<"\n"; f_out<<"# Trigger conditions defined in the trigger card *"<<"\n"; f_out<<"#*********************************************** *"<<"\n"; f_out<<"* *"<<"\n"; f_out.close(); for(unsigned int i=0; i < list_of_trigger_bits.size(); i++) { list_of_trigger_bits[i].PrintTrigCondition(LogName,i+1); } } //************************************************************************* TriggerBit::TriggerBit() { has_been_evaluated=false; } void TriggerBit::GetTrigCondition(const string& trigger_algorithm) { vector ElecSequences; vector MuonSequences; vector JetSequences; vector TauJetSequences; vector EtmisSequences; vector GammaSequences; char *result = NULL; result = strtok( (char*) trigger_algorithm.c_str(),"&"); while( result != NULL ) { if(strstr (result,"ELEC"))ElecSequences.push_back(result); if(strstr (result,"MUON"))MuonSequences.push_back(result); if(strstr (result,"JET"))JetSequences.push_back(result); if(strstr (result,"TAUJET"))TauJetSequences.push_back(result); if(strstr (result,"ETMIS"))EtmisSequences.push_back(result); if(strstr (result,"GAMMA"))GammaSequences.push_back(result); result = strtok( NULL,"&"); } ElecValues = GetCuts(ElecSequences); MuonValues = GetCuts(MuonSequences); JetValues = GetCuts(JetSequences); TauJetValues = GetCuts(TauJetSequences); EtmisValues = GetCuts(EtmisSequences); GammaValues = GetCuts(GammaSequences); } void TriggerBit::PrintTrigCondition(string LogName,int i) { int elec_size = TriggerBit::ElecValues.size(); int muon_size = TriggerBit::MuonValues.size(); int jet_size = TriggerBit::JetValues.size(); int taujet_size = TriggerBit::TauJetValues.size(); int gamma_size = TriggerBit::GammaValues.size(); int etmis_size = TriggerBit::EtmisValues.size(); ofstream f_out(LogName.c_str(),ios::app); f_out <<"* *"<<"\n"; f_out << left << setw(25) <<"# Trigger bit number "<<"" << left << setw(35) < TriggerBit::GetCuts(const vector &Sequences) { vector OrderedValue; string ptVal; Int_t PtVal=0; for(unsigned int i=0; i < Sequences.size(); i++) { ptVal = Sequences[i].substr( Sequences[i].find("'")+1) ; PtVal = atoi( ptVal.c_str() ); OrderedValue.push_back(PtVal); } return OrderedValue; }