21 #include "FairRootManager.h"
22 #include "FairRunAna.h"
23 #include "FairRuntimeDb.h"
24 #include "TClonesArray.h"
37 fBumpArray(0), fClusterArray(0), fPhiBumpArray(0), fChargedCandidateArray(0), fNeutralCandidateArray(0), fBremCorrected4MomArray(0),fRecMomOfEle(0), fRecThetaOfEle(0), fRecPhiOfEle(0), fCharge(0), fSepPhotonE(0.), fMergPhotonE(0.), fEmcPhiBumpList(), fTrackBranchNamePidHypo(
""), fPersistance(kTRUE)
50 FairRootManager* ioman = FairRootManager::Instance();
52 cout <<
"-E- PndPidBremCorrector::Init: "
53 <<
"RootManager not instantiated!" << endl;
58 fClusterArray =
dynamic_cast<TClonesArray *
> (ioman->GetObject(
"EmcCluster"));
60 cout <<
"-W- PndEmcMakeBump::Init: "
61 <<
"No PndEmcCluster array!" << endl;
65 fPhiBumpArray =
dynamic_cast<TClonesArray *
> (ioman->GetObject(
"EmcPhiBump"));
67 cout <<
"-W- PndEmcMakePhiBump::Init: "
68 <<
"No PhiBumpArray array!" << endl;
72 fBumpArray =
dynamic_cast<TClonesArray *
> (ioman->GetObject(
"EmcBump"));
74 cout <<
"-W- PndEmcMakeBump::Init: "
75 <<
"No PndEmcBump array!" << endl;
81 cout <<
"-W- PndEmcMakeBump::Init: "
82 <<
"No PidChargedCand array!" << endl;
89 cout <<
"-W- PndEmcMakeBump::Init: "
90 <<
"No PidNeutralCand array!" << endl;
111 for (
int iCand = 0; iCand<nChargedCand; ++iCand){
120 double ene = theChargedCand->
GetEnergy();
121 TLorentzVector m4 = TLorentzVector(mom,ene);
123 double mass = 0.000511;
125 std::vector<int> sep_bumps, phi_bumps;
131 double eneCorr = TMath::Hypot(mass, momCorr.Mag());
134 bremCorr->SetMomentum(momCorr);
135 bremCorr->SetEnergy(eneCorr);
136 for (
size_t i=0;
i < sep_bumps.size(); ++
i) bremCorr->AddToSepBumpList(sep_bumps[
i]);
137 for (
size_t i=0; i < phi_bumps.size(); ++
i) bremCorr->AddToPhiBumpList(phi_bumps[i]);
138 bremCorr->SetPidCandIdx(iCand);
146 Int_t size = clref.GetEntriesFast();
152 Float_t PhotonTotEnergySepWtd = 0;
155 if (iTrkEmcIdx<0)
return 0;
157 const int nBump =
fBumpArray->GetEntriesFast();
158 for(Int_t iBump = 0; iBump<nBump; ++iBump)
164 if ( iSepBump == iTrkEmcIdx )
continue;
166 const Double_t PhotonThetaSep = PhotonBump->
position().Theta()*TMath::RadToDeg();
167 const Double_t PhotonPhiSep = PhotonBump->
position().Phi()*TMath::RadToDeg();
171 const Float_t DeltaPhiBarrel =
TMath::ASin(0.12/Pt)*2.*TMath::RadToDeg();
177 const Float_t rad_calc = 100.*
TMath::Sin(RealDeltaPhi*TMath::DegToRad()/2.)*2.0*Pt/0.3/2.0;
180 const Float_t wt = fwd ? 1.0/(1.+TMath::Exp((zed_calc-90.)/25.)) : 1.0/(1.+TMath::Exp((rad_calc-21.)/5.));
181 const Float_t ThetaCutUp = 2.;
182 const Float_t ThetaCutDown = -2.;
183 const Float_t PhiCutUp = fwd ? DeltaPhiForward : DeltaPhiBarrel;
184 const Float_t PhiCutDown = -1;
186 const Bool_t PhiCut = RealDeltaPhi <= PhiCutUp && RealDeltaPhi >= PhiCutDown;
187 const Bool_t ThetaCut = RealDeltaTheta <= ThetaCutUp && RealDeltaTheta >= ThetaCutDown;
189 if (PhiCut && ThetaCut) {
190 PhotonTotEnergySepWtd += wt*PhotonEnergySep;
191 sep_bumps.push_back(iSepBump);
196 if (PhotonTotEnergySepWtd <
fRecMomOfEle/100.) PhotonTotEnergySepWtd = 0;
198 return PhotonTotEnergySepWtd;
212 if (EleRefCluster < 0)
return 0.0;
228 for(Int_t
r = iS;
r<=iE;
r++) {
230 phi_bumps.push_back(
r);
234 return PhotonTotEnergyMerg;
244 for (
int ipb=0; ipb<nPhiBump; ++ipb) {
static T ASin(const T &x)
TClonesArray * fNeutralCandidateArray
virtual ~PndPidBremCorrector()
Double_t GetEnergy() const
Int_t GetEmcIndex() const
TVector3 position() const
TClonesArray * fChargedCandidateArray
TString fTrackBranchNamePidHypo
virtual InitStatus Init()
virtual void Exec(Option_t *opt)
TClonesArray * fClusterArray
void GetEmcPhiBumpList(int iClust)
TClonesArray * fPhiBumpArray
Double_t GetEnergyCorrected() const
TClonesArray * fBremCorrected4MomArray
PndPidBremCorrected4Mom * AddBremCorrected4Mom()
std::vector< PndEmcBump * > fEmcPhiBumpList
TVector3 GetMomentum() const
double GetMergPhotonE(PndPidCandidate *, std::vector< Int_t > &)
represents a reconstructed (splitted) emc cluster
double GetSepPhotonE(PndPidCandidate *, std::vector< Int_t > &)
TClonesArray * fBumpArray