8 #include "CLHEP/Units/defs.h"
9 #include "CLHEP/Units/PhysicalConstants.h"
20 wmanager_(iPSet,consumesCollector())
21 ,hepmcCollection_(iPSet.getParameter<edm::
InputTag>(
"hepmcCollection"))
22 ,tauEtCut(iPSet.getParameter<double>(
"tauEtCutForRtau"))
42 nTaus = i.
book1D(
"nTaus",
"n analyzed Taus", 1, 0., 1.);
127 TauFSRPhotonsN=i.
book1D(
"TauFSRPhotonsN",
"FSR Photons radiating from/with tau (Gauge Boson)", 5 ,-0.5,4.5);
129 TauFSRPhotonsPt=i.
book1D(
"TauFSRPhotonsPt",
"Pt of FSR Photons radiating from/with tau (Gauge Boson)", 100 ,0,100);
131 TauFSRPhotonsPtSum=i.
book1D(
"TauFSRPhotonsPtSum",
"Pt of FSR Photons radiating from/with tau (Gauge Boson)", 100 ,0,100);
143 JAKInvMass.push_back(std::vector<MonitorElement *>());
150 JAKInvMass.at(
j).push_back(i.
book1D(
"M13"+tmp,
"M_{13,"+tmp+
"} (GeV)", 80 ,0,2.0));
151 JAKInvMass.at(
j).push_back(i.
book1D(
"M23"+tmp,
"M_{23,"+tmp+
"} (GeV)", 80 ,0,2.0));
152 JAKInvMass.at(
j).push_back(i.
book1D(
"M12"+tmp,
"M_{12,"+tmp+
"} (GeV)", 80 ,0,2.0));
166 HepMC::GenEvent *myGenEvent =
new HepMC::GenEvent(*(evt->GetEvent()));
173 for(HepMC::GenEvent::particle_const_iterator
iter = myGenEvent->particles_begin();
iter != myGenEvent->particles_end();
iter++) {
177 if(
abs((*iter)->pdg_id())==15){
188 rtau(*
iter,mother,decaychannel,weight);
195 unsigned int jak_id, TauBitMask;
199 int tcharge=(*iter)->pdg_id()/
abs((*iter)->pdg_id());
202 TLorentzVector LVQ(0,0,0,0);
203 TLorentzVector LVS12(0,0,0,0);
204 TLorentzVector LVS13(0,0,0,0);
205 TLorentzVector LVS23(0,0,0,0);
209 for(
unsigned int i=0;
i<part.size();
i++){
211 PV=TVector3((*iter)->production_vertex()->point3d().x(),(*iter)->production_vertex()->point3d().y(),(*iter)->production_vertex()->point3d().z());
212 SV=TVector3(part.at(
i)->production_vertex()->point3d().x(),part.at(
i)->production_vertex()->point3d().y(),part.at(
i)->production_vertex()->point3d().z());
215 double c(2.99792458E8),Ltau(DL.Mag()/1000),
beta((*iter)->momentum().rho()/(*iter)->momentum().m());
223 TLorentzVector
LV(part.at(
i)->momentum().px(),part.at(
i)->momentum().py(),part.at(
i)->momentum().pz(),part.at(
i)->momentum().e());
268 if ( tau->production_vertex() ) {
269 HepMC::GenVertex::particle_iterator mother;
270 for (mother = tau->production_vertex()->particles_begin(
HepMC::parents); mother!= tau->production_vertex()->particles_end(
HepMC::parents); mother++ ) {
271 if((*mother)->pdg_id() == tau->pdg_id())
return GetMother(*mother);
280 std::vector<HepMC::GenParticle*> mothers;
281 if ( boson->production_vertex() ) {
282 HepMC::GenVertex::particle_iterator mother;
283 for (mother = boson->production_vertex()->particles_begin(
HepMC::parents); mother!= boson->production_vertex()->particles_end(
HepMC::parents); mother++ ) {
284 if((*mother)->pdg_id() == boson->pdg_id())
return GetMothers(*mother);
285 mothers.push_back(*mother);
294 if ( tau->production_vertex() ) {
295 HepMC::GenVertex::particle_iterator mother;
296 for (mother = tau->production_vertex()->particles_begin(
HepMC::parents); mother!= tau->production_vertex()->particles_end(
HepMC::parents); mother++ ) {
297 mother_pid = (*mother)->pdg_id();
298 if(mother_pid == tau->pdg_id())
return findMother(*mother);
306 if ( tau->end_vertex() ) {
307 HepMC::GenVertex::particle_iterator dau;
308 for (dau = tau->end_vertex()->particles_begin(HepMC::children); dau!= tau->end_vertex()->particles_end(HepMC::children); dau++ ) {
309 int dau_pid = (*dau)->pdg_id();
310 if(dau_pid == tau->pdg_id())
return false;
318 TauList.insert(TauList.begin(),
tau);
319 if ( tau->production_vertex() ) {
320 HepMC::GenVertex::particle_iterator mother;
321 for (mother = tau->production_vertex()->particles_begin(
HepMC::parents); mother!= tau->production_vertex()->particles_end(
HepMC::parents);mother++) {
322 if((*mother)->pdg_id() == tau->pdg_id()){
330 std::vector<const HepMC::GenParticle*> &ListofBrem){
332 if(
abs(p->pdg_id())==15){
337 if ( p->end_vertex() ) {
338 HepMC::GenVertex::particle_iterator dau;
339 for (dau = p->end_vertex()->particles_begin(HepMC::children); dau!= p->end_vertex()->particles_end(HepMC::children); dau++ ) {
342 if(
abs((*dau)->pdg_id()) ==
abs(photo_ID) && !doBrem){ListofFSR.push_back(*dau);}
343 if(
abs((*dau)->pdg_id()) ==
abs(photo_ID) && doBrem){ListofBrem.push_back(*dau);}
344 if((*dau)->end_vertex() && (*dau)->end_vertex()->particles_out_size()>0 &&
abs((*dau)->pdg_id()) != 111 &&
abs((*dau)->pdg_id()) != 221){
356 double mother_pid=m->pdg_id();
357 if(m->end_vertex() && mother_pid!=p->pdg_id()){
358 HepMC::GenVertex::particle_iterator dau;
359 for (dau = m->end_vertex()->particles_begin(HepMC::children); dau!= m->end_vertex()->particles_end(HepMC::children); dau++ ) {
360 int dau_pid = (*dau)->pdg_id();
361 if(fabs(dau_pid) == 22) {
362 ListofFSR.push_back(*dau);
366 if(
abs(mother_pid) == 24) BosonScale=1.0;
367 if(
abs(mother_pid) == 23) BosonScale=2.0;
368 if(
abs(mother_pid) == 22) BosonScale=2.0;
369 if(
abs(mother_pid) == 25) BosonScale=2.0;
370 if(
abs(mother_pid) == 35) BosonScale=2.0;
371 if(
abs(mother_pid) == 36) BosonScale=2.0;
372 if(
abs(mother_pid) == 37) BosonScale=1.0;
378 if(
abs(tau->pdg_id()) != 15 )
return -3;
381 if(mother_pid == -2)
return -2;
384 if(
abs(mother_pid) == 24) label =
W;
385 if(
abs(mother_pid) == 23) label =
Z;
386 if(
abs(mother_pid) == 22) label =
gamma;
387 if(
abs(mother_pid) == 25) label =
HSM;
388 if(
abs(mother_pid) == 35) label =
H0;
389 if(
abs(mother_pid) == 36) label =
A0;
390 if(
abs(mother_pid) == 37) label =
Hpm;
392 int mother_shortpid=(
abs(mother_pid)%10000);
393 if(mother_shortpid>500 && mother_shortpid<600 )label =
B;
394 if(mother_shortpid>400 && mother_shortpid<500)label =
D;
396 if(label==
B || label ==
D || label ==
other)
return -1;
403 if ( tau->end_vertex() ) {
404 HepMC::GenVertex::particle_iterator des;
405 for(des = tau->end_vertex()->particles_begin(HepMC::descendants);
406 des!= tau->end_vertex()->particles_end(HepMC::descendants);++des ) {
407 int pid = (*des)->pdg_id();
409 if((*des)->status() != 1)
continue;
412 int charge = (int) pd->charge();
413 if(charge == 0)
continue;
424 if(tau->status() == 1) channel =
stable;
435 if ( tau->end_vertex() ) {
436 HepMC::GenVertex::particle_iterator des;
437 for(des = tau->end_vertex()->particles_begin(HepMC::descendants);
438 des!= tau->end_vertex()->particles_end(HepMC::descendants);++des ) {
439 int pid = (*des)->pdg_id();
443 if(
abs(pid) == 11) eCount++;
444 if(
abs(pid) == 13) muCount++;
445 if(
abs(pid) == 111) pi0Count++;
446 if(
abs(pid) == 211) piCount++;
447 if(
abs(pid) == 213) rhoCount++;
448 if(
abs(pid) == 20213) a1Count++;
449 if(
abs(pid) == 321) KCount++;
450 if(
abs(pid) == 323) KstarCount++;
455 if(KCount >= 1) channel =
K;
456 if(KstarCount >= 1) channel =
Kstar;
457 if(a1Count >= 1) channel =
a1;
458 if(rhoCount >= 1) channel =
rho;
462 if(piCount == 1 && pi0Count == 0) channel =
pi;
463 if(piCount == 1 && pi0Count == 1) channel =
pi1pi0;
464 if(piCount == 1 && pi0Count > 1) channel =
pinpi0;
465 if(piCount == 3 && pi0Count == 0) channel =
tripi;
466 if(piCount == 3 && pi0Count > 0) channel =
tripinpi0;
468 if(muCount == 1) channel =
muon;
476 if(decay !=
pi1pi0)
return;
478 if(tau->momentum().perp() <
tauEtCut)
return;
484 if(visibleTauE != 0) rTau = ltrack/visibleTauE;
492 TLorentzVector momP4 =
motherP4(tau);
494 pionP4.Boost(-1*momP4.BoostVector());
495 double energy = pionP4.E()/(momP4.M()/2);
511 TLorentzVector
rho(0,0,0,0),
pi(0,0,0,0);
512 for(
unsigned int i=0;
i<part.size();
i++){
513 TLorentzVector
LV(part.at(
i)->momentum().px(),part.at(
i)->momentum().py(),part.at(
i)->momentum().pz(),part.at(
i)->momentum().e());
521 TLorentzVector
a1(0,0,0,0),pi_p(0,0,0,0),pi_m(0,0,0,0);
522 int nplus(0),nminus(0);
523 for(
unsigned int i=0;
i<part.size();
i++){
524 TLorentzVector
LV(part.at(
i)->momentum().px(),part.at(
i)->momentum().py(),part.at(
i)->momentum().pz(),part.at(
i)->momentum().e());
529 if(nplus+nminus==3 && nplus==1) gamma=2*pi_p.Pt()/
a1.Pt()-1;
530 if(nplus+nminus==3 && nminus==1) gamma=2*pi_m.Pt()/
a1.Pt()-1;
532 pi_p+=pi_m; gamma=2*pi_p.Pt()/
a1.Pt()-1;
540 TLorentzVector tautau(0,0,0,0);
541 TLorentzVector pipi(0,0,0,0);
542 TLorentzVector taum(0,0,0,0);
543 TLorentzVector taup(0,0,0,0);
544 TLorentzVector rho_plus,rho_minus,pi_rhominus,pi0_rhominus,pi_rhoplus,pi0_rhoplus,pi_plus,pi_minus;
545 bool hasrho_minus(
false),hasrho_plus(
false),haspi_minus(
false),haspi_plus(
false);
546 int nSinglePionDecays(0),nSingleMuonDecays(0),nSingleElectronDecays(0);
548 TLorentzVector Zboson(boson->momentum().px(),boson->momentum().py(),boson->momentum().pz(),boson->momentum().e());
549 if ( boson->end_vertex() ) {
550 HepMC::GenVertex::particle_iterator des;
551 for(des = boson->end_vertex()->particles_begin(HepMC::children); des!= boson->end_vertex()->particles_end(HepMC::children);++des ) {
552 int pid = (*des)->pdg_id();
557 TLorentzVector LVtau((*des)->momentum().px(),(*des)->momentum().py(),(*des)->momentum().pz(),(*des)->momentum().e());
562 int charge = (int) pd->charge();
563 LVtau.Boost(-1*Zboson.BoostVector());
564 LVpi.Boost(-1*Zboson.BoostVector());
569 if(charge<0){x1=LVpi.P()/LVtau.E(); taum=LVtau;}
570 else{ x2=LVpi.P()/LVtau.E();}
573 if ( (*des)->end_vertex() ) {
574 HepMC::GenVertex::particle_iterator tauprod;
575 TLorentzVector LVtau((*des)->momentum().px(),(*des)->momentum().py(),(*des)->momentum().pz(),(*des)->momentum().e());
576 if(pid == 15)taum=LVtau;
577 if(pid ==-15)taup=LVtau;
578 for(tauprod = (*des)->end_vertex()->particles_begin(HepMC::descendants); tauprod!= (*des)->end_vertex()->particles_end(HepMC::descendants);++tauprod ) {
579 int pid_d = (*tauprod)->pdg_id();
580 if(
abs(pid_d)==211 ||
abs(pid_d)==111){
581 TLorentzVector
LV((*tauprod)->momentum().px(),(*tauprod)->momentum().py(),(*tauprod)->momentum().pz(),(*tauprod)->momentum().e());
584 if(pid_d==-211 ){ pi_rhominus=
LV;}
585 if(
abs(pid_d)==111 ){ pi0_rhominus=
LV;}
589 if(pid_d==211 ){pi_rhoplus=
LV;}
590 if(
abs(pid_d)==111 ){pi0_rhoplus=
LV;}
597 if ( (*des)->end_vertex() ) {
598 HepMC::GenVertex::particle_iterator tauprod;
599 TLorentzVector LVtau((*des)->momentum().px(),(*des)->momentum().py(),(*des)->momentum().pz(),(*des)->momentum().e());
600 if(pid == 15)taum=LVtau;
601 if(pid ==-15)taup=LVtau;
602 for(tauprod = (*des)->end_vertex()->particles_begin(HepMC::descendants); tauprod!= (*des)->end_vertex()->particles_end(HepMC::descendants);++tauprod ) {
603 int pid_d = (*tauprod)->pdg_id();
604 if(
abs(pid_d)==211 ||
abs(pid_d)==111){
605 TLorentzVector
LV((*tauprod)->momentum().px(),(*tauprod)->momentum().py(),(*tauprod)->momentum().pz(),(*tauprod)->momentum().e());
608 if(pid_d==-211 ){ pi_minus=
LV;}
612 if(pid_d==211 ){pi_plus=
LV;}
620 if(hasrho_minus && hasrho_plus){
622 rho_minus=pi_rhominus;
623 rho_minus+=pi0_rhominus;
625 rho_plus+=pi0_rhoplus;
626 TLorentzVector rhorho=rho_minus;rhorho+=rho_plus;
629 TLorentzVector pi_rhoplusb=pi_rhoplus; pi_rhoplusb.Boost(-1*rhorho.BoostVector());
630 TLorentzVector pi0_rhoplusb=pi0_rhoplus; pi0_rhoplusb.Boost(-1*rhorho.BoostVector());
631 TLorentzVector pi_rhominusb=pi_rhominus; pi_rhominusb.Boost(-1*rhorho.BoostVector());
632 TLorentzVector pi0_rhominusb=pi0_rhominus; pi0_rhominusb.Boost(-1*rhorho.BoostVector());
635 TVector3 n_plus=pi_rhoplusb.Vect().Cross(pi0_rhoplusb.Vect());
636 TVector3 n_minus=pi_rhominusb.Vect().Cross(pi0_rhominusb.Vect());
639 double Acoplanarity=acos(n_plus.Dot(n_minus)/(n_plus.Mag()*n_minus.Mag()));
640 if(pi_rhominus.Vect().Dot(n_plus)>0){Acoplanarity*=-1;Acoplanarity+=2*
TMath::Pi();}
643 pi_rhoplus.Boost(-1*taup.BoostVector());
644 pi0_rhoplus.Boost(-1*taup.BoostVector());
645 pi_rhominus.Boost(-1*taum.BoostVector());
646 pi0_rhominus.Boost(-1*taum.BoostVector());
649 double y1=(pi_rhoplus.E()-pi0_rhoplus.E())/(pi_rhoplus.E()+pi0_rhoplus.E());
650 double y2=(pi_rhominus.E()-pi0_rhominus.E())/(pi_rhominus.E()+pi0_rhominus.E());
656 if(haspi_minus && haspi_plus){
657 TLorentzVector tauporig=taup;
658 TLorentzVector taumorig=taum;
661 pi_plus.Boost(-1*Zboson.BoostVector());
662 pi_minus.Boost(-1*Zboson.BoostVector());
664 taup.Boost(-1*Zboson.BoostVector());
665 taum.Boost(-1*Zboson.BoostVector());
672 double proj_m=taum.Vect().Dot(pi_minus.Vect())/(taum.P()*taup.P());
673 double proj_p=taup.Vect().Dot(pi_plus.Vect())/(taup.P()*taup.P());
674 TVector3 Tau_m=taum.Vect();
675 TVector3 Tau_p=taup.Vect();
678 TVector3 Pit_m=pi_minus.Vect()-Tau_m;
679 TVector3 Pit_p=pi_plus.Vect()-Tau_p;
681 double Acoplanarity=acos(Pit_m.Dot(Pit_p)/(Pit_p.Mag()*Pit_m.Mag()));
682 TVector3
n=Pit_p.Cross(Pit_m);
683 if(n.Dot(Tau_m)/Tau_m.Mag()>0){Acoplanarity*=-1; Acoplanarity+=2*
TMath::Pi();}
692 if(nSingleMuonDecays==2){
696 if(nSingleElectronDecays==2){
700 if(nSinglePionDecays == 2 && tautau.M()!= 0) {
705 if(x2-x1>alow && x2-x1<aup){
706 double zs=(zsup+zslow)/2;
716 const std::vector<HepMC::GenParticle*>
m=
GetMothers(boson);
718 TLorentzVector
Z(0,0,0,0);
719 for(
unsigned int i=0;
i<m.size();
i++){
724 if(taum.Vect().Dot(Zboson.Vect())/(Zboson.P()*taum.P())>0){
738 double a=1-
sqrt(fabs(1.0-2*fabs(zs)));
752 TLorentzVector
p4(0,0,0,0);
754 if ( tau->end_vertex() ) {
755 HepMC::GenVertex::particle_iterator des;
756 for(des = tau->end_vertex()->particles_begin(HepMC::descendants);
757 des!= tau->end_vertex()->particles_end(HepMC::descendants);++des ) {
758 int pid = (*des)->pdg_id();
762 if(!(
abs(pid)==211 ||
abs(pid)==13 ||
abs(pid)==11))
continue;
764 if((*des)->momentum().rho() > p4.P()) {
765 p4 = TLorentzVector((*des)->momentum().px(),
766 (*des)->momentum().py(),
767 (*des)->momentum().pz(),
768 (*des)->momentum().e());
778 return TLorentzVector(m->momentum().px(),m->momentum().py(),m->momentum().pz(),m->momentum().e());
782 TLorentzVector
p4(tau->momentum().px(),
783 tau->momentum().py(),
784 tau->momentum().pz(),
785 tau->momentum().e());
787 if ( tau->end_vertex() ) {
788 HepMC::GenVertex::particle_iterator des;
789 for(des = tau->end_vertex()->particles_begin(HepMC::descendants);
790 des!= tau->end_vertex()->particles_end(HepMC::descendants);++des ) {
791 int pid = (*des)->pdg_id();
795 if(
abs(pid) == 12 ||
abs(pid) == 14 ||
abs(pid) == 16) {
796 p4 -= TLorentzVector((*des)->momentum().px(),
797 (*des)->momentum().py(),
798 (*des)->momentum().pz(),
799 (*des)->momentum().e());
809 std::vector<const HepMC::GenParticle*> TauList;
814 std::vector<const HepMC::GenParticle*> ListofFSR; ListofFSR.clear();
815 std::vector<const HepMC::GenParticle*> ListofBrem; ListofBrem.clear();
816 std::vector<const HepMC::GenParticle*> FSR_photos; FSR_photos.clear();
817 double BosonScale(1);
818 if(TauList.size()>0){
824 double photonPtSum=0;
825 for(
unsigned int i=0;
i<ListofBrem.size();
i++){
826 photonPtSum+=ListofBrem.at(
i)->momentum().perp();
835 for(
unsigned int i=0;
i<ListofFSR.size();
i++){
836 photonPtSum+=ListofFSR.at(
i)->momentum().perp();
839 double FSR_photosSum(0);
840 for(
unsigned int i=0;
i<FSR_photos.size();
i++){
841 FSR_photosSum+=FSR_photos.at(
i)->momentum().perp();
void findTauList(const HepMC::GenParticle *tau, std::vector< const HepMC::GenParticle * > &TauList)
MonitorElement * TauFSRPhotonsN
MonitorElement * TauSpinEffectsH_rhorhoAcoplanarityplus
MonitorElement * TauSpinEffectsW_X
MonitorElement * TauSpinEffectsHpm_UpsilonA1
std::vector< std::vector< MonitorElement * > > JAKInvMass
MonitorElement * TauSpinEffectsZ_Xb
MonitorElement * DecayLength
bool getByToken(EDGetToken token, Handle< PROD > &result) const
MonitorElement * TauRtauW
TauValidation(const edm::ParameterSet &)
MonitorElement * TauSpinEffectsH_MVis
void spinEffectsZH(const HepMC::GenParticle *boson, double weight)
MonitorElement * TauMothers
MonitorElement * TauSpinEffectsHpm_eX
MonitorElement * TauSpinEffectsW_muX
MonitorElement * TauBremPhotonsN
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
MonitorElement * TauSpinEffectsZ_Xf
int tauProngs(const HepMC::GenParticle *, double weight)
edm::EDGetTokenT< edm::HepMCProduct > hepmcCollectionToken_
MonitorElement * TauBremPhotonsPtSum
MonitorElement * TauSpinEffectsH_pipiAcoplanarity
MonitorElement * TauSpinEffectsHpm_UpsilonRho
void getData(T &iHolder) const
MonitorElement * TauSpinEffectsZ_eX
int findMother(const HepMC::GenParticle *)
MonitorElement * TauProngs
int tauMother(const HepMC::GenParticle *, double weight)
int tauDecayChannel(const HepMC::GenParticle *, double weight=0.0)
bool isTauFinalStateParticle(int pdgid)
virtual void dqmBeginRun(const edm::Run &r, const edm::EventSetup &c) override
MonitorElement * TauSpinEffectsH_pipiAcollinearityzoom
const std::vector< HepMC::GenParticle * > GetMothers(const HepMC::GenParticle *boson)
math::XYZTLorentzVectorD LV
MonitorElement * TauSpinEffectsW_UpsilonRho
void photons(const HepMC::GenParticle *, double weight)
MonitorElement * TauSpinEffectsH_rhorhoAcoplanarityminus
virtual void analyze(edm::Event const &, edm::EventSetup const &) override
double leadingPionMomentum(const HepMC::GenParticle *, double weight)
MonitorElement * TauSpinEffectsH_Xf
MonitorElement * book1D(Args &&...args)
MonitorElement * TauFSRPhotonsPt
Abs< T >::type abs(const T &t)
MonitorElement * TauSpinEffectsZ_muX
MonitorElement * TauDecayChannels
edm::InputTag hepmcCollection_
MonitorElement * TauSpinEffectsH_Zs
MonitorElement * TauFSRPhotonsPtSum
HepPDT::ParticleData ParticleData
double visibleTauEnergy(const HepMC::GenParticle *)
TLorentzVector leadingPionP4(const HepMC::GenParticle *)
bool isLastTauinChain(const HepMC::GenParticle *tau)
virtual void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
MonitorElement * TauSpinEffectsZ_MVis
void setCurrentFolder(const std::string &fullpath)
MonitorElement * TauSpinEffectsH_pipiAcollinearity
TLorentzVector motherP4(const HepMC::GenParticle *)
void rtau(const HepMC::GenParticle *, int, int, double weight)
void FindPhotosFSR(const HepMC::GenParticle *p, std::vector< const HepMC::GenParticle * > &ListofFSR, double &BosonScale)
MonitorElement * TauSpinEffectsZ_X
edm::ESHandle< HepPDT::ParticleDataTable > fPDGTable
PDT table.
MonitorElement * TauSpinEffectsH_eX
MonitorElement * TauSpinEffectsW_eX
std::vector< std::vector< double > > tmp
const HepMC::GenParticle * GetMother(const HepMC::GenParticle *tau)
void spinEffectsWHpm(const HepMC::GenParticle *, int, int, std::vector< HepMC::GenParticle * > &part, double weight)
MonitorElement * LifeTime
MonitorElement * TauSpinEffectsH_muX
MonitorElement * TauSpinEffectsW_UpsilonA1
void findFSRandBrem(const HepMC::GenParticle *p, bool doBrem, std::vector< const HepMC::GenParticle * > &ListofFSR, std::vector< const HepMC::GenParticle * > &ListofBrem)
MonitorElement * TauSpinEffectsZ_Zs
MonitorElement * TauSpinEffectsHpm_X
MonitorElement * TauSpinEffectsHpm_muX
double weight(const edm::Event &)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * TauSpinEffectsH_Xb
std::vector< HepMC::GenParticle * > Get_TauDecayProducts()
bool AnalyzeTau(HepMC::GenParticle *Tau, unsigned int &JAK_ID, unsigned int &TauBitMask, bool dores=true, bool dopi0=true)
MonitorElement * nPrimeTaus
MonitorElement * TauBremPhotonsPt
MonitorElement * TauRtauHpm
unsigned int nProng(unsigned int &TauBitMask)
MonitorElement * TauSpinEffectsH_X