ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$*/

// Trigger preprocessor class. 
// According to the TriggerDetectorMask read from the logbook_trigger_clusters
// DAQ table, the triggering detectors are identified, and the 
// corresponding procedure is called.
// Data are stored in the OCDB, in /TRIGGER/<DET>/<level3>, where
// <DET> correspond to the triggering detector,
// and <level3> is defined in the detector procedure

#include "AliTRIPreprocessor.h"

#include "AliCDBMetaData.h"
#include "AliCDBEntry.h"
#include "AliLog.h"
#include "AliITSTriggerConditions.h"

#include "AliTOFFEEReader.h"
#include "AliTOFTriggerMask.h"
          
#include <TTimeStamp.h>
#include <TObjString.h>
#include <TList.h>
#include <TROOT.h>
#include <TSystem.h>

ClassImp(AliTRIPreprocessor)

// names of detectors/systems in the DETECTORS_MAP in /date/db/detCodes.h
const char* AliTRIPreprocessor::fgkDetectorsMapName[AliTRIPreprocessor::kNDetectorsMap] = {"SPD"/*0*/, "SDD"/*1*/, "SSD"/*2*/, "TPC"/*3*/, "TRD"/*4*/, 
									       "TOF"/*5*/, "HMP"/*6*/, "PHS"/*7*/, "CPV"/*8*/, "PMD"/*9*/, 
									       "MCH"/*10*/,"MTR"/*11*/,"FMD"/*12*/,"T00"/*13*/,"V00"/*14*/, 
									       "ZDC"/*15*/,"ACO"/*16*/,"TRI"/*17*/,"EMC"/*18*/,"TST"/*19*/, 
									       ""/*20*/,   ""/*21*/,   ""/*22*/,   ""/*23*/,   ""/*24*/,   
									       ""/*25*/,   ""/*26*/,   ""/*27*/,   ""/*28*/,   "GRP"/*29*/, 
									       "HLT"/*30*/};

//______________________________________________________________________________________________
AliTRIPreprocessor::AliTRIPreprocessor(AliShuttleInterface* shuttle) :
  AliPreprocessor("TRI", shuttle),
  fShuttle(shuttle)

{
	//
	// constructor
	//
	
	AddRunType("PHYSICS");
	AddRunType("STANDALONE_PULSER");
}

//______________________________________________________________________________________________
AliTRIPreprocessor::~AliTRIPreprocessor()
{
	//
	// destructor
	//
}

//______________________________________________________________________________________________
void AliTRIPreprocessor::Initialize(Int_t run, UInt_t startTime,
	UInt_t endTime)
{

	//
	// Initialize preprocessor
	//

	AliPreprocessor::Initialize(run, startTime, endTime);

	Log(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
		TTimeStamp(startTime).AsString(),
		TTimeStamp(endTime).AsString()));

}

//______________________________________________________________________________________________
Bool_t AliTRIPreprocessor::ProcessDCS()
{
	//
	// DCS data are never needed
	//
	
	return kFALSE;
}

