ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $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 "AliMUONDigit.h"
#include "AliMUONTriggerElectronics.h"
#include "AliMUONCalibrationData.h"
#include "AliCDBManager.h"
#include "AliMUONDataInterface.h"
#include "AliMUONMCDataInterface.h"
#include "AliMUONVTriggerStore.h"
#include "AliMUONDigitStoreV1.h"
#include <TClonesArray.h>
#include "AliMpCDB.h"
#include <TFile.h>
#endif

void MUONTrigger(const char* filename)
{
    // 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;
    }
    // Loading AliRun master
    if (RunLoader->GetAliRun() == 0x0) RunLoader->LoadgAlice();
    gAlice = RunLoader->GetAliRun();
    
    // Loading MUON subsystem
    AliLoader* MUONLoader = RunLoader->GetDetectorLoader("MUON");
    MUONLoader->LoadDigits("READ");
    MUONLoader->LoadRecPoints("UPDATE"); // absolutely essential !!!    
    
    // Creating MUONTriggerDecision
    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);
	
	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

}



 MUONTrigger.C:1
 MUONTrigger.C:2
 MUONTrigger.C:3
 MUONTrigger.C:4
 MUONTrigger.C:5
 MUONTrigger.C:6
 MUONTrigger.C:7
 MUONTrigger.C:8
 MUONTrigger.C:9
 MUONTrigger.C:10
 MUONTrigger.C:11
 MUONTrigger.C:12
 MUONTrigger.C:13
 MUONTrigger.C:14
 MUONTrigger.C:15
 MUONTrigger.C:16
 MUONTrigger.C:17
 MUONTrigger.C:18
 MUONTrigger.C:19
 MUONTrigger.C:20
 MUONTrigger.C:21
 MUONTrigger.C:22
 MUONTrigger.C:23
 MUONTrigger.C:24
 MUONTrigger.C:25
 MUONTrigger.C:26
 MUONTrigger.C:27
 MUONTrigger.C:28
 MUONTrigger.C:29
 MUONTrigger.C:30
 MUONTrigger.C:31
 MUONTrigger.C:32
 MUONTrigger.C:33
 MUONTrigger.C:34
 MUONTrigger.C:35
 MUONTrigger.C:36
 MUONTrigger.C:37
 MUONTrigger.C:38
 MUONTrigger.C:39
 MUONTrigger.C:40
 MUONTrigger.C:41
 MUONTrigger.C:42
 MUONTrigger.C:43
 MUONTrigger.C:44
 MUONTrigger.C:45
 MUONTrigger.C:46
 MUONTrigger.C:47
 MUONTrigger.C:48
 MUONTrigger.C:49
 MUONTrigger.C:50
 MUONTrigger.C:51
 MUONTrigger.C:52
 MUONTrigger.C:53
 MUONTrigger.C:54
 MUONTrigger.C:55
 MUONTrigger.C:56
 MUONTrigger.C:57
 MUONTrigger.C:58
 MUONTrigger.C:59
 MUONTrigger.C:60
 MUONTrigger.C:61
 MUONTrigger.C:62
 MUONTrigger.C:63
 MUONTrigger.C:64
 MUONTrigger.C:65
 MUONTrigger.C:66
 MUONTrigger.C:67
 MUONTrigger.C:68
 MUONTrigger.C:69
 MUONTrigger.C:70
 MUONTrigger.C:71
 MUONTrigger.C:72
 MUONTrigger.C:73
 MUONTrigger.C:74
 MUONTrigger.C:75
 MUONTrigger.C:76
 MUONTrigger.C:77
 MUONTrigger.C:78
 MUONTrigger.C:79
 MUONTrigger.C:80
 MUONTrigger.C:81
 MUONTrigger.C:82
 MUONTrigger.C:83
 MUONTrigger.C:84
 MUONTrigger.C:85
 MUONTrigger.C:86
 MUONTrigger.C:87
 MUONTrigger.C:88
 MUONTrigger.C:89
 MUONTrigger.C:90
 MUONTrigger.C:91
 MUONTrigger.C:92
 MUONTrigger.C:93
 MUONTrigger.C:94
 MUONTrigger.C:95
 MUONTrigger.C:96
 MUONTrigger.C:97
 MUONTrigger.C:98
 MUONTrigger.C:99
 MUONTrigger.C:100
 MUONTrigger.C:101
 MUONTrigger.C:102
 MUONTrigger.C:103
 MUONTrigger.C:104
 MUONTrigger.C:105
 MUONTrigger.C:106
 MUONTrigger.C:107
 MUONTrigger.C:108
 MUONTrigger.C:109
 MUONTrigger.C:110
 MUONTrigger.C:111
 MUONTrigger.C:112
 MUONTrigger.C:113
 MUONTrigger.C:114
 MUONTrigger.C:115
 MUONTrigger.C:116
 MUONTrigger.C:117
 MUONTrigger.C:118
 MUONTrigger.C:119
 MUONTrigger.C:120
 MUONTrigger.C:121
 MUONTrigger.C:122
 MUONTrigger.C:123
 MUONTrigger.C:124
 MUONTrigger.C:125
 MUONTrigger.C:126
 MUONTrigger.C:127
 MUONTrigger.C:128
 MUONTrigger.C:129
 MUONTrigger.C:130
 MUONTrigger.C:131
 MUONTrigger.C:132
 MUONTrigger.C:133
 MUONTrigger.C:134
 MUONTrigger.C:135
 MUONTrigger.C:136
 MUONTrigger.C:137
 MUONTrigger.C:138
 MUONTrigger.C:139
 MUONTrigger.C:140
 MUONTrigger.C:141
 MUONTrigger.C:142
 MUONTrigger.C:143
 MUONTrigger.C:144
 MUONTrigger.C:145
 MUONTrigger.C:146
 MUONTrigger.C:147
 MUONTrigger.C:148
 MUONTrigger.C:149
 MUONTrigger.C:150