#include "AliMUONHitForRec.h"
#include "AliMUONTriggerTrack.h"
#include "AliMUONTriggerCircuit.h"
+#include "AliMUONTriggerCircuitNew.h"
#include "AliMUONRawCluster.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONGlobalTrigger.h"
// To reset the array and the number of HitsForRec,
// and also the number of HitsForRec
// and the index of the first HitForRec per chamber
- if (fHitsForRecPtr) fHitsForRecPtr->Clear();
+ if (fHitsForRecPtr) fHitsForRecPtr->Delete();
fNHitsForRec = 0;
for (Int_t ch = 0; ch < AliMUONConstants::NTrackingCh(); ch++)
fNHitsForRecPerChamber[ch] = fIndexOfFirstHitForRecPerChamber[ch] = 0;
// like in Fortran TRACKF_STAT.
AliMUONHitForRec* hitForRec;
Double_t bendCoor, nonBendCoor, radius;
- Int_t chamber = AliMUONConstants::ChamberNumber(Hit->Z()); // chamber(0...)
+ Int_t detElemId = Hit->UserId(), chamber = 0;
+ if (detElemId) chamber = detElemId / 100 - 1;
+ else chamber = AliMUONConstants::ChamberNumber(Hit->Z()); // chamber(0...)
if (chamber < 0) return NULL;
// only in tracking chambers (fChamber starts at 1)
if (chamber >= AliMUONConstants::NTrackingCh()) return NULL;
distNonBend = TMath::Abs(hit2Ptr->GetNonBendingCoor() - extNonBendCoor);
if (last2st) {
// bending slope
- bendingSlope = (hit1Ptr->GetBendingCoor() - hit2Ptr->GetBendingCoor()) /
- (hit1Ptr->GetZ() - hit2Ptr->GetZ());
- // absolute value of impact parameter
- impactParam =
- TMath::Abs(hit1Ptr->GetBendingCoor() - hit1Ptr->GetZ() * bendingSlope);
+ if ( hit1Ptr->GetZ() - hit2Ptr->GetZ() != 0.0 ) {
+ bendingSlope = (hit1Ptr->GetBendingCoor() - hit2Ptr->GetBendingCoor()) /
+ (hit1Ptr->GetZ() - hit2Ptr->GetZ());
+ // absolute value of impact parameter
+ impactParam =
+ TMath::Abs(hit1Ptr->GetBendingCoor() - hit1Ptr->GetZ() * bendingSlope);
+ }
+ else {
+ AliWarning("hit1Ptr->GetZ() = hit2Ptr->GetZ(): impactParam set to maxImpactParam");
+ impactParam = maxImpactParam;
+ }
}
// check for distances not too large,
// and impact parameter not too big if stations downstream of the dipole.
TClonesArray *globalTrigger;
AliMUONLocalTrigger *locTrg;
AliMUONGlobalTrigger *gloTrg;
- AliMUONTriggerCircuit *circuit;
+
AliMUONTriggerTrack *recTriggerTrack = 0;
TTree* treeR = fLoader->TreeR();
// Loading MUON subsystem
AliMUON * pMUON = (AliMUON *) gAlice->GetDetector("MUON");
-
+ // Not really clean, but for the moment we must check whether the
+ // trigger uses new or old TriggerCircuit
+ Bool_t newTrigger=kFALSE;
+ if ( pMUON->DigitizerType().Contains("NewTrigger") ) newTrigger = kTRUE;
+
nTRentries = Int_t(treeR->GetEntries());
treeR->GetEvent(0); // only one entry
Float_t z11 = AliMUONConstants::DefaultChamberZ(10);
Float_t z21 = AliMUONConstants::DefaultChamberZ(12);
+ Float_t y11 = 0.;
+ Int_t stripX21 = 0;
+ Float_t y21 = 0.;
+ Float_t x11 = 0.;
+
for (Int_t i=0; i<nlocals; i++) { // loop on Local Trigger
locTrg = (AliMUONLocalTrigger*)localTrigger->UncheckedAt(i);
- circuit = &(pMUON->TriggerCircuit(locTrg->LoCircuit()));
- Float_t y11 = circuit->GetY11Pos(locTrg->LoStripX());
- Int_t stripX21 = locTrg->LoStripX()+locTrg->LoDev()+1;
- Float_t y21 = circuit->GetY21Pos(stripX21);
- Float_t x11 = circuit->GetX11Pos(locTrg->LoStripY());
+
+ if (!newTrigger) { // old trigger
+// printf("AliMUONTrackReconstructor::MakeTriggerTrack using OLD trigger \n");
+ AliMUONTriggerCircuit * circuit = &(pMUON->TriggerCircuit(locTrg->LoCircuit()));
+ y11 = circuit->GetY11Pos(locTrg->LoStripX());
+ stripX21 = locTrg->LoStripX()+locTrg->LoDev()+1;
+ y21 = circuit->GetY21Pos(stripX21);
+ x11 = circuit->GetX11Pos(locTrg->LoStripY());
+ } else { // new trigger
+// printf("AliMUONTrackReconstructor::MakeTriggerTrack using NEW trigger \n");
+ AliMUONTriggerCircuitNew * circuit =
+ &(pMUON->TriggerCircuitNew(locTrg->LoCircuit()-1)); // -1 !!!
+ y11 = circuit->GetY11Pos(locTrg->LoStripX());
+ stripX21 = locTrg->LoStripX()+locTrg->LoDev()+1;
+ y21 = circuit->GetY21Pos(stripX21);
+ x11 = circuit->GetX11Pos(locTrg->LoStripY());
+ }
+// printf(" MakeTriggerTrack %d %d %d %d %d %f %f %f \n",i,locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoStripX()+locTrg->LoDev()+1,locTrg->LoStripY(),y11, y21, x11);
+
Float_t thetax = TMath::ATan2( x11 , z11 );
Float_t thetay = TMath::ATan2( (y21-y11) , (z21-z11) );
-
+
recTriggerTrack = new AliMUONTriggerTrack(x11,y11,thetax,thetay,gloTrigPat);
// since static statement does not work, set gloTrigPat for each track
-
+
fMUONData->AddRecTriggerTrack(*recTriggerTrack);
delete recTriggerTrack;
} // end of loop on Local Trigger