+ TString allArgs=arguments;
+ TString argument;
+ int bMissingParam=0;
+
+ TObjArray* pTokens=allArgs.Tokenize(" ");
+ if (pTokens) {
+ for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
+ argument=((TObjString*)pTokens->At(i))->GetString();
+ if (argument.IsNull()) continue;
+
+ if (argument.CompareTo("output_percentage")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ HLTInfo("Setting output percentage to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
+ fOutputPercentage=((TObjString*)pTokens->At(i))->GetString().Atoi();
+ continue;
+ }
+ else if (argument.CompareTo("-geometry")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ HLTInfo("Setting geometry to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
+ fgeometryFileName=((TObjString*)pTokens->At(i))->GetString();
+ continue;
+ }
+ else if (argument.CompareTo("-lowflux")==0) {
+ fRecoParamType = 0;
+ HLTInfo("Low flux reconstruction selected");
+ continue;
+ }
+ else if (argument.CompareTo("-highflux")==0) {
+ fRecoParamType = 1;
+ HLTInfo("High flux reconstruction selected");
+ continue;
+ }
+ else if (argument.CompareTo("-cosmics")==0) {
+ fRecoParamType = 2;
+ HLTInfo("Cosmics reconstruction selected");
+ continue;
+ }
+ else if (argument.CompareTo("-simulation")==0) {
+ fRecoDataType = 0;
+ HLTInfo("Awaiting simulated data");
+ continue;
+ }
+ else if (argument.CompareTo("-experiment")==0) {
+ fRecoDataType = 1;
+ HLTInfo("Awaiting real data");
+ continue;
+ }
+ else if (argument.CompareTo("-processTracklets")==0) {
+ fProcessTracklets = kTRUE;
+ HLTInfo("Writing L1 tracklets to output");
+ continue;
+ }
+ else if (argument.CompareTo("-noZS")==0) {
+ fOutputPercentage = 10;
+ HLTInfo("Awaiting non zero surpressed data");
+ continue;
+ }
+ else if (argument.CompareTo("-HLTflag")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("yes")==0){
+ HLTInfo("Setting HLTflag to: %s", toCompareTo.Data());
+ fHLTflag=kTRUE;
+ }
+ else if (toCompareTo.CompareTo("no")==0){
+ HLTInfo("Setting HLTflag to: %s", toCompareTo.Data());
+ fHLTflag=kFALSE;
+ }
+ else {
+ HLTError("unknown argument for HLTflag: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ continue;
+ }
+ else if (argument.CompareTo("-faststreamer")==0) {
+ fHLTstreamer = kTRUE;
+ HLTInfo("Useing fast raw streamer");
+ continue;
+ }
+ else if (argument.CompareTo("-nofaststreamer")==0) {
+ fHLTstreamer = kFALSE;
+ HLTInfo("Don't use fast raw streamer");
+ continue;
+ }
+ else if (argument.CompareTo("-tailcancellation")==0) {
+ fTC = kTRUE;
+ HLTInfo("Useing tailcancellation");
+ continue;
+ }
+ else if (argument.CompareTo("-rawver")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ HLTInfo("Raw data version is: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
+ fRawDataVersion=((TObjString*)pTokens->At(i))->GetString().Atoi();
+ continue;
+ }
+ else if (argument.CompareTo("-highLevelOutput")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("yes")==0){
+ HLTWarning("Setting highLevelOutput to: %s", toCompareTo.Data());
+ fHighLevelOutput=kTRUE;
+ }
+ else if (toCompareTo.CompareTo("no")==0){
+ HLTInfo("Setting highLevelOutput to: %s", toCompareTo.Data());
+ fHighLevelOutput=kFALSE;
+ }
+ else {
+ HLTError("unknown argument for highLevelOutput: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ continue;
+ }
+ else if (argument.CompareTo("-emulateHLToutput")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("yes")==0){
+ HLTWarning("Setting emulateHLToutput to: %s", toCompareTo.Data());
+ fEmulateHLTClusters=kTRUE;
+ }
+ else if (toCompareTo.CompareTo("no")==0){
+ HLTInfo("Setting emulateHLToutput to: %s", toCompareTo.Data());
+ fEmulateHLTClusters=kFALSE;
+ }
+ else {
+ HLTError("unknown argument for emulateHLToutput: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ continue;
+ }
+ else if (argument.CompareTo("-yPosMethod")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("COG")==0){
+ HLTInfo("Setting yPosMethod method to: %s", toCompareTo.Data());
+ fyPosMethod=0;
+ }
+ else if (toCompareTo.CompareTo("LUT")==0){
+ HLTInfo("Setting yPosMethod method to: %s", toCompareTo.Data());
+ fyPosMethod=1;
+ }
+ else if (toCompareTo.CompareTo("Gauss")==0){
+ HLTInfo("Setting yPosMethod method to: %s", toCompareTo.Data());
+ fyPosMethod=2;
+ }
+ else {
+ HLTError("unknown argument for yPosMethod: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ continue;
+ }
+
+ else {
+ HLTError("unknown argument: %s", argument.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ }
+ delete pTokens;
+ }
+ if (bMissingParam) {
+ HLTError("missing parameter for argument %s", argument.Data());
+ iResult=-EINVAL;
+ }
+ if(iResult>=0){
+ iResult=SetParams();
+ }
+ return iResult;
+}
+
+int AliHLTTRDClusterizerComponent::SetParams()
+{
+ Int_t iResult=0;
+ 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(!AliGeomManager::GetGeometry()){
+ if(fgeometryFileName.CompareTo("")==0 || !TFile::Open(fgeometryFileName.Data())){
+ HLTInfo("Loading standard geometry file");
+ AliGeomManager::LoadGeometry();
+ }else{
+ HLTWarning("Loading NON-standard geometry file");
+ AliGeomManager::LoadGeometry(fgeometryFileName.Data());
+ }
+ if(!AliGeomManager::GetGeometry()){
+ HLTError("Could not load geometry");
+ return -EINVAL;
+ }
+ HLTInfo("Applying Alignment from CDB object");
+ AliGeomManager::ApplyAlignObjsFromCDB("TRD");
+ }
+ else{
+ HLTInfo("Geometry Already Loaded!");
+ }
+
+ if(fReconstructor->GetRecoParam()){
+ fRecoParam = new AliTRDrecoParam(*fReconstructor->GetRecoParam());
+ HLTInfo("RecoParam already set!");
+ }else{
+ if(fRecoParamType == 0){
+#ifndef HAVE_NOT_ALITRD_RECOPARAM_r41621
+ if(fHLTflag){
+ HLTInfo("Low flux HLT params init.");
+ fRecoParam = AliTRDrecoParam::GetLowFluxHLTParam();
+ }else
+#endif
+ {
+ HLTInfo("Low flux params init.");
+ fRecoParam = AliTRDrecoParam::GetLowFluxParam();
+ }
+ }
+ if(fRecoParamType == 1){
+#ifndef HAVE_NOT_ALITRD_RECOPARAM_r41621
+ if(fHLTflag){
+ HLTInfo("High flux HLT params init.");
+ fRecoParam = AliTRDrecoParam::GetHighFluxHLTParam();
+ }else
+#endif
+ {
+ HLTInfo("High flux params init.");
+ fRecoParam = AliTRDrecoParam::GetHighFluxParam();
+ }
+ }
+ if(fRecoParamType == 2){
+ HLTInfo("Cosmic Test params init.");
+ fRecoParam = AliTRDrecoParam::GetCosmicTestParam();
+ }
+ }
+
+ if (!fRecoParam)
+ {
+ HLTError("No reco params initialized. Sniffing big trouble!");
+ return -EINVAL;
+ }
+
+ if(fTC){fRecoParam->SetTailCancelation(kTRUE); HLTDebug("Enableing Tail Cancelation"); }
+ else{fRecoParam->SetTailCancelation(kFALSE); HLTDebug("Disableing Tail Cancelation"); }
+
+ switch(fyPosMethod){
+ case 0: fRecoParam->SetGAUS(kFALSE); fRecoParam->SetLUT(kFALSE); break;
+ case 1: fRecoParam->SetGAUS(kFALSE); fRecoParam->SetLUT(kTRUE); break;
+ case 2: fRecoParam->SetGAUS(kTRUE); fRecoParam->SetLUT(kFALSE); break;
+ }
+
+ fRecoParam->SetStreamLevel(AliTRDrecoParam::kClusterizer, 0);
+ fReconstructor->SetRecoParam(fRecoParam);
+
+ if(!fClusterizer){
+ fClusterizer = new AliHLTTRDClusterizer("TRDCclusterizer", "TRDCclusterizer");
+ HLTDebug("TRDClusterizer at 0x%x", fClusterizer);
+ }
+
+ TString recoOptions="!cw";
+ if(fHLTflag){
+ recoOptions += ",hlt";
+
+ // we transfer clusters that do no contain the XYZ coodrinates (AliHLTTRDCluster),
+ // thus this coordinate transformation ist useless
+#ifndef HAVE_NOT_ALITRD_CLUSTERIZER_r42837
+ fClusterizer->SetSkipTransform();
+#endif
+ }
+ if(fProcessTracklets) recoOptions += ",tp";
+ else recoOptions += ",!tp";
+
+ HLTDebug("Reconstructor options are: %s",recoOptions.Data());
+ fReconstructor->SetOption(recoOptions.Data());
+
+ if (fRecoDataType < 0 || fRecoDataType > 1)
+ {
+ HLTWarning("No data type selected. Use -simulation or -experiment flag. Defaulting to simulation.");
+ fRecoDataType = 0;
+ }
+
+ if (fRecoDataType == 0)
+ {
+ AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDsimStream);
+ HLTDebug("Data type expected is SIMULATION!");
+ }
+
+ if (fRecoDataType == 1)
+ {
+ AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDrealStream);
+ HLTDebug("Data type expected is EXPERIMENT!");
+ }
+
+#ifndef HAVE_NOT_ALITRD_RAWSTREAM_r39608
+ if(fHLTstreamer){
+ AliTRDrawStreamBase::SetRawStreamVersion("default");
+ HLTDebug("fast rawstreamer used");
+ }else{
+ AliTRDrawStreamBase::SetRawStreamVersion("FAST");
+ HLTDebug("old rawstreamer used");
+ }
+#else
+ if(fHLTstreamer){
+ AliTRDrawStreamBase::SetRawStreamVersion("FAST");
+ HLTDebug("fast rawstreamer used");
+ }
+#endif
+
+ fClusterizer->SetRawVersion(fRawDataVersion);
+
+ return iResult;
+}
+
+int AliHLTTRDClusterizerComponent::Reconfigure(const char* cdbEntry, const char* chainId)
+{
+ // see header file for class documentation
+
+ int iResult=0;
+ const char* path="HLT/ConfigTRD/ClusterizerComponent";
+ const char* defaultNotify="";
+ if (cdbEntry) {
+ path=cdbEntry;
+ defaultNotify=" (default)";
+ }
+ if (path) {
+ HLTInfo("reconfigure from entry %s%s, chain id %s", path, defaultNotify,(chainId!=NULL && chainId[0]!=0)?chainId:"<none>");
+ AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path/*,GetRunNo()*/);
+ if (pEntry) {
+ TObjString* pString=dynamic_cast<TObjString*>(pEntry->GetObject());
+ if (pString) {
+ HLTInfo("received configuration object string: \'%s\'", pString->GetString().Data());
+ iResult=Configure(pString->GetString().Data());
+ } else {
+ HLTError("configuration object \"%s\" has wrong type, required TObjString", path);
+ }
+ } else {
+ HLTError("cannot fetch object \"%s\" from CDB", path);
+ }
+ }
+
+ return iResult;
+}
+
+void AliHLTTRDClusterizerComponent::GetOCDBObjectDescription(TMap* const targetMap){
+ // Get a list of OCDB object description needed for the particular component
+ if (!targetMap) return;
+ targetMap->Add(new TObjString("HLT/ConfigTRD/ClusterizerComponent"), new TObjString("component arguments"));
+ targetMap->Add(new TObjString("TRD/Calib/ChamberGainFactor"), new TObjString("gain factor of chambers"));
+ targetMap->Add(new TObjString("TRD/Calib/ChamberT0"), new TObjString("T0 of chambers"));
+ targetMap->Add(new TObjString("TRD/Calib/ChamberVdrift"), new TObjString("drift velocity of chambers"));
+ targetMap->Add(new TObjString("TRD/Calib/DetNoise"), new TObjString("noise of chambers"));
+ targetMap->Add(new TObjString("TRD/Calib/LocalGainFactor"), new TObjString("per pad gain factor"));
+ targetMap->Add(new TObjString("TRD/Calib/LocalT0"), new TObjString("per pad T0"));
+ targetMap->Add(new TObjString("TRD/Calib/LocalVdrift"), new TObjString("per pad drift velocity"));
+ targetMap->Add(new TObjString("TRD/Calib/PadNoise"), new TObjString("per pad noise"));
+ targetMap->Add(new TObjString("TRD/Calib/PadStatus"), new TObjString("pad status"));
+ targetMap->Add(new TObjString("TRD/Calib/PRFWidth"), new TObjString("pad response function"));