#include "AliMUONResponse.h"
#include "AliMUONChamber.h"
#include "AliMUONDigit.h"
+#include "AliMUONConstants.h"
+#include "AliMUONGlobalTrigger.h"
+#include "AliMUONLocalTrigger.h"
#include <TF1.h>
#include <TPostScript.h>
#include <TMinuit.h>
#include <Riostream.h>
+#include <TError.h>
//----------------------------------------------------------------------
ClassImp(AliMUONTriggerDecision)
//----------------------------------------------------------------------
-AliMUONTriggerDecision::AliMUONTriggerDecision(Int_t iprint)
+AliMUONTriggerDecision::AliMUONTriggerDecision(AliLoader* loader, Int_t iprint)
{
// Constructor
fDebug = iprint; // print option
fXbit21[icirc][istrip]=fXbit22[icirc][istrip]=0;
}
}
+
+ fTriggerCircuit = new TObjArray(AliMUONConstants::NTriggerCircuit());
+
+ // initialize loader's
+ fLoader = loader;
+
+ // initialize container
+ fMUONData = new AliMUONData(fLoader,"MUON","MUON");
+
+ // Loading AliRun master
+ AliRunLoader* runloader = fLoader->GetRunLoader();
+ if (runloader->GetAliRun() == 0x0) runloader->LoadgAlice();
+ gAlice = runloader->GetAliRun();
+
+ // getting MUON
+ fMUON = (AliMUON*) gAlice->GetDetector("MUON");
+
+ // setting circuit
+ for (icirc = 0; icirc < AliMUONConstants::NTriggerCircuit(); icirc++) {
+ AliMUONTriggerCircuit* pCir = 0;
+ pCir = &(fMUON->TriggerCircuit(icirc));
+ fTriggerCircuit->AddAt(pCir, icirc);
+ }
+}
+
+//----------------------------------------------------------------------
+AliMUONTriggerDecision::AliMUONTriggerDecision(const AliMUONTriggerDecision& rhs)
+ : TObject(rhs)
+{
+// Protected copy constructor
+
+ Fatal("AliMUONTriggerDecision", "Not implemented.");
}
+
//----------------------------------------------------------------------
AliMUONTriggerDecision::~AliMUONTriggerDecision()
{
// Destructor
+ if (fTriggerCircuit){
+ fTriggerCircuit->Clear();// Sets pointers to 0 sinche it is not the owner
+ delete fTriggerCircuit;
+ }
+ if (fMUONData)
+ delete fMUONData;
}
+//----------------------------------------------------------------------
+AliMUONTriggerDecision&
+AliMUONTriggerDecision::operator=(const AliMUONTriggerDecision& rhs)
+{
+// Protected assignement operator
+
+ if (this == &rhs) return *this;
+
+ Fatal("operator=", "Not implemented.");
+
+ return *this;
+}
+
+
//----------------------------------------------------------------------
void AliMUONTriggerDecision::Trigger(){
// main method of the class which calls the overall Trigger procedure
Int_t coinc44=0, resetMid=0; // initialize coincidence
- AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
AliMUONTriggerCircuit* triggerCircuit;
for (Int_t icirc=0; icirc<234; icirc++) { // loop on circuits
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
// Int_t idCircuit=triggerCircuit->GetIdCircuit();
Int_t minDevStrip[5], minDev[5], coordY[5];
// 4) set the bit patterns
- AliMUON *pMUON = (AliMUON*)gAlice->GetDetector("MUON");
AliMUONTriggerCircuit* triggerCircuit;
- AliRunLoader * rl = AliRunLoader::GetRunLoader();
- AliLoader * gime = rl->GetLoader("MUONLoader");
for (Int_t chamber=11; chamber<15; chamber++){
for (Int_t cathode=1; cathode<3; cathode++){
- AliMUONChamber* iChamber = &(pMUON->Chamber(chamber-1));
- AliSegmentation* segmentation;
- gime->TreeD()->GetEvent(cathode-1);
- TClonesArray *muonDigits = pMUON->GetMUONData()->Digits(chamber-1);
+ // AliMUONChamber* iChamber = &(pMUON->Chamber(chamber-1));
+ // AliSegmentation* segmentation;
+ fLoader->TreeD()->GetEvent(cathode-1);
+ TClonesArray *muonDigits = fMUONData->Digits(chamber-1);
Int_t ndigits = muonDigits->GetEntriesFast();
if (fDebug>3)
- printf("\n 1 Found %d digits in %p %d \n ", ndigits, muonDigits,chamber-1);
-// if (ndigits == 0) return;
-
-// iChamber = &(pMUON->Chamber(chamber-1));
- segmentation=iChamber->SegmentationModel(cathode);
+ printf("\n 1 Found %d digits in %p %d \n ", ndigits, (void*)muonDigits,chamber-1);
+
AliMUONDigit *mdig;
for (Int_t digit=0; digit<ndigits; digit++) {
{
case 11:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*) fTriggerCircuit->At(icirc);
for (istrip=0; istrip<16; istrip++) {
if (triggerCircuit->GetXcode(0,istrip)==code)
fXbit11[icirc][istrip]=1;
break;
case 12:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
for (istrip=0; istrip<16; istrip++) {
if (triggerCircuit->GetXcode(1,istrip)==code)
fXbit12[icirc][istrip]=1;
break;
case 13:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
for (istrip=0; istrip<32; istrip++) {
if (triggerCircuit->GetXcode(2,istrip)==code)
fXbit21[icirc][istrip]=1;
break;
case 14:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
for (istrip=0; istrip<32; istrip++) {
if (triggerCircuit->GetXcode(3,istrip)==code)
fXbit22[icirc][istrip]=1;
{
case 11:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
nStrip=triggerCircuit->GetNstripY();
for (istrip=0; istrip<nStrip; istrip++) {
if (triggerCircuit->GetYcode(0,istrip)==code)
break;
case 12:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
nStrip=triggerCircuit->GetNstripY();
for (istrip=0; istrip<nStrip; istrip++) {
if (triggerCircuit->GetYcode(1,istrip)==code)
break;
case 13:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
nStrip=triggerCircuit->GetNstripY();
for (istrip=0; istrip<nStrip; istrip++) {
if (triggerCircuit->GetYcode(2,istrip)==code)
break;
case 14:
for (icirc=0; icirc<234; icirc++) {
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
nStrip=triggerCircuit->GetNstripY();
for (istrip=0; istrip<nStrip; istrip++) {
if (triggerCircuit->GetYcode(3,istrip)==code)
} // if cathode
} // remove soft background
} // end loop on digit
- pMUON->GetMUONData()->ResetDigits();
+ fMUONData->ResetDigits();
} // end loop on cathode
} // end loop on chamber
}
// Set Y bit for up and down parts of circuits
Int_t idModule, nStripX, nStripY, iPosCircuit;
- AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
for (Int_t icirc=0; icirc<234; icirc++) {
AliMUONTriggerCircuit* circuitD; // circuit Down
AliMUONTriggerCircuit* circuitU; // circuit Up
- circuit = &(pMUON->TriggerCircuit(icirc));
+ circuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
idModule=circuit->GetIdModule(); // corresponding module Id.
nStripX=circuit->GetNstripX(); // number of X strips
nStripY=circuit->GetNstripY(); // number of Y strips
if (iPosCircuit==1) { // need to scan lower module
if(idModule<91&&TMath::Abs(idModule)!=41&&idModule>-91) {
Int_t icircD=circuit->GetICircuitD();
- circuitD = &(pMUON->TriggerCircuit(icircD));
+ circuitD = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icircD);
Int_t nStripD=circuitD->GetNstripY();
if (TMath::Abs(idModule)==42) { // shift of +8 bits
(iPosCircuit==3&&nStripX==48)||(iPosCircuit==4&&nStripX==64)) {
if ((idModule>17||idModule<-17)&&TMath::Abs(idModule)!=61) {
Int_t icircU=circuit->GetICircuitU();
- circuitU = &(pMUON->TriggerCircuit(icircU));
+ circuitU = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icircU);
Int_t nStripU=circuitU->GetNstripY();
if (TMath::Abs(idModule)==62) { // shift of +8 bits
// returns local trigger answer for circuit icirc
Int_t i;
- AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
AliMUONTriggerCircuit* triggerCircuit;
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*) fTriggerCircuit->At(icirc);
Int_t idCircuit=triggerCircuit->GetIdCircuit();
Int_t signDev=minDev[4];
Int_t istrip;
- AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
AliMUONTriggerCircuit* triggerCircuit;
- triggerCircuit = &(pMUON->TriggerCircuit(icirc));
+ triggerCircuit = (AliMUONTriggerCircuit*) fTriggerCircuit->At(icirc);
Int_t idCircuit=triggerCircuit->GetIdCircuit();
Int_t nStrip=triggerCircuit->GetNstripY();
Int_t pairUnlike[3],
Int_t pairLike[3]){
// returns Global Trigger information (0,1,2 : Lpt,Hpt,Apt)
+// should not be used anymore.
for (Int_t i=0; i<3; i++) {
singlePlus[i] = fGlobalSinglePlus[i];
singleMinus[i] = fGlobalSingleMinus[i];
pairLike[i] = fGlobalPairLike[i];
}
}
-//----------------------------------------------------------------------
-//--- end of methods which return member data related info
-//----------------------------------------------------------------------
-//----------------------------------------------------------------------
-/*
-void AliMUONTriggerDecision::AddLocalTrigger(const AliMUONLocalTrigger c){
-// Add a Local Trigger copy to the list
- AliMUON *MUON=(AliMUON*)gAlice->GetModule("MUON");
- MUON->AddLocalTrigger(c);
- fNLocalTriggers++;
+//_______________________________________________________________________
+void AliMUONTriggerDecision::Digits2Trigger(){
+// call the Trigger Algorithm and fill TreeR
+
+
+ fMUONData->ResetTrigger();
+ Trigger();
+ AliMUONGlobalTrigger* pGloTrig = new AliMUONGlobalTrigger(fGlobalSinglePlus, fGlobalSingleMinus,
+ fGlobalSingleUndef, fGlobalPairUnlike,
+ fGlobalPairLike);
+ // add a local trigger in the list
+ fMUONData->AddGlobalTrigger(*pGloTrig);
+
+ Int_t i;
+
+ for (Int_t icirc=0; icirc<AliMUONConstants::NTriggerCircuit(); icirc++) {
+ if(GetITrigger(icirc)==1) {
+ Int_t localtr[7]={0,0,0,0,0,0,0};
+ Int_t loLpt[2]={0,0}; Int_t loHpt[2]={0,0}; Int_t loApt[2]={0,0};
+ GetLutOutput(icirc, loLpt, loHpt, loApt);
+ localtr[0] = icirc;
+ localtr[1] = GetStripX11(icirc);
+ localtr[2] = GetDev(icirc);
+ localtr[3] = GetStripY11(icirc);
+ for (i=0; i<2; i++) { // convert the Lut output in 1 digit
+ localtr[4] = localtr[4]+Int_t(loLpt[i]*TMath::Power(2,i));
+ localtr[5] = localtr[5]+Int_t(loHpt[i]*TMath::Power(2,i));
+ localtr[6] = localtr[6]+Int_t(loApt[i]*TMath::Power(2,i));
+ }
+ AliMUONLocalTrigger* pLocTrig = new AliMUONLocalTrigger(localtr);
+ fMUONData->AddLocalTrigger(*pLocTrig); // add a local trigger in the list
+ }
+ }
}
-*/