diff --git a/Inputs/EventGenerator/60Fe.reaction b/Inputs/EventGenerator/60Fe.reaction index 6430739f1ca663828d0ae1c5f912642e5f2a9aa0..467bd51d9509590ead464e0f56adc36d461b14b9 100644 --- a/Inputs/EventGenerator/60Fe.reaction +++ b/Inputs/EventGenerator/60Fe.reaction @@ -12,8 +12,8 @@ Transfert BeamEnergySpread= 0 SigmaX= 1 SigmaY= 1 - SigmaThetaX= 0.5 - SigmaPhiY= 0.5 + SigmaThetaX= 2 + SigmaPhiY= 2 CrossSectionPath= ni69_g7_01.n ShootLight= 1 ShootHeavy= 0 diff --git a/NPAnalysis/Gaspard/Result/myResult.root b/NPAnalysis/Gaspard/Result/myResult.root index 040f6ae05a7b10050c1f4674773a35c8f4b62b8a..eb7aa8c9045793132a6c1c12c390e3b06e31eeb7 100644 Binary files a/NPAnalysis/Gaspard/Result/myResult.root and b/NPAnalysis/Gaspard/Result/myResult.root differ diff --git a/NPAnalysis/Gaspard/macros/ControlSimu.C b/NPAnalysis/Gaspard/macros/ControlSimu.C new file mode 100644 index 0000000000000000000000000000000000000000..56f2ee46029f7451fcf69349a615f5cd3b5a17bc --- /dev/null +++ b/NPAnalysis/Gaspard/macros/ControlSimu.C @@ -0,0 +1,112 @@ +#include <iostream> + +#include "TROOT.h" +#include "TCanvas.h" +#include "TSystem.h" +#include "TFile.h" +#include "TString.h" +#include "TTree.h" +#include "TBranch.h" +#include "TH1F.h" +#include "TH2F.h" + +#include "TGaspardTrackerData.h" +#include "TInitialConditions.h" +#include "TInteractionCoordinates.h" + +void ControlSimu(const char * fname = "mySimul") +{ + // Open output ROOT file from NPTool simulation run + TString path = gSystem->Getenv("NPTOOL"); + path += "/Outputs/Simulation/"; + TString inFileName = fname; + if (!inFileName.Contains("root")) inFileName += ".root"; + TFile *inFile = new TFile(path + inFileName); + TTree *tree = (TTree*) inFile->Get("SimulatedTree"); + + // Connect the branches of the TTree and activate then if necessary + // TInitialConditions branch + TInitialConditions *initCond = 0; + tree->SetBranchAddress("InitialConditions", &initCond); + tree->SetBranchStatus("InitialConditions", 1); + // TInteractionCoordinates branch + TInteractionCoordinates *interCoord = 0; + tree->SetBranchAddress("InteractionCoordinates", &interCoord); + tree->SetBranchStatus("InteractionCoordinates", 0); + + // Declare histograms + // for incident beam + TH2F *hEmittanceXY = new TH2F("hEmittanceXY", "Position on Target (x, y)", 200, -10, 10, 200, -10, 10); + TH2F *hEmittanceXTheta = new TH2F("hEmittanceXTheta", "Emittance (x, #theta)", 200, -10, 10, 200, -10, 10); + TH2F *hEmittanceYPhi = new TH2F("hEmittanceYPhi", "Emittance (y, #phi)", 200, -10, 10, 200, -10, 10); + TH1F *hIncidentTheta = new TH1F("hIncidentTheta", "Incident Theta", 100, 0, 10); + TH1F *hIncidentPhi = new TH1F("hIncidentPhi", "Incident Phi", 360, 0, 360); + // for emitted particle + TH1F *hEmittedThetaCM = new TH1F("hEmittedThetaCM", "Emitted Theta CM", 180, 0, 180); + TH1F *hEmittedThetaIF = new TH1F("hEmittedThetaIF", "Emitted Theta (reaction frame)", 180, 0, 180); + TH1F *hEmittedPhiIF = new TH1F("hEmittedPhiIF", "Emitted Phi (reaction frame)", 360, 0, 360); + TH1F *hEmittedThetaWF = new TH1F("hEmittedThetaWF", "Emitted Theta (detector frame)", 180, 0, 180); + TH1F *hEmittedPhiWF = new TH1F("hEmittedPhiWF", "Emitted Phi (detector frame)", 360, 0, 360); + TH1F *hControlPhi = new TH1F("hControlPhi", "IncidentPhi + EmittedPhi", 360, 0, 360); + TH2F *hEmittedETheta = new TH2F("hEmittedETheta", "Kinematic line", 180, 0, 180, 200, 0, 150); + + // Read the TTree + Int_t nentries = tree->GetEntries(); + cout << "TTree contains " << nentries << " events" << endl; + for (Int_t i = 0; i < nentries; i++) { + if (i%10000 == 0) cout << "Entry " << i << endl; + tree->GetEntry(i); + + // Fill histos + // incident beam + hEmittanceXY -> Fill(initCond->GetICPositionX(0), initCond->GetICPositionY(0)); + hEmittanceXTheta -> Fill(initCond->GetICPositionX(0), initCond->GetICIncidentEmittanceTheta(0)); + hEmittanceYPhi -> Fill(initCond->GetICPositionX(0), initCond->GetICIncidentEmittancePhi(0)); + hIncidentTheta -> Fill(initCond->GetICIncidentAngleTheta(0)); + hIncidentPhi -> Fill(initCond->GetICIncidentAnglePhi(0)); + // ejected particle + hEmittedThetaCM -> Fill(initCond->GetICEmittedAngleThetaCM(0)); + hEmittedThetaIF -> Fill(initCond->GetICEmittedAngleThetaLabIncidentFrame(0)); + hEmittedPhiIF -> Fill(initCond->GetICEmittedAnglePhiIncidentFrame(0)); + hEmittedThetaWF -> Fill(initCond->GetICEmittedAngleThetaLabWorldFrame(0)); + hEmittedPhiWF -> Fill(initCond->GetICEmittedAnglePhiWorldFrame(0)); + hEmittedETheta -> Fill(initCond->GetICEmittedAngleThetaLabIncidentFrame(0), initCond->GetICEmittedEnergy(0)); + + // Control histo + Double_t phi_control = initCond->GetICIncidentAnglePhi(0) + initCond->GetICEmittedAnglePhiIncidentFrame(0); + if (phi_control > 360) phi_control -= 360; + hControlPhi->Fill(phi_control); + } + + // Display histograms + TCanvas *canvas1 = new TCanvas("canvas1", "Incident beam properties"); + canvas1->Divide(2,3); + canvas1->cd(1); + hEmittanceXTheta->Draw("colz"); + canvas1->cd(2); + hEmittanceYPhi->Draw("colz"); + canvas1->cd(3); + hIncidentTheta->Draw(); + canvas1->cd(4); + hIncidentPhi->Draw(); + canvas1->cd(5); + hEmittanceXY->Draw("colz"); + + // Display histograms + TCanvas *canvas2 = new TCanvas("canvas2", "Emitted particle properties"); + canvas2->Divide(2,3); + canvas2->cd(1); + hEmittedThetaCM->Draw(); + canvas2->cd(2); + hEmittedETheta->Draw(); + canvas2->cd(3); + hEmittedThetaIF->Draw(); + canvas2->cd(4); + hEmittedPhiIF->Draw(); + canvas2->cd(5); + hEmittedThetaWF->Draw(); + canvas2->cd(6); + hEmittedPhiWF->Draw(); +// hControlPhi->SetLineColor(kRed); +// hControlPhi->Draw("same"); +} diff --git a/NPAnalysis/Gaspard/macros/ControlSimuGaspard.C b/NPAnalysis/Gaspard/macros/ControlSimuGaspard.C deleted file mode 100644 index 9bb84c80f49e0fbdb3e8ea35c5361961e4f5cd57..0000000000000000000000000000000000000000 --- a/NPAnalysis/Gaspard/macros/ControlSimuGaspard.C +++ /dev/null @@ -1,84 +0,0 @@ -#include <iostream> - -#include "TROOT.h" -#include "TSystem.h" -#include "TFile.h" -#include "TString.h" -#include "TTree.h" -#include "TBranch.h" -#include "TH1F.h" - -#include "TGaspardTrackerData.h" -#include "TInitialConditions.h" -#include "TInteractionCoordinates.h" - -void ControlSimuGaspard(const char * fname = "mySimul") -{ - // Open output ROOT file from NPTool simulation run - TString path = gSystem->Getenv("NPTOOL"); - path += "/Outputs/"; - TString inFileName = fname; - if (!inFileName.Contains("root")) inFileName += ".root"; - TFile *inFile = new TFile(path + inFileName); - TTree *tree = (TTree*) inFile->Get("EventTree"); - - // Connect the branches of the TTree and activate then if necessary - // TGaspardTrackerData branch - TGaspardTrackerData *gpdTrkData = 0; - tree->SetBranchAddress("GASPARD", &gpdTrkData); - tree->SetBranchStatus("GASPARD", 0); - // TInitialConditions branch - TInitialConditions *initCond = 0; - tree->SetBranchAddress("InitialConditions", &initCond); - tree->SetBranchStatus("InitialConditions", 1); - // TInteractionCoordinates branch - TInteractionCoordinates *interCoord = 0; - tree->SetBranchAddress("InteractionCoordinates", &interCoord); - tree->SetBranchStatus("InteractionCoordinates", 0); - - // Prepare histograms - TH1F *hIncidentTheta = new TH1F("hIncidentTheta", "Incident Theta", 180, 0, 180); - TH1F *hIncidentPhi = new TH1F("hIncidentPhi", "Incident Phi", 360, 0, 360); - TH1F *hEmittedThetaIF = new TH1F("hEmittedThetaIF", "Emitted Theta (incident frame)", 180, 0, 180); - TH1F *hEmittedPhiIF = new TH1F("hEmittedPhiIF", "Emitted Phi (incident frame)", 360, 0, 360); - TH1F *hEmittedThetaWF = new TH1F("hEmittedThetaWF", "Emitted Theta (laboratory frame)", 180, 0, 180); - TH1F *hEmittedPhiWF = new TH1F("hEmittedPhiWF", "Emitted Phi (laboratory frame)", 360, 0, 360); - TH1F *hControlPhi = new TH1F("hControlPhi", "IncidentPhi + EmittedPhi", 360, 0, 360); - - // Read the TTree - Int_t nentries = tree->GetEntries(); - cout << "TTree contains " << nentries << " events" << endl; - for (Int_t i = 0; i < nentries; i++) { - if (i%1000 == 0) cout << "Entry " << i << endl; - tree->GetEntry(i); - // Fill histos - hIncidentTheta->Fill(initCond->GetICIncidentAngleTheta(0)); - hIncidentPhi->Fill(initCond->GetICIncidentAnglePhi(0)); - hEmittedThetaIF->Fill(initCond->GetICEmittedAngleThetaLabIncidentFrame(0)); - hEmittedPhiIF->Fill(initCond->GetICEmittedAnglePhiIncidentFrame(0)); - hEmittedThetaWF->Fill(initCond->GetICEmittedAngleThetaLabWorldFrame(0)); - hEmittedPhiWF->Fill(initCond->GetICEmittedAnglePhiWorldFrame(0)); - // Control histo - Double_t phi_control = initCond->GetICIncidentAnglePhi(0) + initCond->GetICEmittedAnglePhiIncidentFrame(0); - if (phi_control > 360) phi_control -= 360; - hControlPhi->Fill(phi_control); - } - - // Display histograms - TCanvas *canvas = new TCanvas("canvas", "Angles"); - canvas->Divide(2,3); - canvas->cd(1); - hIncidentTheta->Draw(); - canvas->cd(2); - hIncidentPhi->Draw(); - canvas->cd(3); - hEmittedThetaIF->Draw(); - canvas->cd(4); - hEmittedPhiIF->Draw(); - canvas->cd(5); - hEmittedThetaWF->Draw(); - canvas->cd(6); - hEmittedPhiWF->Draw(); - hControlPhi->SetLineColor(kRed); - hControlPhi->Draw("same"); -} diff --git a/NPAnalysis/Gaspard/macros/GeometricalEfficiency.C b/NPAnalysis/Gaspard/macros/GeometricalEfficiency.C index ae87e6e7a49bc5ec59a8408033542d2d4c5f4f8f..90ca0e83b863b7b45116682d97a9fafb246068af 100644 --- a/NPAnalysis/Gaspard/macros/GeometricalEfficiency.C +++ b/NPAnalysis/Gaspard/macros/GeometricalEfficiency.C @@ -15,11 +15,11 @@ void GeometricalEfficiency(const char * fname = "Efficiency_10000") { // Open output ROOT file from NPTool simulation run TString path = gSystem->Getenv("NPTOOL"); - path += "/Outputs/"; + path += "/Outputs/Simulation/"; TString inFileName = fname; if (!inFileName.Contains("root")) inFileName += ".root"; TFile *inFile = new TFile(path + inFileName); - TTree *tree = (TTree*) inFile->Get("EventTree"); + TTree *tree = (TTree*) inFile->Get("SimulatedTree"); // Connect the branches of the TTree and activate then if necessary // TInitialConditions branch diff --git a/NPAnalysis/Gaspard/macros/TestAngleReconstruction.C b/NPAnalysis/Gaspard/macros/TestAngleReconstruction.C index 7f193f0ff8b20865379a78b128e6095a8d08f5e8..217efe959dae85053ab602d6efdc92ff9b05df2b 100644 --- a/NPAnalysis/Gaspard/macros/TestAngleReconstruction.C +++ b/NPAnalysis/Gaspard/macros/TestAngleReconstruction.C @@ -19,7 +19,7 @@ void TestAngleReconstruction(const char * fname = "mySimul") { // Open output ROOT file from NPTool simulation run TString path = gSystem->Getenv("NPTOOL"); - path += "/Outputs/"; + path += "/Outputs/Simulation/"; TString inFileName = fname; if (!inFileName.Contains("root")) inFileName += ".root"; TFile *inFile = new TFile(path + inFileName); diff --git a/NPAnalysis/Gaspard/src/Analysis.cc b/NPAnalysis/Gaspard/src/Analysis.cc index a1ad0575239021cad3339f443675fc41da450421..ad75bb183b1ccf0651bc89fa15d53c912c222f65 100644 --- a/NPAnalysis/Gaspard/src/Analysis.cc +++ b/NPAnalysis/Gaspard/src/Analysis.cc @@ -117,7 +117,7 @@ int main(int argc,char** argv) Int_t detecXT = EventGPD->GetGPDTrkFirstStageFrontTDetectorNbr(0) / det_ref; Int_t detecYE = EventGPD->GetGPDTrkFirstStageBackEDetectorNbr(0) / det_ref; Int_t detecYT = EventGPD->GetGPDTrkFirstStageBackTDetectorNbr(0) / det_ref; -// det_ref -= 1000; // for TGaspardTrackerDummyShape + det_ref -= 1000; // for TGaspardTrackerDummyShape // case of same detector if (detecXE*detecXT*detecYE*detecYT == 1) { // calculate strip number diff --git a/NPLib/GASPARD/GaspardTracker.cxx b/NPLib/GASPARD/GaspardTracker.cxx index 86af36f63a08a8dea5102732dfedc14d3cd018f1..d9971e51b4cbcb4c8a5b24d90a3be91dc2b0131a 100644 --- a/NPLib/GASPARD/GaspardTracker.cxx +++ b/NPLib/GASPARD/GaspardTracker.cxx @@ -279,7 +279,7 @@ void GaspardTracker::ReadConfiguration(string Path) ConfigFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n' ); } // Finding another telescope (safety), toggle out - else if (DataBuffer.compare(0, 9, "GPDSquare") == 0) { + else if (DataBuffer.compare(0, 13, "GPDDummyShape") == 0) { cout << "WARNING: Another Module is find before standard sequence of Token, Error may occured in Telecope definition" << endl; ReadingStatus = false; } diff --git a/NPLib/GASPARD/TGaspardTrackerPhysics.cxx b/NPLib/GASPARD/TGaspardTrackerPhysics.cxx index 5abd42f89bab02139d82512f8094d5fac1e2a478..6bca92aea82e27c4d075f453a5f9370a91a82093 100644 --- a/NPLib/GASPARD/TGaspardTrackerPhysics.cxx +++ b/NPLib/GASPARD/TGaspardTrackerPhysics.cxx @@ -79,6 +79,7 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) int detecXT = Data->GetGPDTrkFirstStageFrontTDetectorNbr(0) / det_ref; int detecYE = Data->GetGPDTrkFirstStageBackEDetectorNbr(0) / det_ref; int detecYT = Data->GetGPDTrkFirstStageBackTDetectorNbr(0) / det_ref; + det_ref -= 1000; // only for GaspardDummyShape // case of same detector if (detecXE*detecXT*detecYE*detecYT == 1) { diff --git a/NPSimulation/src/EventGeneratorIsotropic.cc b/NPSimulation/src/EventGeneratorIsotropic.cc index 9f1faf0ff77e0e0ca2f01b195bbe65994dfa20a5..c60482c0471de284466993cd5090327195323136 100644 --- a/NPSimulation/src/EventGeneratorIsotropic.cc +++ b/NPSimulation/src/EventGeneratorIsotropic.cc @@ -210,6 +210,13 @@ void EventGeneratorIsotropic::GenerateEvent(G4Event* anEvent, G4ParticleGun* par m_InitConditions->SetICPositionX(m_x0 / mm); m_InitConditions->SetICPositionY(m_y0 / mm); m_InitConditions->SetICPositionZ(m_z0 / mm); + // Incident "particles" + // Everything is zero for a source + m_InitConditions->SetICIncidentEmittanceTheta(0); + m_InitConditions->SetICIncidentEmittancePhi(0); + m_InitConditions->SetICIncidentAngleTheta(0); + m_InitConditions->SetICIncidentAnglePhi(0); + m_InitConditions->SetICIncidentEnergy(0); // Emitted particle angles m_InitConditions->SetICEmittedAngleThetaCM(theta / deg); m_InitConditions->SetICEmittedAngleThetaLabIncidentFrame(theta / deg); diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc index 28521e20ea51b783988d3ad91cb42d0cbcb982d5..12a9205e554c38723eab62ef7e6bc12d8c834da3 100644 --- a/NPSimulation/src/EventGeneratorTransfert.cc +++ b/NPSimulation/src/EventGeneratorTransfert.cc @@ -354,12 +354,13 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg); // Calculate Angle in spherical coordinate, passing by the direction vector dir - G4double Xdir = cos( pi/2. - Beam_thetaX ); - G4double Ydir = cos( pi/2. - Beam_phiY ); - G4double Zdir = sin( pi/2. - Beam_thetaX ) + sin( pi/2. - Beam_phiY); + G4double Xdir = cos(pi/2. - Beam_thetaX); + G4double Ydir = cos(pi/2. - Beam_phiY ); + G4double Zdir = sin(pi/2. - Beam_thetaX) + sin(pi/2. - Beam_phiY); - G4double Beam_theta = acos ( Zdir / sqrt( Xdir*Xdir + Ydir*Ydir + Zdir*Zdir ) ); - G4double Beam_phi = atan2( Ydir , Xdir ) ; + G4double Beam_theta = acos(Zdir / sqrt(Xdir*Xdir + Ydir*Ydir + Zdir*Zdir)) * rad; + G4double Beam_phi = atan2(Ydir, Xdir) * rad; + if (Beam_phi < 0) Beam_phi += 2*pi; // write angles to ROOT file m_InitConditions->SetICIncidentAngleTheta(Beam_theta / deg);