- // ********** Get run loader for the current event **********
- AliRunLoader* runLoader = gAlice->GetRunLoader();
-
- AliITSLoader * loader = (AliITSLoader* )runLoader->GetLoader( "ITSLoader" );
- AliITSgeom* geom = loader->GetITSgeom();
- loader->LoadDigits("READ");
- TTree *treeD = loader->TreeD();
-
- TObjArray *digDet = 0;
- digDet = new TObjArray(3);
-
- Int_t startSPD = geom->GetStartSPD();
- Int_t lastSPD = geom->GetLastSPD();
-
- // Cut on Signal In the Pixel Detector
- TBranch * br = treeD->GetBranch( "ITSDigitsSPD" );
- br->SetAddress( &((*digDet)[0]) );
- ((TClonesArray*)(digDet->At(0)))->Clear();
-
- Int_t ndig = 0;
- Int_t ndigfo = 0;
- Int_t singhitthreshold = 1; // single hit threshold
- Int_t threshold = 1;
-
-// const Int_t nlay = 2; // not used
-// const Int_t nlad = 240; // not used
-// const Int_t nstave = 40; // not used
-// const Int_t ndet = 4; // not used
-// const Int_t nchip = 5; // not used
-// const Int_t ntotal = 1200;
-
- Int_t ndigA[5];
- Int_t iFOperlayer[2];
- Int_t iFOperladder[240];
- Int_t iFOperstave[40][2];
-// Int_t iFOperchip[ntotal]; // not used
- Int_t iFOperChipinStave[20][40][2];
-
- for (Int_t m=startSPD;m<lastSPD;m++) {
- iFOperladder[m] = 0;
- }
-
- for (Int_t k = 0;k<2;k++){
- iFOperlayer[k] = 0;
- for (Int_t o=0; o<40; o++) {
- iFOperstave[o][k] = 0;
- for (Int_t ich=0; ich<20; ich++) {
- iFOperChipinStave[ich][o][k] = 0;
- }
- }
- }
-
- // nFO = 0.0;
- Int_t mInStaveCounter = 0;
- Int_t checkStave = 0;
-
- for (Int_t m=startSPD; m<lastSPD; m++) {
- treeD->GetEvent( m );
- TClonesArray* digits = (TClonesArray*) (digDet->At(0)); // SPD only.
- Int_t lay, stav, det;
- geom->GetModuleId(m,lay,stav,det);
- ndig = digits->GetEntriesFast();
- for( Int_t l=0; l<5; l++ ) {
- ndigA[l] = 0 ;
- }
- for( Int_t dig=0; dig<ndig; dig++) {
- AliITSdigitSPD* dp = (AliITSdigitSPD*) digits->At(dig);
- Int_t column = dp->GetCoord1();
- // Int_t row = dp->GetCoord2();
- Int_t chip = Int_t(column/32.);
- ndigA[chip]++;
- }
-
- if (checkStave != stav) {
- mInStaveCounter = 0;
- } else {
- mInStaveCounter += 1;
- }
-
- // m 0,.., 239
- // stav 1,..,40
- // mInStave 0,..,3
- // chipInStave 0,..,19
-
-
- for (Int_t ichip=0; ichip<5; ichip++) {
- //Int_t seq = (m*5+ichip);
- Int_t chipInStave = (mInStaveCounter *5) + ichip;
-
- if (ndigA[ichip] >= 1) {
- iFOperladder[m]++;
- iFOperlayer[lay-1]++;
- iFOperstave[stav-1][lay-1]++;
- //iFOperHstave[hstav-1][lay-1]++;
- iFOperChipinStave[chipInStave][stav-1][lay-1]++;
- // nFO++;
- }
- }
- // SIMPLE FO ---> ANY HIT TRIGGERS
- ndigfo += ndig;
- checkStave = stav;
- } // endl loop over SPD's
-
-
- //Int_t bit1 = 0;
- Int_t upper_cut = 120;
-
- if ( ndigfo >= singhitthreshold ) {
- // Set input GLOBAL FO
- SetInput( "ITS_SPD_GFO_L0" );
- // or SetInput( "0x01" );
- // or ((AliTriggerInput*)fInputs.At(0))->Set();
- // bit1 |= (1 << 1);
- }
-
- // if ( ndigfo <= upper_cut) { bit1 |= (1 << 10); }
-
- if (iFOperlayer[0] >= threshold && iFOperlayer[1] >=threshold) {
- // Set input LAYER
- //bit1 |= (1 << 2);
- SetInput( "ITS_SPD_LAYER_L0" );
- if ( ndigfo <= upper_cut) {
- //bit1 |= (1 << 10);
- // LAYER and UPPER CUT
- SetInput( "ITS_SPD_LUCUT_L0" );
- }
- }
-
- // Sector coincidence
-
- // Int_t nsec = 0;
- Int_t finstav = 0;
- Int_t istav;
- Int_t jstav;
-
- // staves layer 1 1-20
- // staves layer 2: 0-39
- for (istav=1; istav<21; istav++) {
- for (jstav = finstav; jstav<finstav+4; jstav++) {
- if ((iFOperstave[istav-1][0] >= threshold) &&
- (iFOperstave[jstav][1] >= threshold)) {
- // Set input SECTOR
- //bit1 |= (1 << 3);
- SetInput( "ITS_SPD_SECTOR_L0" );
- if ( RequireZ10cm( iFOperChipinStave, istav-1, jstav ) == kTRUE ) {
- // Set input SECTOR & VERTEX
- // bit1 |= (1 << 7);
- SetInput( "ITS_SPD_SVERTEX_L0" );
- }
- }
-
- }
- if (TMath::Even(istav)) {
- finstav = jstav;
- }
-
- }
-
- // half sector coincidence
-
- finstav = 0;
- for (istav=1; istav<21; istav++){
- for (jstav = finstav; jstav<finstav+2; jstav++) {
- if (iFOperstave[istav-1][0] >= threshold && iFOperstave[jstav][1] >= threshold) {
- // Set input HALF SECTOR
- //bit1 |= (1 << 4);
- SetInput( "ITS_SPD_HSECTOR_L0" );
- if (RequireZ10cm(iFOperChipinStave,istav-1,jstav) == kTRUE) {
- // Set input HALF SECTOR & VERTEX
- SetInput( "ITS_SPD_HSVERTEX_L0" );
- //bit1 |= (1 << 8);
- }
- }
- }
- finstav = jstav;
- }
-
- finstav = 0;
- for (istav=1; istav<21; istav++) {
- for (jstav = finstav-1; jstav<finstav+3; jstav++) {
- Int_t probe_stav = jstav;
- if (jstav == -1) probe_stav = 39;
- if (jstav == 40) probe_stav = 0;
- if (iFOperstave[istav-1][0] >= threshold && iFOperstave[probe_stav][1] >= threshold) {
- // Set input SLIDING WINDOW1
- SetInput( "ITS_SPD_SW1_L0" );
- //bit1 |= (1 << 5);
- }
- }
- finstav = jstav-1;
- }
-
- // sliding window coincidence (symmetric): 1 (layer 1), 5 (layer 2)
-
- finstav = 0;
- for (istav=1;istav<21; istav++) {
- for (jstav = finstav-2; jstav<finstav+3; jstav++) {
- Int_t probe_stav = jstav;
- if (jstav == -2) probe_stav = 38;
- if (jstav == -1) probe_stav = 39;
- if (jstav == 40) probe_stav = 0;
- if (jstav == 41) probe_stav = 1;
-
- if ((iFOperstave[istav-1][0] >= threshold) && (iFOperstave[probe_stav][1] >= threshold)) {
- // Set input SLIDING WINDOW 2
- SetInput( "ITS_SPD_SW2_L0" );
- // bit1 |= (1 << 6);
- if (RequireZ10cm(iFOperChipinStave,istav-1,probe_stav) == kTRUE) {
- // Set input SLIDING WINDOW & VERTEX
- SetInput( "ITS_SPD_SWVERTEX_L0" );
- //bit1 |= (1 << 9);
- }
- }
- }
- finstav = jstav-1;
- }
+ // ********** Get run loader for the current event **********
+ AliRunLoader* runLoader = gAlice->GetRunLoader();
+
+ AliITSLoader* loader = (AliITSLoader* )runLoader->GetLoader( "ITSLoader" );
+ AliITSgeom* geom = loader->GetITSgeom();
+ loader->LoadDigits("READ");
+ TTree *treeD = loader->TreeD();
+
+ TObjArray *digDet = 0;
+ digDet = new TObjArray(3);
+
+
+ // Cut on Signal In the Pixel Detector
+ TBranch* br = treeD->GetBranch( "ITSDigitsSPD" );
+ br->SetAddress( &((*digDet)[0]) );
+ ((TClonesArray*)(digDet->At(0)))->Clear();
+
+ MultiplicityTriggers(digDet, treeD, geom);
+ // GeometryTriggers(digDet, treeD, geom);
+
+ // Debug : FIX change to AliLog
+ cout << "=================================================" << endl;
+ cout << " Pixel Trigger Mask ( " << hex << "0x" << GetMask() << " )" << endl << endl;
+ cout << " Global Fast OR " << "0x" << GetInput( "ITS_SPD_GFO_L0" )->GetValue() << endl;
+ cout << "=================================================" << endl << endl;