diff --git a/NPLib/TrackReconstruction/NPRansac.cxx b/NPLib/TrackReconstruction/NPRansac.cxx index ec0d36bfbf7e07cbc7547e3288fa8fdf94d54d1b..5e28ea7c720c16b75b4c24264cb77edfa2f2003b 100644 --- a/NPLib/TrackReconstruction/NPRansac.cxx +++ b/NPLib/TrackReconstruction/NPRansac.cxx @@ -54,6 +54,9 @@ Ransac::Ransac(int NumberOfPadsX, int NumberOfPadsY, bool Visu) fVisu = Visu; //fNumberOfTracksMax = 10; + Rand=new TRandom3(); + myTrack = NPL::Track(); + if(fVisu==1){ m_ServerSocket = new TServerSocket(9092,true,100); //pl = new TGraph2D(); @@ -205,7 +208,7 @@ vector<NPL::Track> Ransac::SimpleRansac() m_Histo->Clear(); } - TRandom* Rand=new TRandom(); + //TRandom3* Rand=new TRandom3(); double RemainingCharge = fTotalCharge; /*cout << "/// Original total charge= " << fTotalCharge << endl; cout << "/// Charge Threshold= " << fTotalCharge*fRANSACChargeThreshold << endl; @@ -228,7 +231,7 @@ vector<NPL::Track> Ransac::SimpleRansac() std::vector<int> inliners; inliners.clear(); - fRANSACMaxIteration = 2.0*vX.size(); + fRANSACMaxIteration = 1.0*vX.size(); for(int i=0;i<fRANSACMaxIteration;i++){ int vXsize = vX.size(); int p1=(int)(Rand->Uniform(0,vXsize)); @@ -272,7 +275,8 @@ vector<NPL::Track> Ransac::SimpleRansac() TVector3 Vdir = TVector3(V2.x()-V1.x(),V2.y()-V1.y(),V2.z()-V1.z()); Vdir = Vdir.Unit(); - NPL::Track myTrack = NPL::Track(); + //NPL::Track myTrack = NPL::Track(); + myTrack.Clear(); myTrack.Xm=V1.x(); myTrack.Ym=V1.y(); @@ -284,8 +288,8 @@ vector<NPL::Track> Ransac::SimpleRansac() - int TrackNumber = vTrack.size(); - TString TrackName = Form("Track%d",TrackNumber); + //int TrackNumber = vTrack.size(); + //TString TrackName = Form("Track%d",TrackNumber); int inliner_size = inliners.size(); for(int p=0; p<inliner_size; p++){ diff --git a/NPLib/TrackReconstruction/NPRansac.h b/NPLib/TrackReconstruction/NPRansac.h index 2428c5571f7064481ff1432999c47ac6504a6728..feb6451d7c43f6d93d4bbbff023f5ef28144fc1b 100644 --- a/NPLib/TrackReconstruction/NPRansac.h +++ b/NPLib/TrackReconstruction/NPRansac.h @@ -42,6 +42,7 @@ using namespace NPL; #include <TCanvas.h> #include <TVector3.h> #include <TRandom.h> +#include <TRandom3.h> #include <TServerSocket.h> #include <TSocket.h> #include <TMonitor.h> @@ -86,6 +87,8 @@ namespace NPL{ TGraph2D* pl; vector<NPL::Track> vTrack; vector<double> vTrackCharge; + TRandom3* Rand; + NPL::Track myTrack; private: float fRANSACThreshold; diff --git a/NPLib/TrackReconstruction/NPTrack.cxx b/NPLib/TrackReconstruction/NPTrack.cxx index 93b00e8e2a345ef004f29476029568c03c9fd506..e1705b1b20481e0e685fa5e0f857ff58f483bad8 100644 --- a/NPLib/TrackReconstruction/NPTrack.cxx +++ b/NPLib/TrackReconstruction/NPTrack.cxx @@ -143,6 +143,19 @@ TVector3 Track::GetPointBarycenter() return vBarycentre; } +////////////////////////////////////////////////////// +double Track::GetTrackLengthX() +{ + double length; + + double Xmax = *max_element(vX.begin(), vX.end()); + double Xmin = *min_element(vX.begin(), vX.end()); + + length = sqrt(pow(Xmax-Xmin,2)); + + return length; + +} ////////////////////////////////////////////////////// double Track::GetTrackLength(double PadSizeX, double PadSizeY, double DriftVelocity) { @@ -162,6 +175,18 @@ double Track::GetTrackLength(double PadSizeX, double PadSizeY, double DriftVeloc return length; } +////////////////////////////////////////////////////// +double Track::GetPartialCharge(double PadXmin, double PadXmax) +{ + double Q=0; + unsigned int size = vQ.size(); + for(unsigned int i=0; i<size; i++){ + if(vX[i]>=PadXmin && vX[i]<=PadXmax){ + Q += vQ[i]; + } + } + return Q; +} ////////////////////////////////////////////////////// double Track::GetTotalCharge() { diff --git a/NPLib/TrackReconstruction/NPTrack.h b/NPLib/TrackReconstruction/NPTrack.h index 1cb7226bd923be586b7d62609a27bc5cb999a0b7..1da625e4546dcf2d462a9c7b4d030d96c08fa3a5 100644 --- a/NPLib/TrackReconstruction/NPTrack.h +++ b/NPLib/TrackReconstruction/NPTrack.h @@ -86,8 +86,10 @@ namespace NPL{ TVector3 GetPointBarycenter(); + double GetTrackLengthX(); double GetTrackLength(double PadSizeX, double PadSizeY, double DriftVelocity); double GetTotalCharge(); + double GetPartialCharge(double PadXmin, double PadXmax); //void ResetLines(); void Clear(); diff --git a/Projects/Actar/Analysis.cxx b/Projects/Actar/Analysis.cxx index b54ad13d31736c0c329b75934a6edc6fdb9bc076..871dc451858b90a42ee543559542a2325ca1bdea 100644 --- a/Projects/Actar/Analysis.cxx +++ b/Projects/Actar/Analysis.cxx @@ -131,7 +131,7 @@ void Analysis::TreatEvent(){ for(unsigned int k=0; k<Actar->Si_E.size(); k++){ ESi.push_back(Actar->Si_E[k]); SiNumber.push_back(Actar->Si_Number[k]); - DE.push_back(vTrack[i].GetTotalCharge()); + DE.push_back(vTrack[i].GetPartialCharge(108,128)/(20./cos(angle*TMath::Pi()/180))); double E3 = EnergyLoss_3He.EvaluateInitialEnergy(Actar->Si_E[k]*MeV,LengthInGas*mm,angle*TMath::Pi()/180); double BeamEnergy = EnergyLoss_17C.Slow(510*MeV,(XVertex[i]+60)*mm, BeamAngle*TMath::Pi()/180); TheReaction->SetBeamEnergy(BeamEnergy); diff --git a/Projects/Actar/configs/ConfigActar.dat b/Projects/Actar/configs/ConfigActar.dat index fa2ac5467fa033cfc4a5bb33975773d08577dfbf..f05aaed2abe78979e80a3c9bfe018d46dafc7001 100644 --- a/Projects/Actar/configs/ConfigActar.dat +++ b/Projects/Actar/configs/ConfigActar.dat @@ -1,6 +1,6 @@ ConfigActar RecoRansac= 1 -RecoVisu= 1 +RecoVisu= 0 HIT_THRESHOLD= 2 Q_THRESHOLD= 0 T_THRESHOLD= 0 diff --git a/Projects/Actar/configs/RansacConfig_simu.dat b/Projects/Actar/configs/RansacConfig_simu.dat index eaec1536743aa335e2452de829292dc15b5c91ca..e8d2c58bf00bf8b80651599724ac2473f471d651 100644 --- a/Projects/Actar/configs/RansacConfig_simu.dat +++ b/Projects/Actar/configs/RansacConfig_simu.dat @@ -1,6 +1,6 @@ ConfigRansac RANSACMaxIteration= 1200 -RANSACDistance= 4 +RANSACDistance= 5 RANSACThreshold= 10 RANSACChargeThreshold= 0.01 RANSACPointThreshold= 0.1