X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSFindClustersV2.C;h=e8cba5ad628258c078d989c024b0211e651a8bd1;hb=b5a9f753d92077cec01150463deccec04904304a;hp=82808a0539ea3c66204c3097f54b65e1fc83f254;hpb=c630aafd1da7fec82908f28924c025969497227d;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSFindClustersV2.C b/ITS/AliITSFindClustersV2.C index 82808a0539e..e8cba5ad628 100644 --- a/ITS/AliITSFindClustersV2.C +++ b/ITS/AliITSFindClustersV2.C @@ -1,101 +1,193 @@ -/**************************************************************************** - * Origin: I.Belikov, CERN, Jouri.Belikov@cern.ch * - ****************************************************************************/ - #if !defined(__CINT__) || defined(__MAKECINT__) - #include - #include "AliRun.h" - #include "AliRunLoader.h" - #include "AliITSLoader.h" - #include "AliITS.h" - #include "AliITSgeom.h" - #include "AliITSclustererV2.h" +#include +#include +#include +#include "AliRawReader.h" +#include "AliRawReaderDate.h" +#include "AliRawReaderRoot.h" +#include "AliRun.h" +#include "AliRunLoader.h" +#include "AliITSInitGeometry.h" +#include "AliITSgeom.h" +#include "AliITSLoader.h" +#include "AliCDBManager.h" +#include "AliITSDetTypeRec.h" +#include "AliGeomManager.h" - #include "TTree.h" - #include "TStopwatch.h" #endif -extern AliRun *gAlice; - -Int_t AliITSFindClustersV2(Int_t nev=5, Char_t SlowOrFast='s') { - - cerr<<"Looking for clusters...\n"; - - if (gAlice) { - delete gAlice->GetRunLoader(); - delete gAlice; - gAlice=0; - } - - AliRunLoader *rl = AliRunLoader::Open("galice.root"); - if (rl == 0x0) { - cerr<<"AliITSFindClustersV2.C : Can not open session RL=NULL"<< endl; - return 1; - } - - AliITSLoader *itsl = (AliITSLoader*)rl->GetLoader("ITSLoader"); - if (itsl == 0x0) { - cerr<<"AliITSFindClustersV2.C : can not get ITS loader"<< endl; - return 2; - } - - rl->LoadKinematics(); - - Int_t retval = rl->LoadgAlice(); - if (retval) { - cerr<<"AliITSFindClustersV2.C : LoadgAlice returned error"<< endl; - delete rl; - return 3; - } - - gAlice=rl->GetAliRun(); - AliITS *ITS = (AliITS*)gAlice->GetModule("ITS"); - if (!ITS) { cerr<<"Can't find the ITS !\n"; delete rl; return 3; } - AliITSgeom *geom=ITS->GetITSgeom(); - - itsl->LoadRecPoints("recreate"); - if (SlowOrFast=='s') itsl->LoadDigits("read"); - else itsl->LoadHits("read"); - - AliITSclustererV2 clusterer(geom); - - TStopwatch timer; - if (nev>rl->GetNumberOfEvents()) nev=rl->GetNumberOfEvents(); - for (Int_t i=0; iGetEvent(i); - - TTree *out=itsl->TreeR(); - if (!out) { - itsl->MakeTree("R"); - out=itsl->TreeR(); - } - - if (SlowOrFast=='s') { - TTree *in=itsl->TreeD(); - if (!in) { - cerr<<"Can't get digits tree !\n"; - return 4; - } - clusterer.Digits2Clusters(in,out); - } else { - TTree *in=itsl->TreeH(); - if (!in) { - cerr<<"Can't get hits tree !\n"; - return 5; - } - clusterer.Hits2Clusters(in,out); - } - - itsl->WriteRecPoints("OVERWRITE"); - } - timer.Stop(); timer.Print(); - - delete rl; - - return 0; +/* +$Id$ +*/ +/*************************************************************** + * This macro performs the ITS local reconstruction * + * It is intended for special purposes and tests. * + * The reccomended way to reconstruct ITs is via the * + * class STEER/AliReconstruction * + * Present version: M.Masera - Previous version: J. Belikov * + ***************************************************************/ + +void Reconstruct(AliRunLoader* runLoader,Option_t *opt); +void Reconstruct(AliRunLoader* runLoader, AliRawReader *rawreader,Option_t *opt); + +Int_t AliITSFindClustersV2(char *inputRawData = NULL,TString filename="galice.root",Option_t *opt="All"){ + // if kine tree is available MC labels are used for rec points + // set opt equal to "SPD" or to "SDD" or to "SSD" do build + // rec points for individual subdetectors + if (gAlice) { + delete AliRunLoader::Instance(); + delete gAlice; + gAlice = NULL; + } + + // Get geometry + AliGeomManager::LoadGeometry("geometry.root"); + + //Get Run loader and ITS loader - set geometry + AliRunLoader* rl = AliRunLoader::Open(filename.Data()); + + AliITSInitGeometry initgeom; + AliITSgeom *geom = initgeom.CreateAliITSgeom(); + printf("Geometry name: %s \n",(initgeom.GetGeometryName()).Data()); + AliITSLoader* loader = static_cast(rl->GetLoader("ITSLoader")); + if (!loader) { + Error("Init", "ITS loader not found"); + return -1; + } + loader->SetITSgeom(geom); + + // Set OCDB if needed + AliCDBManager* man = AliCDBManager::Instance(); + if (!man->IsDefaultStorageSet()) { + printf("Setting a local default storage and run number 0\n"); + man->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + man->SetRun(0); + } + else { + printf("Using deafult storage \n"); + } + + AliRawReader *rawreader = NULL; + TString fileRaw(inputRawData); + if(!fileRaw.IsNull()){ + if (fileRaw.EndsWith(".root")) { + cout<<"Raw data format - ROOT file \n"; + rawreader = new AliRawReaderRoot(fileRaw); // root format + } + else { + cout<<"Raw data format - DATE file \n"; + rawreader = new AliRawReaderDate(fileRaw); // DATE format + } + // if (!fEquipIdMap.IsNull() && fRawReader)fRawReader->LoadEquipmentIdsMap(fEquipIdMap); + Reconstruct(rl,rawreader,opt); + } + else { + cout<< "Starting from DIGITS \n"; + Reconstruct(rl,opt); + } + + return 0; } +//________________________________________________________________________ +void Reconstruct(AliRunLoader* runLoader,Option_t *opt){ +// reconstruct clusters starting from DIGITS +// MC truth if available is used to label clusters according to the particles +// originating them + + AliITSLoader* loader = + static_cast(runLoader->GetLoader("ITSLoader")); + if (!loader) { + Error("Reconstruct", "ITS loader not found"); + return; + } + AliITSDetTypeRec* rec = new AliITSDetTypeRec(); + rec->SetITSgeom(loader->GetITSgeom()); + rec->SetDefaults(); + + runLoader->LoadKinematics(); + TTree *trK=(TTree*)runLoader->TreeK(); + if(trK){ + cout<<"kine tree found - MC labels will be used in RP \n"; + if(runLoader->LoadgAlice())gAlice = runLoader->GetAliRun(); + } + else{ + cout<<"kine tree not found - MC labels will not b used\n"; + } + + Int_t nEvents = runLoader->GetNumberOfEvents(); + // loop on the events + + for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { + runLoader->GetEvent(iEvent); + cout<<">>>>>>> Processing event number "<LoadRecPoints("update"); + loader->CleanRecPoints(); + loader->MakeRecPointsContainer(); + loader->LoadDigits("read"); + TTree *tR = loader->TreeR(); + TTree *tD = loader->TreeD(); + if(!tR){ + cout<<"Tree R pointer not found - Abort \n"; + break; + } + rec->SetTreeAddressD(tD); + rec->MakeBranch(tR,"R"); + rec->SetTreeAddressR(tR); + rec->DigitsToRecPoints(tD,tR,0,opt,kTRUE); + loader->WriteRecPoints("OVERWRITE"); + loader->UnloadRecPoints(); + loader->UnloadDigits(); + runLoader->UnloadKinematics(); + } + +} +void Reconstruct(AliRunLoader* runLoader, AliRawReader *rawreader,Option_t *opt){ +// reconstruct clusters starting from raw data (root or DATE format) +// MC truth if available is used to label clusters according to the particles +// originating them + + AliITSLoader* loader = static_cast(runLoader->GetLoader("ITSLoader")); + if (!loader) { + Error("Reconstruct", "ITS loader not found"); + return; + } + AliITSDetTypeRec* rec = new AliITSDetTypeRec(); + rec->SetITSgeom(loader->GetITSgeom()); + rec->SetDefaults(); + // direct clusterfinding starting from raw data is implemented only + // in AliITSClusterFinderV2 + rec->SetDefaultClusterFindersV2(kTRUE); + + runLoader->LoadKinematics(); + TTree *trK=(TTree*)runLoader->TreeK(); + if(trK){ + cout<<"kine tree found - MC labels will be used in RP \n"; + if(runLoader->LoadgAlice())gAlice = runLoader->GetAliRun(); + } + Int_t nEvents = runLoader->GetNumberOfEvents(); + rawreader->RewindEvents(); + for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { + rawreader->NextEvent(); + runLoader->GetEvent(iEvent); + cout<<">>>>>>> Processing event number: "<LoadRecPoints("update"); + loader->CleanRecPoints(); + loader->MakeRecPointsContainer(); + TTree *tR = loader->TreeR(); + if(!tR){ + cout<<"Tree R pointer not found - Abort \n"; + break; + } + rec->DigitsToRecPoints(rawreader,tR,opt); + rec->ResetRecPoints(); + rec->ResetClusters(); + loader->WriteRecPoints("OVERWRITE"); + loader->UnloadRecPoints(); + loader->UnloadDigits(); + runLoader->UnloadKinematics(); + } +}