diff --git a/NPLib/Detectors/Epic/TEpicData.h b/NPLib/Detectors/Epic/TEpicData.h index f1489b5dbd47060f90e8f66e8d4a24a5c0990c1f..98fa084c3d0b47c1b5f3e30f6a3c8b8a10acb681 100644 --- a/NPLib/Detectors/Epic/TEpicData.h +++ b/NPLib/Detectors/Epic/TEpicData.h @@ -40,8 +40,8 @@ class TEpicData : public TObject { UShort_t AnodeNbr; Double_t Q1; Double_t Time; - // vector of {Zstep, DEstep, DTstep} - std::vector<Double_t> PosZ; + // vector of {DEstep, DTstep} : + // attention steps are modified to have a fix width along the z axis std::vector<Double_t> DE; std::vector<Double_t> DT; // DT=Ti-T0, with T0=Tfission or Tfirst_alpha @@ -51,7 +51,6 @@ class TEpicData : public TObject { UShort_t GetAnodeNbr() const { return AnodeNbr; } Double_t GetQ1() const { return Q1; } Double_t GetTime() const { return Time; } - const std::vector<Double_t>& GetPosZ() const { return PosZ; } const std::vector<Double_t>& GetDE() const { return DE; } const std::vector<Double_t>& GetDT() const { return DT; } }; @@ -85,8 +84,8 @@ class TEpicData : public TObject { public: ////////////////////// SETTERS //////////////////////// void Set(const int& tid, const string& name, const UShort_t& n, const Double_t& q1, const Double_t& t, - const std::vector<double>& z, const std::vector<double>& de, const std::vector<double>& dt) { - fEpic_Data.push_back({tid, name, n, q1, t, z, de, dt}); + const std::vector<double>& de, const std::vector<double>& dt) { + fEpic_Data.push_back({tid, name, n, q1, t, de, dt}); } const EpicAnodeData& operator[](const unsigned int& i) const {return fEpic_Data[i];} @@ -97,7 +96,6 @@ class TEpicData : public TObject { UShort_t GetAnodeNbr(const unsigned short& i) const { return fEpic_Data[i].AnodeNbr; } Double_t GetQ1(const unsigned int& i) const { return fEpic_Data[i].Q1; } Double_t GetTime(const unsigned int& i) const { return fEpic_Data[i].Time; } - const std::vector<Double_t>& GetPosZ(const unsigned int& i) const { return fEpic_Data[i].PosZ; } const std::vector<Double_t>& GetDE(const unsigned int& i) const { return fEpic_Data[i].DE; } const std::vector<Double_t>& GetDT(const unsigned int& i) const { return fEpic_Data[i].DT; } ////////////////////////////////////////////////////////////// diff --git a/NPLib/Detectors/Epic/TEpicPhysics.cxx b/NPLib/Detectors/Epic/TEpicPhysics.cxx index 77a85451a86c21ec1a22febc0b2693ff3403d7d0..58bfd2de37c38ccea14049c89054dc77a6130643 100644 --- a/NPLib/Detectors/Epic/TEpicPhysics.cxx +++ b/NPLib/Detectors/Epic/TEpicPhysics.cxx @@ -116,7 +116,6 @@ void TEpicPhysics::PreTreat() { m_PreTreatedData->Set(m_EventData->GetTrackID(i), m_EventData->GetParticleName(i), AnodeNumber, Q1, Time, - m_EventData->GetPosZ(i), m_EventData->GetDE(i), m_EventData->GetDT(i)); } diff --git a/NPSimulation/Detectors/Epic/Epic.cc b/NPSimulation/Detectors/Epic/Epic.cc index 40a827939af59a437281e79b7ef891d351d31be8..75896713dd4f85ab291eb7414b10cacfcc311e8a 100644 --- a/NPSimulation/Detectors/Epic/Epic.cc +++ b/NPSimulation/Detectors/Epic/Epic.cc @@ -539,7 +539,6 @@ void Epic::ReadSensitive(const G4Event* ){ int previous_trackID = -1; unsigned int size = Scorer->GetMult(); - //cout << endl << " ================= Epic::ReadSensitive() Scorer size = " << size << endl; for(unsigned int i = 0 ; i < size ; i++){ vector<unsigned int> level = Scorer->GetLevel(i); //double Time = RandGauss::shoot(Scorer->GetTime(i),Epic_NS::ResoTime); @@ -556,17 +555,11 @@ void Epic::ReadSensitive(const G4Event* ){ double posZ_anode = (1-m_nA)*(m_Distance_AK*mm + m_Thickness_K*mm) - std::trunc(0.5*m_nA)*(m_InterDistance_KK*mm + thickness_A); posZ_anode += m_mapping_A[Anode] * (2. * (m_Distance_AK*mm + m_Thickness_K*mm) + m_InterDistance_KK*mm + thickness_A) ; - //// FIXME : need a fixed binning in dz of 25*um and in time - //// FIXME : fill another event class FasterData with only the vectors sorted in time - - // === Epic Data int trackID = -1; string name_pertrackID = ""; double influence_pertrackID = 0; double time_pertrackID = -1; - - vector<double> dz; vector<double> de; vector<double> dt; @@ -587,41 +580,51 @@ void Epic::ReadSensitive(const G4Event* ){ if(end_of_new_trackID == true || j==step_name.size()-1) { if(name_pertrackID!="e-" && name_pertrackID!="anti_nu_e"){ int num_bins = (int)(std::ceil( (m_Distance_AK-dz.at(dz.size()-1)) / (25.*um) )) ; - vector<double> rebinned_dz; rebinned_dz.resize(num_bins); - vector<double> rebinned_de; rebinned_de.assign(num_bins, 0.0); - vector<double> rebinned_dt; rebinned_dt.resize(num_bins); + vector<double> rebinned_de(num_bins, 0.0); + vector<double> rebinned_dt(num_bins, 0.0); + vector<double> rebinned_mult(num_bins, 0.0); double bin_Limits[num_bins+1]; for(int bin=0; bin<=num_bins; bin++) bin_Limits[bin] = m_Distance_AK*mm - bin * (25.*um); - rebinned_de[0] = de.at(0); + rebinned_de[0] += de.at(0); rebinned_dt[0] += dt.at(0); rebinned_mult[0] += 1.; int bin_current = 0; for(int step=1; step<dz.size()-1; step++){ - double dzmax = 0.5*(dz.at(step-1) + dz.at(step)); - double dzmin = 0.5*(dz.at(step+1) + dz.at(step)); + double dzmax = 0.5*(dz[step-1] + dz[step]); + double dzmin = 0.5*(dz[step+1] + dz[step]); for(int bin=bin_current; bin<num_bins; bin++){ if(bin_Limits[bin] >= dzmax && dzmax > bin_Limits[bin+1] && bin_Limits[bin] > dzmin && dzmin >= bin_Limits[bin+1]){ bin_current = bin; - rebinned_de[bin] += de.at(step); + rebinned_de[bin] += de[step]; + rebinned_dt[bin] += dt[step]; + rebinned_mult[bin] += 1.; break; } else if(bin<num_bins-1 && bin_Limits[bin] >= dzmax && dzmax > bin_Limits[bin+1] && bin_Limits[bin+1] > dzmin && dzmin >= bin_Limits[bin+2]){ bin_current = bin; double weight = (dzmax-bin_Limits[bin+1])/(dzmax-dzmin); - rebinned_de[bin] += weight * de.at(step); - rebinned_de[bin+1] += (1-weight) * de.at(step); + rebinned_de[bin] += weight * de[step]; rebinned_de[bin+1] += (1.-weight) * de[step]; + rebinned_dt[bin] += weight * dt[step]; rebinned_dt[bin+1] += (1.-weight) * dt[step]; + rebinned_mult[bin] += weight ; rebinned_mult[bin+1] += 1. - weight ; break; } } } - rebinned_de[num_bins-1] += de.at(dz.at(dz.size()-1)); + rebinned_de[num_bins-1] += de[dz[dz.size()-1]]; + rebinned_dt[num_bins-1] += dt[dz[dz.size()-1]]; + rebinned_mult[num_bins-1] += 1.; + for(int i=0; i<num_bins-1; i++){ + if(rebinned_mult[i]>0) rebinned_dt[i] = rebinned_dt[i] / rebinned_mult[i] ; + } m_Event->Set(trackID, name_pertrackID, m_mapping_A[Anode], // set anode number influence_pertrackID, // set Q1 FF or alpha only time_pertrackID, // set Time - dz, rebinned_de, dt); - } + rebinned_de, rebinned_dt); + rebinned_de.clear(); + rebinned_dt.clear(); + } trackID = step_trackID.at(j); name_pertrackID = step_name.at(j); influence_pertrackID = 0; @@ -639,13 +642,14 @@ void Epic::ReadSensitive(const G4Event* ){ }// end of loop over j }// end of loop over i + //// FIXME : fill another event class FasterData with only the vectors sorted in time //// FIXME : fill the FasterData - if(m_Event->GetMultiplicity()>0){ - // fill clean-up data to FasterData sorted by time and not by position - vector<double> dt_allTracks; - vector<double> dz_allTracks; - vector<double> de_allTracks; - } + ///if(m_Event->GetMultiplicity()>0){ + /// // fill clean-up data to FasterData sorted by time and not by position + /// vector<double> dt_allTracks; + /// vector<double> dz_allTracks; + /// vector<double> de_allTracks; + ///} }