// $Id$ /** * @file makeGRPObject.C * @brief Creation of the GRP configuration object for HLT * *
 * Usage: aliroot -b -q -l makeGRPObject.C'("arguments", "uri", \
 *                                          rangemin, rangemax)'
 * 
 * 
 * Usage: aliroot -b -q -l makeGRPObject.C'(l3Current, l3Polarity,         \
 *                                          dipoleCurrent, dipolePolarity, \
 *                                          "uri", rangemin, rangemax)'
 * 
* * Create the GRP OCDB object for the magnetic field settings. * The magnetic field in AliRoot is controlled by the AliMagF class and * the TGeoGlobalMagField container. AliMagF contains the field maps * for both the L3 and dipole magnets. * * The following conventions for magnetic field polarity are known: * 1) kConvMap2005: used for the field mapping in 2005 * positive L3 current -> negative Bz * positive Dip current -> positive Bx * 2) kConvMapDCS2008: defined by the microswitches/cabling of power * converters as of 2008 - 1st half 2009 * positive L3 current -> positive Bz * positive Dip current -> positive Bx * 3) kConvLHC : defined by LHC * positive L3 current -> positive Bz * positive Dip current -> negative Bx * * For current data taking, only the last convention is relevant. * * Negative polarity corresponds to the value '1' in the GRP, while * positive to '0'. * * Parameters:
* arguments off, default, l3=current, l3=off, * dipole=current, dipole=off * uri (opt) the OCDB URI, default $ALICE_ROOT/OCDB * rangemin (opt) default 0 * rangemax (opt) default 999999999 * * @author Matthias.Richter@ift.uib.no * @ingroup alihlt_tutorial */ void makeGRPObject(float l3Current, int l3Polarity, float dipoleCurrent, int dipolePolarity, const char* cdbUri=NULL, int runmin=0, int runmax=999999999, bool bVerbose=true) { AliCDBManager* man = AliCDBManager::Instance(); if (!man) { cerr << "can not get AliCDBManager" << end; exit; } TString storage; if (!man->IsDefaultStorageSet()) { if (cdbUri) { storage=cdbUri; if (storage.Contains("://")==0) { storage="local://"; storage+=cdbUri; } } else { storage="local://$ALICE_ROOT/OCDB"; } man->SetDefaultStorage(storage); } else { storage = man->GetDefaultStorage()->GetURI(); } // generate GRP object AliGRPObject* grpObj=new AliGRPObject; float cmsEnergy=14000; grpObj->SetBeamEnergy(cmsEnergy/0.120); // LHC convention grpObj->SetBeamType("p-p"); grpObj->SetL3Current(l3Current,(AliGRPObject::Stats)0); grpObj->SetDipoleCurrent(dipoleCurrent,(AliGRPObject::Stats)0); grpObj->SetL3Polarity(l3Polarity); grpObj->SetDipolePolarity(dipolePolarity); grpObj->SetPolarityConventionLHC(); // LHC convention +/+ current -> -/- field main components if (bVerbose) { AliGRPManager grpman; grpman.SetGRPEntry(grpObj); grpman.SetMagField(); } // write object to OCDB AliCDBPath cdbPath("GRP/GRP/Data"); AliCDBId cdbId(cdbPath, runmin, runmax); AliCDBMetaData cdbMetaData; cdbMetaData.SetResponsible("ALICE HLT"); cdbMetaData.SetComment("Automatically produced GRP entry (AliHLTSimulation) for the magnetic field initialization of HLT components"); man->Put(grpObj, cdbId, &cdbMetaData); } void makeGRPObject(const char* arguments="", const char* cdbUri=NULL, int runmin=0, int runmax=999999999) { TString args=arguments; bool bHelp=args.IsNull(); TObjArray* pTokens=args.Tokenize(" "); float l3Current=0; int l3Polarity=0; float dipoleCurrent=0; int dipolePolarity=0; if (pTokens) { for (int i=0; iGetEntriesFast(); i++) { TString arg=((TObjString*)pTokens->At(i))->GetString(); if (arg.CompareTo("off", TString::kIgnoreCase)==0) { l3Current=0; l3Polarity=0; dipoleCurrent=0; dipolePolarity=0; } else if (arg.CompareTo("default", TString::kIgnoreCase)==0) { l3Current=30000; l3Polarity=0; // positive for positive field dipoleCurrent=6000; dipolePolarity=1; // negative for positive field } else if (arg.BeginsWith("l3=")) { arg.ReplaceAll("l3=", ""); if (arg.CompareTo("off", TString::kIgnoreCase)==0) { l3Current=0; l3Polarity=0; } else if (arg.IsFloat()) { l3Current=arg.Atof(); l3Polarity=l3Current<0 ? 1:0; l3Current=TMath::Abs(l3Current); } else { cerr << "Invalid parameter for key 'l3=', allowed is 'off' or current" << endl; } } else if (arg.BeginsWith("dipole=")) { arg.ReplaceAll("dipole=", ""); if (arg.CompareTo("off", TString::kIgnoreCase)==0) { dipoleCurrent=0; dipolePolarity=0; } else if (arg.IsFloat()) { dipoleCurrent=arg.Atof(); dipolePolarity=dipoleCurrent<0 ? 1:0; dipoleCurrent=TMath::Abs(dipoleCurrent); } else { cerr << "Invalid parameter for key 'dipole=', allowed is 'off' or current" << endl; } } else { if (arg.CompareTo("--help", TString::kIgnoreCase) && arg.CompareTo("-h", TString::kIgnoreCase)) { cerr << "Unknown argument: " << arg << endl; } bHelp=true; } } delete pTokens; } if (!bHelp) { makeGRPObject(l3Current, l3Polarity, dipoleCurrent, dipolePolarity, cdbUri, runmin, runmax); } else { cout << "========================================================================" << endl; cout << "usage: aliroot -b -q -l makeGRPObject.C'(\"arguments\", \"uri\", rangemin, rangemax)'" << endl << endl; cout << " arguments off, default, l3=, l3=off," << endl; cout << " dipole=, dipole=off" << endl; cout << " uri (opt) the OCDB URI, default $ALICE_ROOT/OCDB " << endl; cout << " rangemin (opt) default 0" << endl; cout << " rangemax (opt) default 999999999" << endl << endl; cout << "alternative usage: aliroot -b -q -l makeGRPObject.C'(l3Current, l3Polarity, \\" << endl; cout << " dipoleCurrent, dipolePolarity, \\" << endl; cout << " \"uri\", rangemin, rangemax)'" << endl << endl; cout << "========================================================================" << endl; } }