Adding some further mother volumes to speed-up the overlap checking and particle...
[u/mrichter/AliRoot.git] / ITS / AliITSHits2SDigits.C
index ef7aa4e..2f53e13 100644 (file)
-Int_t AliITSHits2SDigits(const char *inFile = "galice.root"){
-    // Connect the Root Galice file containing Geometry, Kine and Hits
-  
-    TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(inFile);
-    if (file) {file->Close(); delete file;}
-    cout << "AliITSHits2Digits" << endl;
-    file = new TFile(inFile,"UPDATE");
-    if (!file->IsOpen()) {
-       cerr<<"Can't open "<<inFile<<" !" << endl;
-       return 1;
-    } // end if !file
-    file->ls();
+#if !defined(__CINT__) || defined(__MAKECINT__)
 
-    // Get AliRun object from file or return if not on file
-    if (gAlice) delete gAlice;
-    gAlice = (AliRun*)file->Get("gAlice");
-    if (!gAlice) {
-       cerr << "AliITSITSHits2Digits.C : AliRun object not found on file"
-           << endl;
-       return 2;
-    } // end if !gAlice
+#include "Riostream.h"
+#include "TDatime.h"
+#include "TClassTable.h"
+#include "AliRun.h"
+#include "AliRunDigitizer.h"
+#include "AliITSDigitizer.h"
+#include "AliITS.h"
+#include "AliITSDetType.h"
+#include "AliITSLoader.h"
+#include "AliITSresponseSDD.h"
+#include "TStopwatch.h"
+
+#endif
+
+Int_t AliITSHits2SDigits(TString  filename = "galice.root")
+ {
+    // Standard ITS Hits to SDigits.
 
-    gAlice->GetEvent(0);
+    // Dynamically link some shared libs
+    if (gClassTable->GetID("AliRun") < 0) {
+      gROOT->ProcessLine(".x $(ALICE_ROOT)/macros/loadlibs.C");
+    }else if (gAlice){
+      delete AliRunLoader::Instance();
+      delete gAlice;
+      gAlice=0;
+     } 
+
+    // Connect the Root Galice file containing Geometry, Kine and Hits
+
+    AliRunLoader* rl = AliRunLoader::Open(filename);
+    if (rl == 0x0)
+     {
+      cerr<<"AliITSHits2SDigits.C : Can not open session RL=NULL"
+           << endl;
+       return 3;
+     }
+     
+    Int_t retval = rl->LoadgAlice();
+    if (retval)
+     {
+      cerr<<"AliITSHits2SDigits.C : LoadgAlice returned error"
+           << endl;
+       return 3;
+     }
+    gAlice=rl->GetAliRun();
+    AliITSLoader* gime = (AliITSLoader*) rl->GetLoader("ITSLoader");
+    if (gime == 0x0)
+     {
+      cerr<<"AliITSHits2SDigits.C : can not get ITS loader"
+           << endl;
+     }
     AliITS *ITS = (AliITS*)gAlice->GetDetector("ITS");      
     if (!ITS) {
-       cerr<<"AliITSHits2Digits.C : AliITS object not found on file" 
+       cerr<<"AliITSHits2SDigits.C : AliITS object not found on file"
            << endl;
        return 3;
     }  // end if !ITS
-
-    // Set the simulation models for the three detector types
-    AliITSgeom *geom = ITS->GetITSgeom();
-
-    // SPD
-    cout << "Changing from Default SPD simulation, and responce." << endl;
-    AliITSDetType *iDetType=ITS->DetType(0);
-    AliITSsegmentationSPD *seg0=(AliITSsegmentationSPD*)iDetType->
-       GetSegmentationModel();
-    AliITSresponseSPD *res0 = (AliITSresponseSPD*)iDetType->GetResponseModel();
-    AliITSsimulationSPD *sim0=new AliITSsimulationSPD(seg0,res0);
-    ITS->SetSimulationModel(0,sim0);
-    // test
-    cout << "SPD dimensions " << seg0->Dx() << " " << seg0->Dz() << endl;
-    cout << "SPD npixels " << seg0->Npz() << " " << seg0->Npx() << endl;
-    cout << "SPD pitches " << seg0->Dpz(0) << " " << seg0->Dpx(0) << endl;
-    // end test
-
-    // SDD
-    cout << "Changing from Default SDD simulation, and responce." << endl;
-    //Set response functions
-    Float_t baseline = 10.;
-    Float_t noise = 1.75;
-    // SDD compression param: 2 fDecrease, 2fTmin, 2fTmax or disable,
-    // 2 fTolerance
-    AliITSDetType *iDetType=ITS->DetType(1);
-    AliITSresponseSDD *res1 = (AliITSresponseSDD*)iDetType->GetResponseModel();
-    if (!res1) {
-       res1=new AliITSresponseSDD();
-       ITS->SetResponseModel(1,res1);
-    } // end if !res1
-    Float_t fCutAmp = baseline + 2.*noise;
-    Int_t cp[8]={0,0,fCutAmp,fCutAmp,0,0,0,0}; //1D
-
-    //res1->SetZeroSupp("2D");
-    res1->SetZeroSupp("1D");
-    res1->SetNoiseParam(noise,baseline);
-    res1->SetDo10to8(kTRUE);
-    res1->SetCompressParam(cp);
-    res1->SetMinVal(4);
-    res1->SetDiffCoeff(3.6,40.);
-    AliITSsegmentationSDD *seg1=(AliITSsegmentationSDD*)iDetType->
-       GetSegmentationModel();
-    if (!seg1) {
-       seg1 = new AliITSsegmentationSDD(geom,res1);
-       ITS->SetSegmentationModel(1,seg1);
-    } // end if !seg1
-    AliITSsimulationSDD *sim1 = new AliITSsimulationSDD(seg1,res1);
-    sim1->SetDoFFT(1);
-    sim1->SetCheckNoise(kFALSE);
-    ITS->SetSimulationModel(1,sim1);
-
-    // SSD
-    cout << "Changing from Default SSD simulation, and responce." << endl;
-    AliITSDetType *iDetType = ITS->DetType(2);
-    AliITSsegmentationSSD *seg2 = (AliITSsegmentationSSD*)iDetType->
-       GetSegmentationModel();
-    AliITSresponseSSD *res2 = (AliITSresponseSSD*)iDetType->GetResponseModel();
-    res2->SetSigmaSpread(3.,2.);
-    AliITSsimulationSSD *sim2 = new AliITSsimulationSSD(seg2,res2);
-    ITS->SetSimulationModel(2,sim2);
-
-    if(!gAlice->TreeS()){ 
-       cout << "Having to create the SDigits Tree." << endl;
-       gAlice->MakeTree("S");
-    } // end if !gAlice->TreeS()
-    //make branch
-    ITS->MakeBranch("S");
-    ITS->SetTreeAddress();
-    cout << "Digitizing ITS..." << endl;
+    if(!(ITS->GetITSgeom())){
+       cerr << " AliITSgeom not found. Can't digitize without it." << endl;
+       return 4;
+    } // end if
 
     TStopwatch timer;
-    Long_t size0 = file->GetSize();
+    Int_t evNumber1 = 0;
+    Int_t evNumber2 = AliRunLoader::GetNumberOfEvents();
     timer.Start();
-    ITS->Hits2SDigits();
-    timer.Stop(); timer.Print();
+    retval = gime->LoadHits();
+    if (retval)
+     {
+      cerr<<"AliITSHits2SDigits.C : ITSLoader::LoadHits returned error"
+           << endl;
+       return 3;
+     }
+    retval = gime->LoadSDigits("recreate");
+    if (retval)
+     {
+      cerr<<"AliITSHits2SDigits.C : ITSLoader::LoadSDigits returned error"
+           << endl;
+       return 3;
+     }
+    for(Int_t event = evNumber1; event < evNumber2; event++){
+       rl->GetEvent(event);
+       if(!gime->TreeS()){ 
+           cout << "Having to create the SDigits Tree." << endl;
+           gime->MakeTree("S");
+       } // end 
 
-    delete gAlice;   gAlice=0;
-    file->Close();
-    Long_t size1 = file->GetSize();
-    cout << "File size before = " << size0 << " file size after = " << size1;
-    cout << "Increase in file size is " << size1-size0 << " Bytes" << endl;
-    delete file;
-    return 0;
-};
+       ITS->MakeBranch("S");
+       ITS->SetTreeAddress();
+       cout<<"Making ITS SDigits for event "<<event<<endl;
+       ITS->Hits2SDigits();
+    } // end for event
+    timer.Stop();
+    timer.Print();
 
+    delete rl; // sdigfile is closed by deleting gAlice if != hitfile.
+    return 0;
+}