55import java .util .HashMap ;
66import java .util .TreeMap ;
77import java .util .Arrays ;
8+ import java .util .Collection ;
89import java .util .ArrayList ;
910
1011import rcms .util .logger .RCMSLogger ;
2021import rcms .fm .resource .qualifiedresource .FunctionManager ;
2122import rcms .fm .fw .parameter .type .StringT ;
2223import rcms .fm .fw .parameter .type .VectorT ;
24+ import rcms .fm .app .level1 .HCALqgMapper .level1qgMapper ;
2325import rcms .fm .fw .parameter .FunctionManagerParameter ;
2426import rcms .fm .fw .user .UserActionException ;
2527
@@ -33,13 +35,15 @@ public class HCALMasker {
3335 protected HCALFunctionManager functionManager = null ;
3436 static RCMSLogger logger = null ;
3537 public HCALxmlHandler xmlHandler = null ;
38+ private level1qgMapper mapper ;
3639
37- public HCALMasker (HCALFunctionManager parentFunctionManager ) {
40+ public HCALMasker (HCALFunctionManager parentFunctionManager , level1qgMapper mapper ) {
3841 this .logger = new RCMSLogger (HCALFunctionManager .class );
39- logger .warn ("Constructing masker." );
42+ logger .info ("Constructing masker." );
4043 this .functionManager = parentFunctionManager ;
4144 xmlHandler = new HCALxmlHandler (parentFunctionManager );
42- logger .warn ("Done constructing masker." );
45+ this .mapper = mapper ;
46+ logger .info ("Done constructing masker." );
4347 }
4448
4549 protected Map <String , Boolean > isEvmTrigCandidate (List <Resource > level2Children ) {
@@ -48,7 +52,6 @@ protected Map<String, Boolean> isEvmTrigCandidate(List<Resource> level2Children)
4852 boolean hasAnEventBuilder = false ;
4953 boolean hasAnFU = false ;
5054 VectorT <StringT > maskedRss = (VectorT <StringT >)functionManager .getHCALparameterSet ().get ("MASKED_RESOURCES" ).getValue ();
51- logger .warn (maskedRss .toString ());
5255 StringT [] maskedRssArray = maskedRss .toArray (new StringT [maskedRss .size ()]);
5356
5457 for (Resource level2resource : level2Children ) {
@@ -105,18 +108,16 @@ protected Map<String, Resource> getEvmTrigResources(List<Resource> level2Childre
105108 }
106109
107110 //Add all apps in a masked executives to maskapps list
108- protected void ignoreMaskedExecutiveApps (List <Resource > level2Children ){
111+ protected void ignoreMaskedExecutiveApps (List <Resource > level2Children ) throws UserActionException {
109112 VectorT <StringT > maskedRss = (VectorT <StringT >)functionManager .getHCALparameterSet ().get ("MASKED_RESOURCES" ).getValue ();
110- StringT [] maskedRssArray = maskedRss .toArray (new StringT [maskedRss .size ()]);
111113 if (!maskedRss .isEmpty ()){
114+ StringT [] maskedRssArray = maskedRss .toArray (new StringT [maskedRss .size ()]);
112115 for (StringT MaskedApp : maskedRssArray ){
113116 for (Resource level2resource : level2Children ){
114117 if ( level2resource .getName ().equals (MaskedApp .getString ()) && level2resource .getQualifiedResourceType ().contains ("XdaqExecutive" ) ){
115- XdaqExecutiveResource maskedExec = ((XdaqExecutiveResource )level2resource );
116- logger .info ("[HCAL " + functionManager .FMname +"]: Masking Executive " +MaskedApp .getString ()+" and all its apps: " +maskedExec .getApplications ().toString ());
117- for ( XdaqApplicationResource app : maskedExec .getApplications ()){
118- if (!maskedRss .contains (new StringT (app .getName ()) ) ){
119- maskedRss .add (new StringT (app .getName ()));
118+ for (StringT execApp : mapper .getAppsOfExec (level2resource .getName ()).getVector ()) {
119+ if (! maskedRss .contains (execApp )){
120+ maskedRss .add (execApp );
120121 }
121122 }
122123 }
@@ -177,6 +178,12 @@ protected Map<String, Resource> pickEvmTrig() {
177178 functionManager .theEventHandler .PrintQRnames (level2EvmTrigCandidateList );
178179
179180 //Consider only LV2 FMs with last priority to be EvmTrig (FM with no ConfigPriority will be grouped into this)
181+ try {
182+ setMaskedCrates ();
183+ }
184+ catch (UserActionException e ) {
185+ logger .error (e .getMessage ());
186+ }
180187 for (QualifiedResource level2 : level2EvmTrigCandidateList ) {
181188 try {
182189 QualifiedGroup level2group = ((FunctionManager )level2 ).getQualifiedGroup ();
@@ -186,7 +193,12 @@ protected Map<String, Resource> pickEvmTrig() {
186193 List <Resource > level2Children = fullConfig .getChildrenResources ();
187194
188195 //Add all masked Executive's app into MASKED_RESOURCES, so that they will not be considered as candidate
189- ignoreMaskedExecutiveApps (level2Children );
196+ try {
197+ ignoreMaskedExecutiveApps (level2Children );
198+ }
199+ catch (UserActionException ex ) {
200+ logger .error ("[HCAL " + functionManager .FMname + "]: Got a UserActionException when trying to mask an executive: " + ex .getMessage ());
201+ }
190202 Boolean isAcandidate = isEvmTrigCandidate (level2Children ).get ("isAcandidate" );
191203 Boolean isAdummyCandidate = isEvmTrigCandidate (level2Children ).get ("isAdummyCandidate" );
192204 logger .debug ("[" +functionManager .FMname + "] For this LV2 " + level2 .getName () + " isAcandidate= " + isAcandidate .toString () + " isAdummyCandidate = " + isAdummyCandidate .toString () );
@@ -377,4 +389,28 @@ else if (functionManager.RunType.equals("global")){
377389 functionManager .getHCALparameterSet ().put (new FunctionManagerParameter <VectorT <StringT >>("MASK_SUMMARY" , maskedFMsVector ));
378390 }
379391 }
392+
393+ public void setMaskedCrates () throws UserActionException {
394+ VectorT <StringT > allMaskedResources = (VectorT <StringT >)functionManager .getHCALparameterSet ().get ("MASKED_RESOURCES" ).getValue ();
395+
396+ StringT [] maskedResourcesArray = allMaskedResources .toArray (new StringT [allMaskedResources .size ()]);
397+ for (StringT maskedResource : maskedResourcesArray ) {
398+ if (maskedResource .getString ().contains ("physicalCrate" )) {
399+ try {
400+ if (!Arrays .asList (maskedResourcesArray ).contains (maskedResource .getString ())) {
401+ allMaskedResources .add (new StringT (mapper .getExecOfCrate (Integer .parseInt (maskedResource .getString ().split ("_" )[1 ]))));
402+ logger .warn ("[HCAL " + functionManager .FMname + "]: Found " + maskedResource + " in masking list, therefore added " + mapper .getExecOfCrate (Integer .parseInt (maskedResource .getString ().split ("_" )[1 ])) + " to MASKED_RESOURCES" );
403+ }
404+ }
405+ catch (NumberFormatException e ) {
406+ throw new UserActionException ("Could not extract a valid crate number from requested maskedcrate" + e .getMessage ());
407+ }
408+ catch (UserActionException e ) {
409+ throw new UserActionException ("Problem setting the masked crates" + e .getMessage ());
410+ }
411+
412+ }
413+ }
414+ functionManager .getHCALparameterSet ().put (new FunctionManagerParameter <VectorT <StringT >>("MASKED_RESOURCES" , allMaskedResources ));
415+ }
380416}
0 commit comments