08-nov-2005 NvE Sorting memberfunctions in AliDevice, AliVertex and AliJet optimised...
authornick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Nov 2005 12:16:20 +0000 (12:16 +0000)
committernick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Nov 2005 12:16:20 +0000 (12:16 +0000)
                CPU time. In case two values are identical no swap is performed.
                Basically the test "val1 < val2" was replaced by "val1 <= val2".
09-nov-2005 NvE DisplayHits memberfunctions in AliDevice updated to fully support all
                (de)calibration modes of GetSignal for displaying (and skipping dead) hits.
09-nov-2005 NvE Additional memberfunctions SetOutputFile(TString name) and GetOutputFile added
                to IceF2k to provide a more user friendly running environment.
                The example in the IceF2k docs has been updated accordingly.

RALICE/AliDevice.cxx
RALICE/AliJet.cxx
RALICE/AliVertex.cxx
RALICE/history.txt
RALICE/icepack/iceconvert/IceF2k.cxx
RALICE/icepack/iceconvert/IceF2k.h
RALICE/icepack/iceconvert/history.txt
RALICE/icepack/iceconvert/macros/icef2k.cc
RALICE/icepack/macros/icedwalk.cc

index 9f3715c..2da2d5b 100644 (file)
@@ -560,8 +560,8 @@ TObjArray* AliDevice::SortHits(Int_t idx,Int_t mode,TObjArray* hits,Int_t mcal)
     break; // go for next hit
    }
  
