/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
- * Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
- * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
- * for The ALICE Off-line Project. *
+ * Authors: *
+ * for The ALICE HLT Project. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-/** @file AliHLTTRDCalibrationComponent.cxx
- @author Timm Steinbeck, Matthias Richter
- @date
- @brief A TRDCalibration processing component for the HLT. */
+// @file AliHLTTRDCalibrationComponent.cxx
+// @author
+// @date
+// @brief A TRDCalibration processing component for the HLT.
+//
-#if __GNUC__ >= 3
-using namespace std;
-#endif
+#include "TTree.h"
+#include "TFile.h"
+#include "TBranch.h"
+#include "TH2I.h"
+#include "TH2.h"
+#include "TProfile2D.h"
+
+#include "AliHLTReadoutList.h"
-#include "AliHLTTRDCalibra.h"
#include "AliHLTTRDCalibrationComponent.h"
#include "AliHLTTRDDefinitions.h"
+#include "AliHLTTRDUtils.h"
#include "AliCDBManager.h"
-#include "AliTRDtriggerHLT.h"
-#include "AliTRDtrigParam.h"
+#include "AliCDBStorage.h"
#include "AliRawReaderMemory.h"
-#include "TTree.h"
-#include "TBranch.h"
+#include "AliTRDCalPad.h"
+#include "AliTRDCalDet.h"
+
+#include "AliTRDCalibraFillHisto.h"
+#include "AliTRDtrackV1.h"
+
+#include "AliTRDCalibraFit.h"
+#include "AliTRDCalibraMode.h"
+#include "AliTRDCalibraVector.h"
+#include "AliTRDCalibraVdriftLinearFit.h"
+#include "AliTRDReconstructor.h"
+#include "AliTRDrecoParam.h"
#include <cstdlib>
#include <cerrno>
#include <string>
-// this is a global object used for automatic component registration, do not use this
-AliHLTTRDCalibrationComponent gAliHLTTRDCalibrationComponent;
+using namespace std;
+
+ClassImp(AliHLTTRDCalibrationComponent);
-ClassImp(AliHLTTRDCalibrationComponent)
-
AliHLTTRDCalibrationComponent::AliHLTTRDCalibrationComponent()
+ : AliHLTCalibrationProcessor(),
+ fTRDCalibraFillHisto(NULL),
+ fOutputSize(500000),
+ fTracksArray(NULL),
+ fOutArray(NULL),
+ fAfterRunArray(NULL),
+ fDisplayArray(NULL),
+ fSavedTimeBins(kFALSE),
+ fTrgStrings(NULL),
+ fAccRejTrg(0),
+ fMinClusters(0),
+ fMinTracklets(0),
+ fTakeAllEvents(kFALSE)
{
- fMCMtrigger = 0;
-
- fOutputPercentage = 100; // By default we copy to the output exactly what we got as input
-
- fTriggerParDebugLevel = 0;
- fLTUpTcut = 2.3; // GeV/c
- fBField = 0.5; //TESLA
-
-
- fStrorageDBpath = "local://$ALICE_ROOT";
+ // Default constructor
}
AliHLTTRDCalibrationComponent::~AliHLTTRDCalibrationComponent()
{
+ // Destructor
}
const char* AliHLTTRDCalibrationComponent::GetComponentID()
{
+ // Return the component ID const char *
return "TRDCalibration"; // The ID of this component
}
-void AliHLTTRDCalibrationComponent::GetInputDataTypes( vector<AliHLTComponent_DataType>& list)
+void AliHLTTRDCalibrationComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
{
+ // Get the list of input data
list.clear(); // We do not have any requirements for our input data type(s).
- list.push_back( AliHLTTRDDefinitions::gkDDLRawDataType );
+ list.push_back(AliHLTTRDDefinitions::fgkTracksDataType);
}
-AliHLTComponent_DataType AliHLTTRDCalibrationComponent::GetOutputDataType()
+AliHLTComponentDataType AliHLTTRDCalibrationComponent::GetOutputDataType()
{
- return AliHLTTRDDefinitions::gkClusterDataType;
+ // Get the output data type
+ return kAliHLTMultipleDataType;
+ // return AliHLTTRDDefinitions::fgkCalibrationDataType;
+
}
-void AliHLTTRDCalibrationComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
+int AliHLTTRDCalibrationComponent::GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList)
{
- constBase = 0;
- inputMultiplier = ((double)fOutputPercentage)/100.0;
+ // Get the output data type
+ tgtList.clear();
+ tgtList.push_back(AliHLTTRDDefinitions::fgkCalibrationDataType);
+ tgtList.push_back(AliHLTTRDDefinitions::fgkEORCalibrationDataType);
+ return tgtList.size();
}
+void AliHLTTRDCalibrationComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
+{
+ // Get the output data size
+ constBase = fOutputSize;
+ inputMultiplier = 0;
+}
-// Spawn function, return new instance of this class
AliHLTComponent* AliHLTTRDCalibrationComponent::Spawn()
{
+ // Spawn function, return new instance of this class
return new AliHLTTRDCalibrationComponent;
};
-int AliHLTTRDCalibrationComponent::DoInit( int argc, const char** argv )
+Int_t AliHLTTRDCalibrationComponent::ScanArgument( int argc, const char** argv )
{
// perform initialization. We check whether our relative output size is specified in the arguments.
- fOutputPercentage = 100;
int i = 0;
char* cpErr;
- while ( i < argc )
- {
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoInit", "Arguments", "argv[%d] == %s", i, argv[i] );
- if ( !strcmp( argv[i], "output_percentage" ) )
- {
- if ( i+1>=argc )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Missing Argument", "Missing output_percentage parameter");
- return ENOTSUP;
- }
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoInit", "Arguments", "argv[%d+1] == %s", i, argv[i+1] );
- fOutputPercentage = strtoul( argv[i+1], &cpErr, 0 );
- if ( *cpErr )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Wrong Argument", "Cannot convert output_percentage parameter '%s'", argv[i+1] );
- return EINVAL;
- }
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoInit", "Output percentage set", "Output percentage set to %lu %%", fOutputPercentage );
- i += 2;
- continue;
- }
-
- if ( strcmp( argv[i], "-cdb" ) == 0)
- {
- if ( i+1 >= argc )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Missing Argument", "Missing -cdb argument");
- return ENOTSUP;
- }
- fStrorageDBpath = argv[i+1];
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoInit", "DB storage set", "DB storage is %s", fStrorageDBpath.c_str() );
- i += 2;
- continue;
- }
-
- if ( strcmp( argv[i], "-dbg" ) == 0)
- {
- if ( i+1 >= argc )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Missing Argument", "Missing -dbg argument");
- return ENOTSUP;
- }
- fTriggerParDebugLevel = strtol( argv[i+1], &cpErr, 10 );
- if ( *cpErr )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Wrong Argument", "Cannot convert -dbg parameter '%s'", argv[i+1] );
- return EINVAL;
- }
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoInit", "Trigger Params", "Debug Level set to %d ", fTriggerParDebugLevel);
- i += 2;
- continue;
- }
-
- if ( strcmp( argv[i], "-ptcut" ) == 0)
- {
- if ( i+1 >= argc )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Missing Argument", "Missing -ptcut argument");
- return ENOTSUP;
- }
- fLTUpTcut = strtod( argv[i+1], &cpErr);
- if ( *cpErr )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Wrong Argument", "Cannot convert -ptcut parameter '%s'", argv[i+1] );
- return EINVAL;
- }
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoInit", "Trigger Params", "Pt Cut set to %d GeV/c", fLTUpTcut);
- i += 2;
- continue;
- }
-
- if ( strcmp( argv[i], "-field" ) == 0)
- {
- if ( i+1 >= argc )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Missing Argument", "Missing -field argument");
- return ENOTSUP;
- }
- fBField = strtod( argv[i+1], &cpErr);
- if ( *cpErr )
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Wrong Argument", "Cannot convert -field parameter '%s'", argv[i+1] );
- return EINVAL;
- }
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoInit", "Trigger Params", "Field set to %d ", fBField);
- i += 2;
- continue;
- }
-
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Unknown Option", "Unknown option '%s'", argv[i] );
- return EINVAL;
- }
+ if(!fTrgStrings)
+ fTrgStrings = new TObjArray();
- cdb = AliCDBManager::Instance();
- if (!cdb)
- {
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Could not get CDB instance", "cdb 0x%x", cdb);
- }
- else
- {
- cdb->SetRun(0); // THIS HAS TO BE RETRIEVED !!!
- cdb->SetDefaultStorage(fStrorageDBpath.c_str());
- Logging(kHLTLogDebug, "HLT::TRDCalibration::DoInit", "CDB instance", "cdb 0x%x", cdb);
- }
-
- calibra = AliHLTTRDCalibra::Instance();
- if (!calibra)
+ while ( i < argc )
{
- Logging(kHLTLogError, "HLT::TRDCalibration::DoInit", "Could not get Calibra instance", "calibra 0x%x", calibra);
+ HLTDebug("argv[%d] == %s", i, argv[i] );
+ if ( !strcmp( argv[i], "output_size" ) )
+ {
+ if ( i+1>=argc )
+ {
+ HLTError("Missing output_size parameter");
+ return ENOTSUP;
+ }
+ HLTDebug("argv[%d+1] == %s", i, argv[i+1] );
+ fOutputSize = strtoul( argv[i+1], &cpErr, 0 );
+ if ( *cpErr )
+ {
+ HLTError("Cannot convert output_size parameter '%s'", argv[i+1] );
+ return EINVAL;
+ }
+ HLTInfo("Output size set to %lu %%", fOutputSize );
+ i += 2;
+ continue;
+ }
+ if ( !strcmp( argv[i], "-minClusters" ) )
+ {
+ if ( i+1>=argc )
+ {
+ HLTError("Missing minClusters parameter");
+ return ENOTSUP;
+ }
+ HLTDebug("argv[%d+1] == %s", i, argv[i+1] );
+ fMinClusters = strtoul( argv[i+1], &cpErr, 0 );
+ i += 2;
+ continue;
+ }
+ if ( !strcmp( argv[i], "-minTracklets" ) )
+ {
+ if ( i+1>=argc )
+ {
+ HLTError("Missing minTracklets parameter");
+ return ENOTSUP;
+ }
+ HLTDebug("argv[%d+1] == %s", i, argv[i+1] );
+ fMinTracklets = strtoul( argv[i+1], &cpErr, 0 );
+ i += 2;
+ continue;
+ }
+ if ( !strcmp( argv[i], "-TrgStr" ) )
+ {
+ if ( i+1>=argc )
+ {
+ HLTError("Missing parameter for mbTriggerString");
+ return ENOTSUP;
+ }
+ HLTDebug("argv[%d+1] == %s", i, argv[i+1] );
+ fTrgStrings->Add(new TObjString(argv[i+1]));
+ i += 2;
+ continue;
+ }
+
+ if ( !strcmp( argv[i], "-acceptTrgStr" ) )
+ {
+ fAccRejTrg=1;
+ i += 1;
+ continue;
+ }
+ if ( !strcmp( argv[i], "-rejectTrgStr" ) )
+ {
+ fAccRejTrg=-1;
+ i += 1;
+ continue;
+ }
+ if ( !strcmp( argv[i], "-takeAllEvents" ) )
+ {
+ fTakeAllEvents = kTRUE;
+ fAccRejTrg = 0;
+ i += 1;
+ continue;
+ }
+
+ else {
+ HLTError("Unknown option '%s'", argv[i] );
+ return EINVAL;
+ }
}
- else
- {
- // init the histograms for output!
- calibra->SetOn();
- calibra->Init2Dhistos();
- Logging(kHLTLogDebug, "HLT::TRDCalibration::DoInit", "Calibra instance", "calibra 0x%x", calibra);
- }
-
- rmem = new AliRawReaderMemory;
+ return i;
+}
- fMCMtriggerParams = new AliTRDtrigParam("TRDMCMtriggerParams", "TRDMCMtriggerParams");
- fMCMtriggerParams->SetDebugLevel(fTriggerParDebugLevel);
- fMCMtriggerParams->SetLtuPtCut(fLTUpTcut);
- fMCMtriggerParams->SetField(fBField);
+Int_t AliHLTTRDCalibrationComponent::InitCalibration()
+{
- fMCMtrigger = new AliTRDtriggerHLT("TRDMCMtrigger", "TRDMCMtrigger");
- fMCMtrigger->SetParameter(fMCMtriggerParams);
- fMCMtrigger->Init();
+ if(!fTrgStrings)
+ fTrgStrings = new TObjArray();
+
+ if(!AliCDBManager::Instance()->IsDefaultStorageSet()){
+ HLTError("DefaultStorage is not set in CDBManager");
+ return -EINVAL;
+ }
+ if(AliCDBManager::Instance()->GetRun()<0){
+ HLTError("Run Number is not set in CDBManager");
+ return -EINVAL;
+ }
+ HLTInfo("CDB default storage: %s; RunNo: %i", (AliCDBManager::Instance()->GetDefaultStorage()->GetBaseFolder()).Data(), AliCDBManager::Instance()->GetRun());
+
+ if(fTrgStrings->GetEntriesFast()>0 && !fAccRejTrg){
+ HLTError("Trigger string(s) given, but acceptTrgStr or rejectTrgStr not selected");
+ return -EINVAL;
+ }
+
+ fTRDCalibraFillHisto = AliTRDCalibraFillHisto::Instance();
+ fTRDCalibraFillHisto->SetIsHLT(kTRUE);
+ fTRDCalibraFillHisto->SetHisto2d(); // choose to use histograms
+ fTRDCalibraFillHisto->SetCH2dOn(); // choose to calibrate the gain
+ fTRDCalibraFillHisto->SetPH2dOn(); // choose to calibrate the drift velocity
+ fTRDCalibraFillHisto->SetPRF2dOn(); // choose to look at the PRF
+ fTRDCalibraFillHisto->SetIsHLT(); // per detector
+ //fTRDCalibraFillHisto->SetDebugLevel(1);// debug
+ fTRDCalibraFillHisto->SetFillWithZero(kTRUE);
+ fTRDCalibraFillHisto->SetLinearFitterOn(kTRUE);
+ fTRDCalibraFillHisto->SetNumberBinCharge(100);
+
+ fTracksArray = new TClonesArray("AliTRDtrackV1");
+ fOutArray = new TObjArray(4);
+ fAfterRunArray=new TObjArray(5);
+ fDisplayArray=new TObjArray(4);
+
+ HLTDebug("run SetupCTPData");
+ SetupCTPData();
return 0;
}
-int AliHLTTRDCalibrationComponent::DoDeinit()
+Int_t AliHLTTRDCalibrationComponent::DeinitCalibration()
{
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "destruct", "start");
-
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "delete", "rmem");
- delete rmem;
- rmem = 0;
-
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "delete", "fMCMtriggerParams");
- delete fMCMtriggerParams;
- fMCMtriggerParams = 0;
-
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "delete", "fMCMtrigger");
- delete fMCMtrigger;
- fMCMtrigger = 0;
-
- if (calibra)
- {
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "destroy", "calibra");
- calibra->Destroy();
- calibra = 0;
- }
-
- if (cdb)
- {
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "destroy", "cdb");
- cdb->Destroy();
- cdb = 0;
- }
-
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoDeinit", "destruct", "all done!");
+
+ // Deinitialization of the component
+
+ HLTDebug("DeinitCalibration");
+ delete fTracksArray; fTracksArray=0;
+ fTRDCalibraFillHisto->DestroyDebugStreamer();
+ //fTRDCalibraFillHisto->Destroy();
+ //fOutArray->Delete();
+ delete fOutArray; fOutArray=0;
+ fAfterRunArray->Delete();
+ delete fAfterRunArray; fAfterRunArray=0;
+ fDisplayArray->Delete();
+ delete fDisplayArray; fDisplayArray=0;
+ fTrgStrings->Delete();
+ delete fTrgStrings; fTrgStrings=0;
return 0;
}
-int AliHLTTRDCalibrationComponent::DoEvent( const AliHLTComponent_EventData& evtData, const AliHLTComponent_BlockData* blocks,
- AliHLTComponent_TriggerData& trigData, AliHLTUInt8_t* outputPtr,
- AliHLTUInt32_t& size, vector<AliHLTComponent_BlockData>& outputBlocks )
+Int_t AliHLTTRDCalibrationComponent::ProcessCalibration(const AliHLTComponent_EventData& /*evtData*/,
+ const AliHLTComponent_BlockData* /*blocks*/,
+ AliHLTComponent_TriggerData& /*trigData*/,
+ AliHLTUInt8_t* /*outputPtr*/,
+ AliHLTUInt32_t& /*size*/,
+ vector<AliHLTComponent_BlockData>& /*outputBlocks*/)
{
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoEvent", "Output percentage set", "Output percentage set to %lu %%", fOutputPercentage );
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoEvent", "BLOCKS", "NofBlocks %lu", evtData.fBlockCnt );
// Process an event
- unsigned long totalSize = 0;
- AliHLTUInt32_t fDblock_Specification = 0;
-
- // Loop over all input blocks in the event
- for ( unsigned long i = 0; i < evtData.fBlockCnt; i++ )
- {
- char tmp1[14], tmp2[14];
- DataType2Text( blocks[i].fDataType, tmp1 );
- DataType2Text( AliHLTTRDDefinitions::gkDDLRawDataType, tmp2 );
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoEvent", "Event received",
- "Event 0x%08LX (%Lu) received datatype: %s - required datatype: %s",
- evtData.fEventID, evtData.fEventID, tmp1, tmp2 );
-
- if ( blocks[i].fDataType != AliHLTTRDDefinitions::gkDDLRawDataType )
- {
- Logging (kHLTLogError, "HLT::TRDCalibration::DoEvent", "COMPARE FAILED", "type=%d is type=%d",
- blocks[i].fDataType, AliHLTTRDDefinitions::gkDDLRawDataType);
- continue;
- }
- fDblock_Specification = blocks[i].fSpecification;
- unsigned long blockSize = blocks[i].fSize;
- totalSize += blockSize;
- }
+
+ TClonesArray* TCAarray[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+ Int_t usedEntries = 0;
+ Int_t blockOrObject = 0;
+ Int_t nTimeBins = -1;
- void *memBufIn = calloc(totalSize, 1);
- AliHLTUInt8_t *pBuf = (AliHLTUInt8_t *)memBufIn;
- if (memBufIn == NULL)
+ for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(AliHLTTRDDefinitions::fgkTracksDataType); pBlock; pBlock=GetNextInputBlock())
{
- Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "MEMORY", "Unable to allocate %lu bytes", totalSize);
- return -1;
- }
+ TCAarray[0] = fTracksArray;
+ AliHLTTRDUtils::ReadTracks(TCAarray[0], pBlock->fPtr, pBlock->fSize, &nTimeBins);
+ usedEntries = 1;
+ blockOrObject = -1;
+ }
- // Make the memory continuous
- unsigned long copied = 0;
- for ( unsigned long i = 0; i < evtData.fBlockCnt; i++ )
+ for(const TObject *iter = GetFirstInputObject(AliHLTTRDDefinitions::fgkHiLvlTracksDataType); iter; iter = GetNextInputObject())
{
- if ( blocks[i].fDataType != AliHLTTRDDefinitions::gkDDLRawDataType )
- continue;
-
- void *pos = (void*)(pBuf + copied);
- void *copyret = memcpy(pos, blocks[i].fPtr, blocks[i].fSize);
- if (copyret < 0)
- {
- Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "MEMORY", "Unable to copy %lu bytes", blocks[i].fSize);
- return -1;
- }
- copied += blocks[i].fSize;
+ if(blockOrObject<0){
+ HLTError("You may not mix high level and low level!");
+ return -1;
+ }
+
+ TCAarray[usedEntries] = dynamic_cast<TClonesArray*>(const_cast<TObject*>(iter));
+ if(!TCAarray[usedEntries])continue;
+ TObjString* strg = dynamic_cast<TObjString*>(const_cast<TObject*>(GetNextInputObject()));
+ if(!strg)continue;
+
+ nTimeBins = strg->String().Atoi();
+ usedEntries++;
+ blockOrObject = 1;
}
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoEvent", "COPY STATS", "total=%lu copied=%lu", totalSize, copied);
+ if(!blockOrObject)
+ return 0;
- rmem->Reset();
- rmem->SetMemory((UChar_t*)memBufIn, totalSize);
- //rmem->Reset();
- Bool_t ihead = rmem->ReadHeader();
- if (ihead == kTRUE)
- {
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoEvent", "HEADER", "Header read successfully");
+ if(!fSavedTimeBins){
+ if(nTimeBins<0){
+ HLTFatal("Number of timebins is negative!");
+ return -1;
}
- else
- {
- Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "HEADER", "Header read ERROR");
- //return -1; -- not FATAL
+ HLTDebug("Saving number of time bins which was read from input block. Value is: %d", nTimeBins);
+ fTRDCalibraFillHisto->Init2Dhistos(nTimeBins); // initialise the histos
+ fTRDCalibraFillHisto->SetNumberClusters(fMinClusters); // At least fMinClusters clusters
+ fTRDCalibraFillHisto->SetNumberClustersf(nTimeBins); // Not more than %d clusters
+ fSavedTimeBins=kTRUE;
+ }
+
+ Bool_t TriggerPassed = fTakeAllEvents;
+
+ if(fAccRejTrg){
+ if(fAccRejTrg>0){
+ TriggerPassed=kFALSE;
+ for(int i = 0; i < fTrgStrings->GetEntriesFast(); i++){
+ const TObjString *const obString=(TObjString*)fTrgStrings->At(i);
+ const TString tString=obString->GetString();
+ if(CheckCTPTrigger(tString.Data())>0){TriggerPassed=kTRUE; break;}
+ }
}
-
- fMCMtrigger->ResetTree();
- Bool_t ireadD = fMCMtrigger->ReadDigits(rmem);
- if (ireadD == kTRUE)
- {
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoEvent", "DIGITS", "Digits read successfully");
+ else{
+ TriggerPassed=kTRUE;
+ for(int i = 0; i < fTrgStrings->GetEntriesFast(); i++){
+ const TObjString *const obString=(TObjString*)fTrgStrings->At(i);
+ const TString tString=obString->GetString();
+ if(CheckCTPTrigger(tString.Data())>0){TriggerPassed=kFALSE; break;}
+ }
}
- else
- {
- Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "DIGITS", "Digits read ERROR");
- return -1;
+ }
+
+ fTRDCalibraFillHisto->SetCH2dOn(TriggerPassed);
+ fTRDCalibraFillHisto->SetPH2dOn(TriggerPassed);
+ for(int i=0; i<usedEntries; i++){
+ const TClonesArray* inArr = TCAarray[i];
+ Int_t nbEntries = inArr->GetEntries();
+ HLTDebug(" %i TRDtracks in tracksArray", nbEntries);
+ AliTRDtrackV1* trdTrack = 0x0;
+ for (Int_t ii = 0; ii < nbEntries; ii++){
+ HLTDebug("%i/%i: ", ii+1, nbEntries);
+ trdTrack = (AliTRDtrackV1*)inArr->At(ii);
+ if(trdTrack->GetNumberOfTracklets()<fMinTracklets)continue;
+ fTRDCalibraFillHisto->UpdateHistogramsV1(trdTrack);
+ // for(int i3=0; i3<7; i3++)
+ // if(trdTrack->GetTracklet(i3))trdTrack->GetTracklet(i3)->Bootstrap(fReconstructor);
}
+ }
- Bool_t iclustered = fMCMtrigger->MakeTracklets();
- if (iclustered == kTRUE)
- {
- Logging( kHLTLogInfo, "HLT::TRDCalibration::DoEvent", "TRACKLETS", "Tracklets created successfully");
- }
- else
- {
- Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "TRACKLETS", "Tracklets creation ERROR");
- return -1;
- }
+ if(!fOutArray->At(0))FormOutput(0);
+ if(!fDisplayArray->At(0))FormOutput(1);
+ PushBack(fDisplayArray, AliHLTTRDDefinitions::fgkCalibrationDataType);
- free(memBufIn);
+ if(blockOrObject<0){
+ TCAarray[0]->Delete();
+ }
- UInt_t memBufOutSize = 0;
+ return 0;
- // put the tree into output blocks of TObjArrays
- TTree *fcTree = fMCMtrigger->GetTrackletTree();
- TList *lt = (TList*)fcTree->GetListOfBranches();
- TIter it(lt);
- it.Reset();
- TBranch *tb = 0;
- while ((tb = (TBranch*)it.Next()) != 0)
- {
- TObjArray *detTracklets = 0;
- tb->SetAddress(&detTracklets);
- for (Int_t icb = 0; icb < tb->GetEntries(); icb++)
- {
- tb->GetEntry(icb);
- PushBack(detTracklets, AliHLTTRDDefinitions::gkMCMtrackletDataType, fDblock_Specification);
- }
- }
+}
- // add the histograms...
- //gkMCMCalibrationDataType
+/**
+ * Form output array of histrograms
+ */
+//============================================================================
+void AliHLTTRDCalibrationComponent::FormOutput(Int_t param)
+{
+ // gain histo
+ TH2I *hCH2d = fTRDCalibraFillHisto->GetCH2d();
+ if(!param)fOutArray->Add(hCH2d);
+ else fDisplayArray->Add(hCH2d);
+
+ // drift velocity histo
+ TProfile2D *hPH2d = fTRDCalibraFillHisto->GetPH2d();
+ if(!param)fOutArray->Add(hPH2d);
+ else fDisplayArray->Add(hPH2d);
+
+ // PRF histo
+ TProfile2D *hPRF2d = fTRDCalibraFillHisto->GetPRF2d();
+ if(!param)fOutArray->Add(hPRF2d);
+ else fDisplayArray->Add(hPRF2d);
+
+ // Vdrift Linear Fit
+ if(!param){
+ AliTRDCalibraVdriftLinearFit *hVdriftLinearFitOne=(AliTRDCalibraVdriftLinearFit *)fTRDCalibraFillHisto->GetVdriftLinearFit();
+ fOutArray->Add(hVdriftLinearFitOne);
+ }
+ else{
+ TH2S *hVdriftLinearFitOne = (TH2S *)(((AliTRDCalibraVdriftLinearFit *)fTRDCalibraFillHisto->GetVdriftLinearFit())->GetLinearFitterHisto(10,kTRUE));
+ fDisplayArray->Add(hVdriftLinearFitOne);
+ }
+
+ HLTDebug("GetCH2d = 0x%x; NEntries = %i; size = %i", hCH2d, hCH2d->GetEntries(), sizeof(*hCH2d));
+ hCH2d->Print();
+ HLTDebug("GetPH2d = 0x%x; NEntries = %i; size = %i", hPH2d, hPH2d->GetEntries(), sizeof(*hPH2d));
+ hPH2d->Print();
+ HLTDebug("GetPRF2d = 0x%x; NEntries = %i; size = %i", hPRF2d, hPRF2d->GetEntries(), sizeof(*hPRF2d));
+ hPRF2d->Print();
+ //HLTDebug("GetVdriftLinearFit = 0x%x; size = %i", hVdriftLinearFitOne, sizeof(hVdriftLinearFitOne));
+
+ HLTDebug("output Array: pointer = 0x%x; NEntries = %i; size = %i", fOutArray, fOutArray->GetEntries(), sizeof(fOutArray));
+
+}
- //AliHLTTRDCalibra *calibra = AliHLTTRDCalibra::Instance();
- if (!calibra)
- {
- Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "OUTPUT", "Calibra not valid");
- }
- else
- {
- Logging( kHLTLogDebug, "HLT::TRDCalibration::DoEvent", "OUTPUT", "Here we should put the histos...");
-// // TH2I *GetCH2d();
-// TH2I *chtmp = calibra->GetCH2d();
-// if (chtmp)
-// PushBack(chtmp, AliHLTTRDDefinitions::gkMCMcalibrationDataType, fDblock_Specification);
-// else
-// Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "OUTPUT", "Could not calibra->GetCH2d()");
-// // TProfile2D *GetPH2d();
-// TProfile2D *phtmp = calibra->GetPH2d();
-// if (phtmp)
-// PushBack(phtmp, AliHLTTRDDefinitions::gkMCMcalibrationDataType, fDblock_Specification);
-// else
-// Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "OUTPUT", "Could not calibra->GetPH2d()");
-// // TProfile2D *GetPRF2d();
-// TProfile2D *prf = calibra->GetPRF2d();
-// if (prf)
-// PushBack(prf, AliHLTTRDDefinitions::gkMCMcalibrationDataType, fDblock_Specification);
-// else
-// Logging( kHLTLogError, "HLT::TRDCalibration::DoEvent", "OUTPUT", "Could not calibra->GetPRF2d()");
- }
+Int_t AliHLTTRDCalibrationComponent::ShipDataToFXS(const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& /*trigData*/)
+{
+ AliHLTReadoutList rdList(AliHLTReadoutList::kTRD);
+
+ EORCalibration();
+
+ fOutArray->Remove(fOutArray->FindObject("AliTRDCalibraVdriftLinearFit"));
+ //fOutArray->Remove(fOutArray->FindObject("PRF2d"));
+ //fOutArray->Remove(fOutArray->FindObject("PH2d"));
+ //fOutArray->Remove(fOutArray->FindObject("CH2d"));
+
+ if(!(fOutArray->FindObject("CH2d"))) {
+ TH2I * ch2d = new TH2I("CH2d","Nz0Nrphi0",100,0.0,300.0,540,0,540);
+ fOutArray->Add(ch2d);
+ }
+
+ if(!(fOutArray->FindObject("PH2d"))) {
+ TProfile2D * ph2d = new TProfile2D("PH2d","Nz0Nrphi0",30,-0.05,2.95,540,0,540);
+ fOutArray->Add(ph2d);
+ }
+
+ if(!(fOutArray->FindObject("PRF2d"))) {
+ TProfile2D * prf2d = new TProfile2D("PRF2d","Nz0Nrphi0Ngp3",60,-9.0,9.0,540,0,540);
+ fOutArray->Add(prf2d);
+ }
+
+ HLTDebug("Size of the fOutArray is %d\n",fOutArray->GetEntriesFast());
+
+ PushToFXS((TObject*)fOutArray, "TRD", "GAINDRIFTPRF", &rdList );
+ //PushToFXS((TObject*)fOutArray->FindObject("CH2d"), "TRD", "GAINDRIFTPRF", rdList.Buffer() );
return 0;
}
+
+Int_t AliHLTTRDCalibrationComponent::EORCalibration()
+{
+ //Also Fill histograms for the online display
+ TH2I *hCH2d=(TH2I*)fOutArray->FindObject("CH2d");
+ TProfile2D *hPH2d=(TProfile2D*)fOutArray->FindObject("PH2d");
+ TProfile2D *hPRF2d= (TProfile2D*)fOutArray->FindObject("PRF2d");
+ AliTRDCalibraVdriftLinearFit* hVdriftLinearFit = (AliTRDCalibraVdriftLinearFit*)fOutArray->FindObject("AliTRDCalibraVdriftLinearFit");
+
+
+ if(!hCH2d || !hPH2d || !hPRF2d || !hVdriftLinearFit) return 0;
+
+ //Fit
+ AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
+
+ //Gain
+ calibra->SetMinEntries(100);
+ calibra->AnalyseCH(hCH2d);
+ //Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(0))
+ // + 6* 18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(0));
+ //Int_t nbfit = calibra->GetNumberFit();
+ //Int_t nbE = calibra->GetNumberEnt();
+ TH1F *coefgain = 0x0;
+ // enough statistics
+ //if ((nbtg > 0) &&
+ // (nbfit >= 0.2*nbE)) {
+ // create the cal objects
+ //calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+ TObjArray object = calibra->GetVectorFit();
+ AliTRDCalDet *objgaindet = calibra->CreateDetObjectGain(&object,kFALSE);
+ coefgain = objgaindet->MakeHisto1DAsFunctionOfDet();
+ //}
+ calibra->ResetVectorFit();
+
+ // vdrift second method
+ calibra->SetMinEntries(100); // If there is less than 100
+ hVdriftLinearFit->FillPEArray();
+ calibra->AnalyseLinearFitters(hVdriftLinearFit);
+ //nbtg = 540;
+ //nbfit = calibra->GetNumberFit();
+ //nbE = calibra->GetNumberEnt();
+ TH1F *coefdriftsecond = 0x0;
+ // enough statistics
+ //if ((nbtg > 0) &&
+ // (nbfit >= 0.1*nbE)) {
+ // create the cal objects
+ //calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+ object = calibra->GetVectorFit();
+ AliTRDCalDet *objdriftvelocitydetsecond = calibra->CreateDetObjectVdrift(&object,kTRUE);
+ objdriftvelocitydetsecond->SetTitle("secondmethodvdrift");
+ coefdriftsecond = objdriftvelocitydetsecond->MakeHisto1DAsFunctionOfDet();
+ //}
+ calibra->ResetVectorFit();
+
+ // vdrift first method
+ calibra->SetMinEntries(100*20); // If there is less than 20000
+ calibra->AnalysePH(hPH2d);
+ //nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
+ // + 6* 18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
+ //nbfit = calibra->GetNumberFit();
+ //nbE = calibra->GetNumberEnt();
+ TH1F *coefdrift = 0x0;
+ TH1F *coeft0 = 0x0;
+ // enough statistics
+ //if ((nbtg > 0) &&
+ // (nbfit >= 0.2*nbE)) {
+ // create the cal objects
+ //calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+ //calibra->PutMeanValueOtherVectorFit2(1,kTRUE);
+ object = calibra->GetVectorFit();
+ AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
+ coefdrift = objdriftvelocitydet->MakeHisto1DAsFunctionOfDet();
+ object = calibra->GetVectorFit2();
+ AliTRDCalDet *objtime0det = calibra->CreateDetObjectT0(&object,kTRUE);
+ coeft0 = objtime0det->MakeHisto1DAsFunctionOfDet();
+ //}
+ calibra->ResetVectorFit();
+
+
+ //PRF
+ calibra->SetMinEntries(200);
+ calibra->AnalysePRFMarianFit(hPRF2d);
+ //nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
+ // + 6* 18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
+ //nbfit = calibra->GetNumberFit();
+ //nbE = calibra->GetNumberEnt();
+ TH1F *coefprf = 0x0;
+ // enough statistics
+ //if ((nbtg > 0) &&
+ // (nbfit >= 0.95*nbE)) {
+ // create cal pad objects
+ object = calibra->GetVectorFit();
+ TObject *objPRFpad = calibra->CreatePadObjectPRF(&object);
+ coefprf = ((AliTRDCalPad *) objPRFpad)->MakeHisto1D();
+ //}
+ calibra->ResetVectorFit();
+
+
+ coefgain->SetName("coefgain");
+ coefprf->SetName("coefprf");
+ coefdrift->SetName("coefdrift");
+ coefdriftsecond->SetName("coefdriftsecond");
+ coeft0->SetName("coeft0");
+ fAfterRunArray->Add(coefgain);
+ fAfterRunArray->Add(coefprf);
+ fAfterRunArray->Add(coefdrift);
+ fAfterRunArray->Add(coefdriftsecond);
+ fAfterRunArray->Add(coeft0);
+
+ PushBack(fAfterRunArray, AliHLTTRDDefinitions::fgkEORCalibrationDataType);
+
+ // TString fileName="/tmp/CalibHistoDump_run";
+ // fileName+=AliCDBManager::Instance()->GetRun();
+ // fileName+=".root";
+ // HLTInfo("Dumping Histogram file to %s",fileName.Data());
+ // TFile* file = TFile::Open(fileName, "RECREATE");
+ // fAfterRunArray->Write();
+ // fOutArray->Write();
+ // file->Close();
+ // HLTInfo("Histogram file dumped");
+
+ return 0;
+}
+