From 1251af8318225fec4e0f8d850a5201fea443f7e4 Mon Sep 17 00:00:00 2001
From: zhang <zhang@9a6e40ed-f3a0-4838-9b4a-bf418f78e88d>
Date: Mon, 5 Jul 2010 15:29:47 +0000
Subject: [PATCH] ZJ

---
 tracy/tools/max4.cc | 155 ++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 143 insertions(+), 12 deletions(-)

diff --git a/tracy/tools/max4.cc b/tracy/tools/max4.cc
index a726668..e813131 100644
--- a/tracy/tools/max4.cc
+++ b/tracy/tools/max4.cc
@@ -4,11 +4,20 @@
 
 int no_tps = ORDER; // arbitrary TPSA order is defined locally
 
+extern bool  freq_map;
+
 // dynamic aperture
 const double delta  = 5.0e-2; // delta for off-momentum aperture
 
-/////////////////////////////////////////////////////////////////////////////////////////////////
 
+
+
+
+//***************************************************************************************
+//
+//  MAIN CODE
+//
+//****************************************************************************************
  int main(int argc, char *argv[])
 {
 
@@ -41,30 +50,140 @@ const double delta  = 5.0e-2; // delta for off-momentum aperture
   //const double  x_max_FMA = 3e-3, delta_FMA = 7e-2;
   //const int     n_x = 28, n_dp = 56, n_tr = 2048;
   
+  double nux = 0.0 , nuz = 0.0, ksix = 0.0, ksiz =  0.0;
+  
   
   if (true)
     Read_Lattice(argv[1]); //sets some globval params
   else
     rdmfile("flat_file.dat"); //instead of reading lattice file, get data from flat file
 
+    
+    
+  globval.quad_fringe = true;                // include quadrupole fringe field
   //no_sxt(); //turns off sextupoles
 
+  
+  
+    
   Ring_GetTwiss(true, 0e-2); printglob(); //gettwiss computes one-turn matrix arg=(w or w/o chromat, dp/p)
   //get_matching_params_scl();
   //get_alphac2();
   //GetEmittance(ElemIndex("cav"), true);
-  prt_lat("linlat.out", globval.bpm, true);
+
+/* print lattice file for nsrl-ii*/
+//  prt_lat("linlat.out", globval.bpm, true);  
+  
   //prtmfile("flat_file.dat"); // writes flat file
   //prt_chrom_lat(); //writes chromatic functions into chromlat.out
 
+  
+  // Using tracking to get tunes and chromaticities
   if (true) {
-    //prt_cod("cod.out", globval.bpm, true); //prints a specific closed orbit with corrector strengths
-    globval.bpm = ElemIndex("bpm_m");
-   // globval.bpm = ElemIndex("bpm");
-    globval.hcorr = ElemIndex("corr_h"); globval.vcorr = ElemIndex("corr_v");
-    globval.gs = ElemIndex("GS"); globval.ge = ElemIndex("GE");
+  GetTuneTrac(1026L, 0.0, &nux, &nuz);
+  fprintf(stdout,"From tracking: nux = % f nuz = % f \n",nux,nuz);
+  GetChromTrac(2L, 1026L, 1e-5, &ksix, &ksiz);
+  fprintf(stdout,"From tracking: ksix= % f ksiz= % f \n",ksix,ksiz);
+  }
+  
+
+  
+  //*************************************************************
+  //=============================================================
+  
+   double dP = 0.0;
+  
+  // Chamber
+  bool ChamberFlag = false; 
+  
+  // tune shift with amp and energy
+  bool TuneShiftFlag = true;
+  
+  //  frequency map
+   bool FmapFlag = false, ExperimentFMAFlag = false, DetailedFMAFlag = true;     
    
-    set_bn_design_fam(globval.hcorr, Dip, 0.0, 0.0);
+  // momentum acceptance
+  bool MomentumAccFlag = false;
+  
+   
+//  Call soleillib.cc   
+ // computes Tuneshift with amplitudes and energy
+  if (TuneShiftFlag == true){
+    if (ChamberFlag == true ){
+      NuDx(31L,21L,516L,0.025,0.005,dP);
+      //NuDp(31L,516L,0.06);
+      NuDp(31L,1026L,0.06);
+      }
+      else{
+    //    NuDx(50L,30L,516L,0.035,0.02,dP);
+    //    NuDp(31L,1026L,0.06);
+    	NuDx(50L,30L,516L,-0.02,-0.02,dP);
+        NuDp(31L,1026L,0.06);
+      }
+
+  }
+   
+  // Computes FMA
+  if (FmapFlag == true){
+    if (ChamberFlag == true ){
+      if (ExperimentFMAFlag == true)
+    //     fmap(40,12,258,-20e-3,5e-3,0.0,true,false); // for experimental
+	 fmap(40,12,258,-20e-3,5e-3,0.0,true); // for experimental
+      if (DetailedFMAFlag == true)
+      //  fmap(100,50,1026,20e-3,5e-3,0.0,true,false);
+	 fmap(100,50,1026,20e-3,5e-3,0.0,true);
+      }
+      else{
+        if (ExperimentFMAFlag == true)
+    //      fmap(40,12,258,-32e-3,5e-3,0.0,true,false);
+	  fmap(40,12,258,-32e-3,5e-3,0.0,true);
+        if (DetailedFMAFlag == true)
+        //  fmap(200,100,1026,32e-3,7e-3,0.0,true);
+	   fmap(20,10,1026,32e-3,7e-3,0.0,true);
+      }
+  }
+  
+  
+  // Compute momentum acceptance
+  if (MomentumAccFlag == true){
+    MomentumAcceptance(1L, 18L, 0.01, 0.05, 4L, -0.01, -0.05, 4L);
+   // MomentumAcceptance(1L, 108L, 0.01, 0.05, 100L, -0.01, -0.05, 100L);
+  }
+  
+  
+  
+  //---------------------------------------------------------
+  // test region
+  
+ //  trace = true;
+ // Get_Disp_dp();
+ 
+  //InducedAmplitude(20);
+  
+ // Hcofonction(2, 0.001);
+  
+// fmapdp(20L, 21L, 1026L, 25e-3, 0.06, 0.3e-3, true);
+ // return 1;
+ 
+  //--------------------------------------------------------
+  
+  
+  
+  
+  //*********************************************************************************
+  //---------------------------------------------------------------------------------------------------------------------------------
+  
+  // Delicated for max4 lattice. To load alignment error files and do correction
+  if (false) {
+    //prt_cod("cod.out", globval.bpm, true); //prints a specific closed orbit with corrector strengths
+    
+    
+    globval.bpm = ElemIndex("bpm_m");                   //definition for max4 lattice, bpm
+  //  globval.bpm = ElemIndex("bpm");                         
+    globval.hcorr = ElemIndex("corr_h"); globval.vcorr = ElemIndex("corr_v");    //definition for max4 lattice, correctors
+   // globval.hcorr = ElemIndex("ch"); globval.vcorr = ElemIndex("cv");
+    globval.gs = ElemIndex("GS"); globval.ge = ElemIndex("GE");   //definition for max4 lattice, girder maker
+    
     
     //compute response matrix (needed for OCO)
     gcmat(globval.bpm, globval.hcorr, 1);  gcmat(globval.bpm, globval.vcorr, 2);
@@ -89,7 +208,8 @@ const double delta  = 5.0e-2; // delta for off-momentum aperture
     //LoadAlignTol("/home/simon/projects/out/20091126/AlignErr.dat", true, 1.0, true, 1);
     //prt_cod("cod_err.out", globval.bpm, true); //prints a specific closed orbit with corrector strengths
    
-
+      
+    // delicated for max4 lattice
     //load alignment errors and field errors, correct orbit, repeat N times, and get statistics
     get_cod_rms_scl_new(1); //trim coils aren't reset when finished
   
@@ -99,7 +219,14 @@ const double delta  = 5.0e-2; // delta for off-momentum aperture
     //LoadApers("/home/simon/projects/src/lattice/Apertures.dat", 1, 1);
     
   }
-  
+
+
+
+//*******************************************************************************
+//-------------------------------------------------------------------------------------------------------------------------------------  
+
+  // Call nsls-ii_lib.cc
+  // tune shift with amplitude 
   if (false) {
     cout << endl;
     cout << "computing tune shifts" << endl;
@@ -110,7 +237,8 @@ const double delta  = 5.0e-2; // delta for off-momentum aperture
   
   if (false) {
     //fmap(n_x, n_y, n_tr, x_max_FMA, y_max_FMA, 0.0, true, false);
-    fmapdp(n_x, n_dp, n_tr, x_max_FMA, -delta_FMA, 1e-3, true, false); // always use -delta_FMA (+delta_FMA appears broken)
+//    fmapdp(n_x, n_dp, n_tr, x_max_FMA, -delta_FMA, 1e-3, true, false); // always use -delta_FMA (+delta_FMA appears broken)
+    fmapdp(n_x, n_dp, n_tr, x_max_FMA, -delta_FMA, 1e-3, true); // always use -delta_FMA (+delta_FMA appears broken)
   } else {
     globval.Cavity_on = true; // this gives longitudinal motion
     globval.radiation = false; // this adds ripple around long. ellipse (needs many turns to resolve damp.)
@@ -120,7 +248,10 @@ const double delta  = 5.0e-2; // delta for off-momentum aperture
   }
   
   
-//  return 1;
+
+  
+  
+  
   
   //
   // IBS & TOUSCHEK
-- 
GitLab