X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FMUONTrigger.C;h=522b1202e959c8ffd072fc00ceefabdadc73911c;hb=36d042d445f76ec3fe68f389d496dcdd5347e7c8;hp=ead7d9bb9a3e28556da1a90d8563504dec573d5d;hpb=a653f08ba7d20901070ab67034a4515acbfef619;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/MUONTrigger.C b/MUON/MUONTrigger.C index ead7d9bb9a3..522b1202e95 100644 --- a/MUON/MUONTrigger.C +++ b/MUON/MUONTrigger.C @@ -13,82 +13,137 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -// Macro MUONTrigger.C (TO BE COMPILED) -// for testing the C++ trigger code +/* $Id$ */ + +/// \ingroup macros +/// \file MUONTrigger.C +/// \brief This macro is to be used to check the trigger algorithm w/o having to +/// (re-)perform simulation and digitalization. +/// +/// See full description on the \ref README_trigger page. +/// +/// \author P.Crochet (LPC) #if !defined(__CINT__) || defined(__MAKECINT__) #include "AliRun.h" #include "AliMUON.h" -#include "AliMUONLoader.h" -#include "AliMUONData.h" #include "AliMUONDigit.h" -#include "AliMUONTriggerDecision.h" +#include "AliMUONTriggerElectronics.h" +#include "AliMUONCalibrationData.h" +#include "AliCDBManager.h" +#include "AliMUONDataInterface.h" +#include "AliMUONMCDataInterface.h" +#include "AliMUONVTriggerStore.h" +#include "AliMUONDigitStoreV1.h" +#include +#include "AliMpCDB.h" +#include #endif -void MUONTrigger(char * FileName="galice.root", Int_t nevents=1, Int_t idebug=2) + +void MUONTrigger(const char* filename) { - // Creating Run Loader and openning file containing Digits - AliRunLoader * RunLoader = AliRunLoader::Open(FileName,"MUONLoader","UPDATE"); + // Creating Run Loader and openning file containing Digits + AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONLoader","UPDATE"); if (RunLoader ==0x0) { - printf(">>> Error : Error Opening %s file \n",FileName); - return; + printf(">>> Error : Error Opening %s file \n",filename); + return; } // Loading AliRun master if (RunLoader->GetAliRun() == 0x0) RunLoader->LoadgAlice(); gAlice = RunLoader->GetAliRun(); // Loading MUON subsystem -// AliMUONLoader *MUONLoader = (AliMUONLoader*) RunLoader->GetLoader("MUONLoader"); - AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader"); + AliLoader* MUONLoader = RunLoader->GetDetectorLoader("MUON"); MUONLoader->LoadDigits("READ"); - // Creating MUON data container - AliMUONData* MUONData = new AliMUONData(MUONLoader,"MUON","MUON"); + MUONLoader->LoadRecPoints("UPDATE"); // absolutely essential !!! // Creating MUONTriggerDecision - AliMUONTriggerDecision* decision = new AliMUONTriggerDecision(MUONLoader ,idebug,MUONData); + AliCDBManager* cdbManager = AliCDBManager::Instance(); + cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - Int_t nEvents = RunLoader->GetNumberOfEvents(); - AliMUONDigit * mDigit; + Int_t runnumber = 0; + cdbManager->SetRun(runnumber); + AliMpCDB::LoadDDLStore(); - Int_t tracks[10]; - Int_t charges[10]; - Int_t digits[7]; + AliMUONCalibrationData *CalibrationData = new AliMUONCalibrationData(runnumber); + AliMUONTriggerElectronics *TriggerProcessor = new AliMUONTriggerElectronics(CalibrationData); + + Int_t nevents = RunLoader->GetNumberOfEvents(); + AliMUONVDigitStore* digitStore=0x0; + AliMUONVTriggerStore* triggerStore=0x0; for(Int_t ievent = 0; ievent < nevents; ievent++) { printf(">>> Event %i out of %i \n",ievent,nevents); RunLoader->GetEvent(ievent); - MUONData->SetTreeAddress("D"); - for(Int_t icathode=0; icathode<2; icathode++) { - MUONData->GetCathode(icathode); - for(Int_t ichamber=10; ichamber<14; ichamber++) { - Int_t idigit, ndigits; - ndigits = (Int_t) MUONData->Digits(ichamber)->GetEntriesFast(); -// printf(">>> Chamber Cathode ndigits %d %d %d\n",ichamber,icathode,ndigits); - for(idigit=0; idigit(MUONData->Digits(ichamber)->At(idigit)); - digits[0] = mDigit->PadX(); - digits[1] = mDigit->PadY(); - digits[2] = mDigit->Cathode(); - digits[3] = mDigit->Signal(); - digits[4] = mDigit->Physics(); - digits[5] = mDigit->Hit(); - digits[6] = mDigit->DetElemId(); -/* - Int_t nptracks = mDigit->GetNTracks(); - for (Int_t i = 0; i < nptracks; i++) { - tracks[i] = mDigit->GetTrack(i); - charges[i] = mDigit->GetCharge(i); - } -*/ -// printf("ichamber icathode ix iy %d %d %d %d \n",ichamber,icathode,mDigit->PadX(),mDigit->PadY()); - - decision->AddDigit(ichamber, tracks, charges, digits); - } // loop on digits - } // loop on chambers - } // loop on cathodes - MUONData->ResetDigits(); - decision->Trigger(); - decision->ClearDigits(); - } // loop on events - MUONLoader->UnloadDigits(); + MUONLoader->LoadRecPoints("update"); + MUONLoader->CleanRecPoints(); + MUONLoader->MakeRecPointsContainer(); + TTree* clustersTree = MUONLoader->TreeR(); + TFile* cfile = clustersTree->GetCurrentFile(); + if ( !cfile ) + { + cout << " could not find Cluster file " << endl; + return; + } + + MUONLoader->LoadDigits("read"); + TTree* digitsTree = MUONLoader->TreeD(); + TFile* dfile = digitsTree->GetCurrentFile(); + if ( !dfile ) + { + cout << " could not find Digit file " << endl; + return; + } + +// here start reconstruction + if (!digitStore) digitStore = AliMUONVDigitStore::Create(*digitsTree); + if (!triggerStore) triggerStore = AliMUONVTriggerStore::Create(*digitsTree); + // insure we start with empty stores + if ( digitStore ) + { + digitStore->Clear(); + Bool_t alone = ( triggerStore ? kFALSE : kTRUE ); + Bool_t ok = digitStore->Connect(*digitsTree,alone); + if (!ok) + { + cerr << "Could not connect digitStore to digitsTree \n"; + return; + } + } else { + cerr << "digitStore does not exist " << "\n"; + return; + } + + digitsTree->GetEvent(0); + +// process trigger response + TriggerProcessor->Digits2Trigger(*digitStore,*triggerStore); + + //triggerStore->Print(); + + Bool_t ok(kFALSE); + if ( triggerStore ) { + ok = triggerStore->Connect(*clustersTree,kTRUE); + if (!ok) + { + cerr << "Could not create triggerStore branches in TreeR " << "\n"; + return; + } + } else { + cerr << "triggerStore does not exist " << "\n"; + return; + } + +// fill TreeR + clustersTree->Fill(); + MUONLoader->UnloadDigits(); + MUONLoader->WriteRecPoints("OVERWRITE"); + MUONLoader->UnloadRecPoints(); + + } // loop on events + } + + +