Skip to content
Snippets Groups Projects
Commit 3e5006bc authored by Alexey Zhemchugov's avatar Alexey Zhemchugov
Browse files

Merge branch 'master' into 'master'

Master

See merge request nica/spdroot!56
parents 16b45dae 327dc5d9
No related branches found
No related tags found
No related merge requests found
......@@ -65,6 +65,11 @@ void SpdParticlesAndProcesses::AddParticlesToDatabasePDG()
if (!db->GetParticle(9902110)) db->AddParticle("n_diffr0", "n_diffr0", 0, true, 0, 0, "QCD diffr.", 9902110);
if (!db->GetParticle(9902210)) db->AddParticle("p_diffr+", "p_diffr+", 0, true, 0, 1, "QCD diffr.", 9902210);
if (!db->GetParticle(1000010020)) db->AddParticle("d+", "d+", 1.876124, kTRUE, 0., 3, "Ion", 1000010020);
if (!db->GetParticle(-1000010020)) db->AddParticle("d-", "d-", 1.876124, kTRUE, 0., 3, "Ion", -1000010020);
IsParticlesAddedToDB = true;
}
......
This diff is collapsed.
......@@ -50,25 +50,25 @@ private:
void CheckParticle(SpdTofParticle* part);
const std::vector<std::string> name_particles = {"pion", "kaon", "proton"};
Double_t CalculateTofMass2(Double_t timeTof, Double_t trackLen, Double_t momentum);
std::vector<Double_t> CalculateSigma(Double_t momentum);
const std::vector<std::string> name_particles = {"pion", "kaon", "proton", "deuteron"};
Double_t CalculateTofMass2(Double_t timeTof, Double_t trackLen, Double_t momentum);
std::vector<Double_t> CalculateSigma(Double_t momentum, Int_t hitLocation);
std::vector<Double_t> CalculateMean(Double_t momentum, Int_t hitLocation);
std::vector<Double_t> CalculateDistances(Double_t TofMass2, Double_t momentum, Int_t hitLocation);
Double_t GetFitMass (Double_t momentum, std::string name_particle);
Double_t GetFitSigma_p(Double_t momentum, std::string name_particle);
Double_t GetFitMass (Double_t momentum, std::string name_particle, Int_t hitLocation);
Double_t GetFitSigma_p(Double_t momentum, std::string name_particle, Int_t hitLocation);
TF1 *GetSigma_P(Double_t xmin, Double_t xmax, std::vector<Double_t> vfit_sigma);
TF1 *GetMean(Double_t xmin, Double_t xmax, Double_t fit_mean);
Double_t fpmin, fpmax;
std::vector<Double_t> CalculateLikelihoods (Double_t tofMass2, Double_t momentum);
std::vector<Double_t> CalculateLikelihoods (Double_t tofMass2, Double_t momentum, Int_t hitLocation);
std::vector<Double_t> CalculatePosteriorProbs(Double_t tofMass2, Double_t momentum);
// magnetic field propagator
......
......@@ -249,7 +249,8 @@ void SpdTofMCHitProducer::Exec(Option_t* opt)
hit->SetHitPos(point->GetPosIn());
hit->SetTrackMom(point->GetMomIn());
hit->SetTrackLen(point->GetLength());
hit->SetNodePath(point->GetNodePath());
// add hit deposit
hit->SetResp(point->GetEnergyLoss());
......@@ -285,7 +286,8 @@ void SpdTofMCHitProducer::Exec(Option_t* opt)
hit->SetHitPos(point->GetPosIn());
hit->SetTrackMom(point->GetMomIn());
hit->SetTrackLen(point->GetLength());
hit->SetNodePath(point->GetNodePath());
// add hit deposit
hit->SetResp(point->GetEnergyLoss());
......
......@@ -41,7 +41,8 @@ public:
void SetHitPos(Double_t x, Double_t y, Double_t z) { fHitPos.SetXYZ(x,y,z); }
void SetTrackMom(Double_t px, Double_t py, Double_t pz) { fTrackMom.SetXYZ(px,py,pz); }
void SetNodePath(TString nodepath) { fnodepath = nodepath; }
// ----- Getters -----
Int_t GetPdg() const { return fPdg; }
......@@ -49,6 +50,7 @@ public:
TVector3 GetTrackMom() const { return fTrackMom; }
Double_t GetTrackLen() const { return fTrackLen; }
Double_t GetResp() const { return fResp; }
TString GetNodePath() const { return fnodepath; }
Bool_t IsBarrelHit() const { return (fModId == kSpdTofB); }
Bool_t IsEndcapHit() const { return (fModId == kSpdTofEC); }
......@@ -72,7 +74,8 @@ private:
TVector3 fTrackMom; // mc-track momentum at entrance, GeV/c
Double_t fTrackLen; // mc-track length at entrance since creation, cm
Double_t fResp; // detector response value energy, GeV
TString fnodepath;
//-------------------------------------------------------------------
// list of pairs [particle id, number of entering],
// which made a contribution to this hit
......
......@@ -32,8 +32,11 @@ public:
void SetTofMass2(Double_t TofMass2) { fTofMass2= TofMass2; }
void SetMomentum(Double_t mom) { fMomentum= mom; }
void SetDistances(std::vector<Double_t> Distances) { fDistances= Distances; }
void SetLikelihoods(std::vector<Double_t> Likelihoods) { fLikelihoods= Likelihoods; }
void SetDistances(std::vector<Double_t> Distances) { fDistances= Distances; }
void SetSigma(std::vector<Double_t> Sigma) { fSigma= Sigma; }
void SetMean(std::vector<Double_t> Mean) { fMean= Mean; }
void SetLikelihoods(std::vector<Double_t> Likelihoods) { fLikelihoods= Likelihoods; }
void SetPosteriorProbs(std::vector<Double_t> PosteriorProbs) { fPosteriorProbs= PosteriorProbs; }
......@@ -48,6 +51,12 @@ public:
Double_t GetMomentum() const { return fMomentum; }
const std::vector<Double_t> GetSigma() const { return fSigma; }
Double_t GetSigma(Int_t i) const { return fSigma[i]; }
const std::vector<Double_t> GetMean() const { return fMean; }
Double_t GetMean(Int_t i) const { return fMean[i]; }
const std::vector<Double_t> GetDistances() const { return fDistances; }
Double_t GetDistances(Int_t i) const { return fDistances[i]; }
......@@ -68,9 +77,12 @@ private:
Double_t fTofMass2; // Mass-squared information from the Time-of-Flight system
Double_t fMomentum; // momentum used for calculations [GeV/c]
std::vector<Double_t> fDistances; // distances (number of sigmas) : 0 - pion, 1- kaon, 2 - proton
std::vector<Double_t> fLikelihoods; // likelihoods (gaussian): 0 - pion, 1 - kaon, 2 - proton
std::vector<Double_t> fPosteriorProbs; // posteriors probability : 0 - pion, 1 - kaon, 2 - proton
// 0 - pion, 1- kaon, 2 - proton, 3 - deutron
std::vector<Double_t> fSigma; // sigma
std::vector<Double_t> fMean; // mean
std::vector<Double_t> fDistances; // distances (number of sigmas)
std::vector<Double_t> fLikelihoods; // likelihoods (gaussian)
std::vector<Double_t> fPosteriorProbs; // posteriors probability
......
......@@ -311,11 +311,10 @@ void SpdTofB::ConstructDetector_MRPC_Hybrid()
Double_t phi, r, x_dec, y_dec, z_dec;
Int_t inode = 0;
Int_t item = 1;
for (auto irow = -Nrow; irow <= Nrow; irow++)
{
inode = item * 100;
for (auto iphi = 0; iphi < max_phi; iphi += step_phi)
{
TGeoRotation rot1, rot2;
......@@ -328,8 +327,10 @@ void SpdTofB::ConstructDetector_MRPC_Hybrid()
rot1.RotateX(90);
rot1.RotateZ(iphi);
inode++;
trans1.SetTranslation(x_dec, y_dec, (mwidth - shift_between_row_z) * irow);
fMasterVolume->AddNode(fModule, ++inode, new TGeoCombiTrans(trans1, rot1));
fMasterVolume->AddNode(fModule, inode, new TGeoCombiTrans(trans1, rot1));
// --- second layer ----
r = Rmean - shift_between_layers_y - (shift_between_row_y * abs(irow % 2));
......@@ -340,9 +341,8 @@ void SpdTofB::ConstructDetector_MRPC_Hybrid()
rot2.RotateX(90);
rot2.RotateZ(iphi + phi_second_layer);
trans2.SetTranslation(x_dec, y_dec, (mwidth - shift_between_row_z) * irow);
fMasterVolume->AddNode(fModule, ++inode, new TGeoCombiTrans(trans2, rot2));
fMasterVolume->AddNode(fModule, inode, new TGeoCombiTrans(trans2, rot2));
inode++;
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment