ROOT logo
// inserted you find the pixel routine: From a macro it is called like:

//    Int_t spdTriggerBit = CalculateFOTrigger(itsLoader,geom,hDigits,nFO);


// spdTriggerBit is a bit array which can be queried like:

// if (spdTriggerBit & (1 << 1)) globalFO = kTRUE;

//The arguments hDigits and NFO are things that you don't need. The routine
//CalculateFOTrigger uses anouther subroutine RequireZ10cm() which
//calculates the VERTEX coincidence requirement.

//Don't hesitate to contact me in case of questions. My suggestion to you is
//that you first only implement a simple version of the trigger (for example
//the OR of all signals).


//Best regards,

//Jan



Int_t CalculateFOTrigger( AliITSLoader *itsl, AliITSgeom* geom, TH1F* hDigits, Float_t& nFO)
{

  TObjArray *digDet = 0;
  digDet = new TObjArray(3);

  Int_t startSPD = geom->GetStartSPD();
  Int_t lastSPD  = geom->GetLastSPD();

  // Cut on Signal In the Pixel Detector
  treeD = itsl->TreeD();
  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;
  const Int_t nlad =240;
  const Int_t nstave=40;
  const Int_t ndet =4;
  const Int_t nchip =5;
  const Int_t ntotal = 1200;

  Int_t ndigA[5];
  Int_t FOperlayer[2];
  Int_t FOperladder[240];
  Int_t FOperstave[40][2];
  Int_t FOperchip[ntotal];
  Int_t FOperChipinStave[20][40][2];

  for (Int_t m=startSPD;m<lastSPD;m++) {
    FOperladder[m] = 0;
  }

  for (Int_t k = 0;k<2;k++){
    FOperlayer[k] = 0;
    for (Int_t o=0;o<40;o++) {
      FOperstave[o][k] = 0;
      for (Int_t ich=0;ich<20;ich++) {
        FOperChipinStave[ich][o][k] = 0;
      }
    }
  }


  nFO=0.0;

  Int_t mInStaveCounter = 0.;

  Int_t checkStave = 0;


  for (m=startSPD;m<lastSPD;m++) {

    treeD->GetEvent(m);
    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++){
      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
  
    //cout << "m " << m << " stav "  << stav  << " mInStave " <<
mInStaveCounter << " " <<lay << endl;

    for (Int_t ichip=0;ichip<5;ichip++){
      Int_t seq = (m*5+ichip);
      Int_t chipInStave = (mInStaveCounter *5) + ichip;

      if (ndigA[ichip] >= 1) {
        FOperladder[m]++;
        FOperlayer[lay-1]++;
        FOperstave[stav-1][lay-1]++;
        //FOperHstave[hstav-1][lay-1]++;
        FOperChipinStave[chipInStave][stav-1][lay-1]++;
        nFO++;
     }
     
    }
    // SIMPLE FO ---> ANY HIT TRIGGERS
    ndigfo += ndig;   
    checkStave = stav;

  }

  //cout << 2 << endl;

   Int_t bit1 = 0;
   Int_t upper_cut = 120;
 
   hDigits->Fill(ndigfo);

   
   //   nFO  = ndigfo;


   //cout << nFO << endl;

  if ( ndigfo >= singhitthreshold) {bit1 |= (1 << 1);}
 
  //  if ( ndigfo <= upper_cut) {bit1 |= (1 << 10);}



  if (FOperlayer[0] >= threshold && FOperlayer[1] >=threshold) {
     bit1 |= (1 << 2);
     if ( ndigfo <= upper_cut) {bit1 |= (1 << 10);}
  }
 

  // Sector coincidence

  Int_t nsec = 0;
  Int_t finstav = 0;

  // staves layer 1  1-20
  // staves layer 2: 0-39

  //cout << 3 << endl;


   for (Int_t istav=1;istav<21;istav++){
     for (Int_t jstav = finstav; jstav<finstav+4;jstav++) {
       if ((FOperstave[istav-1][0] >= threshold) &&
           (FOperstave[jstav][1] >= threshold)) {
         bit1 |= (1 << 3);
        
          
     if (RequireZ10cm(FOperChipinStave,istav-1,jstav) == kTRUE) {
             //cout << (RequireZ(FOperChipinStave,istav-1,probe_stav) <<
endl;
              bit1 |= (1 << 7);
     }
 
       //   cout << " " << istav << " " << jstav << " " << endl;
       }   
  
     }
     if (TMath::Even(istav)) {
       finstav = jstav;
     }
    
   }
   //cout << 4 << endl;

   // half sector coincidence

   Int_t finstav = 0;
    for (Int_t istav=1;istav<21;istav++){
     for (Int_t jstav = finstav; jstav<finstav+2;jstav++)
     {
       if (FOperstave[istav-1][0] >= threshold && FOperstave[jstav][1] >=
threshold)
       {
         bit1 |= (1 << 4);

           if (RequireZ10cm(FOperChipinStave,istav-1,jstav) == kTRUE) {
           
             bit1 |= (1 << 8);
           }
       }
     }
   
      finstav = jstav;

    }
  

 
  
    Int_t finstav = 0;
  
    for (Int_t istav=1;istav<21;istav++){
    
      for (Int_t 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 (FOperstave[istav-1][0] >= threshold &&
FOperstave[probe_stav][1] >= threshold) {
         bit1 |= (1 << 5);
       }
     
      }

     finstav = jstav-1;
    
    }



 
  // sliding window coincidence (symmetric): 1 (layer 1), 5 (layer 2)

   Int_t finstav = 0;

   for (Int_t istav=1;istav<21;istav++) {
     for (Int_t jstav = finstav-2; jstav<finstav+3;jstav++) {
      
       // cout << 7 << endl;

       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 ((FOperstave[istav-1][0] >= threshold) &&
           (FOperstave[probe_stav][1] >= threshold)) {
            bit1 |= (1 << 6);
            if (RequireZ10cm(FOperChipinStave,istav-1,probe_stav) ==
kTRUE) {
                     bit1 |= (1 << 9);
            }
     
       

       }
     }
     finstav = jstav-1;
   }

  return bit1;
}



