]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerDecision.cxx
default geant cuts for EMCAL's material: cutele=cutgam=100KeV
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerDecision.cxx
index 5d221a3f11a000c61c1b9065b10b047cd9f2136e..401f39bd61be9d8683b65c4d9c3d8742591199a3 100644 (file)
@@ -96,10 +96,6 @@ AliMUONTriggerDecision::AliMUONTriggerDecision(AliLoader* loader, Int_t iprint,
   }else{
     fMUONData = data;
   }
-  // Loading AliRun master
-  AliRunLoader* runloader = fLoader->GetRunLoader();
-  if (runloader->GetAliRun() == 0x0) runloader->LoadgAlice();
-  gAlice = runloader->GetAliRun();
 
   // getting MUON
   fMUON = (AliMUON*) gAlice->GetDetector("MUON");
@@ -115,6 +111,7 @@ AliMUONTriggerDecision::AliMUONTriggerDecision(AliLoader* loader, Int_t iprint,
   fDigits = new TObjArray(AliMUONConstants::NCh()); //NTriggerCh
   for (Int_t i=0; i<AliMUONConstants::NCh() ;i++) 
     fDigits->AddAt(new TClonesArray("AliMUONDigit",10000),i);
+  fDigitIndices = new TArrayI[AliMUONConstants::NCh()];
 }
 
 //----------------------------------------------------------------------
@@ -126,6 +123,7 @@ AliMUONTriggerDecision::AliMUONTriggerDecision()
     fMUON(0)
 {
 // Default constructor
+  fDigitIndices = NULL;
 }
 
 //----------------------------------------------------------------------
@@ -140,8 +138,11 @@ AliMUONTriggerDecision::AliMUONTriggerDecision(const AliMUONTriggerDecision& rhs
 //----------------------------------------------------------------------
 void AliMUONTriggerDecision::ClearDigits()
 {
-  for ( int i=0;i<AliMUONConstants::NCh();i++ ) 
+  for ( int i=0;i<AliMUONConstants::NCh();i++ )
+  {
     if ((*fDigits)[i]) ((TClonesArray*)fDigits->At(i))->Clear();
+    fDigitIndices[i].Set(0);
+  };
 }
 
 //----------------------------------------------------------------------
@@ -155,13 +156,21 @@ TClonesArray* AliMUONTriggerDecision::Digits(Int_t DetectionPlane)
 }
 
 //_____________________________________________________________________________
-void AliMUONTriggerDecision::AddDigit(Int_t id, Int_t *tracks, Int_t *charges, Int_t *digits)
+void AliMUONTriggerDecision::AddDigit(
+               Int_t id, Int_t *tracks, Int_t *charges, Int_t *digits,
+               Int_t digitindex
+       )
 {
   //
   // Add a MUON digit to the list of Digits of the detection plane id
+  // Also adds the digit index to the corresponding fDigitIndices arrays.
   //
   TClonesArray &ldigits = *Digits(id); 
   new(ldigits[ldigits.GetEntriesFast()]) AliMUONDigit(tracks,charges,digits);
+
+  TArrayI& indices = fDigitIndices[id];
+  indices.Set(indices.GetSize() + 1);
+  indices[indices.GetSize() - 1] = digitindex;
 }
 
 //----------------------------------------------------------------------
@@ -180,6 +189,8 @@ AliMUONTriggerDecision::~AliMUONTriggerDecision()
     delete fDigits;
   }
 
+  if (fDigitIndices)
+    delete [] fDigitIndices;
 }
 
 //----------------------------------------------------------------------
