From 3cc737c8112537c79ad0732109a7359e538fbd8a Mon Sep 17 00:00:00 2001 From: matta <matta@npt> Date: Tue, 20 Oct 2009 09:58:04 +0000 Subject: [PATCH] * Now taking into account MUST2 CsI and SiLi cristal/pad Number - Algo need to be fixed because it work only if the array of telescope is under 10 --- .../DetectorConfiguration/Riken_65mm.detector | 2 +- NPAnalysis/10He_Riken/Analysis | Bin 70174 -> 70336 bytes .../10He_Riken/include/ObjectManager.hh | 2 +- NPAnalysis/10He_Riken/src/Analysis.cc | 16 +- .../DummyDetector/TDUMMYDetectorDataDict.cxx | 2 +- NPLib/InitialConditions/TInitialConditions.h | 1 - NPLib/MUST2/Must2Array.h | 5 +- NPLib/MUST2/TMust2Data.h | 4 +- NPLib/MUST2/TMust2Physics.cxx | 314 +++++++++++++++++- NPLib/MUST2/TMust2Physics.h | 3 +- NPSimulation/include/Must2Scorers.hh | 24 ++ NPSimulation/src/EventGeneratorTransfert.cc | 6 +- .../src/EventGeneratorTransfertToResonance.cc | 12 +- NPSimulation/src/GeneralScorers.cc | 1 - NPSimulation/src/MUST2Array.cc | 186 ++++++----- NPSimulation/src/Must2Scorers.cc | 100 ++++++ 16 files changed, 552 insertions(+), 126 deletions(-) diff --git a/Inputs/DetectorConfiguration/Riken_65mm.detector b/Inputs/DetectorConfiguration/Riken_65mm.detector index 31d9cbda5..4e86c36cc 100644 --- a/Inputs/DetectorConfiguration/Riken_65mm.detector +++ b/Inputs/DetectorConfiguration/Riken_65mm.detector @@ -115,7 +115,7 @@ CSI= 0 VIS= all %%%%%%%%%%%%%%%%%%%% -AddThinSi +%AddThinSi %%%%%%%%% Det 1 %%%%%%%% ThinSi A= 17.61 9.85 104.11 diff --git a/NPAnalysis/10He_Riken/Analysis b/NPAnalysis/10He_Riken/Analysis index 59f527f9d00c3ebb0de4ab83fe2eb345fcc3f2f7..f0612a01b99c8a28060b8aa7d3b0266620d96a3a 100755 GIT binary patch delta 26172 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 V-x3h|zZ`LWz2(Dy1zO(s`XBK=3-|y4 delta 25786 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 XFM8(tAV)loWWLbxPFT3(&7l7U)L2|X diff --git a/NPAnalysis/10He_Riken/include/ObjectManager.hh b/NPAnalysis/10He_Riken/include/ObjectManager.hh index 9f84a86bd..7898e3e60 100644 --- a/NPAnalysis/10He_Riken/include/ObjectManager.hh +++ b/NPAnalysis/10He_Riken/include/ObjectManager.hh @@ -109,7 +109,7 @@ namespace ENERGYLOSS // 3He Energy Loss EnergyLoss He3TargetWind = EnergyLoss ( "3He_Mylar.txt" , 1000 , - 3 , + 3 , 3 ); EnergyLoss He3TargetGaz = EnergyLoss ( "3He_D2solid_1b_26K.txt" , diff --git a/NPAnalysis/10He_Riken/src/Analysis.cc b/NPAnalysis/10He_Riken/src/Analysis.cc index e6b193ec1..4009505cb 100644 --- a/NPAnalysis/10He_Riken/src/Analysis.cc +++ b/NPAnalysis/10He_Riken/src/Analysis.cc @@ -73,7 +73,8 @@ int main(int argc,char** argv) // Get Must2 Pointer: MUST2Array* M2 = (MUST2Array*) myDetector -> m_Detector["MUST2"] ; - + // Allow directe acces to MUST2 Physics event + TMust2Physics* M2Physics = M2 -> GetPhysics(); cout << " ///////// Starting Analysis ///////// "<< endl << endl ; int i ,N=Chain -> GetEntries(); @@ -115,6 +116,8 @@ int main(int argc,char** argv) myDetector -> BuildPhysicalEvent() ; //// + + // Target (from initial condition) XTarget = Init->GetICPositionX(0); YTarget = Init->GetICPositionY(0); @@ -127,7 +130,7 @@ int main(int argc,char** argv) // Must 2 And ThinSi // for(int hit = 0; hit < M2 -> GetEventMultiplicity() ; hit ++) { - ELab[hit] = M2 -> GetEnergyDeposit(hit); + // ELab[hit] = M2 -> GetEnergyDeposit(hit); TVector3 HitDirection = M2 -> GetPositionOfInteraction(hit) - TVector3(XTarget,YTarget,0); // Angle between beam and particle @@ -140,10 +143,12 @@ int main(int argc,char** argv) if(M2 -> GetPositionOfInteraction(hit).Z()>0) { if(ELab[hit]>-1000 && ThinSi_E>0 ) + if(M2Physics.CsI.size) { ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle 2*0.4*micrometer , // Target Thickness at 0 degree ThetaMM2Surface ); + ELab[hit]= He3StripSi.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle 20*micrometer , // Target Thickness at 0 degree @@ -172,7 +177,8 @@ int main(int argc,char** argv) else if(ELab[hit]>-1000 ) { - if(ELab[hit]>21.66)//CsI are inside a Mylar foil, plus rear alu strip + + if(ELab[hit]>21.66)//CsI are inside a Mylar foil, plus rear alu strip { ELab[hit]= He3TargetWind.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle 3*micrometer , // Target Thickness at 0 degree @@ -180,8 +186,7 @@ int main(int argc,char** argv) ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle 0.4*micrometer , // Target Thickness at 0 degree ThetaMM2Surface ); - } - + } ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle 0.4*micrometer , // Target Thickness at 0 degree ThetaMM2Surface ); @@ -259,7 +264,6 @@ int main(int argc,char** argv) return 0 ; } - double ThetaCalculation (TVector3 A , TVector3 B) { double Theta = acos( (A.Dot(B)) / (A.Mag()*B.Mag()) ) ; diff --git a/NPLib/DummyDetector/TDUMMYDetectorDataDict.cxx b/NPLib/DummyDetector/TDUMMYDetectorDataDict.cxx index f0f60697f..00fdadd5b 100644 --- a/NPLib/DummyDetector/TDUMMYDetectorDataDict.cxx +++ b/NPLib/DummyDetector/TDUMMYDetectorDataDict.cxx @@ -1,5 +1,5 @@ // -// File generated by rootcint at Fri Oct 16 12:56:33 2009 +// File generated by rootcint at Tue Oct 20 12:17:59 2009 // Do NOT change. Changes will be lost next time file is generated // diff --git a/NPLib/InitialConditions/TInitialConditions.h b/NPLib/InitialConditions/TInitialConditions.h index 96d8e9cec..468e941d2 100644 --- a/NPLib/InitialConditions/TInitialConditions.h +++ b/NPLib/InitialConditions/TInitialConditions.h @@ -28,7 +28,6 @@ #include <vector> #include "TObject.h" - using namespace std ; diff --git a/NPLib/MUST2/Must2Array.h b/NPLib/MUST2/Must2Array.h index 6e91fcab2..d8babeea6 100644 --- a/NPLib/MUST2/Must2Array.h +++ b/NPLib/MUST2/Must2Array.h @@ -98,11 +98,14 @@ class MUST2Array : public NPA::VDetector TVector3 GetPositionOfInteraction(int i) ; TVector3 GetTelescopeNormal(int i) ; + + TMust2Physics* GetPhysics() {return EventPhysics ;}; + void Print() ; private: // Root Input and Output tree classes - TMust2Data* EventData ; + TMust2Data* EventData ; TMust2Physics* EventPhysics ; diff --git a/NPLib/MUST2/TMust2Data.h b/NPLib/MUST2/TMust2Data.h index 043937897..654e999cd 100644 --- a/NPLib/MUST2/TMust2Data.h +++ b/NPLib/MUST2/TMust2Data.h @@ -139,12 +139,12 @@ class TMust2Data : public TObject { // SiLi //(E) - UShort_t GetMMSiLiEMult() {return fMM_SiLiE_DetectorNbr.size();} + UShort_t GetMMSiLiEMult() {return fMM_SiLiE_DetectorNbr.size();} UShort_t GetMMSiLiEDetectorNbr(Int_t i) {return fMM_SiLiE_DetectorNbr.at(i);} UShort_t GetMMSiLiEPadNbr(Int_t i) {return fMM_SiLiE_PadNbr.at(i);} Double_t GetMMSiLiEEnergy(Int_t i) {return fMM_SiLiE_Energy.at(i);} //(T) - UShort_t GetMMSiLiTMult() {return fMM_SiLiT_DetectorNbr.size();} + UShort_t GetMMSiLiTMult() {return fMM_SiLiT_DetectorNbr.size();} UShort_t GetMMSiLiTDetectorNbr(Int_t i) {return fMM_SiLiT_DetectorNbr.at(i);} UShort_t GetMMSiLiTPadNbr(Int_t i) {return fMM_SiLiT_PadNbr.at(i);} Double_t GetMMSiLiTTime(Int_t i) {return fMM_SiLiT_Time.at(i);} diff --git a/NPLib/MUST2/TMust2Physics.cxx b/NPLib/MUST2/TMust2Physics.cxx index 137e8a86a..20d7240be 100644 --- a/NPLib/MUST2/TMust2Physics.cxx +++ b/NPLib/MUST2/TMust2Physics.cxx @@ -24,6 +24,9 @@ #include <iostream> #include <cmath> +// ROOT +#include "TVector2.h" + ClassImp(TMust2Physics) TMust2Physics::TMust2Physics() @@ -71,13 +74,15 @@ void TMust2Physics::BuildPhysicalEvent(TMust2Data* Data) TelescopeNumber.push_back(Data->GetMMStripXEDetectorNbr(0)) ; // Data->Get Max Energy - if(Data->GetMMStripXEEnergy(0) > Data->GetMMStripYEEnergy(0)) Si_E.push_back( Data->GetMMStripXEEnergy(0) ) ; - else Si_E.push_back( Data->GetMMStripYEEnergy(0) ) ; - + // if(Data->GetMMStripXEEnergy(0) > Data->GetMMStripYEEnergy(0)) Si_E.push_back( Data->GetMMStripXEEnergy(0) ) ; + // else Si_E.push_back( Data->GetMMStripYEEnergy(0) ) ; + Si_E.push_back( Data->GetMMStripXEEnergy(0) ) ; + // Data->Get Min Time - if(Data->GetMMStripXTTime(0) < Data->GetMMStripYTTime(0)) Si_T.push_back( Data->GetMMStripXTTime(0) ) ; - else Si_T.push_back( Data->GetMMStripYTTime(0) ) ; - + // if(Data->GetMMStripXTTime(0) < Data->GetMMStripYTTime(0)) Si_T.push_back( Data->GetMMStripXTTime(0) ) ; + // else Si_T.push_back( Data->GetMMStripYTTime(0) ) ; + Si_T.push_back( Data->GetMMStripXTTime(0) ) ; + Si_X.push_back( Data->GetMMStripXEStripNbr(0) ) ; Si_Y.push_back( Data->GetMMStripYEStripNbr(0) ) ; @@ -125,11 +130,17 @@ void TMust2Physics::BuildPhysicalEvent(TMust2Data* Data) } - if (!Check_SiLi && !Check_CsI ) TotalEnergy.push_back( Si_E.at(0) ); - else if (Check_SiLi && !Check_CsI ) TotalEnergy.push_back( + Si_E.at(0) + SiLi_E.at(0) ); - else if (Check_CsI && !Check_SiLi) TotalEnergy.push_back( CsI_E .at(0) + Si_E.at(0) ); - else if (Check_CsI && Check_SiLi) TotalEnergy.push_back( CsI_E .at(0) + Si_E.at(0) + SiLi_E.at(0) ); + if(!Check_SiLi && !Check_CsI ) { TotalEnergy.push_back( Si_E.at(0) ) ; + CsI_E.push_back(0) ; CsI_T.push_back(0) ; + SiLi_E.push_back(0) ; SiLi_T.push_back(0) ; } + + else if (Check_SiLi && !Check_CsI ) { TotalEnergy.push_back( Si_E.at(0) + SiLi_E.at(0) ) ; + CsI_E.push_back(0) ; CsI_T.push_back(0) ; } + + else if (Check_CsI && !Check_SiLi) { TotalEnergy.push_back( CsI_E .at(0) + Si_E.at(0) ) ; + SiLi_E.push_back(0) ; SiLi_T.push_back(0) ; } + TotalEnergy.push_back( CsI_E[0] + Si_E[0] + SiLi_E[0] ); return; } @@ -217,10 +228,9 @@ void TMust2Physics::BuildPhysicalEvent(TMust2Data* Data) && Data->GetMMCsIEEnergy(i) > CsI_E_Threshold ) { Check_CsI = true ; - CsI_E.push_back(Data->GetMMCsIEEnergy(i)) ; -// cout << Data->GetMMCsIEEnergy(i) << endl; + CsI_E.push_back(Data->GetMMCsIEEnergy(i)) ; CsI_N.push_back(Data->GetMMCsIECristalNbr(i)) ; - CsI_T.push_back(Data->GetMMCsITTime(i)) ; + CsI_T.push_back(Data->GetMMCsITTime(i)) ; } } @@ -232,9 +242,9 @@ void TMust2Physics::BuildPhysicalEvent(TMust2Data* Data) CsI_N.push_back(-2) ; } - TotalEnergy.push_back(Si_E.at(jj)) ; - if (Check_SiLi) TotalEnergy.at(jj) += SiLi_E.at(jj) ; - if (Check_CsI) TotalEnergy.at(jj) += CsI_E.at(jj) ; + TotalEnergy.push_back(Si_E[jj])) ; + if (Check_SiLi) TotalEnergy[jj] += SiLi_E[jj] ; + if (Check_CsI) TotalEnergy[jj] += CsI_E[jj] ; } } return; @@ -284,13 +294,279 @@ void TMust2Physics::BuildPhysicalEvent(TMust2Data* Data) } +///////////////////////////////////////////// +int TMust2Physics :: CheckEvent() + { + // Check the size of the different elements + if( Data->GetMMStripXEMult() == Data->GetMMStripYEMult() && Data->GetMMStripYEMult() == Data->GetMMStripXTMult() && Data->GetMMStripXTMult() == Data->GetMMStripYTMult() ) + + return 1 ; // Regular Event + + else if( Data->GetMMStripXEMult() == Data->GetMMStripYEMult()+1 || Data->GetMMStripXEMult() == Data->GetMMStripYEMult()-1 ) + + return 2 ; // Pseudo Event, potentially interstrip + + else return -1 ; // Rejected Event + + + return -1 ; // Rejected Event + } + +///////////////////////////////////////////// +bool TMust2Physics :: ResolvePseudoEvent() + { + + return false; + } + +///////////////////////////////////////////// +vector < TVector2 > TMust2Physics :: Match_X_Y() + { + vector < TVector2 > ArrayOfGoodCouple ; + + for(int i = 0 ; i < Data->GetMMStripXEMult(); i++) + { + for(int j = 0 ; j < Data->GetMMStripYEMult(); j++) + { + if ( Data->GetMMStripXEDetectorNbr(i) == Data->GetMMStripYEDetectorNbr(j) ) + { + if( fabs(Data->GetMMStripXEEnergy(i) - Data->GetMMStripYEEnergy(j))/Data->GetMMStripXEEnergy(i) < 0.1 ) + ArrayOfGoodCouple . push_back ( TVector2(i,j) ) ; + } + } + } + + if( ArrayOfGoodCouple.size() > Data->GetMMStripXEMult() ) ArrayOfGoodCouple.clear() ; + + return ArrayOfGoodCouple; + } + + +///////////////////////////////////////////// +bool TMust2Physics :: Match_Si_SiLi(TVector2 SiCouple) + { + + for(int i = 0 ; i < Data->GetMMSiLiEMult() ; i++ ) + { + if( Data->GetMMSiLiEPadNbr(i) == 1 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + + else if( Data->GetMMSiLiEPadNbr(i) == 2 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + + else if( Data->GetMMSiLiEPadNbr(i) == 3 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 4 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 5 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 6 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 7 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 8 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 9 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 10 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 11 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 12 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 13 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 14 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 15 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMSiLiEPadNbr(i) == 16 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + } + + return false; + } + + +///////////////////////////////////////////// +vector < TVector3 > TMust2Physics :: Match_Si_CsI() + { + for(int i = 0 ; i < Data->GetMMCsIEMult() ; i++ ) + { + if( Data->GetMMCsIECristalNbr(i) == 1 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + + else if( Data->GetMMCsIECristalNbr(i) == 2 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + + else if( Data->GetMMCsIECristalNbr(i) == 3 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 4 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 5 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 6 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 7 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 8 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 9 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 10 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 11 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 12 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 13 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 14 + && Data->GetMMStripXEStripNbr(Int_t i)<1 && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)<1 && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 15 + && Data->GetMMStripXEStripNbr(Int_t i)< && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)< && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + + else if( Data->GetMMCsIECristalNbr(i) == 16 + && Data->GetMMStripXEStripNbr(Int_t i)< && Data->GetMMStripXEStripNbr(Int_t i)>1 + && Data->GetMMStripYEStripNbr(Int_t i)< && Data->GetMMStripYEStripNbr(Int_t i)>1 ) + + return true ; + } + + + return false; + } + +///////////////////////////////////////////// void TMust2Physics::Clear() { EventMultiplicity= 0 ; + TelescopeNumber .clear() ; - EventType .clear() ; - TotalEnergy .clear() ; + EventType .clear() ; + TotalEnergy .clear() ; // Si X Si_E.clear() ; @@ -309,3 +585,5 @@ void TMust2Physics::Clear() CsI_N.clear() ; } + + diff --git a/NPLib/MUST2/TMust2Physics.h b/NPLib/MUST2/TMust2Physics.h index 22bd7b3b5..d2b52c6c1 100644 --- a/NPLib/MUST2/TMust2Physics.h +++ b/NPLib/MUST2/TMust2Physics.h @@ -36,11 +36,12 @@ class TMust2Physics : public TObject public: void Clear() ; - void Clear(const Option_t*) {}; + void Clear(const Option_t*) {}; void BuildPhysicalEvent(TMust2Data* Data) ; void BuildSimplePhysicalEvent(TMust2Data* Data) ; public: + // Provide Physical Multiplicity Int_t EventMultiplicity ; diff --git a/NPSimulation/include/Must2Scorers.hh b/NPSimulation/include/Must2Scorers.hh index 098cdbd38..b9aac0754 100644 --- a/NPSimulation/include/Must2Scorers.hh +++ b/NPSimulation/include/Must2Scorers.hh @@ -78,6 +78,30 @@ namespace MUST2 { G4THitsMap<G4double>* EvtMap; }; + + class PSPadOrCristalNumber : public G4VPrimitiveScorer + { + + public: // with description + PSPadOrCristalNumber(G4String name, G4int depth = 0, G4String Type = "XXX"); + virtual ~PSPadOrCristalNumber(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + bool m_type; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + } #endif diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc index d0b3b32b6..ef6a7a4e2 100644 --- a/NPSimulation/src/EventGeneratorTransfert.cc +++ b/NPSimulation/src/EventGeneratorTransfert.cc @@ -350,9 +350,9 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa G4double x0 = InterCoord.x(); G4double y0 = InterCoord.y(); G4double z0 = InterCoord.z(); - m_InitConditions->SetICPositionX(x0); - m_InitConditions->SetICPositionY(y0); - m_InitConditions->SetICPositionZ(z0); + m_InitConditions->SetICPositionX(x0);// + m_InitConditions->SetICPositionY(y0);// + m_InitConditions->SetICPositionZ(z0);// // write emittance angles to ROOT file m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg); diff --git a/NPSimulation/src/EventGeneratorTransfertToResonance.cc b/NPSimulation/src/EventGeneratorTransfertToResonance.cc index e1229e51f..8454e90d9 100644 --- a/NPSimulation/src/EventGeneratorTransfertToResonance.cc +++ b/NPSimulation/src/EventGeneratorTransfertToResonance.cc @@ -410,6 +410,7 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part else InterCoord = G4ThreeVector(0,0,0); + // write vertex position to ROOT file G4double x0 = InterCoord.x(); G4double y0 = InterCoord.y(); @@ -472,17 +473,6 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part sin(ThetaHeavy) * sin(phi), cos(ThetaHeavy)); - - // Move to the target -if( m_Target !=0) { - x0 += m_Target->GetTargetX() ; - y0 += m_Target->GetTargetY() ; - z0 += m_Target->GetTargetZ() ; - } - // write vertex position to ROOT file - m_InitConditions->SetICPositionX(x0); - m_InitConditions->SetICPositionY(y0); - m_InitConditions->SetICPositionZ(z0); ////////////////////////////////////////////////// ///////// Set up everything for shooting ///////// ////////////////////////////////////////////////// diff --git a/NPSimulation/src/GeneralScorers.cc b/NPSimulation/src/GeneralScorers.cc index 7c260c6df..4ab30937e 100644 --- a/NPSimulation/src/GeneralScorers.cc +++ b/NPSimulation/src/GeneralScorers.cc @@ -36,7 +36,6 @@ int GENERALSCORERS::PickUpDetectorNumber(G4Step* aStep, std::string DetName) { std::string name = aStep->GetTrack()->GetVolume()->GetName(); std::string nbr ; - size_t start, end ; start = name.find(DetName) + DetName.length(); end = name.find("_"); diff --git a/NPSimulation/src/MUST2Array.cc b/NPSimulation/src/MUST2Array.cc index 83c65039c..d8420df91 100644 --- a/NPSimulation/src/MUST2Array.cc +++ b/NPSimulation/src/MUST2Array.cc @@ -342,15 +342,15 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , -0.5 * SiLi_HighY_Center - 0.5 * interSiLi , 0); - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT , logicSiLi_LT , Name + "_SiLi_LT" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT , logicSiLi_RT , Name + "_SiLi_RT" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1 , logicSiLi_LC1 , Name + "_SiLi_LC1" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1 , logicSiLi_RC1 , Name + "_SiLi_RC1" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT , logicSiLi_LT , Name + "_SiLi_Pad1" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT , logicSiLi_RT , Name + "_SiLi_Pad2" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1 , logicSiLi_LC1 , Name + "_SiLi_Pad3" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1 , logicSiLi_RC1 , Name + "_SiLi_Pad4" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB , logicSiLi_LB , Name + "_SiLi_LB" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB , logicSiLi_RB , Name + "_SiLi_RB" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2 , logicSiLi_LC2 , Name + "_SiLi_LC2" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2 , logicSiLi_RC2 , Name + "_SiLi_RC2" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB , logicSiLi_LB , Name + "_SiLi_Pad5" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB , logicSiLi_RB , Name + "_SiLi_Pad6" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2 , logicSiLi_LC2 , Name + "_SiLi_Pad7" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2 , logicSiLi_RC2 , Name + "_SiLi_Pad8" , logicSiLi , false , 0) ; logicSiLi->SetVisAttributes(G4VisAttributes(G4Colour(1, 1., 1.))); @@ -812,15 +812,15 @@ void MUST2Array::ReadConfiguration(string Path) // Called After DetecorConstruction::AddDetector Method void MUST2Array::ConstructDetector(G4LogicalVolume* world) { - G4RotationMatrix* MMrot = NULL ; - G4ThreeVector MMpos = G4ThreeVector(0, 0, 0) ; + G4RotationMatrix* MMrot = NULL ; + G4ThreeVector MMpos = G4ThreeVector(0, 0, 0) ; G4ThreeVector MMu = G4ThreeVector(0, 0, 0) ; G4ThreeVector MMv = G4ThreeVector(0, 0, 0) ; G4ThreeVector MMw = G4ThreeVector(0, 0, 0) ; - G4ThreeVector MMCenter = G4ThreeVector(0, 0, 0) ; - bool Si = true ; - bool SiLi = true ; - bool CsI = true ; + G4ThreeVector MMCenter = G4ThreeVector(0, 0, 0) ; + bool Si = true ; + bool SiLi = true ; + bool CsI = true ; G4int NumberOfTelescope = m_DefinitionType.size() ; @@ -923,102 +923,115 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Si std::map<G4int, G4int*>::iterator DetectorNumber_itr ; - std::map<G4int, G4double*>::iterator Energy_itr ; - std::map<G4int, G4double*>::iterator Time_itr ; - std::map<G4int, G4double*>::iterator X_itr ; - std::map<G4int, G4double*>::iterator Y_itr ; - std::map<G4int, G4double*>::iterator Pos_X_itr ; - std::map<G4int, G4double*>::iterator Pos_Y_itr ; - std::map<G4int, G4double*>::iterator Pos_Z_itr ; + std::map<G4int, G4double*>::iterator Energy_itr ; + std::map<G4int, G4double*>::iterator Time_itr ; + std::map<G4int, G4double*>::iterator X_itr ; + std::map<G4int, G4double*>::iterator Y_itr ; + std::map<G4int, G4double*>::iterator Pos_X_itr ; + std::map<G4int, G4double*>::iterator Pos_Y_itr ; + std::map<G4int, G4double*>::iterator Pos_Z_itr ; std::map<G4int, G4double*>::iterator Ang_Theta_itr ; std::map<G4int, G4double*>::iterator Ang_Phi_itr ; - G4THitsMap<G4int>* DetectorNumberHitMap ; - G4THitsMap<G4double>* EnergyHitMap ; - G4THitsMap<G4double>* TimeHitMap ; - G4THitsMap<G4double>* XHitMap ; - G4THitsMap<G4double>* YHitMap ; - G4THitsMap<G4double>* PosXHitMap ; - G4THitsMap<G4double>* PosYHitMap ; - G4THitsMap<G4double>* PosZHitMap ; - G4THitsMap<G4double>* AngThetaHitMap ; - G4THitsMap<G4double>* AngPhiHitMap ; - -// NULL pointer are given to avoid warning at compilation + G4THitsMap<G4int>* DetectorNumberHitMap ; + G4THitsMap<G4double>* EnergyHitMap ; + G4THitsMap<G4double>* TimeHitMap ; + G4THitsMap<G4double>* XHitMap ; + G4THitsMap<G4double>* YHitMap ; + G4THitsMap<G4double>* PosXHitMap ; + G4THitsMap<G4double>* PosYHitMap ; + G4THitsMap<G4double>* PosZHitMap ; + G4THitsMap<G4double>* AngThetaHitMap ; + G4THitsMap<G4double>* AngPhiHitMap ; // Si(Li) std::map<G4int, G4double*>::iterator SiLiEnergy_itr ; - G4THitsMap<G4double>* SiLiEnergyHitMap ; + std::map<G4int, G4double*>::iterator SiLiPadNbr_itr ; + G4THitsMap<G4double>* SiLiEnergyHitMap ; + G4THitsMap<G4double>* SiLiPadNbrHitMap ; + // CsI std::map<G4int, G4double*>::iterator CsIEnergy_itr ; - G4THitsMap<G4double>* CsIEnergyHitMap ; + std::map<G4int, G4double*>::iterator CsICristalNbr_itr ; + G4THitsMap<G4double>* CsIEnergyHitMap ; + G4THitsMap<G4double>* CsICristalNbrHitMap ; ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// // Read the Scorer associate to the Silicon Strip //Detector Number - G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/DetectorNumber") ; - DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; + G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/DetectorNumber") ; + DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; + DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; //Energy - G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripEnergy") ; - EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; - Energy_itr = EnergyHitMap->GetMap()->begin() ; + G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripEnergy") ; + EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; + Energy_itr = EnergyHitMap->GetMap()->begin() ; //Time of Flight - G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripTime") ; - TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; - Time_itr = TimeHitMap->GetMap()->begin() ; + G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripTime") ; + TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; + Time_itr = TimeHitMap->GetMap()->begin() ; //Strip Number X - G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripNumberX") ; - XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; - X_itr = XHitMap->GetMap()->begin() ; + G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripNumberX") ; + XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; + X_itr = XHitMap->GetMap()->begin() ; //Strip Number Y - G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripNumberY") ; - YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; - Y_itr = YHitMap->GetMap()->begin() ; + G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripNumberY") ; + YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; + Y_itr = YHitMap->GetMap()->begin() ; //Interaction Coordinate X G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordX") ; - PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; - Pos_X_itr = PosXHitMap->GetMap()->begin() ; + PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; + Pos_X_itr = PosXHitMap->GetMap()->begin() ; //Interaction Coordinate Y G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordY") ; - PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; - Pos_Y_itr = PosYHitMap->GetMap()->begin() ; + PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; + Pos_Y_itr = PosYHitMap->GetMap()->begin() ; //Interaction Coordinate Z G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordZ") ; - PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; - Pos_Z_itr = PosXHitMap->GetMap()->begin() ; + PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; + Pos_Z_itr = PosXHitMap->GetMap()->begin() ; //Interaction Coordinate Angle Theta - G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordAngTheta") ; + G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordAngTheta"); AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; - Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; + Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; //Interaction Coordinate Angle Phi - G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordAngPhi") ; - AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; - Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; + G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordAngPhi") ; + AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; + Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; // Read the Scorer associate to the SiLi //Energy - G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_SiLiScorer/SiLiEnergy") ; - SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID)) ; - SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; - + G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_SiLiScorer/SiLiEnergy") ; + SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID)) ; + SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; + G4int SiLiPadNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_SiLiScorer/SiLiPadNbr") ; + SiLiPadNbrHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiPadNbrCollectionID)) ; + SiLiPadNbr_itr = SiLiPadNbrHitMap->GetMap()->begin() ; + // Read the Scorer associate to the CsI crystal //Energy - G4int CsIEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_CsIScorer/CsIEnergy") ; - CsIEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(CsIEnergyCollectionID)) ; - CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + G4int CsIEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_CsIScorer/CsIEnergy") ; + CsIEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(CsIEnergyCollectionID)) ; + CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + + G4int CsICristalNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_CsIScorer/CsICristalNbr") ; + CsICristalNbrHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(CsICristalNbrCollectionID)) ; + CsICristalNbr_itr = CsICristalNbrHitMap->GetMap()->begin() ; + + +///////////////////// G4int sizeN = DetectorNumberHitMap->entries() ; G4int sizeE = EnergyHitMap->entries() ; @@ -1153,39 +1166,48 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Si(Li) SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; + SiLiPadNbr_itr = SiLiPadNbrHitMap->GetMap()->begin() ; + for (G4int h = 0 ; h < SiLiEnergyHitMap->entries() ; h++) { G4int SiLiEnergyTrackID = SiLiEnergy_itr->first -N ; G4double SiLiEnergy = *(SiLiEnergy_itr->second) ; + G4int PadNbr = *(SiLiPadNbr_itr->second) ; + if (SiLiEnergyTrackID == NTrackID) { m_Event->SetMMSiLiEEnergy(RandGauss::shoot(SiLiEnergy, ResoSiLi)) ; - m_Event->SetMMSiLiEPadNbr(1); - m_Event->SetMMSiLiTPadNbr(1); + m_Event->SetMMSiLiEPadNbr(PadNbr); + m_Event->SetMMSiLiTPadNbr(PadNbr); m_Event->SetMMSiLiTTime(1); m_Event->SetMMSiLiTDetectorNbr(N); m_Event->SetMMSiLiEDetectorNbr(N); } - SiLiEnergy_itr++; + SiLiEnergy_itr++ ; + SiLiPadNbr_itr++ ; } // CsI - CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + CsICristalNbr_itr = CsICristalNbrHitMap->GetMap()->begin() ; + for (G4int h = 0 ; h < CsIEnergyHitMap->entries() ; h++) { - G4int CsIEnergyTrackID = CsIEnergy_itr->first -N ; - G4double CsIEnergy = *(CsIEnergy_itr->second) ; - + G4int CsIEnergyTrackID = CsIEnergy_itr->first-N ; + G4double CsIEnergy = *(CsIEnergy_itr->second) ; + + G4int CristalNumber = *(CsICristalNbr_itr->second) ; if (CsIEnergyTrackID == NTrackID) { m_Event->SetMMCsIEEnergy(RandGauss::shoot(CsIEnergy, ResoCsI*sqrt(CsIEnergy))); - m_Event->SetMMCsIECristalNbr(1); - m_Event->SetMMCsITCristalNbr(1); + m_Event->SetMMCsIECristalNbr(CristalNumber); + m_Event->SetMMCsITCristalNbr(CristalNumber); m_Event->SetMMCsITTime(1); m_Event->SetMMCsITDetectorNbr(N); m_Event->SetMMCsIEDetectorNbr(N); } - CsIEnergy_itr++; + CsIEnergy_itr++ ; + CsICristalNbr_itr++ ; } @@ -1201,8 +1223,10 @@ void MUST2Array::ReadSensitive(const G4Event* event) TimeHitMap ->clear() ; XHitMap ->clear() ; YHitMap ->clear() ; - CsIEnergyHitMap ->clear() ; SiLiEnergyHitMap ->clear() ; + SiLiPadNbrHitMap ->clear() ; + CsIEnergyHitMap ->clear() ; + CsICristalNbrHitMap ->clear() ; PosXHitMap ->clear() ; PosYHitMap ->clear() ; PosZHitMap ->clear() ; @@ -1247,12 +1271,16 @@ void MUST2Array::InitializeScorers() // SiLi Associate Scorer m_SiLiScorer = new G4MultiFunctionalDetector("MUST2_SiLiScorer") ; G4VPrimitiveScorer* SiLiEnergy = new GENERALSCORERS::PSEnergy("SiLiEnergy","MUST2Telescope", 0) ; + G4VPrimitiveScorer* SiLiPadNbr = new PSPadOrCristalNumber("SiLiPadNbr",0,"SiLi") ; m_SiLiScorer->RegisterPrimitive(SiLiEnergy) ; + m_SiLiScorer->RegisterPrimitive(SiLiPadNbr) ; // CsI Associate Scorer m_CsIScorer = new G4MultiFunctionalDetector("MUST2_CsIScorer") ; G4VPrimitiveScorer* CsIEnergy = new GENERALSCORERS::PSEnergy("CsIEnergy","MUST2Telescope", 0) ; + G4VPrimitiveScorer* CsICristalNbr = new PSPadOrCristalNumber("CsICristalNbr",0,"CsI") ; m_CsIScorer->RegisterPrimitive(CsIEnergy) ; + m_CsIScorer->RegisterPrimitive(CsICristalNbr) ; // Add All Scorer to the Global Scorer Manager G4SDManager::GetSDMpointer()->AddNewDetector(m_StripScorer) ; diff --git a/NPSimulation/src/Must2Scorers.cc b/NPSimulation/src/Must2Scorers.cc index ea0c60b30..39c58d759 100644 --- a/NPSimulation/src/Must2Scorers.cc +++ b/NPSimulation/src/Must2Scorers.cc @@ -171,3 +171,103 @@ void PSStripNumberY::PrintAll() G4cout << " PrimitiveScorer " << GetName() << G4endl ; G4cout << " Number of entries " << EvtMap->entries() << G4endl ; } + + + + + + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//CsI Cristal / SiLi Pad Number Scorer +// +PSPadOrCristalNumber::PSPadOrCristalNumber(G4String name, G4int depth,G4String type) + : G4VPrimitiveScorer(name, depth), HCID(-1) +{ + if (type=="SiLi") m_type = true ; + else if (type=="CsI" ) m_type = false ; + else G4cout << "Problem in MUST2 Scorer definition: Type should be SiLi or CsI" << G4endl ; +} + +PSPadOrCristalNumber::~PSPadOrCristalNumber() +{ + ; +} + +G4bool PSPadOrCristalNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + std::string name = aStep->GetTrack()->GetVolume()->GetName(); + std::string nbr ; + unsigned int numberOfCharacterInDetectorNumber ; + + if(m_type)// 24 character before pad number MUST2Telescope4_SiLi_PadXX + { + numberOfCharacterInDetectorNumber = name.length() - 24 ; + for(unsigned int i = 24 ; i < 24 + numberOfCharacterInDetectorNumber ; i++ ) + nbr += name[i] ; + } + + else // 27 character before cristal number : MUST2Telescope4_CsI_CristalXX + { + numberOfCharacterInDetectorNumber = name.length() - 27 ; + for(unsigned int i = 27 ; i < 27 + numberOfCharacterInDetectorNumber ; i++ ) + nbr += name[i] ; + } + + + double VolumeNumber = atoi( nbr.c_str() ); + + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "MUST2Telescope"); + + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep < 100*keV) return FALSE; + G4int index = aStep->GetTrack()->GetTrackID(); + EvtMap->set(index+DetNbr, VolumeNumber); + return TRUE; +} + +void PSPadOrCristalNumber::Initialize(G4HCofThisEvent* HCE) +{ + EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); + if (HCID < 0) { + HCID = GetCollectionID(0); + } + HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); +} + +void PSPadOrCristalNumber::EndOfEvent(G4HCofThisEvent*) +{ + ; +} + +void PSPadOrCristalNumber::clear() +{ + EvtMap->clear(); +} + +void PSPadOrCristalNumber::DrawAll() +{ + ; +} + +void PSPadOrCristalNumber::PrintAll() +{ + G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl ; + G4cout << " PrimitiveScorer " << GetName() << G4endl ; + G4cout << " Number of entries " << EvtMap->entries() << G4endl ; +} + + + + + + + + + + + + + + + -- GitLab