-   if (mode==-1 && s->GetSignal(idx,mcal) < ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
-   if (mode==1 && s->GetSignal(idx,mcal) > ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==-1 && s->GetSignal(idx,mcal) <= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==1 && s->GetSignal(idx,mcal) >= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
  
    nord++;
    for (Int_t k=nord-1; k>j; k--) // create empty position
@@ -645,8 +645,8 @@ TObjArray* AliDevice::SortHits(TString name,Int_t mode,TObjArray* hits,Int_t mca
     break; // go for next hit
    }
  
-   if (mode==-1 && s->GetSignal(idx,mcal) < ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
-   if (mode==1 && s->GetSignal(idx,mcal) > ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==-1 && s->GetSignal(idx,mcal) <= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==1 && s->GetSignal(idx,mcal) >= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
  
    nord++;
    for (Int_t k=nord-1; k>j; k--) // create empty position
@@ -707,7 +707,7 @@ void AliDevice::DisplayHits(Int_t idx,Float_t scale,TObjArray* hits,Int_t dp,Int
  if (scale<0)
  {
   Float_t vmin,vmax;
-  GetExtremes(vmin,vmax,idx,hits);
+  GetExtremes(vmin,vmax,idx,hits,mode);
   sigmax=fabs(vmax);
   if (fabs(vmin)>sigmax) sigmax=fabs(vmin);
  }
@@ -743,6 +743,10 @@ void AliDevice::DisplayHits(Int_t idx,Float_t scale,TObjArray* hits,Int_t dp,Int
    }
   }
   sig=sx->GetSignal(idx,mode);
+
+  // Skip dead signals
+  if (fabs(sig) <= 0.) continue;
+
   TPolyMarker3D* m=new TPolyMarker3D();
   m->SetMarkerStyle(8);
   m->SetMarkerColor(mcol);
@@ -803,7 +807,7 @@ void AliDevice::DisplayHits(TString name,Float_t scale,TObjArray* hits,Int_t dp,
  if (scale<0)
  {
   Float_t vmin,vmax;
-  GetExtremes(vmin,vmax,name,hits);
+  GetExtremes(vmin,vmax,name,hits,mode);
   sigmax=fabs(vmax);
   if (fabs(vmin)>sigmax) sigmax=fabs(vmin);
  }
@@ -842,6 +846,10 @@ void AliDevice::DisplayHits(TString name,Float_t scale,TObjArray* hits,Int_t dp,
    }
   }
   sig=sx->GetSignal(idx,mode);
+
+  // Skip dead signals
+  if (fabs(sig) <= 0.) continue;
+
   TPolyMarker3D* m=new TPolyMarker3D();
   m->SetMarkerStyle(8);
   m->SetMarkerColor(mcol);
index c2141b4..e8416d8 100644 (file)
@@ -901,8 +901,8 @@ TObjArray* AliJet::SortTracks(Int_t mode,TObjArray* tracks)
      break;
    }
 
-   if (mode<0 && val1 < val2) continue;
-   if (mode>0 && val1 > val2) continue;
+   if (mode<0 && val1 <= val2) continue;
+   if (mode>0 && val1 >= val2) continue;
  
    nord++;
    for (Int_t k=nord-1; k>j; k--) // create empty position
index fc0e9a1..e4cbcd3 100644 (file)
@@ -1141,8 +1141,8 @@ TObjArray* AliVertex::SortJets(Int_t mode,TObjArray* jets)
      break;
    }
 
-   if (mode<0 && val1 < val2) continue;
-   if (mode>0 && val1 > val2) continue;
+   if (mode<0 && val1 <= val2) continue;
+   if (mode>0 && val1 >= val2) continue;
  
    nord++;
    for (Int_t k=nord-1; k>j; k--) // create empty position
index f75c051..ab2fa40 100644 (file)
                 Memberfunction SortTracks introduced in AliJet and comment corrected in AliVertex.h.
 07-nov-2005 NvE Macro makedocs.cc in directory /macros modified (i.e. ";" changed by ":") to make
                 it generic so that it works correctly on all platforms (thanks Axel Naumann). 
+08-nov-2005 NvE Sorting memberfunctions in AliDevice, AliVertex and AliJet optimised to save
+                CPU time. In case two values are identical no swap is performed.
+                Basically the test "val1 < val2" was replaced by "val1 <= val2".
+09-nov-2005 NvE DisplayHits memberfunctions in AliDevice updated to fully support all 
+                (de)calibration modes of GetSignal for displaying (and skipping dead) hits.
index eb15296..19bcb7d 100644 (file)
 // Usage example :
 // ---------------
 //
+// Note : This example creates automatically the ROOT output file, which
+//        is the most user friendly way of running the conversion job. 
+//        In the subdirectory /macros the example macro icef2k.cc provides
+//        an example of how to create a ROOT output file yourself and passing
+//        this file via a pointer to IceF2k. 
+//
 // gSystem->Load("ralice");
 // gSystem->Load("icepack");
 // gSystem->Load("iceconvert");
@@ -54,8 +60,7 @@
 // q.SetInputFile("run7825.f2k");
 //
 // // Output file for the event structures
-// TFile* ofile=new TFile("events.root","RECREATE","F2K data in IceEvent structure");
-// q.SetOutputFile(ofile);
+// q.SetOutputFile("events.root");
 //
 // ///////////////////////////////////////////////////////////////////
 // // Here the user can specify his/her sub-tasks to be executed
 //
 // // Select various objects to be added to the output file
 //
-// ofile->cd(); // Switch to the output file directory
+// TFile* ofile=q.GetOutputFile();
+// 
+// if (ofile)
+// {
+//  ofile->cd(); // Switch to the output file directory
 //
-// AliObjMatrix* omdb=q.GetOMdbase();
-// if (omdb) omdb->Write();
+//  AliObjMatrix* omdb=q.GetOMdbase();
+//  if (omdb) omdb->Write();
 //
-// AliDevice* fitdefs=q.GetFitdefs();
-// if (fitdefs) fitdefs->Write();
+//  AliDevice* fitdefs=q.GetFitdefs();
+//  if (fitdefs) fitdefs->Write();
 //
-// TDatabasePDG* pdg=q.GetPDG();
-// if (pdg) pdg->Write();
+//  TDatabasePDG* pdg=q.GetPDG();
+//  if (pdg) pdg->Write();
 //
-// // Flush the output file.
-// // The output file is not explicitly closed here
-// // to allow ineractive investigation of the data tree
-// // when this macro is run in an interactive ROOT/CINT session.
-// ofile->Write();
+//  // Flush additional objects to the output file.
+//  // The output file is not explicitly closed here
+//  // to allow interactive investigation of the data tree
+//  // when this macro is run in an interactive ROOT/CINT session.
+//  ofile->Write();
+// }
 //
 //--- Author: Nick van Eijndhoven 11-mar-2005 Utrecht University
 //- Modified: NvE $Date$ Utrecht University
@@ -182,9 +192,23 @@ void IceF2k::SetInputFile(TString name)
 void IceF2k::SetOutputFile(TFile* ofile)
 {
 // Set the output file for the ROOT data.
+ if (fOutfile) delete fOutfile;
  fOutfile=ofile;
 }
 ///////////////////////////////////////////////////////////////////////////
+void IceF2k::SetOutputFile(TString name)
+{
+// Create the output file for the ROOT data.
+ if (fOutfile) delete fOutfile;
+ fOutfile=new TFile(name.Data(),"RECREATE","F2K data in IceEvent structure");
+}
+///////////////////////////////////////////////////////////////////////////
+TFile* IceF2k::GetOutputFile()
+{
+// Provide pointer to the ROOT output file.
+ return fOutfile;
+}
+///////////////////////////////////////////////////////////////////////////
 TDatabasePDG* IceF2k::GetPDG()
 {
 // Provide pointer to the PDG database
@@ -335,6 +359,9 @@ void IceF2k::Exec(Option_t* opt)
   nevt++;
  }
 
+ // Flush possible memory resident data to the output file
+ if (fOutfile) fOutfile->Write();
+
  // Remove the IceEvent object from the environment
  // and delete it as well
  if (evt)
index 6389f1d..267ba35 100644 (file)
@@ -29,7 +29,9 @@ class IceF2k : public AliJob
   void SetSplitLevel(Int_t split);                        // Set split level for the produced ROOT data file
   void SetBufferSize(Int_t bsize);                        // Set buffersize for the produced ROO data file
   void SetInputFile(TString name);                        // Set name of F2K input file
-  void SetOutputFile(TFile* ofile);                       // Set output file for the ROOT data structures           
+  void SetOutputFile(TFile* ofile);                       // Set output file for the ROOT data structures       
+  void SetOutputFile(TString name);                       // Create output file for the ROOT data structures
+  TFile* GetOutputFile();                                 // Provide pointer to the ROOT output file
   TDatabasePDG* GetPDG();           // Provide pointer to the PDG database
   AliObjMatrix* GetOMdbase();       // Provide pointer to the OM geometry, calib. etc... database
   AliDevice* GetFitdefs();          // Provide pointer to the Fit definition parameters
@@ -57,6 +59,6 @@ class IceF2k : public AliJob
   array   fHeader; //! Structure holding the file header info
   mevt    fEvent;  //! Structure holding the actual event data (hits, tracks, etc...)
 
- ClassDef(IceF2k,2) // Job for conversion of F2K data into IceEvent physics event structures.
+ ClassDef(IceF2k,3) // Job for conversion of F2K data into IceEvent physics event structures.
 };
 #endif
index dcd1621..57a652e 100644 (file)
@@ -35,4 +35,7 @@
                 to ensure proper execution of all the sub-tasks for each new event.
 31-oct-2005 NvE Some unused variables removed in IceCal2Root and IceF2k to prevent warnings
                 from the gcc compiler.
+09-nov-2005 NvE Additional memberfunctions SetOutputFile(TString name) and GetOutputFile added
+                to IceF2k to provide a more user friendly running environment.
+                The example in the IceF2k docs has been updated accordingly.
  
index abe6532..4742340 100644 (file)
@@ -5,7 +5,8 @@
 //
 // root -b -q icef2k.cc
 //
-// For more details see the docs of class IceF2k
+// For more details and a more user friendly
+// output file setting, see the docs of class IceF2k
 //
 // NvE 11-mar-2005 Utrecht University
 /////////////////////////////////////////////////
@@ -60,9 +61,9 @@
  TDatabasePDG* pdg=q.GetPDG();
  if (pdg) pdg->Write();
 
- // Flush the output file.
+ // Flush additional objects to the output file.
  // The output file is not explicitly closed here
- // to allow ineractive investigation of the data tree
+ // to allow interactive investigation of the data tree
  // when this macro is run in an interactive ROOT/CINT session.
  ofile->Write();
 }
index 849b7aa..a25e58c 100644 (file)
@@ -53,6 +53,7 @@
  q.SetMaxEvents(2);
  q.SetPrintFreq(0);
  q.SetInputFile("real-reco.f2k");
+ q.SetOutputFile("real-reco.root");
 
  // Add the Xtalk and EvtAna processors as subtasks to the F2K job
  q.Add(&calib);