ROOT logo
MakeCDBEntryProblematic(Int_t startRun = 0, Int_t endRun = AliCDBRunRange::Infinity(), const Char_t *filename = NULL, const Char_t *dbString = "local://$ALICE_ROOT/OCDB")
{

  /* create object */
  TH1C *obj = new TH1C("hProblematic", "", 157248, 0., 157248.);

  /* update object */
  if (filename) {
    printf("PROBLEMATIC HISTO WILL BE UPDATED ACCORDING TO INPUT LIST\n");
    printf("inputList: %s\n", filename);
    UpdateProblematicHisto(obj, filename);
  }
  else {
    printf("EMPTY PROBLEMATIC HISTO WILL BE GENERATED\n");
  }

  /* create cdb info */
  AliCDBId id("TOF/Calib/Problematic", startRun, endRun);
  AliCDBMetaData *md = new AliCDBMetaData();
  md->SetResponsible("Roberto Preghenella");
  md->SetComment("Problematic");
  md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
  md->SetBeamPeriod(0);

  /* put object in cdb */
  AliCDBManager *cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage(dbString);
  cdb->GetDefaultStorage()->Put(obj, id, md);

}

Bool_t
UpdateProblematicHisto(TH1C *histo, const Char_t *filename)
{
  /*
   * this routine updates the problematic histo taking
   * problematic channels from a list specified in the
   * file written in ASCII format according to the
   * following formats based on electronics-oriented indices:
   *
   * # disable single crate
   * # crate[0-71]
   *
   * # disable single TRM
   * # crate[0-71] trm[3-12]
   *
   * # disable single chain
   * # crate[0-71] trm[3-12] chain[0-1]
   *
   * # disable single TDC
   * # crate[0-71] trm[3-12] chain[0-1] tdc[0-14]
   *
   * # disable single channel
   * # crate[0-71] trm[3-12] chain[0-1] tdc[0-14] channel[0-7]
   *
   *
   * EXAMPLE:
   * # this list will set as problematics:
   * # - all channels of crate-39
   * # - all channels of TRM-03 crate-40
   * # - all channels of chain-A TRM-07 crate-04
   * # - all channels of TDC-04 chain-B TRM-09 crate-07
   * # - channel-03 TDC-02 chain-A TRM-04 crate-00
   * 39
   * 40 3
   * 4 7 0
   * 7 9 1 4
   * 0 4 0 2 3
   *
   */

  /* check histo */
  if (!histo) {
    printf("WARNING: NULL histo, will just run in DUMMY mode\n");
  }

  /* open ASCII file */
  ifstream filein;
  filein.open(filename, ifstream::in);
  
  /* loop over lines in file */
  char buf[1024];
  TString str;
  TObjString *ostr;
  TObjArray *oa;
  Int_t crate, trm, chain, tdc, channel;
  Int_t irequest = 0, nflagged;
  printf("processing requests to flag problematic channels:\n");
  while (filein.good()) {
    filein.getline(buf, 1024);
    /* check whether we got to EOF */
    if (filein.eof()) break;
    /* put buffer in a TString */
    str = buf;
    /* check whether commented line */
    if (str.BeginsWith("#")) continue;
    irequest++;
    /* tokenize */
    oa = str.Tokenize(" ");
    switch (oa->GetEntries()) {
    case 1:
      ostr = (TObjString *)oa->At(0);
      crate = atoi(ostr->GetName());
      if (crate < 0 || crate > 71) {
	printf("%d.) invalid crate number: %d\n", irequest, crate);
	break;
      }
      nflagged = FlagAsProblematic(histo, crate);
      printf("%d.) crate flagged as problematic (%d channels): crate-%02d\n", irequest, nflagged, crate);
      break;
    case 2:
      ostr = (TObjString *)oa->At(0);
      crate = atoi(ostr->GetName());
      if (crate < 0 || crate > 71) {
	printf("%d.) invalid crate number: %d\n", irequest, crate);
	break;
      }
      ostr = (TObjString *)oa->At(1);
      trm = atoi(ostr->GetName());
      if (trm < 3 || trm > 12) {
	printf("%d.) invalid TRM number: %d\n", irequest, trm);
	break;
      }
      nflagged = FlagAsProblematic(histo, crate, trm);
      printf("%d.) TRM flagged as problematic (%d channels): crate-%02d TRM-%02d\n", irequest, nflagged, crate, trm);
      break;
    case 3:
      ostr = (TObjString *)oa->At(0);
      crate = atoi(ostr->GetName());
      if (crate < 0 || crate > 71) {
	printf("%d.) invalid crate number: %d\n", irequest, crate);
	break;
      }
      ostr = (TObjString *)oa->At(1);
      trm = atoi(ostr->GetName());
      if (trm < 3 || trm > 12) {
	printf("%d.) invalid TRM number: %d\n", irequest, trm);
	break;
      }
      ostr = (TObjString *)oa->At(2);
      chain = atoi(ostr->GetName());
      if (chain < 0 || chain > 1) {
	printf("%d.) invalid chain number: %d\n", irequest, chain);
	break;
      }
      nflagged = FlagAsProblematic(histo, crate, trm, chain);
      printf("%d.) chain flagged as problematic (%d channels): crate-%02d TRM-%02d chain-%s\n", irequest, nflagged, crate, trm, chain == 0 ? "A" : "B");
      break;
    case 4:
      ostr = (TObjString *)oa->At(0);
      crate = atoi(ostr->GetName());
      if (crate < 0 || crate > 71) {
	printf("%d.) invalid crate number: %d\n", irequest, crate);
	break;
      }
      ostr = (TObjString *)oa->At(1);
      trm = atoi(ostr->GetName());
      if (trm < 3 || trm > 12) {
	printf("%d.) invalid TRM number: %d\n", irequest, trm);
	break;
      }
      ostr = (TObjString *)oa->At(2);
      chain = atoi(ostr->GetName());
      if (chain < 0 || chain > 1) {
	printf("%d.) invalid chain number: %d\n", irequest, chain);
	break;
      }
      ostr = (TObjString *)oa->At(3);
      tdc = atoi(ostr->GetName());
      if (tdc < 0 || tdc > 14) {
	printf("%d.) invalid chain number: %d\n", irequest, chain);
	break;
      }
      nflagged = FlagAsProblematic(histo, crate, trm, chain, tdc);
      printf("%d.) TDC flagged as problematic (%d channels): crate-%02d TRM-%02d chain-%s TDC-%02d\n", irequest, nflagged, crate, trm, chain == 0 ? "A" : "B", tdc);
      break;
    case 5:
      ostr = (TObjString *)oa->At(0);
      crate = atoi(ostr->GetName());
      if (crate < 0 || crate > 71) {
	printf("%d.) invalid crate number: %d\n", irequest, crate);
	break;
      }
      ostr = (TObjString *)oa->At(1);
      trm = atoi(ostr->GetName());
      if (trm < 3 || trm > 12) {
	printf("invalid TRM number: %d\n", irequest, trm);
	break;
      }
      ostr = (TObjString *)oa->At(2);
      chain = atoi(ostr->GetName());
      if (chain < 0 || chain > 1) {
	printf("%d.) invalid chain number: %d\n", irequest, chain);
	break;
      }
      ostr = (TObjString *)oa->At(3);
      tdc = atoi(ostr->GetName());
      if (tdc < 0 || tdc > 14) {
	printf("%d.) invalid chain number: %d\n", irequest, chain);
	break;
      }
      ostr = (TObjString *)oa->At(4);
      channel = atoi(ostr->GetName());
      if (channel < 0 || channel > 7) {
	printf("%d.) invalid channel number: %d\n", irequest, channel);
	break;
      }
      nflagged = FlagAsProblematic(histo, crate, trm, chain, tdc, channel);
      printf("%d.) channel flagged as problematic (%d channels): crate-%02d TRM-%02d chain-%s TDC-%02d, channel-%d\n", irequest, nflagged, crate, trm, chain == 0 ? "A" : "B", tdc, channel);
      break;
    default:
      printf("%d.) invalid format: %s\n", irequest, str.Data());
      break;
    }
  }

  /* close file */
  filein.close();

  return kTRUE;
}

