From c57deb54863cfa9575b615f0ba081b180170999b Mon Sep 17 00:00:00 2001
From: adrien-matta <a.matta@surrey.ac.uk>
Date: Tue, 21 Oct 2014 10:19:07 +0100
Subject: [PATCH] * Updating Example1 for nicer presentation and adding
 comments to NPA * project

---
 NPAnalysis/Example1/Analysis.cxx  |  89 ++++++++++++++++++------------
 NPAnalysis/Example1/Analysis.h    |  24 ++++----
 NPAnalysis/Example1/ShowResult.C  |  17 ++++--
 NPAnalysis/Example1/cuts/EDE.root | Bin 4256 -> 4256 bytes
 4 files changed, 76 insertions(+), 54 deletions(-)

diff --git a/NPAnalysis/Example1/Analysis.cxx b/NPAnalysis/Example1/Analysis.cxx
index 1e3b646b0..575a3f970 100755
--- a/NPAnalysis/Example1/Analysis.cxx
+++ b/NPAnalysis/Example1/Analysis.cxx
@@ -1,7 +1,6 @@
 #include "Analysis.h"
 
-int main(int argc, char** argv)
-{
+int main(int argc, char** argv){
   // command line parsing
   NPOptionManager* myOptionManager = NPOptionManager::getInstance(argc,argv);
 
@@ -57,43 +56,53 @@ int main(int argc, char** argv)
   double Si_Y_M2 = 0;
   double ZTarget = 0;
   double TargetThickness = 18*micrometer;
-  double ThetaCM = 0 ;
   // Get number of events to treat
   cout << endl << "///////// Starting Analysis ///////// "<< endl;
   int nentries = Chain->GetEntries();
-  //      int nentries = 100000;
   cout << " Number of Event to be treated : " << nentries << endl;
   clock_t begin = clock();
   clock_t end = begin;
   cout.precision(5);
-  // main loop on entries
+  //////////////////////////////////////////////////////////////////////////////
+  // main loop on entries //
   for (int i = 0 ; i < nentries; i++) {
     if (i%10000 == 0 && i!=0)  {
       end = clock();
       long double TimeElapsed = (long double) (end-begin) / CLOCKS_PER_SEC;
       double percent = (double)i/nentries;
       double TimeToWait = (TimeElapsed/percent) - TimeElapsed;       
-      cout  << "                                                       "<< flush;
-      cout  << "\r Progression:" << percent*100 << " % \t | \t Remaining time : ~" <<  TimeToWait <<"s |  Analysis Rate : "<< (double) i/TimeElapsed << flush;
+      cout  << "                                                      "<< flush;
+      cout  << "\r Progression:" 
+            << percent*100 << " % \t | \t Remaining time : ~" 
+            <<  TimeToWait <<"s |  Analysis Rate : "
+            << (double) i/TimeElapsed << flush;
     }
     else if (i == nentries-1)  cout << "\r Progression:" << " 100% " <<endl;
 
 
-    // get data
+    // Get the raw Data
     Chain -> GetEntry(i);
+    // Clear previous Event
     myDetector->ClearEventPhysics();
+    // Build the current event
     myDetector->BuildPhysicalEvent();
+    // Reinitiate calculated variable
     ReInitValue();
 
-    // Get the Init information on beam positio nand energy
+    // Get the Init information on beam position and energy
     // and apply by hand the experimental resolution
-		double XTarget = Rand.Gaus(Init->GetIncidentPositionX(),1);
+    // This is because the beam diagnosis are not simulated
+
+    // PPAC position resolution on target is assumed to be 1mm
+    double XTarget = Rand.Gaus(Init->GetIncidentPositionX(),1);
     double YTarget = Rand.Gaus(Init->GetIncidentPositionY(),1);
-    double BeamEnergy = Rand.Gaus(Init->GetIncidentInitialKineticEnergy(),4.5);
     TVector3 BeamDirection = Init->GetBeamDirection();
+
+    // Beam energy is measured using F3 and F2 plastic TOF
+    double BeamEnergy = Rand.Gaus(Init->GetIncidentInitialKineticEnergy(),4.5);
     BeamEnergy = Li11CD2.Slow(BeamEnergy,TargetThickness/2.,0);
     He10Reaction->SetBeamEnergy(BeamEnergy);
-        
+
     //////////////////////////// LOOP on MUST2 + SSSD Hit //////////////////
     for(unsigned int countSSSD = 0 ; countSSSD < SSSD->Energy.size() ; countSSSD++){
       for(unsigned int countMust2 = 0 ; countMust2 < M2->Si_E.size() ; countMust2++){
@@ -145,30 +154,34 @@ int main(int argc, char** argv)
           E_SSSD = SSSD->Energy[countSSSD];
 
           // if CsI
-            if(CsI_E_M2>0 ){
-              // The energy in CsI is calculate form dE/dx Table bevause calibration for 3He is not good
-              Energy = He3Si.EvaluateEnergyFromDeltaE(Si_E_M2,300*micrometer,ThetaM2Surface, 0.01*MeV, 450.*MeV,0.001*MeV ,1000);
-              E_M2=CsI_E_M2;
-            }
-
-            else
-              Energy = Si_E_M2;
-
-            E_M2 += Si_E_M2;
-
-            // Evaluate energy using the thickness 
-              ELab   = He3Al.EvaluateInitialEnergy( Energy ,2*0.4*micrometer , ThetaM2Surface); 
-              ELab   = He3Si.EvaluateInitialEnergy( ELab ,20*micrometer , ThetaM2Surface);
-              ELab   = He3Al.EvaluateInitialEnergy( ELab ,0.4*micrometer , ThetaM2Surface);
-              // Target Correction
-              ELab   = He3CD2.EvaluateInitialEnergy( ELab ,TargetThickness/2., ThetaNormalTarget);
+          if(CsI_E_M2>0 ){
+            // The energy in CsI is calculate form dE/dx Table because 
+            // 20um resolution is poor
+            Energy = 
+              He3Si.EvaluateEnergyFromDeltaE(Si_E_M2,300*micrometer,
+                  ThetaM2Surface, 0.01*MeV, 
+                  450.*MeV,0.001*MeV ,1000);
+            E_M2=CsI_E_M2;
+          }
+
+          else
+            Energy = Si_E_M2;
+
+          E_M2 += Si_E_M2;
+
+          // Evaluate energy using the thickness 
+          ELab = He3Al.EvaluateInitialEnergy( Energy ,2*0.4*micrometer , ThetaM2Surface); 
+          ELab = He3Si.EvaluateInitialEnergy( ELab ,20*micrometer , ThetaM2Surface);
+          ELab = He3Al.EvaluateInitialEnergy( ELab ,0.4*micrometer , ThetaM2Surface);
+          // Target Correction
+          ELab   = He3CD2.EvaluateInitialEnergy( ELab ,TargetThickness/2., ThetaNormalTarget);
           /************************************************/
 
-          /***********M2->Si_E[countMust2];*************************************/
+          /***********888888888888888888888****************/
           // Part 3 : Excitation Energy Calculation
           Ex = He10Reaction -> ReconstructRelativistic( ELab , ThetaLab );
           ThetaLab=ThetaLab/deg;
-           /************************************************/
+          /************************************************/
 
           /************************************************/
           // Part 4 : Theta CM Calculation
@@ -187,27 +200,31 @@ int main(int argc, char** argv)
   RootOutput::getInstance()->Destroy();
   RootInput::getInstance()->Destroy();
   NPOptionManager::getInstance()->Destroy();
-  /////////////////////////////////////////////////////////////////////
+  /////////////////////////////////////////////////////////////////////////////
   return 0 ;
 }
 
-////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
 void InitOutputBranch() {
   RootOutput::getInstance()->GetTree()->Branch("Ex",&Ex,"Ex/D");
   RootOutput::getInstance()->GetTree()->Branch("ELab",&ELab,"ELab/D");
   RootOutput::getInstance()->GetTree()->Branch("ThetaLab",&ThetaLab,"ThetaLab/D");
+  RootOutput::getInstance()->GetTree()->Branch("ThetaCM",&ThetaCM,"ThetaCM/D");
 }
 
-////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
 void InitInputBranch(){
   RootInput:: getInstance()->GetChain()->SetBranchAddress("InitialConditions",&Init );
   RootInput:: getInstance()->GetChain()->SetBranchStatus("InitialConditions",true );
   RootInput:: getInstance()->GetChain()->SetBranchStatus("fIC_*",true );
 }
-////////////////////////////////////////////////////////////////////////////////////////////////////     
-////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////     
 void ReInitValue(){
   Ex = -1000 ;
   ELab = -1000;
   ThetaLab = -1000;
+  ThetaCM = -1000;
 }
+
+
+////////////////////////////////////////////////////////////////////////////////
diff --git a/NPAnalysis/Example1/Analysis.h b/NPAnalysis/Example1/Analysis.h
index 76c2d8d4e..73dd9916a 100755
--- a/NPAnalysis/Example1/Analysis.h
+++ b/NPAnalysis/Example1/Analysis.h
@@ -40,29 +40,25 @@ void ReInitValue() ;
 /////////////////////////////////////////////////////////////////////////////////////////////////
 // ----------------------------------- DOUBLE, INT, BOOL AND MORE -------------------------------
 namespace VARIABLE{
-	double Ex;
+  double Ex;
   double ELab;
   double ThetaLab;
+  double ThetaCM;
   TInitialConditions* Init = new TInitialConditions();
 }
-	 
+
 using namespace VARIABLE ;
 // ----------------------------------------------------------------------------------------------
 /////////////////////////////////////////////////////////////////////////////////////////////////
 // -----------------------------------ENERGY LOSS----------------------------------------------
-namespace ENERGYLOSS
-	{
-	
-		//	Declare your Energy loss here	:
-			EnergyLoss He3CD2 = EnergyLoss 	("He3_CD2.G4table","G4Table",1 );
-													         
-		   EnergyLoss He3Al = EnergyLoss 	("He3_Aluminium.G4table","G4Table",1);
-		   
-		   EnergyLoss He3Si = EnergyLoss 	("He3_Si.G4table","G4Table",1);
-	
-      EnergyLoss Li11CD2 = EnergyLoss 	("Li11[0.0]_CD2.G4table","G4Table",100);
+namespace ENERGYLOSS{
+  //	Energy loss table: the G4Table are generated by the simulation
+  EnergyLoss He3CD2 = EnergyLoss("He3_CD2.G4table","G4Table",100 );
+  EnergyLoss He3Al = EnergyLoss("He3_Aluminium.G4table","G4Table",10);
+  EnergyLoss He3Si = EnergyLoss("He3_Si.G4table","G4Table",10);
+  EnergyLoss Li11CD2 = EnergyLoss("Li11[0.0]_CD2.G4table","G4Table",100);
 }
-	
+
 using namespace ENERGYLOSS ;
 // ----------------------------------------------------------------------------------------------
 /////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/NPAnalysis/Example1/ShowResult.C b/NPAnalysis/Example1/ShowResult.C
index 6a137a24d..d425115db 100644
--- a/NPAnalysis/Example1/ShowResult.C
+++ b/NPAnalysis/Example1/ShowResult.C
@@ -41,9 +41,10 @@ ETOF->Draw("same");
 
 // Kinematical Line //
 c1->cd(3);
-chain->Draw("ELab:ThetaLab>>hKine(1000,0,90,400,0,40)","MUST2.CsI_E<0 && MUST2.TelescopeNumber<5 && EDE && ETOF","colz");
+chain->Draw("ELab:ThetaLab>>hKine(500,0,45,400,0,40)","MUST2.CsI_E<0 && MUST2.TelescopeNumber<5 && EDE && ETOF","colz");
 
 NPL::Reaction r("11Li(d,3He)10He@553");
+r.SetExcitationHeavy(1.4);
 TGraph* Kine = r.GetKinematicLine3(); 
 Kine->SetLineWidth(2);
 Kine->SetLineColor(kOrange-3);
@@ -51,9 +52,9 @@ Kine->Draw("c");
 
 // Excitation Energy //
 c1->cd(4);
-int bin=100;
-double Emin = -10;
-double Emax = 10;
+int bin=50;
+double Emin = -5;
+double Emax = 5;
 
 chain->Draw(Form("Ex>>hEx(%d,%f,%f)",bin,Emin,Emax),"MUST2.CsI_E<0 && MUST2.TelescopeNumber<5 && EDE && ETOF");
 TH1F* hEx = (TH1F*) gDirectory->FindObjectAny("hEx");
@@ -62,4 +63,12 @@ hEx->GetXaxis()->SetTitle("E_{10He}");
 hEx->SetFillStyle(1001);
 hEx->SetLineColor(kAzure+7);
 hEx->SetFillColor(kAzure+7);
+
+hEx->Fit("gaus");
+
+TF1* f = hEx->GetFunction("gaus");
+f->SetLineWidth(2);
+f->SetLineColor(kOrange-3);
+f->SetNpx(1000);
+
 }
diff --git a/NPAnalysis/Example1/cuts/EDE.root b/NPAnalysis/Example1/cuts/EDE.root
index 1d18123c0647fc8d0dce0661e0b1cabf411b40a0..fea217bf9828f59a729befc535082e5d38399a78 100644
GIT binary patch
delta 500
zcmZ3WxIl4&zQC8)b9y3~1fNV7pYrW-^S<{J9n~Zm7^)ap7#JA5{Z=heVbEt_1hP|r
zm|=3Gfat`@Ldrm4uoMGBEKt-ACe6Sgz{S7_F>&GvMP{I~iEk#?zxe$A&}_l-#8;BC
zGn)L5|DMftqyBSn)P_CveSdeSPI_9^EB|JG8~eFw7Bz?dIiJ1!c9K2cjsF{77w#+j
z!0EG>nYsB-y#mL_lRA2d44+seBNFWxEIB!3BxX!+npz>TtI@((LPAzTV!z=A>jgii
zcQW4HuQ0#yO4Hxd4M+E9I_#|XVe?ba<Ow^?z-7+HcCG73*O{aV$srOE5)u;s8&$Wi
z=|2;fwz_8S>1VGO*8NV+%-m*|evT=1OM_LAjL4+}2M+$>;h4kPmB_&UW?JZ^EXl=x
zH_JAzkA7Nq>whFr*R}-CHeUxunQ5Vk+j&y>>U-2~r1SFdD41PIe{h6l(}911%pFHq
zXT(34<S5>5DfNuAq;kS(!^;etR+*%n)2RN?a-gx(FyZ)t488jo9tbG!eQ>5C{M~~G
z3F5Zb_gq=@#fw30=7OyZ47^^TDAB3~h5P1nOzym((48zHU;qha88KiaSb}4X3lVDq
T>5~-%q&R``C$OO0bP59i%EQVi

delta 500
zcmZ3WxIl4&zQC$YX0sxk1)oe8pYrW-^S<{J9n~Zm7^)ap7#JA5{Z?$d$e_=_2xO-K
zF~j6W0nv$*g_ME9U?~QMSfHpKOqzi~fQx|<V&cRTip)S|6W>g(f41e0+w0OegReb&
zJ_naS{_D&7X8%u3-H3bk$N$|mI$5;$82>l_!_4X4GIojo7e0Ggc2b`G&HjD6o)#Nw
zFfF^+*y#ArUZCYiir91mhRP<MH3sqxb68mTc+Pkq^s?c(>o7->r-zTH=f1=Z*?>Q%
zk2JiCpK#tG>)^lC1CQ>TEQqOBV^*Ia!nQh<p;elhIombKHO=sZp%#x04^Pkk1Cyez
zxu@xG4&8Sy_4C(&{eL%YF^QgUoZe^@<shrc$Ca7zAfb+p<s8#dg9hfZ(^{TedoKRF
z*>~Xj+9K<>|8;=6qBpP{R$IWpcY4)^Xf~sEdpF@Xo7vdd1f*XX7bG!7Cj1X%ba}*d
zM!(?Xg6_jIyq{Ti*_?PfBa<OARLUrQifx6{g9Aq-HY6vQOwZ3K=$IH+khVv=yr5u1
z_q^=5tiUQ&hAM^m@(c{TUZ5z^ss)An=5tK$yr9sXEFoY331t~EU?f<AV~q<DYXa$$
R6$GR>f$=A>pxkr{0{}3?#q9t9

-- 
GitLab