Simple macro to plot field map.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Feb 2002 11:44:26 +0000 (11:44 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Feb 2002 11:44:26 +0000 (11:44 +0000)
macros/plotField.C [new file with mode: 0644]

diff --git a/macros/plotField.C b/macros/plotField.C
new file mode 100644 (file)
index 0000000..34d6a3c
--- /dev/null
@@ -0,0 +1,144 @@
+void plotField(Int_t iField = 0)
+{
+//
+//  iField = 0    2 kG  solenoid 
+//           1    4 kG  solenoid
+//           2    5 kG  solenoid
+//  
+//  load necessary libraries
+    gSystem->Load("$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET)/libminicern");
+    gSystem->Load("$(ROOTSYS)/lib/libPhysics");
+    gSystem->Load("$(ROOTSYS)/lib/libEG");
+    gSystem->Load("$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET)/libSTEER");
+    
+//
+//
+//  create field map
+
+     AliMagFMaps* field = new AliMagFMaps(
+     "Maps","Maps", 
+     2, 1., 10., iField);
+
+//     field-SetL3ConstField(1);
+     
+//
+//  get parameters
+     Float_t xMin, xMax, yMin, yMax, zMin, zMax;
+     Float_t dX, dY, dZ;
+     xMin = -350.;
+     xMax =  350.;
+     dX   = (field->FieldMap(0))->DelX();
+     yMin = -350.;
+     yMax =  350.;
+     dY   = (field->FieldMap(0))->DelY();
+     zMin =   250.;
+     zMax =  1450.;
+     dZ   = (field->FieldMap(0))->DelZ();
+     Int_t nx = (xMax-xMin)/dX;
+     Int_t ny = (yMax-yMin)/dY;
+     Int_t nz = (zMax-zMin)/dZ;
+     
+        
+//
+// create histogram
+     TH2F* hMap = new TH2F("hMap", "Field Map y-z", 
+                          nz, zMin, zMax, ny, yMin, yMax);
+     TH2F* hMap1 = new TH2F("hMap1", "Field Map y-z", 
+                          nz, zMin, zMax, ny, yMin, yMax);
+     TH1F* hZ   = new TH1F("hZ", "Field along Z", 
+                          nz, zMin, zMax);
+
+     TH2F* hVec = new TH2F("hVec", "Field Map y-z", 
+                          nz, zMin, zMax, ny, yMin, yMax);
+
+     TH2F* hCir = new TH2F("hCir", "Field Map y-z", 
+                          nz, zMin, zMax, ny, yMin, yMax);
+     Float_t bMax = 0.;
+     for (Int_t i = 0; i < nz; i++) {
+        for (Int_t j = 0; j < ny; j++) {
+            Float_t x[3];
+            Float_t b[3];
+            
+            x[2] = zMin + i * dZ;
+            x[1] = yMin + j * dY;
+            x[0] = 0.;
+            field->Field(x, b);
+            Float_t bb = TMath::Sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]);
+            if (bb > bMax) bMax = bb;
+            hMap->Fill(x[2], x[1], bb);
+        }
+     }
+
+     for (Int_t i = 0; i < nz; i++) {
+        for (Int_t j = 0; j < ny; j++) {
+            x[2] = zMin + i * dZ;
+            x[1] = yMin + j * dY;
+            x[0] = 0.;
+            field->Field(x, b);
+            Float_t bb = TMath::Sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]);
+            Float_t db = (bMax-bb)/bMax*100.;
+            
+            hMap1->Fill(x[2], x[1], db);
+        }
+     }
+     
+     for (Int_t i = 0; i < nz; i++) {
+        x[2] = zMin + i * dZ +dZ/2.;
+        x[1] = 0.;
+        x[0] = 0.;
+        field->Field(x, b);
+        Float_t bb = TMath::Sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]);
+        hZ->Fill(x[2], bb);
+     }
+
+     TCanvas *c1 = new TCanvas("c1","Canvas 1",400,10,600,700);
+     hMap->Draw();
+     TCanvas *c2 = new TCanvas("c2","Canvas 2",400,10,600,700);
+     hZ->Draw();
+     TCanvas *c3 = new TCanvas("c3","Canvas 3",400,10,600,700);
+     hVec->Draw();
+     
+     Float_t scale1 = 0.9*TMath::Sqrt(dZ*dZ+dY*dY)/bMax/2.;
+     Float_t scale2 = 0.005/bMax;
+     TArrow* arrow;
+     
+     
+     for (Int_t i = 0; i < nz; i++) {
+        for (Int_t j = 0; j < nx; j++) {
+            x[2] = zMin + i * dZ + dZ/2.;
+            x[0] = xMin + j * dX + dX/2.;
+            x[1] = 0.;
+            field->Field(x, b);
+            Float_t bb = TMath::Sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]);
+            b[2] *= scale1;
+            b[0] *= scale1;
+            Float_t width = 0.005+scale2*b[1];
+            arrow = new TArrow(x[2], x[0], x[2]+b[2], x[0]+b[0], width,"|>");
+            arrow->SetFillColor(1);
+            arrow->SetFillStyle(1001);
+            arrow->Draw();
+            c3->Modified();
+            c3->cd();
+        }
+     }
+
+     TCanvas *c4 = new TCanvas("c4","Canvas 4",400,10,600,700);
+     hCir->Draw();
+     for (Int_t i = 0; i < nz; i++) {
+        for (Int_t j = 0; j < ny; j++) {
+            x[2] = zMin + i * dZ + dZ/2.;
+            x[1] = yMin + j * dY + dY/2.;
+            x[0] = 0.;
+            field->Field(x, b);
+            Float_t bb = TMath::Sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]);
+            TEllipse *ellipse; 
+            ellipse= new TEllipse(x[2], x[1], b[1]*scale1/4., b[1]*scale1/4.,0,360,0);
+            ellipse->Draw();
+            c4->Modified();
+            c4->cd();
+        }
+     }
+}
+
+
+