Bool_t RequireZ10cm(Int_t FOperChipinStave[][40][2], Int_t stave1, Int_t
stave2){

// z  sliding window

  Bool_t zFlag = kFALSE;

  Int_t threshold = 1;
  Int_t start1 = 1;
  Int_t start2 = 3;
  Int_t start3 = 6;
  Int_t start4 = 7;
  Int_t i = 1;

   for (Int_t ic=0;ic<=19;ic++) {
    

       if(ic <= 5) { 


         for (Int_t jc=0;jc<=ic-1;jc++) {
          if (FOperChipinStave[ic][stave1][0] >=threshold) {
           if (FOperChipinStave[jc][stave2][1] >= threshold){
             zFlag = kTRUE;
           }
           }
         }
       }
      
       if(ic >=6 && ic <=8){
         for (jc=(2*start1-1);jc<=(2*start1-1)+5;jc++) {
           if (FOperChipinStave[ic][stave1][0] >=threshold) {
           if  (FOperChipinStave[jc][stave2][1] >= threshold){
             zFlag = kTRUE;
           }
           }

         }
         start1++;
       }

       if(ic >=9 && ic <=11){

         for (jc=(2*start2);jc<=(2*start2+5);jc++) {
           if (FOperChipinStave[ic][stave1][0] >=threshold) {
           if  (FOperChipinStave[jc][stave2][1] >= threshold){
             zFlag = kTRUE;
           }
           }
         }
         start2++;
       }
      
       if(ic >=12 && ic <=13){

         for (jc=(2*start3-1);jc<=(2*start3-1)+5;jc++) {
           if (FOperChipinStave[ic][stave1][0] >=threshold) {
           if  (FOperChipinStave[jc][stave2][1] >= threshold){
             zFlag = kTRUE;
           }
           }
         }
         start3++;
       }


        if(ic >=14){
         for (jc=(2*start4);jc<=19;jc++) {
           if (FOperChipinStave[ic][stave1][0] >=threshold) {
           if  (FOperChipinStave[jc][stave2][1] >= threshold){
             zFlag = kTRUE;
           }
           }
         }
         start4++;

        }

   }

   return zFlag;
  
 Pixel.C:1
 Pixel.C:2
 Pixel.C:3
 Pixel.C:4
 Pixel.C:5
 Pixel.C:6
 Pixel.C:7
 Pixel.C:8
 Pixel.C:9
 Pixel.C:10
 Pixel.C:11
 Pixel.C:12
 Pixel.C:13
 Pixel.C:14
 Pixel.C:15
 Pixel.C:16
 Pixel.C:17
 Pixel.C:18
 Pixel.C:19
 Pixel.C:20
 Pixel.C:21
 Pixel.C:22
 Pixel.C:23
 Pixel.C:24
 Pixel.C:25
 Pixel.C:26
 Pixel.C:27
 Pixel.C:28
 Pixel.C:29
 Pixel.C:30
 Pixel.C:31
 Pixel.C:32
 Pixel.C:33
 Pixel.C:34
 Pixel.C:35
 Pixel.C:36
 Pixel.C:37
 Pixel.C:38
 Pixel.C:39
 Pixel.C:40
 Pixel.C:41
 Pixel.C:42
 Pixel.C:43
 Pixel.C:44
 Pixel.C:45
 Pixel.C:46
 Pixel.C:47
 Pixel.C:48
 Pixel.C:49
 Pixel.C:50
 Pixel.C:51
 Pixel.C:52
 Pixel.C:53
 Pixel.C:54
 Pixel.C:55
 Pixel.C:56
 Pixel.C:57
 Pixel.C:58
 Pixel.C:59
 Pixel.C:60
 Pixel.C:61
 Pixel.C:62
 Pixel.C:63
 Pixel.C:64
 Pixel.C:65
 Pixel.C:66
 Pixel.C:67
 Pixel.C:68
 Pixel.C:69
 Pixel.C:70
 Pixel.C:71
 Pixel.C:72
 Pixel.C:73
 Pixel.C:74
 Pixel.C:75
 Pixel.C:76
 Pixel.C:77
 Pixel.C:78
 Pixel.C:79
 Pixel.C:80
 Pixel.C:81
 Pixel.C:82
 Pixel.C:83
 Pixel.C:84
 Pixel.C:85
 Pixel.C:86
 Pixel.C:87
 Pixel.C:88
 Pixel.C:89
 Pixel.C:90
 Pixel.C:91
 Pixel.C:92
 Pixel.C:93
 Pixel.C:94
 Pixel.C:95
 Pixel.C:96
 Pixel.C:97
 Pixel.C:98
 Pixel.C:99
 Pixel.C:100
 Pixel.C:101
 Pixel.C:102
 Pixel.C:103
 Pixel.C:104
 Pixel.C:105
 Pixel.C:106
 Pixel.C:107
 Pixel.C:108
 Pixel.C:109
 Pixel.C:110
 Pixel.C:111
 Pixel.C:112
 Pixel.C:113
 Pixel.C:114
 Pixel.C:115
 Pixel.C:116
 Pixel.C:117
 Pixel.C:118
 Pixel.C:119
 Pixel.C:120
 Pixel.C:121
 Pixel.C:122
 Pixel.C:123
 Pixel.C:124
 Pixel.C:125
 Pixel.C:126
 Pixel.C:127
 Pixel.C:128
 Pixel.C:129
 Pixel.C:130
 Pixel.C:131
 Pixel.C:132
 Pixel.C:133
 Pixel.C:134
 Pixel.C:135
 Pixel.C:136
 Pixel.C:137
 Pixel.C:138
 Pixel.C:139
 Pixel.C:140
 Pixel.C:141
 Pixel.C:142
 Pixel.C:143
 Pixel.C:144
 Pixel.C:145
 Pixel.C:146
 Pixel.C:147
 Pixel.C:148
 Pixel.C:149
 Pixel.C:150
 Pixel.C:151
 Pixel.C:152
 Pixel.C:153
 Pixel.C:154
 Pixel.C:155
 Pixel.C:156
 Pixel.C:157
 Pixel.C:158
 Pixel.C:159
 Pixel.C:160
 Pixel.C:161
 Pixel.C:162
 Pixel.C:163
 Pixel.C:164
 Pixel.C:165
 Pixel.C:166
 Pixel.C:167
 Pixel.C:168
 Pixel.C:169
 Pixel.C:170
 Pixel.C:171
 Pixel.C:172
 Pixel.C:173
 Pixel.C:174
 Pixel.C:175
 Pixel.C:176
 Pixel.C:177
 Pixel.C:178
 Pixel.C:179
 Pixel.C:180
 Pixel.C:181
 Pixel.C:182
 Pixel.C:183
 Pixel.C:184
 Pixel.C:185
 Pixel.C:186
 Pixel.C:187
 Pixel.C:188
 Pixel.C:189
 Pixel.C:190
 Pixel.C:191
 Pixel.C:192
 Pixel.C:193
 Pixel.C:194
 Pixel.C:195
 Pixel.C:196
 Pixel.C:197
 Pixel.C:198
 Pixel.C:199
 Pixel.C:200
 Pixel.C:201
 Pixel.C:202
 Pixel.C:203
 Pixel.C:204
 Pixel.C:205
 Pixel.C:206
 Pixel.C:207
 Pixel.C:208
 Pixel.C:209
 Pixel.C:210
 Pixel.C:211
 Pixel.C:212
 Pixel.C:213
 Pixel.C:214
 Pixel.C:215
 Pixel.C:216
 Pixel.C:217
 Pixel.C:218
 Pixel.C:219
 Pixel.C:220
 Pixel.C:221
 Pixel.C:222
 Pixel.C:223
 Pixel.C:224
 Pixel.C:225
 Pixel.C:226
 Pixel.C:227
 Pixel.C:228
 Pixel.C:229
 Pixel.C:230
 Pixel.C:231
 Pixel.C:232
 Pixel.C:233
 Pixel.C:234
 Pixel.C:235
 Pixel.C:236
 Pixel.C:237
 Pixel.C:238
 Pixel.C:239
 Pixel.C:240
 Pixel.C:241
 Pixel.C:242
 Pixel.C:243
 Pixel.C:244
 Pixel.C:245
 Pixel.C:246
 Pixel.C:247
 Pixel.C:248
 Pixel.C:249
 Pixel.C:250
 Pixel.C:251
 Pixel.C:252
 Pixel.C:253
 Pixel.C:254
 Pixel.C:255
 Pixel.C:256
 Pixel.C:257
 Pixel.C:258
 Pixel.C:259
 Pixel.C:260
 Pixel.C:261
 Pixel.C:262
 Pixel.C:263
 Pixel.C:264
 Pixel.C:265
 Pixel.C:266
 Pixel.C:267
 Pixel.C:268
 Pixel.C:269
 Pixel.C:270
 Pixel.C:271
 Pixel.C:272
 Pixel.C:273
 Pixel.C:274
 Pixel.C:275
 Pixel.C:276
 Pixel.C:277
 Pixel.C:278
 Pixel.C:279
 Pixel.C:280
 Pixel.C:281
 Pixel.C:282
 Pixel.C:283
 Pixel.C:284
 Pixel.C:285
 Pixel.C:286
 Pixel.C:287
 Pixel.C:288
 Pixel.C:289
 Pixel.C:290
 Pixel.C:291
 Pixel.C:292
 Pixel.C:293
 Pixel.C:294
 Pixel.C:295
 Pixel.C:296
 Pixel.C:297
 Pixel.C:298
 Pixel.C:299
 Pixel.C:300
 Pixel.C:301
 Pixel.C:302
 Pixel.C:303
 Pixel.C:304
 Pixel.C:305
 Pixel.C:306
 Pixel.C:307
 Pixel.C:308
 Pixel.C:309
 Pixel.C:310
 Pixel.C:311
 Pixel.C:312
 Pixel.C:313
 Pixel.C:314
 Pixel.C:315
 Pixel.C:316
 Pixel.C:317
 Pixel.C:318
 Pixel.C:319
 Pixel.C:320
 Pixel.C:321
 Pixel.C:322
 Pixel.C:323
 Pixel.C:324
 Pixel.C:325
 Pixel.C:326
 Pixel.C:327
 Pixel.C:328
 Pixel.C:329
 Pixel.C:330
 Pixel.C:331
 Pixel.C:332
 Pixel.C:333
 Pixel.C:334
 Pixel.C:335
 Pixel.C:336
 Pixel.C:337
 Pixel.C:338
 Pixel.C:339
 Pixel.C:340
 Pixel.C:341
 Pixel.C:342
 Pixel.C:343
 Pixel.C:344
 Pixel.C:345
 Pixel.C:346
 Pixel.C:347
 Pixel.C:348
 Pixel.C:349
 Pixel.C:350
 Pixel.C:351
 Pixel.C:352
 Pixel.C:353
 Pixel.C:354
 Pixel.C:355
 Pixel.C:356
 Pixel.C:357
 Pixel.C:358
 Pixel.C:359
 Pixel.C:360
 Pixel.C:361
 Pixel.C:362
 Pixel.C:363
 Pixel.C:364
 Pixel.C:365
 Pixel.C:366
 Pixel.C:367