* show_scan_results.C
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 5 Nov 2009 18:08:05 +0000 (18:08 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 5 Nov 2009 18:08:05 +0000 (18:08 +0000)
  New macro - build tree from scan results on individual events.

* esd_spd_tracklets.C
  From Domenico - add cuts to mark "bad" tracklets at load time.

* AliEveTrackCounter
  Store scan results by writing ESD track container and AliMultiplicity
  into scan_results.root.
  Display the results by running show_scan_results.C and then
  calling TTree::Draw() commands on the created tree.
  Probably the drawing function should also be a macro.

EVE/EveBase/AliEveTrackCounter.cxx
EVE/EveBase/AliEveTrackCounter.h
EVE/EveBase/AliEveTrackCounterEditor.cxx
EVE/alice-macros/esd_spd_tracklets.C
EVE/macros/mf_fix.C [new file with mode: 0644]
EVE/macros/show_scan_results.C [new file with mode: 0644]

index 9223d76..94b59ed 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <TEveGedEditor.h>
 
+#include <TFile.h>
+
 //==============================================================================
 // AliEveTrackCounter
 //==============================================================================
@@ -277,18 +279,38 @@ void AliEveTrackCounter::DoTrackletAction(AliEveTracklet* track)
 /******************************************************************************/
 
 //______________________________________________________________________________
-void AliEveTrackCounter::OutputEventTracks(FILE* out)
+void AliEveTrackCounter::OutputEventTracks()
 {
   // Print good-track summary into a plain-text file by iteration
   // through all registered track-lists.
   // State of each track is determined by its line-style, it is
   // considered a good track if it's line style is solid.
 
-  if (out == 0)
   {
-    out = stdout;
-    fprintf(out, "AliEveTrackCounter::OutputEventTracks()\n");
+    TFile *f = TFile::Open("scan_results.root", "UPDATE");
+
+    AliESDEvent     *esd = AliEveEventManager::AssertESD();
+    TClonesArray    *trk = static_cast<TClonesArray*>   (esd->GetList()->FindObject("Tracks"));
+    AliMultiplicity *mul = const_cast <AliMultiplicity*>(esd->GetMultiplicity());
+
+    trk->Write(TString::Format("Tracks_%04d",    fEventId), kWriteDelete | kSingleKey);
+    mul->Write(TString::Format("Tracklets_%04d", fEventId), kWriteDelete);
+
+    f->Close();
   }
+}
+
+//______________________________________________________________________________
+void AliEveTrackCounter::PrintEventTracks()
+{
+  // Print good-track summary to stdout by iteration
+  // through all registered track-lists.
+  // State of each track is determined by its line-style, it is
+  // considered a good track if it's line style is solid.
+
+  FILE* out = stdout;
+
+  fprintf(out, "AliEveTrackCounter::PrintEventTracks()\n");
 
   fprintf(out, "Event=%d\n", fEventId);
   fprintf(out, "GoodTracks=%d  AllTracks=%d\n", fGoodTracks, fAllTracks);
index 2ce459e..bc8bf9a 100644 (file)
@@ -45,7 +45,8 @@ public:
   Int_t GetClickAction() const  { return fClickAction; }
   void  SetClickAction(Int_t a) { fClickAction = a; }
 
-  void OutputEventTracks(FILE* out=0);
+  void OutputEventTracks();
+  void PrintEventTracks();
 
   static AliEveTrackCounter* fgInstance;
 
index 8550bce..cf6d21d 100644 (file)
 #include "TGComboBox.h"
 #include "TGMsgBox.h"
 
+#include "TTree.h"
 #include "TH1F.h"
 
 #include "TCanvas.h"
+#include "TLatex.h"
 #include "TEveManager.h"
 
 #include "TROOT.h"
@@ -218,7 +220,7 @@ void AliEveTrackCounterEditor::DoPrintReport()
 {
    // Slot for PrintReport.
 
-   fM->OutputEventTracks();
+   fM->PrintEventTracks();
 }
 
 //______________________________________________________________________________
@@ -226,25 +228,7 @@ void AliEveTrackCounterEditor::DoFileReport()
 {
    // Slot for FileReport.
 
-   TString file(Form("ev-report-%03d.txt", fM->GetEventId()));
-   if (gSystem->AccessPathName(file) == kFALSE)
-   {
-      Int_t ret;
-      new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
-                   "File Exist",
-                   Form("Event record for event %d already exist.\n Replace?", fM->GetEventId()),
-                   kMBIconQuestion, kMBYes | kMBNo, &ret);
-      if (ret == kMBNo)
-         return;
-   }
-   FILE* out = fopen(file, "w");
-   if (out) {
-      fM->OutputEventTracks(out);
-      fclose(out);
-   } else {
-      Error("AliEveTrackCounterEditor::DoFileReport",
-            "Can not open file '%s' for writing.", file.Data());
-   }
+   fM->OutputEventTracks();
 }
 
 //______________________________________________________________________________
@@ -252,58 +236,48 @@ void AliEveTrackCounterEditor::DoShowHistos()
 {
   // Slot for ShowHistos.
 
-  TH1F* hcnt = new TH1F("cnt", "Primeries per event", 41, -0.5, 40.5);
-  TH1F* hchg = new TH1F("chg", "Primary charge",       3, -1.5,  1.5);
-  TH1F* hpt  = new TH1F("pt",  "pT distribution",     40,  0.0,  8.0);
-  TH1F* heta = new TH1F("eta", "eta distribution",    40, -1.0,  1.0);
-  TH1F* hphi = new TH1F("phi", "phi distribution",    40, -3.1416, 3.1416);
+  static const TEveException kEH("AliEveTrackCounterEditor::DoShowHistos ");
 
-  Int_t nn; // fscanf return value
+  TEveUtil::Macro("show_scan_results.C");
 
-  for (Int_t i=0; i<1000; ++i)
-  {
-    TString file(Form("ev-report-%03d.txt", i));
-    if (gSystem->AccessPathName(file) == kFALSE)
-    {
-      Int_t   ev, ngoodtr, nalltr;
-      FILE* f = fopen(file, "read");
-
-      nn = fscanf(f, "Event=%d\n", &ev);
-      if (nn != 1) { printf("SAFR0 %d\n", nn); fclose(f); return;  }
-
-      nn = fscanf(f, "GoodTracks=%d  AllTracks=%d\n", &ngoodtr, &nalltr);
-      if (nn != 2) { printf("SAFR1 %d\n", nn); fclose(f); return;  }
-
-      hcnt->Fill(ngoodtr);
-      for (Int_t t = 0; t < ngoodtr; ++t)
-      {
-        Int_t   id, chg;
-        Float_t pt, eta, phi;
-        nn = fscanf(f, "%d: chg=%d pt=%f eta=%f phi=%f\n", &id, &chg, &pt, &eta, &phi);
-        if (nn != 5) { printf("SAFR2 %d\n", nn); fclose(f); return;  }
-        hchg->Fill(chg);
-        hpt ->Fill(pt);
-        heta->Fill(eta);
-        hphi->Fill(phi);
-      }
-      fclose(f);
-    }
-  }
+  TTree* t = (TTree*) gDirectory->Get("SR");
 
-  TCanvas* c;
-  if (gPad == 0 || gPad->GetCanvas()->IsEditable() == kFALSE) {
-    c = new TCanvas("Scanwas", "Scanning Results", 800, 600);
-  } else {
-    c = gPad->GetCanvas();
-    c->Clear();
-  }
+  if (t == 0)
+    throw kEH + "Tree 'SR' with scan results not found.";
+
+  TCanvas *c = 0;
+
+  //----------------------------------------------------------------------------
+  // Tracks
+  //----------------------------------------------------------------------------
+
+  c = new TCanvas("Tracks", "Track Scanning Results", 800, 600);
   c->Divide(2, 3);
 
-  c->cd(1); hcnt->Draw();
-  c->cd(2); hchg->Draw();
-  c->cd(3); hpt ->Draw();
-  c->cd(4); heta->Draw();
-  c->cd(5); hphi->Draw();
+  c->cd(1);
+  t->Draw("Sum$(T.fLabel & 1)");
+
+  c->cd(2);
+  t->Draw("T.GetSign()", "T.fLabel & 1");
+
+  c->cd(3);
+  t->Draw("T.GetSign()", "T.fLabel & 1");
+
+  c->cd(4);
+  t->Draw("T.Eta()", "T.fLabel & 1");
+
+  c->cd(5);
+  t->Draw("T.Phi()", "T.fLabel & 1");
+
+  c->Modified();
+  c->Update();
+
+  //----------------------------------------------------------------------------
+  // Trackelts
+  //----------------------------------------------------------------------------
+
+  c = new TCanvas("Tracklets", "Tracklet Scanning Results", 800, 600);
+  (new TLatex(0.2, 0.4, "Not yet available"))->Draw();
 
   c->Modified();
   c->Update();
index 9513cc9..dd203b3 100644 (file)
@@ -20,7 +20,8 @@
 // are relevant for tracklets.
 
 TEveTrackList* esd_spd_tracklets(Float_t radius=8, Width_t line_width=3,
-                                Float_t d_theta=0.025, Float_t d_phi=0.08)
+                                Float_t dPhiWindow=0.080, Float_t dThetaWindow=0.025, 
+                                 Float_t dPhiShift05T=0.0045)
 {
   // radius - cylindrical radius to which the tracklets should be extrapolated
 
@@ -39,19 +40,32 @@ TEveTrackList* esd_spd_tracklets(Float_t radius=8, Width_t line_width=3,
   prop->SetMaxR(radius);
   gEve->AddElement(cont);
 
+  const Float_t  Bz = TMath::Abs(field->SolenoidField());
+
+  const Double_t dPhiShift     = dPhiShift05T / 5.0 * Bz;
+  const Double_t dPhiWindow2   = dPhiWindow * dPhiWindow;
+  const Double_t dThetaWindow2 = dThetaWindow * dThetaWindow;
+
   for (Int_t i = 0; i < mul->GetNumberOfTracklets(); ++i)
   {
-    Float_t theta = mul->GetTheta(i);
-    Float_t phi   = mul->GetPhi(i);
+    Float_t theta  = mul->GetTheta(i);
+    Float_t phi    = mul->GetPhi(i);
+    Float_t dTheta = mul->GetDeltaTheta(i);
+    Float_t dPhi   = mul->GetDeltaPhi(i);
 
     AliEveTracklet* t = new AliEveTracklet(i, pv, theta, phi, prop);
     t->SetAttLineAttMarker(cont);
     t->SetElementName(Form("Tracklet %d", i));
-    t->SetElementTitle(Form("id=%d: eta=%.3f, theta=%.3f, phi=%.3f",
-                           i, mul->GetEta(i), theta, phi));
-    // if some condition
-    mul->SetLabel(i, 0, 3);
-    // else mul->SetLabel(i, 0, 0);
+    t->SetElementTitle(Form("Id = %d\nEta=%.3f, Theta=%.3f, dTheta=%.3f\nPhi=%.3f dPhi=%.3f",
+                           i, mul->GetEta(i), theta, dTheta, phi, dPhi));
+
+    dPhi -= dPhiShift;
+
+    Float_t d = dPhi*dPhi/dPhiWindow2 + dTheta*dTheta/dThetaWindow2;
+    if (d < 1.0f)
+      mul->SetLabel(i, 0, 3);
+    else
+      mul->SetLabel(i, 0, 0);
 
     cont->AddElement(t);
   }
diff --git a/EVE/macros/mf_fix.C b/EVE/macros/mf_fix.C
new file mode 100644 (file)
index 0000000..cd2257d
--- /dev/null
@@ -0,0 +1,9 @@
+// Fix magnetic field ... so that we can display
+// old data from alien.
+
+void mf_fix()
+{
+  AliMagF* fld = new AliMagF("Map", "Map", -1.0, 1.0, AliMagF::k5kG, AliMagF::kNoBeamField, -1.0);
+  TGeoGlobalMagField::Instance()->SetField(fld);
+  TGeoGlobalMagField::Instance()->Lock();
+}
diff --git a/EVE/macros/show_scan_results.C b/EVE/macros/show_scan_results.C
new file mode 100644 (file)
index 0000000..0263875
--- /dev/null
@@ -0,0 +1,54 @@
+// Label is used to store scanning result for tracks and trackelts.
+//
+// BIT(1) stores the original selection.
+// BIT(0) stores the user selection (set to same value as b1 at init).
+//
+// This allows to check all possible combinations.
+
+
+void show_scan_results()
+{
+  TFile *f = TFile::Open("scan_results.root", "UPDATE");
+
+  f->Delete("SR;*");
+
+  T = new TTree("SR", "Scanning results");
+
+  TClonesArray* clones = new TClonesArray("AliESDtrack", 32);
+  TBranch * tb = T->Branch("T", &clones);
+
+  AliMultiplicity *mult = 0;
+  TBranch *mb = T->Branch("M", &mult);
+
+
+  for (Int_t i=0; i<=9999; ++i)
+  {
+    TString name;
+
+    name.Form("Tracks_%04d", i);
+    TClonesArray* ts = (TClonesArray*) f->Get(name);
+
+    name.Form("Tracklets_%04d", i);
+    AliMultiplicity* ms =  (AliMultiplicity*) f->Get(name);
+
+    if (ts && ms)
+    {
+      tb->SetAddress(&ts);
+      mb->SetAddress(&ms);
+      T->Fill();
+    }
+    else if ((ts && !ms) || (!ts && ms))
+    {
+      Error("show_scan_results", "Only one of tracks/tracklets exists for index %d.", i);
+    }
+
+  }
+
+  T->Write();
+
+  f->Close();
+  delete f;
+
+  // Reopen in read mode.
+  TFile::Open("scan_results.root");
+}