//______________________________________________________________________________________________
UInt_t AliTRIPreprocessor::Process(TMap* /*dcsAliasMap*/)
{

	// Procees function:
	// After reading the TriggerDetectorMask, the
	// corresponding triggering detector procedures to 
	// process the trigger data are called.

	typedef Short_t (AliTRIPreprocessor::*AliProcessTriggerData)();
	const AliProcessTriggerData processTriggerDataArray[AliTRIPreprocessor::kNDetectorsMap]= { 
		&AliTRIPreprocessor::ProcessSPDTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessTOFTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData,
		&AliTRIPreprocessor::ProcessEmptyTriggerData}; 


	// getting the list of triggering detectors from DAQ logbook

	TString triggerDetectorMask = (TString)GetTriggerDetectorMask();
	Int_t result=0;
	if (!triggerDetectorMask.IsNull()){
		Int_t length = triggerDetectorMask.Length();
		Log(Form("mask = %s", triggerDetectorMask.Data()));
		  for (Int_t i = 0; i<length; i++){
			AliDebug(2,Form("%d-th bit = %c in index %d",i,triggerDetectorMask[length-1-i],length-1-i));
			if (triggerDetectorMask[length-1-i] == '1'){
				Log("****************************************");
				Log(Form("Processing Trigger data for %s",fgkDetectorsMapName[i]));
				Log("****************************************");
			       
				result+=(this->*processTriggerDataArray[i])();
			}
		}
	}

	// result should be 0 to end successfully

	return result;

}
//______________________________________________________________________________________________
Short_t AliTRIPreprocessor::ProcessSPDTriggerData() 
{
	//
	// Processing SPD Trigger Data
	//
	
	Log("************** Processing SPD Trigger data... **************");

	// Read new conditions from dcs fxs
	AliITSTriggerConditions* newCond = new AliITSTriggerConditions();
	TString fxsID = "pit_conditions";
	TList* list = GetFileSources(kDCS, fxsID.Data());
	if (!list) {
		AliError("FXS file not found.");
		return 1;
	}
	UInt_t nFiles = 0;
	while (list->At(nFiles)!=NULL) {
		TObjString* fileNameEntry = (TObjString*) list->At(nFiles);
		TString fileName = GetFile(kDCS, fxsID.Data(), fileNameEntry->GetString().Data());
		if (fileName.IsNull()) {
			Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
			return 1;
		}
		if (nFiles==0) newCond->ReadFromTextFile(fileName.Data());
		nFiles++;
	}
	if (nFiles!=1) {
		AliWarning(Form("Found %d files with id %s (expected exactly 1).",nFiles,fxsID.Data()));
	}
	
	// Read old conditions from ocdb
	AliITSTriggerConditions* oldCond = NULL;
	AliCDBEntry* pitCond = GetFromOCDB("SPD", "PITConditions");
	if (pitCond) {
		oldCond = (AliITSTriggerConditions*) pitCond->GetObject();
		if (!oldCond) {
			AliError("AliCDBEntry::GetObject() returned NULL.");
			return 1;
		}
	}
	else {
		Log("Old conditions not found in database.");
	}
	
	// Do we need to update db?
	Bool_t doUpdate = kTRUE;
	if (oldCond) {
		// compare to see if there were any changes...
		if (newCond->IsEqualTo(oldCond)) {
			Log("Old conditions equal to new conditions. Do nothing.");
			doUpdate = kFALSE;
		}
	}
	
	if (doUpdate) {
		// store new conditions in ocdb
		AliCDBMetaData metaData;
		metaData.SetResponsible("Henrik Tydesjo");
		metaData.SetComment("Created by Trigger PreProcessor");
		if (!Store("SPD", "PITConditions", newCond, &metaData, 0, kTRUE)) {
			Log("Failed to store conditions data.");
			return 1;
		}
		Log("Database updated.");
	}
	
	delete newCond;
	
	Log("************************* ...done.*************************");

	return 0; // 0 means success
	
}
//______________________________________________________________________________________________
Short_t AliTRIPreprocessor::ProcessTOFTriggerData() 
{
	//
	// Processing TOF Trigger Data
	//

	Log("************** Processing TOF Trigger data... **************");

	const char * nameFile = GetFile(kDCS,"TofFeeLightMap", ""); 
	AliInfo(Form("toffeeLight file name = %s",nameFile));
	if (nameFile == NULL) {
	  return 1;
	} 
	AliTOFFEEReader feeReader;
	feeReader.LoadFEElightConfig(nameFile);
	feeReader.ParseFEElightConfig();
	AliTOFTriggerMask triggerMask;
	triggerMask.SetTriggerMaskArray(feeReader.GetTriggerMaskArray());

	AliCDBMetaData metaData;
	metaData.SetBeamPeriod(0);
	metaData.SetResponsible("Roberto Preghenella");
	metaData.SetComment("TOF trigger mask");
	if (!Store("TOF", "TriggerMask", &triggerMask, &metaData, 0, kTRUE)) {
	  Log("error while storing TriggerMask object");
	  return 1;
	}
	Log("TriggerMask object successfully stored");

	Log("************************* ...done.*************************");
	return 0;
}
//______________________________________________________________________________________________
Short_t AliTRIPreprocessor::ProcessEmptyTriggerData() 
{
	//
	// Processing TOF Trigger Data
	//

	Log("************** Trigger data Processing not yet implemented **************");
	return 0;
}


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