X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FMUONTrigger.C;h=522b1202e959c8ffd072fc00ceefabdadc73911c;hb=f3d601a54eac57e81b01f251930d92b6fd5e4b5d;hp=7ea18c4a548632977a3d5b34bb0ce443c2185b04;hpb=d6ea26eb32e581339477a00fa71bee784fb5f4a7;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/MUONTrigger.C b/MUON/MUONTrigger.C index 7ea18c4a548..522b1202e95 100644 --- a/MUON/MUONTrigger.C +++ b/MUON/MUONTrigger.C @@ -13,36 +13,39 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -// This macro is to be used to check the trigger algorithm w/o having to -// (re-)perform simulation and digitalization. -// It loads the digits, erase TreeR and store the current trigger output in -// TreeR. -// The different trigger outputs can be compared by looking at the GLT branch -// of TreeD (filled during simulation) and the TC branch of TreeR (filled from -// a copy of TreeD during reconstruction or with this macro). -// Note: rec points from tracking chamber will be lost. -// -// usage: (to be compiled) -// MUONTrigger("galice.root",0) -> Default Trigger Code -// MUONTrigger("galice.root",1) -> New 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 "AliMUONTriggerDecisionV1.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 NewTriggerCode=0) + +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); + printf(">>> Error : Error Opening %s file \n",filename); return; } // Loading AliRun master @@ -50,88 +53,97 @@ void MUONTrigger(char * FileName="galice.root", Int_t NewTriggerCode=0) gAlice = RunLoader->GetAliRun(); // Loading MUON subsystem - AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader"); + AliLoader* MUONLoader = RunLoader->GetDetectorLoader("MUON"); MUONLoader->LoadDigits("READ"); - MUONLoader->LoadRecPoints("UPDATE"); // absolutely essential !!! - - Int_t nevents; - nevents = RunLoader->GetNumberOfEvents(); - - // Creating MUON data container - AliMUONData* MUONData = new AliMUONData(MUONLoader,"MUON","MUON"); - + MUONLoader->LoadRecPoints("UPDATE"); // absolutely essential !!! + // Creating MUONTriggerDecision - TTask *TriggerProcessor; - if (NewTriggerCode == 0) { - cout << " using default trigger code " << "\n"; - TriggerProcessor = new AliMUONTriggerDecisionV1(MUONData); - } else { - cout << " using new trigger code " << "\n"; - AliCDBManager* cdbManager = AliCDBManager::Instance(); - cdbManager->SetDefaultStorage("local://$ALICE_ROOT"); - Int_t runnumber = gAlice->GetRunNumber(); - AliMUONCalibrationData *CalibrationData = new AliMUONCalibrationData(runnumber); - TriggerProcessor = new AliMUONTriggerElectronics(MUONData,CalibrationData); - } - - // Testing if Trigger has already been done - RunLoader->GetEvent(0); - if (MUONLoader->TreeR()) { - if (MUONData->IsTriggerBranchesInTree()) { - MUONLoader->UnloadRecPoints(); - MUONLoader->LoadRecPoints("RECREATE"); - printf("Recreating recpoints files\n"); - } - } - - AliMUONDigit * mDigit; - Int_t digits[7]; + AliCDBManager* cdbManager = AliCDBManager::Instance(); + cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + + Int_t runnumber = 0; + cdbManager->SetRun(runnumber); + AliMpCDB::LoadDDLStore(); + + 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"); - MUONData->GetDigits(); - for(Int_t ichamber=10; ichamber<14; ichamber++) { - Int_t idigit, ndigits; - ndigits = (Int_t) MUONData->Digits(ichamber)->GetEntriesFast(); - - 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(); - - printf("ichamber ix iy %d %d %d \n",ichamber,mDigit->PadX(),mDigit->PadY()); - - } // loop on digits - } // loop on chambers - - if (MUONLoader->TreeR() == 0x0) { - MUONLoader->MakeRecPointsContainer(); - } else { - if (MUONData->IsTriggerBranchesInTree()){ - if (ievent==0) MUONLoader->UnloadRecPoints(); - MUONLoader->MakeRecPointsContainer(); - cout << "Recreating RecPointsContainer and deleting previous ones" << "\n"; + 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); - MUONData->MakeBranch("TC"); - MUONData->SetTreeAddress("TC"); - TriggerProcessor->ExecuteTask(); +// 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(); - MUONData->Fill("TC"); - MUONLoader->WriteRecPoints("OVERWRITE"); - MUONData->ResetDigits(); + } // loop on events - } // loop on events - MUONLoader->UnloadDigits(); - MUONLoader->UnloadRecPoints(); } + +