Int_t
FlagAsProblematic(TH1C *histo, Int_t crate = -1, Int_t trm = -1, Int_t chain = -1, Int_t tdc = -1, Int_t channel = -1)
{

  /*
   * flag as problematic according to parameters
   */

  /* loop over everything checking request */
  Int_t det[5], dummy, index, nflagged = 0;
  for (Int_t icrate = 0; icrate < 72; icrate++) {
    if (crate != -1 && icrate != crate) continue;
    for (Int_t itrm = 3; itrm <= 12; itrm++) {
      if (trm != -1 && itrm != trm) continue;
      for (Int_t ichain = 0; ichain < 2; ichain++) {
	if (chain != -1 && ichain != chain) continue;
	for (Int_t itdc = 0; itdc < 15; itdc++) {
	  if (tdc != -1 && itdc != tdc) continue;
	  for (Int_t ichannel = 0; ichannel < 8; ichannel++) {
	    if (channel != -1 && ichannel != channel) continue;
	    AliTOFRawStream::EquipmentId2VolumeId(icrate, itrm, ichain, itdc, ichannel, det);
	    dummy = det[4];
	    det[4] = det[3];
	    det[3] = dummy;
	    if (det[0] < 0 || det[0] > 17 ||
		det[1] < 0 || det[1] > 4 ||
		det[2] < 0 || det[2] > 18 ||
		det[3] < 0 || det[3] > 1 ||
		det[4] < 0 || det[4] > 47) {
	      //	      printf("invalid volume indices: EO = (%d %d %d %d %d), VOL = (%d %d %d %d %d)\n", icrate, itrm, ichain, itdc, ichannel, det[0], det[1], det[2], det[3], det[4]);
	      continue;
	    }
	    index = AliTOFGeometry::GetIndex(det);
	    if (index < 0 || index > 157248) {
	      //	      printf("invalid calib index: EO = (%d %d %d %d %d), VOL = (%d %d %d %d %d), CAL = %d\n", icrate, itrm, ichain, itdc, ichannel, det[0], det[1], det[2], det[3], det[4], index);
	      continue;
	    }
	    nflagged++;
	    if (!histo) continue;
	    histo->SetBinContent(index + 1, 0x1);
	  }
	}
      }
    }
  }

  return nflagged;
}
 MakeCDBEntryProblematic.C:1
 MakeCDBEntryProblematic.C:2
 MakeCDBEntryProblematic.C:3
 MakeCDBEntryProblematic.C:4
 MakeCDBEntryProblematic.C:5
 MakeCDBEntryProblematic.C:6
 MakeCDBEntryProblematic.C:7
 MakeCDBEntryProblematic.C:8
 MakeCDBEntryProblematic.C:9
 MakeCDBEntryProblematic.C:10
 MakeCDBEntryProblematic.C:11
 MakeCDBEntryProblematic.C:12
 MakeCDBEntryProblematic.C:13
 MakeCDBEntryProblematic.C:14
 MakeCDBEntryProblematic.C:15
 MakeCDBEntryProblematic.C:16
 MakeCDBEntryProblematic.C:17
 MakeCDBEntryProblematic.C:18
 MakeCDBEntryProblematic.C:19
 MakeCDBEntryProblematic.C:20
 MakeCDBEntryProblematic.C:21
 MakeCDBEntryProblematic.C:22
 MakeCDBEntryProblematic.C:23
 MakeCDBEntryProblematic.C:24
 MakeCDBEntryProblematic.C:25
 MakeCDBEntryProblematic.C:26
 MakeCDBEntryProblematic.C:27
 MakeCDBEntryProblematic.C:28
 MakeCDBEntryProblematic.C:29
 MakeCDBEntryProblematic.C:30
 MakeCDBEntryProblematic.C:31
 MakeCDBEntryProblematic.C:32
 MakeCDBEntryProblematic.C:33
 MakeCDBEntryProblematic.C:34
 MakeCDBEntryProblematic.C:35
 MakeCDBEntryProblematic.C:36
 MakeCDBEntryProblematic.C:37
 MakeCDBEntryProblematic.C:38
 MakeCDBEntryProblematic.C:39
 MakeCDBEntryProblematic.C:40
 MakeCDBEntryProblematic.C:41
 MakeCDBEntryProblematic.C:42
 MakeCDBEntryProblematic.C:43
 MakeCDBEntryProblematic.C:44
 MakeCDBEntryProblematic.C:45
 MakeCDBEntryProblematic.C:46
 MakeCDBEntryProblematic.C:47
 MakeCDBEntryProblematic.C:48
 MakeCDBEntryProblematic.C:49
 MakeCDBEntryProblematic.C:50
 MakeCDBEntryProblematic.C:51
 MakeCDBEntryProblematic.C:52
 MakeCDBEntryProblematic.C:53
 MakeCDBEntryProblematic.C:54
 MakeCDBEntryProblematic.C:55
 MakeCDBEntryProblematic.C:56
 MakeCDBEntryProblematic.C:57
 MakeCDBEntryProblematic.C:58
 MakeCDBEntryProblematic.C:59
 MakeCDBEntryProblematic.C:60
 MakeCDBEntryProblematic.C:61
 MakeCDBEntryProblematic.C:62
 MakeCDBEntryProblematic.C:63
 MakeCDBEntryProblematic.C:64
 MakeCDBEntryProblematic.C:65
 MakeCDBEntryProblematic.C:66
 MakeCDBEntryProblematic.C:67
 MakeCDBEntryProblematic.C:68
 MakeCDBEntryProblematic.C:69
 MakeCDBEntryProblematic.C:70
 MakeCDBEntryProblematic.C:71
 MakeCDBEntryProblematic.C:72
 MakeCDBEntryProblematic.C:73
 MakeCDBEntryProblematic.C:74
 MakeCDBEntryProblematic.C:75
 MakeCDBEntryProblematic.C:76
 MakeCDBEntryProblematic.C:77
 MakeCDBEntryProblematic.C:78
 MakeCDBEntryProblematic.C:79
 MakeCDBEntryProblematic.C:80
 MakeCDBEntryProblematic.C:81
 MakeCDBEntryProblematic.C:82
 MakeCDBEntryProblematic.C:83
 MakeCDBEntryProblematic.C:84
 MakeCDBEntryProblematic.C:85
 MakeCDBEntryProblematic.C:86
 MakeCDBEntryProblematic.C:87
 MakeCDBEntryProblematic.C:88
 MakeCDBEntryProblematic.C:89
 MakeCDBEntryProblematic.C:90
 MakeCDBEntryProblematic.C:91
 MakeCDBEntryProblematic.C:92
 MakeCDBEntryProblematic.C:93
 MakeCDBEntryProblematic.C:94
 MakeCDBEntryProblematic.C:95
 MakeCDBEntryProblematic.C:96
 MakeCDBEntryProblematic.C:97
 MakeCDBEntryProblematic.C:98
 MakeCDBEntryProblematic.C:99
 MakeCDBEntryProblematic.C:100
 MakeCDBEntryProblematic.C:101
 MakeCDBEntryProblematic.C:102
 MakeCDBEntryProblematic.C:103
 MakeCDBEntryProblematic.C:104
 MakeCDBEntryProblematic.C:105
 MakeCDBEntryProblematic.C:106
 MakeCDBEntryProblematic.C:107
 MakeCDBEntryProblematic.C:108
 MakeCDBEntryProblematic.C:109
 MakeCDBEntryProblematic.C:110
 MakeCDBEntryProblematic.C:111
 MakeCDBEntryProblematic.C:112
 MakeCDBEntryProblematic.C:113
 MakeCDBEntryProblematic.C:114
 MakeCDBEntryProblematic.C:115
 MakeCDBEntryProblematic.C:116
 MakeCDBEntryProblematic.C:117
 MakeCDBEntryProblematic.C:118
 MakeCDBEntryProblematic.C:119
 MakeCDBEntryProblematic.C:120
 MakeCDBEntryProblematic.C:121
 MakeCDBEntryProblematic.C:122
 MakeCDBEntryProblematic.C:123
 MakeCDBEntryProblematic.C:124
 MakeCDBEntryProblematic.C:125
 MakeCDBEntryProblematic.C:126
 MakeCDBEntryProblematic.C:127
 MakeCDBEntryProblematic.C:128
 MakeCDBEntryProblematic.C:129
 MakeCDBEntryProblematic.C:130
 MakeCDBEntryProblematic.C:131
 MakeCDBEntryProblematic.C:132
 MakeCDBEntryProblematic.C:133
 MakeCDBEntryProblematic.C:134
 MakeCDBEntryProblematic.C:135
 MakeCDBEntryProblematic.C:136
 MakeCDBEntryProblematic.C:137
 MakeCDBEntryProblematic.C:138
 MakeCDBEntryProblematic.C:139
 MakeCDBEntryProblematic.C:140
 MakeCDBEntryProblematic.C:141
 MakeCDBEntryProblematic.C:142
 MakeCDBEntryProblematic.C:143
 MakeCDBEntryProblematic.C:144
 MakeCDBEntryProblematic.C:145
 MakeCDBEntryProblematic.C:146
 MakeCDBEntryProblematic.C:147
 MakeCDBEntryProblematic.C:148
 MakeCDBEntryProblematic.C:149
 MakeCDBEntryProblematic.C:150
 MakeCDBEntryProblematic.C:151
 MakeCDBEntryProblematic.C:152
 MakeCDBEntryProblematic.C:153
 MakeCDBEntryProblematic.C:154
 MakeCDBEntryProblematic.C:155
 MakeCDBEntryProblematic.C:156
 MakeCDBEntryProblematic.C:157
 MakeCDBEntryProblematic.C:158
 MakeCDBEntryProblematic.C:159
 MakeCDBEntryProblematic.C:160
 MakeCDBEntryProblematic.C:161
 MakeCDBEntryProblematic.C:162
 MakeCDBEntryProblematic.C:163
 MakeCDBEntryProblematic.C:164
 MakeCDBEntryProblematic.C:165
 MakeCDBEntryProblematic.C:166
 MakeCDBEntryProblematic.C:167
 MakeCDBEntryProblematic.C:168
 MakeCDBEntryProblematic.C:169
 MakeCDBEntryProblematic.C:170
 MakeCDBEntryProblematic.C:171
 MakeCDBEntryProblematic.C:172
 MakeCDBEntryProblematic.C:173
 MakeCDBEntryProblematic.C:174
 MakeCDBEntryProblematic.C:175
 MakeCDBEntryProblematic.C:176
 MakeCDBEntryProblematic.C:177
 MakeCDBEntryProblematic.C:178
 MakeCDBEntryProblematic.C:179
 MakeCDBEntryProblematic.C:180
 MakeCDBEntryProblematic.C:181
 MakeCDBEntryProblematic.C:182
 MakeCDBEntryProblematic.C:183
 MakeCDBEntryProblematic.C:184
 MakeCDBEntryProblematic.C:185
 MakeCDBEntryProblematic.C:186
 MakeCDBEntryProblematic.C:187
 MakeCDBEntryProblematic.C:188
 MakeCDBEntryProblematic.C:189
 MakeCDBEntryProblematic.C:190
 MakeCDBEntryProblematic.C:191
 MakeCDBEntryProblematic.C:192
 MakeCDBEntryProblematic.C:193
 MakeCDBEntryProblematic.C:194
 MakeCDBEntryProblematic.C:195
 MakeCDBEntryProblematic.C:196
 MakeCDBEntryProblematic.C:197
 MakeCDBEntryProblematic.C:198
 MakeCDBEntryProblematic.C:199
 MakeCDBEntryProblematic.C:200
 MakeCDBEntryProblematic.C:201
 MakeCDBEntryProblematic.C:202
 MakeCDBEntryProblematic.C:203
 MakeCDBEntryProblematic.C:204
 MakeCDBEntryProblematic.C:205
 MakeCDBEntryProblematic.C:206
 MakeCDBEntryProblematic.C:207
 MakeCDBEntryProblematic.C:208
 MakeCDBEntryProblematic.C:209
 MakeCDBEntryProblematic.C:210
 MakeCDBEntryProblematic.C:211
 MakeCDBEntryProblematic.C:212
 MakeCDBEntryProblematic.C:213
 MakeCDBEntryProblematic.C:214
 MakeCDBEntryProblematic.C:215
 MakeCDBEntryProblematic.C:216
 MakeCDBEntryProblematic.C:217
 MakeCDBEntryProblematic.C:218
 MakeCDBEntryProblematic.C:219
 MakeCDBEntryProblematic.C:220
 MakeCDBEntryProblematic.C:221
 MakeCDBEntryProblematic.C:222
 MakeCDBEntryProblematic.C:223
 MakeCDBEntryProblematic.C:224
 MakeCDBEntryProblematic.C:225
 MakeCDBEntryProblematic.C:226
 MakeCDBEntryProblematic.C:227
 MakeCDBEntryProblematic.C:228
 MakeCDBEntryProblematic.C:229
 MakeCDBEntryProblematic.C:230
 MakeCDBEntryProblematic.C:231
 MakeCDBEntryProblematic.C:232
 MakeCDBEntryProblematic.C:233
 MakeCDBEntryProblematic.C:234
 MakeCDBEntryProblematic.C:235
 MakeCDBEntryProblematic.C:236
 MakeCDBEntryProblematic.C:237
 MakeCDBEntryProblematic.C:238
 MakeCDBEntryProblematic.C:239
 MakeCDBEntryProblematic.C:240
 MakeCDBEntryProblematic.C:241
 MakeCDBEntryProblematic.C:242
 MakeCDBEntryProblematic.C:243
 MakeCDBEntryProblematic.C:244
 MakeCDBEntryProblematic.C:245
 MakeCDBEntryProblematic.C:246
 MakeCDBEntryProblematic.C:247
 MakeCDBEntryProblematic.C:248
 MakeCDBEntryProblematic.C:249
 MakeCDBEntryProblematic.C:250
 MakeCDBEntryProblematic.C:251
 MakeCDBEntryProblematic.C:252
 MakeCDBEntryProblematic.C:253
 MakeCDBEntryProblematic.C:254
 MakeCDBEntryProblematic.C:255
 MakeCDBEntryProblematic.C:256
 MakeCDBEntryProblematic.C:257
 MakeCDBEntryProblematic.C:258
 MakeCDBEntryProblematic.C:259
 MakeCDBEntryProblematic.C:260
 MakeCDBEntryProblematic.C:261
 MakeCDBEntryProblematic.C:262
 MakeCDBEntryProblematic.C:263
 MakeCDBEntryProblematic.C:264
 MakeCDBEntryProblematic.C:265
 MakeCDBEntryProblematic.C:266
 MakeCDBEntryProblematic.C:267
 MakeCDBEntryProblematic.C:268
 MakeCDBEntryProblematic.C:269
 MakeCDBEntryProblematic.C:270
 MakeCDBEntryProblematic.C:271