ATLAS Offline Software
Loading...
Searching...
No Matches
ParticleGun_FastCalo_ChargeFlip_Config.py
Go to the documentation of this file.
1#! -*- python -*-
2evgenConfig.description = "Single particle gun for FastCaloSim event generation"
3evgenConfig.keywords = ["singleParticle",]
4evgenConfig.generators = ["ParticleGun"]
5evgenConfig.contact = ["david.sosa@cern.ch"]
6
7import ParticleGun as PG
8import ROOT
9
10class MyParticleSampler(PG.ParticleSampler):
11 def __init__(self,energy,eta,pid,shift_z=0):
12 self.pid = pid
13 self.shift_z = shift_z
14 pdg_table = ROOT.TDatabasePDG.Instance() #Gives values in GeV
15 mass = pdg_table.GetParticle(self.pid()).Mass()*1000.
16 self.mom1 = PG.EEtaMPhiSampler(energy=energy,eta=eta,mass=mass)
17
18 def shoot(self):
19 pid = self.pid()
20
21 shift_z = self.shift_z
22
23 mom = self.mom1.shoot()
24 pos_temp = mom.Vect().Unit()
25
26 # Would it hit the barrel, or the endcap?
27 if abs(pos_temp.Z())/3550.<pos_temp.Perp()/1148.: # Hit the barrel!
28 pos_temp *= 1148./pos_temp.Perp()
29 else: # Hit the endcap!
30 pos_temp *= 3550./abs(pos_temp.Z())
31
32 # Shift position of vector in the Z direction
33 pos_temp_2 = ROOT.TVector3()
34 pos_temp_2.SetXYZ(pos_temp.X(), pos_temp.Y(), pos_temp.Z()+shift_z)
35 pos_temp_2 *= 1. / pos_temp_2.Mag(); # reduce magnitude of vector
36
37 # recalculate; Would it hit the barrel, or the endcap?
38 if abs(pos_temp_2.Z())/3550.<pos_temp_2.Perp()/1148.:
39 pos_temp_2 *= 1148./pos_temp_2.Perp()
40 else:
41 pos_temp_2 *= 3550./abs(pos_temp_2.Z())
42
43 pos = ROOT.TLorentzVector(pos_temp_2.X(),pos_temp_2.Y(),pos_temp_2.Z(), pos_temp_2.Mag())
44
45 #print "pid ",pid
46
47 return [ PG.SampledParticle( pid , mom , pos ) ]
48
49myE = float(jofile.split('_E')[1].split('_')[0])
50myZV = float(jofile.split('_')[-1].split('.py')[0].replace("m","-"))
51
52myPDGID = jofile.split('_pid')[1].split('_')[0].replace('n','-')
53myPDGID = int(float(myPDGID.replace('p','')))
54
55eta_li = []
56
57if "disj" in jofile:
58 myLowEta1 = 0.01*float(jofile.split('eta_')[1].split('_')[0].replace('m','-'))
59 myLowEta2 = 0.01*float(jofile.split('eta_')[1].split('_')[1].replace('m','-'))
60 myHighEta1 = 0.01*float(jofile.split('eta_')[1].split('_')[2].replace('m','-'))
61 myHighEta2 = 0.01*float(jofile.split('eta_')[1].split('_')[3].replace('m','-'))
62 eta_li.extend([myLowEta1,myLowEta2,myHighEta1,myHighEta2])
63
64else:
65 myLowEta = 0.01*float(jofile.split('eta')[1].split('_')[0].replace('m','-'))
66 myHighEta = 0.01*float(jofile.split('eta')[1].split('_')[1].replace('m','-'))
67 eta_li.extend([myLowEta,myHighEta])
68
69
70print "================ SETTTINGS ================="
71print ("energy = ", myE)
72print ("eta = ", eta_li)
73print ("pid = ", myPDGID)
74print ("shift_z = ", myZV)
75print "============================================"
76
77genSeq += PG.ParticleGun()
78genSeq.ParticleGun.sampler = MyParticleSampler(energy=myE,eta=eta_li,pid=(myPDGID,myPDGID),shift_z=myZV) #unmixed
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177