@@ -292,8 +303,6 @@ void AliMUONTriggerDecision::SetBit(){
   AliMUONTriggerCircuit* triggerCircuit;
 
   for (Int_t chamber = 11; chamber < 15; chamber++){
-    //    for (Int_t cathode=1; cathode<3; cathode++){  
-    //     fMUONData->GetCathode(cathode-1);
 
       TClonesArray *muonDigits = Digits(chamber-1);
       Int_t ndigits = muonDigits->GetEntriesFast();
@@ -326,6 +335,11 @@ void AliMUONTriggerDecision::SetBit(){
          Int_t istrip;
          Int_t nStrip;
 
+          // If I want to fetch the digits as in MUONCheck.C then I need to
+          // know the correct digit index. These were stored in fDigitIndices
+          // by the digitizer so we just need to fetch the correct value.
+          Int_t digitindex = fDigitIndices[chamber-1][digit];
+
          if (cathode==1) {
            switch (chamber)
              {
@@ -333,8 +347,11 @@ void AliMUONTriggerDecision::SetBit(){
                for (icirc=0; icirc<234; icirc++) {               
                  triggerCircuit = (AliMUONTriggerCircuit*) fTriggerCircuit->At(icirc);  
                  for (istrip=0; istrip<16; istrip++) {
-                   if (triggerCircuit->GetXcode(0,istrip)==code) 
+                   if (triggerCircuit->GetXcode(0,istrip)==code)
+                    {
                      fXbit11[icirc][istrip]=1;
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }
                break;
@@ -343,7 +360,10 @@ void AliMUONTriggerDecision::SetBit(){
                  triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
                  for (istrip=0; istrip<16; istrip++) {
                    if (triggerCircuit->GetXcode(1,istrip)==code) 
+                    {
                      fXbit12[icirc][istrip]=1;
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }
                break;
@@ -352,7 +372,10 @@ void AliMUONTriggerDecision::SetBit(){
                  triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc); 
                  for (istrip=0; istrip<32; istrip++) {
                    if (triggerCircuit->GetXcode(2,istrip)==code) 
+                    {
                      fXbit21[icirc][istrip]=1;
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }
                break;
@@ -361,7 +384,10 @@ void AliMUONTriggerDecision::SetBit(){
                  triggerCircuit = (AliMUONTriggerCircuit*)fTriggerCircuit->At(icirc);
                  for (istrip=0; istrip<32; istrip++) {
                    if (triggerCircuit->GetXcode(3,istrip)==code) 
+                    {
                      fXbit22[icirc][istrip]=1;             
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }               
                break;
@@ -376,7 +402,10 @@ void AliMUONTriggerDecision::SetBit(){
                  nStrip=triggerCircuit->GetNstripY();
                  for (istrip=0; istrip<nStrip; istrip++) {
                    if (triggerCircuit->GetYcode(0,istrip)==code) 
+                    {
                      fYbit11[icirc][istrip]=1;
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }
                break;
@@ -386,7 +415,10 @@ void AliMUONTriggerDecision::SetBit(){
                  nStrip=triggerCircuit->GetNstripY(); 
                  for (istrip=0; istrip<nStrip; istrip++) {
                    if (triggerCircuit->GetYcode(1,istrip)==code) 
+                    {
                      fYbit12[icirc][istrip]=1;
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }
                break;
@@ -396,7 +428,10 @@ void AliMUONTriggerDecision::SetBit(){
                  nStrip=triggerCircuit->GetNstripY();    
                  for (istrip=0; istrip<nStrip; istrip++) {
                    if (triggerCircuit->GetYcode(2,istrip)==code) 
+                    {
                      fYbit21[icirc][istrip]=1;
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }
                break;
@@ -406,7 +441,10 @@ void AliMUONTriggerDecision::SetBit(){
                  nStrip=triggerCircuit->GetNstripY();    
                  for (istrip=0; istrip<nStrip; istrip++) {
                    if (triggerCircuit->GetYcode(3,istrip)==code) 
+                    {
                      fYbit22[icirc][istrip]=1;                          
+                      DigitFiredCircuit(icirc, cathode-1, chamber-1, digitindex);
+                    };
                  }
                }               
                break;
@@ -415,7 +453,7 @@ void AliMUONTriggerDecision::SetBit(){
        }  // remove soft background
       }   // end loop on digit
       fMUONData->ResetDigits();
-      //    }    // end loop on cathode
+//  }    // end loop on cathode
   }     // end loop on chamber
 }  
 
@@ -1395,6 +1433,7 @@ void AliMUONTriggerDecision::GetGlobalTrigger(Int_t singlePlus[3],
 void AliMUONTriggerDecision::Digits2Trigger(){
 // call the Trigger Algorithm and fill TreeD
 
+  ClearDigitNumbers();
 
   fMUONData->ResetTrigger();
   Trigger();   
@@ -1433,26 +1472,34 @@ void AliMUONTriggerDecision::Digits2Trigger(){
        localtr[14] |= (fYbit22[icirc][i] << i);
       }
 
-      AliMUONLocalTrigger* pLocTrig = new AliMUONLocalTrigger(localtr);
+      AliMUONLocalTrigger* pLocTrig = new AliMUONLocalTrigger(localtr, fDigitNumbers[icirc]);
       fMUONData->AddLocalTrigger(*pLocTrig);  // add a local trigger in the list
     }
   }
 }
 
 //_______________________________________________________________________
-void AliMUONTriggerDecision::Trigger2Trigger() 
+void AliMUONTriggerDecision::ClearDigitNumbers()
 {
-// copy trigger from TreeD to TreeR
+// Clears the fDigitNumbers arrays so that they are all empty.
 
-  fMUONData->SetTreeAddress("GLT");
-  fMUONData->GetTriggerD();
+       for (Int_t i = 0; i < AliMUONConstants::NTriggerCircuit(); i++)
+               fDigitNumbers[i].Set(0);
 }
 
 //_______________________________________________________________________
-void AliMUONTriggerDecision::Trigger2Trigger(AliRawReader* /*rawReader*/) 
+void AliMUONTriggerDecision::DigitFiredCircuit(
+               Int_t circuit, Int_t cathode,
+               Int_t chamber, Int_t digit
+       )
 {
-// call the Trigger Algorithm from raw data and fill TreeR 
-
-   AliFatal("Trigger not implemented for raw data input");
-
+// Registers that the specified digit fired the specified circuit.
+// This digit gets added to an array which will be copied to
+// AliMUONLocalTrigger when such an object is created for each circuit.
+
+       Int_t digitnumber = AliMUONLocalTrigger::EncodeDigitNumber(chamber, cathode, digit);
+       Int_t last = fDigitNumbers[circuit].GetSize();
+       fDigitNumbers[circuit].Set(last + 1);
+       fDigitNumbers[circuit][last] = digitnumber;
 }
+