/// \ingroup macros
/// \file MUONReCalcGlobalTrigger.C
/// \brief Re-calculate regional/global trigger response from local response.
///
/// Basic usage is :
///
/// MUONReCalcGlobalTrigger("path_to_reconstruction_galice");
///
/// Starting from local responses the macro will re-calculate regional and
/// global response and print-out the global trigger decision.
/// It is used for comissioning data with cosmics where the global trigger
/// was not written in the raw stream.
/// The purpose is (for the future) to compare the re-calculated answer with
/// the global trigger decision returned by the CTP.
///
/// \author Bogdan Vulpescu
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliMpCDB.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONTriggerCrateStore.h"
#include "AliMUONGlobalTriggerBoard.h"
#include "AliMUONDataInterface.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONVTriggerStore.h"
#include "AliMUONTriggerCrate.h"
#include "AliMUONTriggerCrateConfig.h"
#include "AliMUONGlobalCrateConfig.h"
#include "AliMUONRegionalTriggerBoard.h"
#include "AliMUONRegionalTriggerConfig.h"
#include "AliMUONLocalTriggerBoard.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONTriggerBoard.h"
#include <TArrayS.h>
#include <TObjArray.h>
#include <TMath.h>
#endif
UShort_t locResp[235];
AliMUONCalibrationData *calibData;
AliMUONTriggerCrateStore *fCrates;
AliMUONGlobalTriggerBoard *fGlobalTriggerBoard;
AliMUONRegionalTriggerConfig* regionalConfig;
AliMUONGlobalCrateConfig * globalConfig;
TIterator *cratesIterator;
Int_t debug;
//___________________________________________________________________________
void PrintPattBin(Short_t s) {
/// binary print-out of the strip patterns
printf(" ");
Int_t mask = 0;
for (Int_t i = 15; i >= 0; i--) {
mask = (Int_t)TMath::Power(2,i);
printf("%1d",(s & mask) >> i);
}
printf(" \n");
}
//___________________________________________________________________________
void PrintGloBin(UShort_t s) {
/// binary print-out of global trigger decision
Int_t mask = 0;
for (Int_t i = 5; i >= 0; i--) {
mask = (Int_t)TMath::Power(2,i);
printf("%1d",(s & mask) >> i);
}
printf(" \n");
}
//___________________________________________________________________________
Bool_t ReCalcGlobalTrigger(TIter *nextCrates) {
/// re-calculate regional/global decision from array of local triggers
Int_t loLpt, loHpt;
AliMUONTriggerCrate* cr;
// regional response
nextCrates->Reset();
Int_t irb(0);
while ( ( cr = static_cast<AliMUONTriggerCrate*>(nextCrates->Next()) ) ) {
if (debug) printf("Crate nr = %2d \n",++irb);
TObjArray *boards = cr->Boards();
AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
regb->Reset();
Int_t nrBoard = 0;
UShort_t regLocResp[16]; for (Int_t j=0; j<16; j++) regLocResp[j] = 0;
for (Int_t j = 1; j < boards->GetEntries(); j++) {
TObject *o = boards->At(j);
AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
if (board->GetNumber() == 0) continue;
if (debug) {
printf("...Board nr = %2d : ",++nrBoard);
printf("%3d %s in slot %2d of crate %s \n",board->GetNumber(),board->GetName(),j,cr->GetName());
}
UShort_t response = locResp[board->GetNumber()];
if (debug) printf("......Response = %x \n",response);
if (response != 0) {
loLpt = response & 3;
loHpt = (response & 12) >> 2;
//printf("Response loLpt = %02b loHpt = %02b \n",loLpt,loHpt);
}
regLocResp[j-1] = response;
} // local board loop
AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(cr->GetName());
UShort_t rmask= crateConfig->GetMask();
regb->Mask(rmask);
regb->SetLocalResponse(regLocResp);
regb->Response();
//for (Int_t j=0; j<16; j++) printf("%3d ",regLocResp[j]);
//printf("Reg %2d Response %3d mask %4x\n",irb,regb->GetResponse(),rmask);
irb++;
} // crate loop
// global response
fGlobalTriggerBoard->Reset();
if (!globalConfig)
printf("No valid trigger crate configuration in CDB\n");
UInt_t gmask = 0;
for (Int_t i = 0; i < 4; i++) {
gmask = globalConfig->GetGlobalMask(i);
fGlobalTriggerBoard->Mask(i,gmask);
}
nextCrates->Reset();
UShort_t regional[16];
irb = 0;
if ( !fCrates->NumberOfCrates() >= 16 ) {
printf("Something is wrong : too many crates %d",fCrates->NumberOfCrates());
return kFALSE;
}
for (Int_t iSide = 0; iSide < 2; iSide++) // right & left side
{
for (Int_t iReg = 0; iReg < 8; iReg++) // 8 crates/regional boards for each side.
{
cr = fCrates->Crate(iSide, iReg);
AliMUONTriggerBoard* rb =
static_cast<AliMUONTriggerBoard*>(cr->Boards()->At(0));
regional[irb] = rb->GetResponse();
++irb;
}
}
fGlobalTriggerBoard->SetRegionalResponse(regional);
fGlobalTriggerBoard->Response();
if (fGlobalTriggerBoard->GetResponse() != 0) {
fGlobalTriggerBoard->Scan("");
printf("Global trigger response = ");
PrintGloBin(fGlobalTriggerBoard->GetResponse());
return kTRUE;
}
return kFALSE;
}
//___________________________________________________________________________
void MUONReCalcGlobalTrigger(const char* input) {
/// create array of local triggers from the raw data, run the re-calculation
/// and print-out the results
debug = 0;
Int_t runNumber = 0;
AliCDBManager* man = AliCDBManager::Instance();
man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
man->SetRun(runNumber);
AliMpCDB::LoadDDLStore();
calibData = new AliMUONCalibrationData(runNumber);
regionalConfig = calibData->RegionalTriggerConfig();
globalConfig = calibData->GlobalTriggerCrateConfig();
fCrates = new AliMUONTriggerCrateStore;
fCrates->ReadFromFile(calibData);
cratesIterator = fCrates->CreateCrateIterator();
fGlobalTriggerBoard = new AliMUONGlobalTriggerBoard;
TIter nextCrates(cratesIterator);
AliMUONDataInterface diRec(input);
printf("Number of events = %d \n",diRec.NumberOfEvents());
Int_t nEvents = diRec.NumberOfEvents();
AliMUONLocalTrigger* localTrig;
Int_t circ, loLpt, loHpt, lutLpt[2], lutHpt[2];
TArrayS xPattern[235];
TArrayS yPattern[235];
for (Int_t ievent = 0; ievent < nEvents; ++ievent) {
for (Int_t i = 0; i < 234; i++) {
locResp[i] = 0;
}
AliMUONVTriggerStore* triggerStore = diRec.TriggerStore(ievent,"R");
TIter nextLocal(triggerStore->CreateLocalIterator());
while ( (localTrig = static_cast<AliMUONLocalTrigger*>( nextLocal() )) ) {
if (localTrig->IsNull()) continue;
circ = localTrig->LoCircuit();
loLpt = localTrig->LoLpt();
loHpt = localTrig->LoHpt();
lutLpt[0] = loLpt & 1;
lutLpt[1] = (loLpt & 2) >> 1;
lutHpt[0] = loHpt & 1;
lutHpt[1] = (loHpt & 2) >> 1;
locResp[circ] = lutLpt[0] +
static_cast<int>(lutLpt[1]<<1) +
static_cast<int>(lutHpt[0]<<2) +
static_cast<int>(lutHpt[1]<<3);
localTrig->GetXPattern(xPattern[circ]);
localTrig->GetYPattern(yPattern[circ]);
if (debug) {
printf("Event %4d circ %3d loLpt %1d loHpt %1d resp %3d\n",ievent,circ,loLpt,loHpt,locResp[circ]);
}
} // local trigger loop
if (ReCalcGlobalTrigger(&nextCrates)) {
printf("............ for event %5d \n",ievent);
for (Int_t ic = 1; ic <= 234; ic++) {
if (locResp[ic] != 0) {
UShort_t response = locResp[ic];
loLpt = response & 3;
loHpt = (response & 12) >> 2;
printf("............ in circuit %3d loLpt %1d loHpt %1d resp %3d\n",ic,loLpt,loHpt,response);
printf(" Pattern X:\n");
PrintPattBin(xPattern[ic].At(0));
PrintPattBin(xPattern[ic].At(1));
PrintPattBin(xPattern[ic].At(2));
PrintPattBin(xPattern[ic].At(3));
printf(" Pattern Y:\n");
PrintPattBin(yPattern[ic].At(0));
PrintPattBin(yPattern[ic].At(1));
PrintPattBin(yPattern[ic].At(2));
PrintPattBin(yPattern[ic].At(3));
}
}
printf("\n\n");
}
} // event loop
delete fGlobalTriggerBoard;
delete fCrates;
delete calibData;
}
MUONReCalcGlobalTrigger.C:1 MUONReCalcGlobalTrigger.C:2 MUONReCalcGlobalTrigger.C:3 MUONReCalcGlobalTrigger.C:4 MUONReCalcGlobalTrigger.C:5 MUONReCalcGlobalTrigger.C:6 MUONReCalcGlobalTrigger.C:7 MUONReCalcGlobalTrigger.C:8 MUONReCalcGlobalTrigger.C:9 MUONReCalcGlobalTrigger.C:10 MUONReCalcGlobalTrigger.C:11 MUONReCalcGlobalTrigger.C:12 MUONReCalcGlobalTrigger.C:13 MUONReCalcGlobalTrigger.C:14 MUONReCalcGlobalTrigger.C:15 MUONReCalcGlobalTrigger.C:16 MUONReCalcGlobalTrigger.C:17 MUONReCalcGlobalTrigger.C:18 MUONReCalcGlobalTrigger.C:19 MUONReCalcGlobalTrigger.C:20 MUONReCalcGlobalTrigger.C:21 MUONReCalcGlobalTrigger.C:22 MUONReCalcGlobalTrigger.C:23 MUONReCalcGlobalTrigger.C:24 MUONReCalcGlobalTrigger.C:25 MUONReCalcGlobalTrigger.C:26 MUONReCalcGlobalTrigger.C:27 MUONReCalcGlobalTrigger.C:28 MUONReCalcGlobalTrigger.C:29 MUONReCalcGlobalTrigger.C:30 MUONReCalcGlobalTrigger.C:31 MUONReCalcGlobalTrigger.C:32 MUONReCalcGlobalTrigger.C:33 MUONReCalcGlobalTrigger.C:34 MUONReCalcGlobalTrigger.C:35 MUONReCalcGlobalTrigger.C:36 MUONReCalcGlobalTrigger.C:37 MUONReCalcGlobalTrigger.C:38 MUONReCalcGlobalTrigger.C:39 MUONReCalcGlobalTrigger.C:40 MUONReCalcGlobalTrigger.C:41 MUONReCalcGlobalTrigger.C:42 MUONReCalcGlobalTrigger.C:43 MUONReCalcGlobalTrigger.C:44 MUONReCalcGlobalTrigger.C:45 MUONReCalcGlobalTrigger.C:46 MUONReCalcGlobalTrigger.C:47 MUONReCalcGlobalTrigger.C:48 MUONReCalcGlobalTrigger.C:49 MUONReCalcGlobalTrigger.C:50 MUONReCalcGlobalTrigger.C:51 MUONReCalcGlobalTrigger.C:52 MUONReCalcGlobalTrigger.C:53 MUONReCalcGlobalTrigger.C:54 MUONReCalcGlobalTrigger.C:55 MUONReCalcGlobalTrigger.C:56 MUONReCalcGlobalTrigger.C:57 MUONReCalcGlobalTrigger.C:58 MUONReCalcGlobalTrigger.C:59 MUONReCalcGlobalTrigger.C:60 MUONReCalcGlobalTrigger.C:61 MUONReCalcGlobalTrigger.C:62 MUONReCalcGlobalTrigger.C:63 MUONReCalcGlobalTrigger.C:64 MUONReCalcGlobalTrigger.C:65 MUONReCalcGlobalTrigger.C:66 MUONReCalcGlobalTrigger.C:67 MUONReCalcGlobalTrigger.C:68 MUONReCalcGlobalTrigger.C:69 MUONReCalcGlobalTrigger.C:70 MUONReCalcGlobalTrigger.C:71 MUONReCalcGlobalTrigger.C:72 MUONReCalcGlobalTrigger.C:73 MUONReCalcGlobalTrigger.C:74 MUONReCalcGlobalTrigger.C:75 MUONReCalcGlobalTrigger.C:76 MUONReCalcGlobalTrigger.C:77 MUONReCalcGlobalTrigger.C:78 MUONReCalcGlobalTrigger.C:79 MUONReCalcGlobalTrigger.C:80 MUONReCalcGlobalTrigger.C:81 MUONReCalcGlobalTrigger.C:82 MUONReCalcGlobalTrigger.C:83 MUONReCalcGlobalTrigger.C:84 MUONReCalcGlobalTrigger.C:85 MUONReCalcGlobalTrigger.C:86 MUONReCalcGlobalTrigger.C:87 MUONReCalcGlobalTrigger.C:88 MUONReCalcGlobalTrigger.C:89 MUONReCalcGlobalTrigger.C:90 MUONReCalcGlobalTrigger.C:91 MUONReCalcGlobalTrigger.C:92 MUONReCalcGlobalTrigger.C:93 MUONReCalcGlobalTrigger.C:94 MUONReCalcGlobalTrigger.C:95 MUONReCalcGlobalTrigger.C:96 MUONReCalcGlobalTrigger.C:97 MUONReCalcGlobalTrigger.C:98 MUONReCalcGlobalTrigger.C:99 MUONReCalcGlobalTrigger.C:100 MUONReCalcGlobalTrigger.C:101 MUONReCalcGlobalTrigger.C:102 MUONReCalcGlobalTrigger.C:103 MUONReCalcGlobalTrigger.C:104 MUONReCalcGlobalTrigger.C:105 MUONReCalcGlobalTrigger.C:106 MUONReCalcGlobalTrigger.C:107 MUONReCalcGlobalTrigger.C:108 MUONReCalcGlobalTrigger.C:109 MUONReCalcGlobalTrigger.C:110 MUONReCalcGlobalTrigger.C:111 MUONReCalcGlobalTrigger.C:112 MUONReCalcGlobalTrigger.C:113 MUONReCalcGlobalTrigger.C:114 MUONReCalcGlobalTrigger.C:115 MUONReCalcGlobalTrigger.C:116 MUONReCalcGlobalTrigger.C:117 MUONReCalcGlobalTrigger.C:118 MUONReCalcGlobalTrigger.C:119 MUONReCalcGlobalTrigger.C:120 MUONReCalcGlobalTrigger.C:121 MUONReCalcGlobalTrigger.C:122 MUONReCalcGlobalTrigger.C:123 MUONReCalcGlobalTrigger.C:124 MUONReCalcGlobalTrigger.C:125 MUONReCalcGlobalTrigger.C:126 MUONReCalcGlobalTrigger.C:127 MUONReCalcGlobalTrigger.C:128 MUONReCalcGlobalTrigger.C:129 MUONReCalcGlobalTrigger.C:130 MUONReCalcGlobalTrigger.C:131 MUONReCalcGlobalTrigger.C:132 MUONReCalcGlobalTrigger.C:133 MUONReCalcGlobalTrigger.C:134 MUONReCalcGlobalTrigger.C:135 MUONReCalcGlobalTrigger.C:136 MUONReCalcGlobalTrigger.C:137 MUONReCalcGlobalTrigger.C:138 MUONReCalcGlobalTrigger.C:139 MUONReCalcGlobalTrigger.C:140 MUONReCalcGlobalTrigger.C:141 MUONReCalcGlobalTrigger.C:142 MUONReCalcGlobalTrigger.C:143 MUONReCalcGlobalTrigger.C:144 MUONReCalcGlobalTrigger.C:145 MUONReCalcGlobalTrigger.C:146 MUONReCalcGlobalTrigger.C:147 MUONReCalcGlobalTrigger.C:148 MUONReCalcGlobalTrigger.C:149 MUONReCalcGlobalTrigger.C:150 MUONReCalcGlobalTrigger.C:151 MUONReCalcGlobalTrigger.C:152 MUONReCalcGlobalTrigger.C:153 MUONReCalcGlobalTrigger.C:154 MUONReCalcGlobalTrigger.C:155 MUONReCalcGlobalTrigger.C:156 MUONReCalcGlobalTrigger.C:157 MUONReCalcGlobalTrigger.C:158 MUONReCalcGlobalTrigger.C:159 MUONReCalcGlobalTrigger.C:160 MUONReCalcGlobalTrigger.C:161 MUONReCalcGlobalTrigger.C:162 MUONReCalcGlobalTrigger.C:163 MUONReCalcGlobalTrigger.C:164 MUONReCalcGlobalTrigger.C:165 MUONReCalcGlobalTrigger.C:166 MUONReCalcGlobalTrigger.C:167 MUONReCalcGlobalTrigger.C:168 MUONReCalcGlobalTrigger.C:169 MUONReCalcGlobalTrigger.C:170 MUONReCalcGlobalTrigger.C:171 MUONReCalcGlobalTrigger.C:172 MUONReCalcGlobalTrigger.C:173 MUONReCalcGlobalTrigger.C:174 MUONReCalcGlobalTrigger.C:175 MUONReCalcGlobalTrigger.C:176 MUONReCalcGlobalTrigger.C:177 MUONReCalcGlobalTrigger.C:178 MUONReCalcGlobalTrigger.C:179 MUONReCalcGlobalTrigger.C:180 MUONReCalcGlobalTrigger.C:181 MUONReCalcGlobalTrigger.C:182 MUONReCalcGlobalTrigger.C:183 MUONReCalcGlobalTrigger.C:184 MUONReCalcGlobalTrigger.C:185 MUONReCalcGlobalTrigger.C:186 MUONReCalcGlobalTrigger.C:187 MUONReCalcGlobalTrigger.C:188 MUONReCalcGlobalTrigger.C:189 MUONReCalcGlobalTrigger.C:190 MUONReCalcGlobalTrigger.C:191 MUONReCalcGlobalTrigger.C:192 MUONReCalcGlobalTrigger.C:193 MUONReCalcGlobalTrigger.C:194 MUONReCalcGlobalTrigger.C:195 MUONReCalcGlobalTrigger.C:196 MUONReCalcGlobalTrigger.C:197 MUONReCalcGlobalTrigger.C:198 MUONReCalcGlobalTrigger.C:199 MUONReCalcGlobalTrigger.C:200 MUONReCalcGlobalTrigger.C:201 MUONReCalcGlobalTrigger.C:202 MUONReCalcGlobalTrigger.C:203 MUONReCalcGlobalTrigger.C:204 MUONReCalcGlobalTrigger.C:205 MUONReCalcGlobalTrigger.C:206 MUONReCalcGlobalTrigger.C:207 MUONReCalcGlobalTrigger.C:208 MUONReCalcGlobalTrigger.C:209 MUONReCalcGlobalTrigger.C:210 MUONReCalcGlobalTrigger.C:211 MUONReCalcGlobalTrigger.C:212 MUONReCalcGlobalTrigger.C:213 MUONReCalcGlobalTrigger.C:214 MUONReCalcGlobalTrigger.C:215 MUONReCalcGlobalTrigger.C:216 MUONReCalcGlobalTrigger.C:217 MUONReCalcGlobalTrigger.C:218 MUONReCalcGlobalTrigger.C:219 MUONReCalcGlobalTrigger.C:220 MUONReCalcGlobalTrigger.C:221 MUONReCalcGlobalTrigger.C:222 MUONReCalcGlobalTrigger.C:223 MUONReCalcGlobalTrigger.C:224 MUONReCalcGlobalTrigger.C:225 MUONReCalcGlobalTrigger.C:226 MUONReCalcGlobalTrigger.C:227 MUONReCalcGlobalTrigger.C:228 MUONReCalcGlobalTrigger.C:229 MUONReCalcGlobalTrigger.C:230 MUONReCalcGlobalTrigger.C:231 MUONReCalcGlobalTrigger.C:232 MUONReCalcGlobalTrigger.C:233 MUONReCalcGlobalTrigger.C:234 MUONReCalcGlobalTrigger.C:235 MUONReCalcGlobalTrigger.C:236 MUONReCalcGlobalTrigger.C:237 MUONReCalcGlobalTrigger.C:238 MUONReCalcGlobalTrigger.C:239 MUONReCalcGlobalTrigger.C:240 MUONReCalcGlobalTrigger.C:241 MUONReCalcGlobalTrigger.C:242 MUONReCalcGlobalTrigger.C:243 MUONReCalcGlobalTrigger.C:244 MUONReCalcGlobalTrigger.C:245 MUONReCalcGlobalTrigger.C:246 MUONReCalcGlobalTrigger.C:247 MUONReCalcGlobalTrigger.C:248 MUONReCalcGlobalTrigger.C:249 MUONReCalcGlobalTrigger.C:250 MUONReCalcGlobalTrigger.C:251 MUONReCalcGlobalTrigger.C:252 MUONReCalcGlobalTrigger.C:253 MUONReCalcGlobalTrigger.C:254 MUONReCalcGlobalTrigger.C:255 MUONReCalcGlobalTrigger.C:256 MUONReCalcGlobalTrigger.C:257 MUONReCalcGlobalTrigger.C:258 MUONReCalcGlobalTrigger.C:259 MUONReCalcGlobalTrigger.C:260 MUONReCalcGlobalTrigger.C:261 MUONReCalcGlobalTrigger.C:262 MUONReCalcGlobalTrigger.C:263 MUONReCalcGlobalTrigger.C:264 MUONReCalcGlobalTrigger.C:265 MUONReCalcGlobalTrigger.C:266 MUONReCalcGlobalTrigger.C:267 MUONReCalcGlobalTrigger.C:268 MUONReCalcGlobalTrigger.C:269 MUONReCalcGlobalTrigger.C:270 MUONReCalcGlobalTrigger.C:271 MUONReCalcGlobalTrigger.C:272 MUONReCalcGlobalTrigger.C:273 MUONReCalcGlobalTrigger.C:274 MUONReCalcGlobalTrigger.C:275 MUONReCalcGlobalTrigger.C:276 MUONReCalcGlobalTrigger.C:277 MUONReCalcGlobalTrigger.C:278 MUONReCalcGlobalTrigger.C:279 MUONReCalcGlobalTrigger.C:280 MUONReCalcGlobalTrigger.C:281 MUONReCalcGlobalTrigger.C:282 MUONReCalcGlobalTrigger.C:283 MUONReCalcGlobalTrigger.C:284 MUONReCalcGlobalTrigger.C:285 MUONReCalcGlobalTrigger.C:286 MUONReCalcGlobalTrigger.C:287 MUONReCalcGlobalTrigger.C:288 MUONReCalcGlobalTrigger.C:289 MUONReCalcGlobalTrigger.C:290 MUONReCalcGlobalTrigger.C:291 MUONReCalcGlobalTrigger.C:292 MUONReCalcGlobalTrigger.C:293 MUONReCalcGlobalTrigger.C:294 MUONReCalcGlobalTrigger.C:295 MUONReCalcGlobalTrigger.C:296 MUONReCalcGlobalTrigger.C:297 MUONReCalcGlobalTrigger.C:298 MUONReCalcGlobalTrigger.C:299 MUONReCalcGlobalTrigger.C:300 MUONReCalcGlobalTrigger.C:301 MUONReCalcGlobalTrigger.C:302 MUONReCalcGlobalTrigger.C:303