64 : Algorithm( name, pSvcLocator ) {
70 declareProperty(
"Channel", m_ch = 0 );
71 declareProperty(
"Verbose", m_iverbose = 0 );
72 declareProperty(
"Nsearch", m_nsearch = 4000000 );
73 declareProperty(
"RunningAlpha", m_arun = 0 );
74 declareProperty(
"VPparam", m_iteubn = 0 );
75 declareProperty(
"PhotonNumber",
77 declareProperty(
"Precision", m_precision = 0 );
79 declareProperty(
"CMSEnergy", m_ecmsinput = 3.686 );
80 declareProperty(
"BeamEnergySpread", m_beamspread = 0.0013 );
82 declareProperty(
"ThetaMin", m_thmin = 10 );
83 declareProperty(
"ThetaMax", m_thmax = 170 );
84 declareProperty(
"AcollMax", m_zmax = 180.0 );
85 declareProperty(
"Emin",
87 declareProperty(
"MinInvMass",
89 declareProperty(
"MaxInvMass",
92 declareProperty(
"MaximumVal", m_sdif_max = 1.e-18 );
93 declareProperty(
"ScaleVPerr", m_scale_vperr = 0.0 );
97 declareProperty(
"UseWeightedEv", m_weighted = 0 );
100 declareProperty(
"DarkMode", m_darkmode = 0 );
101 declareProperty(
"DarkMass", m_DarkMass = 0.4 );
102 declareProperty(
"DarkWidth", m_DarkWidth = -1.0 );
103 declareProperty(
"DarkVectorCoupling", m_DarkVec = 1.e-3 );
104 declareProperty(
"DarkAxialCoupling", m_DarkAxial = 0 );
106 std::string path =
"./";
107 if ( getenv(
"BABAYAGANLOROOT" ) != NULL )
109 path = getenv(
"BABAYAGANLOROOT" );
112 path.append(
"vpol_novosibirsk.dat" );
113 declareProperty(
"NskFilePath", m_nsk_filepath = path );
117 MsgStream log(
msgSvc(), name() );
118 log << MSG::DEBUG <<
"BabayagaNLO in initialize()" << endmsg;
121 static const bool CREATEIFNOTTHERE(
true );
122 StatusCode RndmStatus = service(
"BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE );
123 if ( !RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc )
125 log << MSG::ERROR <<
" Could not initialize Random Number Service" << endmsg;
128 CLHEP::HepRandomEngine* engine = p_BesRndmGenSvc->GetEngine(
"BabayagaNLO" );
135 xpari[kChannel] = m_ch;
136 xpari[kVerbose] = m_iverbose;
137 xpari[kNsearch] = m_nsearch;
138 xpari[kAlphaRun] = m_arun;
139 xpari[kPhMode] = m_photmode;
140 xpari[kModelVP] = m_iteubn;
141 xpari[kPrecision] = m_precision;
142 xpari[kUseWeighted] = m_weighted;
143 xpari[kDarkMode] = m_darkmode;
145 xpard[kEcm] = m_ecmsinput;
146 xpard[kEspread] = m_beamspread;
147 xpard[kCutTh0] = m_thmin;
148 xpard[kCutTh1] = m_thmax;
149 xpard[kCutAColl] = m_zmax;
150 xpard[kCutEmin] = m_emin;
151 xpard[kCutInvMass0] = m_Minv_min;
152 xpard[kCutInvMass1] = m_Minv_max;
153 xpard[kDarkMass] = m_DarkMass;
154 xpard[kDarkWidth] = m_DarkWidth;
155 xpard[kDarkVec] = m_DarkVec;
156 xpard[kDarkAx] = m_DarkAxial;
157 xpard[kMaxSdif] = m_sdif_max;
158 xpard[kScaleVPerr] = m_scale_vperr;
160 using namespace boost::filesystem;
161 path p_nskfile( m_nsk_filepath.data() );
162 if ( !exists( p_nskfile ) && m_arun > 0 && m_iteubn == 2 )
164 log << MSG::FATAL <<
"Cannot find Novosibirsk VP file (" << p_nskfile.native()
165 <<
")!\n Is the environment variable BABAYAGANLOROOT set?" << endmsg;
166 return StatusCode::FAILURE;
169 m_nsk_filepath = p_nskfile.native();
170 strcpy(
vpcnskf_.nskfilepath, m_nsk_filepath.data() );
176 log << MSG::DEBUG <<
"Finish BabayagaNLO initialize()" << endmsg;
177 return StatusCode::SUCCESS;
181 MsgStream log(
msgSvc(), name() );
182 log << MSG::DEBUG <<
"BabayagaNLO in execute()" << endmsg;
185 GenEvent* evt =
new GenEvent( 1, 1 );
186 GenVertex* prod_vtx =
new GenVertex();
187 evt->add_vertex( prod_vtx );
189 log << MSG::DEBUG <<
"check point 1" << endmsg;
190 bool unw = !( m_weighted );
192 log << MSG::DEBUG <<
"check point 2" << endmsg;
195 log << MSG::DEBUG <<
"check point 3" << endmsg;
196 int finalpidm, finalpidp;
202 else if ( m_ch == 1 )
207 else if ( m_ch == 2 )
225 new GenParticle( CLHEP::HepLorentzVector(
p1[1],
p1[2], -
p1[3],
p1[0] ), 11, 3 );
226 p->suggest_barcode( 1 );
227 prod_vtx->add_particle_in( p );
230 p =
new GenParticle( CLHEP::HepLorentzVector(
p2[1],
p2[2], -
p2[3],
p2[0] ), -11, 3 );
231 p->suggest_barcode( 2 );
232 prod_vtx->add_particle_in( p );
234 log << MSG::DEBUG <<
"check point 4" << endmsg;
236 p =
new GenParticle( CLHEP::HepLorentzVector( p3[1], p3[2], -p3[3], p3[0] ), finalpidm, 1 );
237 p->suggest_barcode( 3 );
238 prod_vtx->add_particle_out( p );
241 p =
new GenParticle( CLHEP::HepLorentzVector( p4[1], p4[2], -p4[3], p4[0] ), finalpidp, 1 );
242 p->suggest_barcode( 4 );
243 prod_vtx->add_particle_out( p );
245 log << MSG::DEBUG <<
"check point 5" << endmsg;
254 p =
new GenParticle( CLHEP::HepLorentzVector( px, py, pz, eph ), 22, 1 );
255 p->suggest_barcode( id_cntr );
256 prod_vtx->add_particle_out( p );
260 log << MSG::DEBUG <<
"check point 6" << endmsg;
263 p =
new GenParticle( CLHEP::HepLorentzVector( 0, 0, 0,
weights_.sdif ), 99, 1 );
264 p->suggest_barcode( id_cntr );
265 prod_vtx->add_particle_out( p );
269 if ( log.level() <= MSG::DEBUG ) { evt->print(); }
272 SmartDataPtr<McGenEventCol> anMcCol( eventSvc(),
"/Event/Gen" );
276 log << MSG::WARNING <<
"add event" << endmsg;
277 MsgStream log(
msgSvc(), name() );
278 log << MSG::INFO <<
"Add McGenEvent to existing collection" << endmsg;
280 anMcCol->push_back( mcEvent );
285 log << MSG::WARNING <<
"create collection" << endmsg;
288 mcColl->push_back( mcEvent );
289 StatusCode sc = eventSvc()->registerObject(
"/Event/Gen", mcColl );
290 if ( sc != StatusCode::SUCCESS )
292 log << MSG::ERROR <<
"Could not register McGenEvent" << endmsg;
296 return StatusCode::FAILURE;
298 else { log << MSG::INFO <<
"McGenEventCol created!" << endmsg; }
301 log << MSG::DEBUG <<
"before execute() return" << endmsg;
302 return StatusCode::SUCCESS;