100{
105 LOG(INFO) <<
"FixedTargetGenerator::Init Option not known "<<
Option.Data() <<
", abort";
106 }
109 std::vector<int>
r = { 221, 221, 223, 223, 113, 331, 333};
110 std::vector<int>
c = { 6 , 7, 5 , 7, 5, 6, 9};
111
113 fPythiaP->settings.mode(
"Beams:idB", 2212);
114 fPythiaN->settings.mode(
"Beams:idB", 2112);
115 }else{
116 fPythiaP->readString(
"ProcessLevel:all = off");
117 }
119 Int_t pcount = 0;
120 for(const auto& fPythia : plist) {
121 if (pcount > 0 && (
Option !=
"Primary" ||
G4only)){
continue;}
122 pcount+=1;
124 fPythia->settings.mode(
"Random:seed",
fSeed);
125 fPythia->settings.mode(
"Next:numberCount",
heartbeat);
127 fPythia->settings.mode("Beams:idA", 2212);
128 fPythia->settings.mode("Beams:frameType", 2);
129 fPythia->settings.parm(
"Beams:eA",
fMom);
130 fPythia->settings.parm("Beams:eB",0.);
131 }
133
134 fPythia->readString("Onia:all(3S1) = on");
135 fPythia->readString("443:new J/psi J/psi 3 0 0 3.09692 0.00009 3.09602 3.09782 0. 1 1 0 1 0");
136 fPythia->readString("443:addChannel = 1 1. 0 -13 13");
137 fPythia->readString("553:new Upsilon Upsilon 3 0 0 9.46030 0.00005 9.45980 9.46080 0.00000e+00 0 1 0 1 0");
138 fPythia->readString("553:addChannel = 1 1. 0 -13 13");
139 }
141 fPythia->readString("WeakSingleBoson:ffbar2gmZ = on");
142
143 fPythia->readString("23:onMode = off");
144 fPythia->readString("23:onIfAll = 13 13");
145 fPythia->readString("23:mMin = 0.5");
146 fPythia->readString("PhaseSpace:mHatMin = 0.5");
147 fPythia->readString("PartonLevel:FSR = on");
148 fPythia->readString("PDF:pSet = 4");
149 }
151 fPythia->readString("PhotonCollision:gmgm2mumu = on");
152 }
154 fPythia->readString("SoftQCD:inelastic = on");
155 fPythia->readString("PhotonCollision:gmgm2mumu = on");
156 fPythia->readString("PromptPhoton:all = on");
157 fPythia->readString("WeakBosonExchange:all = on");
158 fPythia->readString("WeakSingleBoson:all = on");
159 }
161 fPythia->readString("431:new D_s+ D_s- 1 3 0 1.96849 0.00000 0.00000 0.00000 1.49900e-01 0 1 0 1 0");
162 fPythia->readString("431:addChannel = 1 0.0640000 0 -15 16");
163 }
164
165
167 while(n!=0){
168 n = fPythia->particleData.nextId(n);
169#ifndef PYTHIA8_V
170 ParticleDataEntry*
p = fPythia->particleData.particleDataEntryPtr(n);
171#else
172#if PYTHIA8_V<8309
173 ParticleDataEntry*
p = fPythia->particleData.particleDataEntryPtr(n);
174#else
175 Pythia8::ParticleDataEntryPtr
p = fPythia->particleData.particleDataEntryPtr(n);
176#endif
177#endif
179 std::string particle = std::to_string(n)+":mayDecay = false";
180 fPythia->readString(particle);
181 LOG(INFO) <<
"FixedTargetGenerator::Init Made "<<
p->name().c_str() <<
" stable for Pythia, should decay in Geant4";
182 }
183 }
184
185
187 LOG(INFO) <<
"FixedTargetGenerator::Init Rescale BRs of dimuon decays in Pythia: "<<
fBoost;
188 for (
unsigned int i=0;
i<
r.size(); ++
i) {
189#ifndef PYTHIA8_V
190 Pythia8::ParticleDataEntry*
V = fPythia->particleData.particleDataEntryPtr(r[i]);
191#else
192#if PYTHIA8_V<8309
193 Pythia8::ParticleDataEntry*
V = fPythia->particleData.particleDataEntryPtr(r[i]);
194#else
195 Pythia8::ParticleDataEntryPtr
V = fPythia->particleData.particleDataEntryPtr(r[i]);
196#endif
197#endif
198 Pythia8::DecayChannel
ch =
V->channel(c[i]);
199 if (TMath::Abs(
ch.product(0))!=13 || TMath::Abs(
ch.product(1))!=13){
200 LOG(INFO) <<
"FixedTargetGenerator::Init this is not the right decay channel:"<<
r[
i] <<
" "<<
c[
i];
201 }else{
206 fPythia->readString(
tmp.Data());
207 }
208 }
209 }
210 fPythia->init();
211 }
212
214 TString SIMPATH=getenv("SIMPATH");
215 TString DecayFile =SIMPATH+"/share/EvtGen/DECAY.DEC";
216 TString ParticleFile =SIMPATH + "/share/EvtGen/evt.pdl";
217 if(SIMPATH == "")
218 {
219 std::cout << "Using $EVTGENDATA "<< getenv("EVTGENDATA") << std::endl;
220 DecayFile =TString(getenv("EVTGENDATA"))+"/DECAY.DEC";
221 ParticleFile =TString(getenv("EVTGENDATA"))+ "/evt.pdl";
222 }
223 EvtAbsRadCorr *fsrPtrIn = 0;
224 EvtExternalGenList *extPtr = new EvtExternalGenList();
225 std::list<EvtDecayBase*> models = extPtr->getListOfModels();
226
227 EvtRandomEngine* eng = new EvtSimpleRandomEngine();
228 EvtRandom::setRandomEngine(eng);
229 EvtGen *myEvtGenPtr = new EvtGen(DecayFile.Data(), ParticleFile.Data(),eng, fsrPtrIn, &models, 1, false);
230 TString UdecayFile = getenv("FAIRSHIP");UdecayFile +="/gconfig/USERDECAY.DEC";
231 evtgenP =
new EvtGenDecays(
fPythiaP, DecayFile.Data(), ParticleFile.Data(),myEvtGenPtr);
232 evtgenP->readDecayFile(UdecayFile.Data());
233
235 evtgenN =
new EvtGenDecays(
fPythiaN, DecayFile.Data(), ParticleFile.Data(),myEvtGenPtr);
236 }
237 }
241 TGeoNavigator*
nav = gGeoManager->GetCurrentNavigator();
243 TGeoNode*
target =
nav->GetCurrentNode();
244 TObjArray* nodes =
target->GetVolume()->GetNodes();
245 TGeoNode*
first = (TGeoNode*)nodes->At(0);
246 Int_t ilast = nodes->GetSize()-5;
247 TGeoNode* last = (TGeoNode*)nodes->At(ilast);
249 TGeoBBox* sha = (TGeoBBox*)
first->GetVolume()->GetShape();
250 Double_t dz = sha->GetDZ();
251 Double_t
origin[3] = {0,0,-dz};
252 Double_t master[3] = {0,0,0};
253 nav->LocalToMaster(origin,master);
256 sha = (TGeoBBox*)
first->GetVolume()->GetShape();
257 dz = sha->GetDZ();
259 nav->LocalToMaster(origin,master);
267 }
268 else{
269 TGeoVolume*
top = gGeoManager->GetTopVolume();
271 if (!target){
272 LOG(ERROR) <<
"FixedTargetGenerator::Init target not found, "<<
targetName.Data() <<
", program will crash";
273 }
274 Double_t z_middle =
target->GetMatrix()->GetTranslation()[2];
275 TGeoBBox* sha = (TGeoBBox*)
target->GetVolume()->GetShape();
276 startZ = z_middle - sha->GetDZ();
277 endZ = z_middle + sha->GetDZ();
284 }
285
288 }
289
290 return kTRUE;
291}
GenieGenerator * fMaterialInvestigator
Pythia8::RndmEngine * fRandomEngine
Double_t MeanMaterialBudget(const Double_t *start, const Double_t *end, Double_t *mparam)