ATO-98 - connect distortion trees - with custom description ()
[u/mrichter/AliRoot.git] / TPC / AliTPCHits2Digits.C
index d0b17b3..7957a98 100644 (file)
@@ -1,91 +1,69 @@
+#if !defined(__CINT__) || defined(__MAKECINT__)
+  #include <Riostream.h>
 
-void AliTPCHits2Digits(const  char * name= "pokusD_")
-{
-  // Dynamically link some shared libs
-        if (gClassTable->GetID("AliRun") < 0) {
-        gROOT->LoadMacro("loadlibs.C");
-      loadlibs();
-     }
-  
-   //names of trees
-   const char * inFile = "galice.root";
-   //   const * char ident= "TreeD1par_";
+  #include "AliRun.h"
+  #include "AliRunLoader.h"
+  #include "AliLoader.h"
+  #include "AliTPC.h"
+
+  #include "TStopwatch.h"
+#endif
 
-// Connect the Root Galice file containing Geometry, Kine and Hits
-   TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(inFile);
-   if (file) file->Close();
-   file = new TFile(inFile,"UPDATE");
-// Get AliRun object from file or create it if not on file
+extern AliRun *gAlice;
 
-   if(gAlice){
-     delete gAlice;
-     gAlice=0;
-   }
-      if (!gAlice) {
-      gAlice = (AliRun*)file->Get("gAlice");
-      if (gAlice) printf("AliRun object found on file\n");
-      if (!gAlice) gAlice = new AliRun("gAlice","Alice test program");
-        }
-   gAlice->GetEvent(0);
-   AliTPC *TPC = (AliTPC*)gAlice->GetModule("TPC");      
-   TPC->Dump();
-   //adjust parameters
-  
-  AliTPCD *paramd = TPC->GetDigParam();
-  paramd->Dump();
-  paramd->SetName("Param1");  
-  paramd->MakeTree();
-  //set pointers to parameters
-  paramd->Dump();
-  AliTPCParam &param = paramd->GetParam();
-  AliTPCPRF2D &prf = paramd->GetPRF2D();
-  AliTPCRF1D  & rf  = paramd->GetRF();
-  
-  param.SetPadLength(2.05);
-  param.SetPadWidth(0.35);
-  param.SetPadPitchLength(2.05);
-  param.SetPadPitchWidth(0.35);
-  param.SetNWires(5);
-  param.SetZeroSup(5);
-  param.SetDiffT(0.022);
-  param.SetDiffL(0.022);
-  param.SetNoise(500);
-  param.SetGasGain(1.e4);
-  param.SetChipGain(24); 
-  param.SetSectorAngles(40.,0.,20.,10.);
-  param.SetInnerRadiusLow(83.7);
-  param.SetInnerRadiusUp(132.9);
-  param.SetOuterRadiusLow(146.9);
-  param.SetOuterRadiusUp(249.4);     
-  param.Update();
+Int_t AliTPCHits2Digits(Int_t nev=5) {
+  // Connect the Root Galice file containing Geometry, Kine and Hits
+  if (gAlice) { 
+     delete AliRunLoader::Instance();
+     delete gAlice;//if everything was OK here it is already NULL
+     gAlice = 0x0;
+  }
 
-    //Set z (time) response function
+  AliRunLoader *rl = AliRunLoader::Open("galice.root","Event","update");
+  if (!rl) {
+    cerr<<"Can't load RunLoader from "<<endl;
+    return 1;
+  }
 
-  rf.SetOffset(3.*param.GetZSigma());
-  rf.SetGauss(param.GetZSigma(),param.GetZWidth(),0.4);
-  rf.Update();
-  //Set two dimensional pad response function
-  TFile f("TPC/AliTPCprf2d.root");
-  //  prf.Read("prf_205035_Gati_062074_d03");
-  prf.Read("prf_205035_Gati_062074_d03");
-  f.Close();
-  
-  printf("**********Digit object dump start********************\n");
-  paramd->Dump();
-  printf("**********AliTPCParam**************************\n");
-  param.Dump();
-  printf("**********Time response function***************\n");
-  rf.Dump();
-  printf("**********Pad response function params*********\n");
-  prf.Dump();
-  printf("**********Digit object dump end********************\n");
+  // Get AliRun object from file or create it if not on file
 
-   TPC->Hits2DigitsSector(0);     
-         
+  rl->LoadgAlice();
  
-   file->cd();
-   TPC->GetDigParam()->Write();
-};
+  gAlice = rl->GetAliRun();
+  if (!gAlice) {
+    cerr<<"AliTPCHits2Digits.C : AliRun object not found on file\n";
+    return 2;
+  }
+
+  AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC");      
+  AliLoader * tpcl = rl->GetLoader("TPCLoader");
+  if ((TPC == 0x0) || (tpcl == 0x0)) {
+    cerr<<"AliTPCHits2Digits.C : Can not find TPC or TPCLoader\n";
+    delete rl;
+    return 3;
+  }
+  tpcl->LoadHits("READ");
+  tpcl->LoadDigits("recreate");
+
+  TStopwatch timer;
+  timer.Start();
+
+ // uncomment below lines to set sectors active
+ // Int_t sec[10]={0,1,2,3,4,5,6,7,8,9};
+ // TPC->SetActiveSectors(sec,10);
+
+  for (Int_t i=0; i<nev; i++){
+    printf("Processing event %d \n",i);
+    if(rl->GetEvent(i)) break;
+    TPC->SetActiveSectors(); // all sectors set active
+    TPC->Hits2Digits(i);
+  }
+
+  delete rl;
+
+  timer.Stop();
+  timer.Print();
 
+  return 0;
+}